distributable:
  url: https://github.com/npm/cli/archive/refs/tags/v{{ version }}.tar.gz
  strip-components: 1

versions:
  github: npm/cli/tags

provides:
  - bin/npm
  - bin/npx

dependencies:
  nodejs.org: '*'

build:
  dependencies:
    crates.io/semverator: '*'
  script:
    - |
      if semverator satisfies '^8,>=9.4.2' {{ version }}; then
        ARGS="--install-links"
      fi

    # 9.8.0 removed the references to these modules.
    - run: |
        for MOD in ../workspaces/*; do
          b=$(basename $MOD)
          if test "${b#lib}" = "$b"; then
            ln -s ../$MOD @npmcli/$b
          else
            ln -s $MOD .
          fi
        done
      working-directory: node_modules
      if: '>=9.8.0'

    - node . install --global --prefix={{prefix}} $ARGS

    # configures npm to install to ~/.local
    - mv props/npmrc {{prefix}}/lib/node_modules/npm

    # our shim fixes a bug where npx doesn’t work if ~/.local/lib doesn’t exist
    - run: |
        rm npx
        mv $SRCROOT/props/npx-shim npx

      working-directory:
        ${{prefix}}/bin

test:
  dependencies:
    # 20.3.x causes a error on linux+aarch64 (technically docker)
    # sh: 1: tldr: Text file busy
    # https://github.com/nodejs/node/issues/48444
    # This is a FIXME, but it should be reasonably harmless.
    linux/aarch64:
      nodejs.org: '<20.3'
  script:
    # doing first to test our shim works as expected
    - npx -qy tldr ls

    - npm install --global cowsay

    # verify install location is as we configure it
    - $HOME/.local/bin/cowsay xyz.tea.hi

