diff --git a/.eslintrc.js b/.eslintrc.js index ff8d43d7ffe5c..4d943ad316745 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -13,6 +13,7 @@ module.exports = { ignorePatterns: [ 'docs/**', 'smoke-tests/**', + 'mock-registry/**', 'workspaces/**', ], extends: [ diff --git a/.github/workflows/ci-npmcli-docs.yml b/.github/workflows/ci-npmcli-docs.yml index ef536f453bd18..017d354a538fc 100644 --- a/.github/workflows/ci-npmcli-docs.yml +++ b/.github/workflows/ci-npmcli-docs.yml @@ -87,3 +87,45 @@ jobs: - name: Check Git Status if: matrix && matrix.platform.os != 'windows-latest' run: node scripts/git-dirty.js + + compare-docs: + name: Compare Docs + if: github.repository_owner == 'npm' && github.event_name == 'pull_request' + runs-on: ubuntu-latest + defaults: + run: + shell: bash + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Setup Git User + run: | + git config --global user.email "npm-cli+bot@github.com" + git config --global user.name "npm CLI robot" + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: npm + - name: Reset Deps + run: node . run resetdeps + - name: Build Docs + run: | + node . run build -w docs + mv man/ man-update/ + mv docs/output/ docs/output-update/ + mv docs/content/ docs/content-update/ + - name: Get Current Docs + run: | + git clean -fd + git checkout ${{ github.event.pull_request.base.ref }} + node . run resetdeps + node . run build -w docs + - name: Diff Man + run: diff -r --color=always man/ man-update/ || true + - name: Diff HTML + run: diff -r --color=always docs/output/ docs/output-update/ || true + - name: Diff Markdown + run: diff -r --color=always docs/content/ docs/content-update/ || true diff --git a/.github/workflows/ci-npmcli-mock-registry.yml b/.github/workflows/ci-npmcli-mock-registry.yml new file mode 100644 index 0000000000000..db394f789c9f8 --- /dev/null +++ b/.github/workflows/ci-npmcli-mock-registry.yml @@ -0,0 +1,94 @@ +# This file is automatically added by @npmcli/template-oss. Do not edit. + +name: CI - @npmcli/mock-registry + +on: + workflow_dispatch: + pull_request: + paths: + - mock-registry/** + push: + branches: + - main + - latest + paths: + - mock-registry/** + schedule: + # "At 09:00 UTC (02:00 PT) on Monday" https://crontab.guru/#0_9_*_*_1 + - cron: "0 9 * * 1" + +jobs: + lint: + name: Lint + if: github.repository_owner == 'npm' + runs-on: ubuntu-latest + defaults: + run: + shell: bash + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Git User + run: | + git config --global user.email "npm-cli+bot@github.com" + git config --global user.name "npm CLI robot" + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: npm + - name: Reset Deps + run: node . run resetdeps + - name: Lint + run: node . run lint --ignore-scripts -w @npmcli/mock-registry + - name: Post Lint + run: node . run postlint --ignore-scripts -w @npmcli/mock-registry + + test: + name: Test - ${{ matrix.platform.name }} - ${{ matrix.node-version }} + if: github.repository_owner == 'npm' + strategy: + fail-fast: false + matrix: + platform: + - name: Linux + os: ubuntu-latest + shell: bash + - name: macOS + os: macos-latest + shell: bash + - name: Windows + os: windows-latest + shell: cmd + node-version: + - 14.17.0 + - 14.x + - 16.13.0 + - 16.x + - 18.0.0 + - 18.x + runs-on: ${{ matrix.platform.os }} + defaults: + run: + shell: ${{ matrix.platform.shell }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Setup Git User + run: | + git config --global user.email "npm-cli+bot@github.com" + git config --global user.name "npm CLI robot" + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: npm + - name: Reset Deps + run: node . run resetdeps + - name: Add Problem Matcher + run: echo "::add-matcher::.github/matchers/tap.json" + - name: Test + run: node . test --ignore-scripts -w @npmcli/mock-registry + - name: Check Git Status + if: matrix && matrix.platform.os != 'windows-latest' + run: node scripts/git-dirty.js diff --git a/.github/workflows/ci-smoke-tests.yml b/.github/workflows/ci-npmcli-smoke-tests.yml similarity index 90% rename from .github/workflows/ci-smoke-tests.yml rename to .github/workflows/ci-npmcli-smoke-tests.yml index ccd59448c18c2..d6103908fcff7 100644 --- a/.github/workflows/ci-smoke-tests.yml +++ b/.github/workflows/ci-npmcli-smoke-tests.yml @@ -1,6 +1,6 @@ # This file is automatically added by @npmcli/template-oss. Do not edit. -name: CI - smoke-tests +name: CI - @npmcli/smoke-tests on: workflow_dispatch: @@ -40,9 +40,9 @@ jobs: - name: Reset Deps run: node . run resetdeps - name: Lint - run: node . run lint --ignore-scripts -w smoke-tests + run: node . run lint --ignore-scripts -w @npmcli/smoke-tests - name: Post Lint - run: node . run postlint --ignore-scripts -w smoke-tests + run: node . run postlint --ignore-scripts -w @npmcli/smoke-tests test: name: Test - ${{ matrix.platform.name }} - ${{ matrix.node-version }} @@ -88,7 +88,7 @@ jobs: - name: Add Problem Matcher run: echo "::add-matcher::.github/matchers/tap.json" - name: Test - run: node . test --ignore-scripts -w smoke-tests + run: node . test --ignore-scripts -w @npmcli/smoke-tests - name: Check Git Status if: matrix && matrix.platform.os != 'windows-latest' run: node scripts/git-dirty.js diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3268396f0f99..639bf4a0ce49a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: paths-ignore: - docs/** - smoke-tests/** + - mock-registry/** - workspaces/** push: branches: @@ -16,6 +17,7 @@ on: paths-ignore: - docs/** - smoke-tests/** + - mock-registry/** - workspaces/** schedule: # "At 09:00 UTC (02:00 PT) on Monday" https://crontab.guru/#0_9_*_*_1 diff --git a/.github/workflows/create-node-pr.yml b/.github/workflows/create-node-pr.yml index f7bf18d8095b7..f5cb5e88c8c2a 100644 --- a/.github/workflows/create-node-pr.yml +++ b/.github/workflows/create-node-pr.yml @@ -9,6 +9,10 @@ on: description: "The npm spec to create the PR from" required: true default: 'latest' + branch: + description: "The major node version to serve as the base of the PR. Should be `main` or a number like `18`, `19`, etc." + required: true + default: 'main' dryRun: description: "Setting this to anything will run all the steps except opening the PR" @@ -23,6 +27,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Setup Git User run: | git config --global user.email "npm-cli+bot@github.com" @@ -46,4 +52,4 @@ jobs: GITHUB_TOKEN: ${{ secrets.NODE_PULL_REQUEST_TOKEN }} run: | DRY_RUN=$([ -z "${{ inputs.dryRun }}" ] && echo "" || echo "--dry-run") - node scripts/create-node-pr.js "${{ inputs.spec }}" "$DRY_RUN" + node scripts/create-node-pr.js ${{ inputs.spec }} ${{ inputs.branch }} "$DRY_RUN" diff --git a/.gitignore b/.gitignore index 2ab23adf79548..dd81bed4846dc 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ !/test/ !/docs/ !/smoke-tests/ +!/mock-registry/ !/workspaces/ /workspaces/* !/workspaces/arborist/ diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2faa1bd296d24..7b70cdd152096 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,14 +1,14 @@ { - ".": "9.1.0", - "workspaces/arborist": "6.1.1", + ".": "9.1.1", + "workspaces/arborist": "6.1.2", "workspaces/libnpmaccess": "7.0.0", - "workspaces/libnpmdiff": "5.0.2", - "workspaces/libnpmexec": "5.0.2", - "workspaces/libnpmfund": "4.0.2", + "workspaces/libnpmdiff": "5.0.3", + "workspaces/libnpmexec": "5.0.3", + "workspaces/libnpmfund": "4.0.3", "workspaces/libnpmhook": "9.0.0", "workspaces/libnpmorg": "5.0.0", - "workspaces/libnpmpack": "5.0.2", - "workspaces/libnpmpublish": "7.0.2", + "workspaces/libnpmpack": "5.0.3", + "workspaces/libnpmpublish": "7.0.3", "workspaces/libnpmsearch": "6.0.0", "workspaces/libnpmteam": "5.0.0", "workspaces/libnpmversion": "4.0.1", diff --git a/CHANGELOG.md b/CHANGELOG.md index b7f5ae0f5ac4f..bfc3c26cc637a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## [9.1.1](https://github.com/npm/cli/compare/v9.1.0...v9.1.1) (2022-11-09) + +### Documentation + +* [`1bff064`](https://github.com/npm/cli/commit/1bff0640ccb8414e2d416a5cf9d64e9ff03c6403) [#5819](https://github.com/npm/cli/pull/5819) config: document `npm config fix` (#5819) (@wraithgar) + +### Dependencies + +* [`335c7e4`](https://github.com/npm/cli/commit/335c7e4348f5505fad33b8a78348a02a82b91426) [#5813](https://github.com/npm/cli/pull/5813) `cacache@17.0.2` +* [`878ddfb`](https://github.com/npm/cli/commit/878ddfb5b68c03bdcd7d7da8dae92c4947942801) `@npmcli/fs@3.1.0` +* [Workspace](https://github.com/npm/cli/compare/arborist-v6.1.1...arborist-v6.1.2): `@npmcli/arborist@6.1.2` +* [Workspace](https://github.com/npm/cli/compare/libnpmdiff-v5.0.2...libnpmdiff-v5.0.3): `libnpmdiff@5.0.3` +* [Workspace](https://github.com/npm/cli/compare/libnpmexec-v5.0.2...libnpmexec-v5.0.3): `libnpmexec@5.0.3` +* [Workspace](https://github.com/npm/cli/compare/libnpmfund-v4.0.2...libnpmfund-v4.0.3): `libnpmfund@4.0.3` +* [Workspace](https://github.com/npm/cli/compare/libnpmpack-v5.0.2...libnpmpack-v5.0.3): `libnpmpack@5.0.3` +* [Workspace](https://github.com/npm/cli/compare/libnpmpublish-v7.0.2...libnpmpublish-v7.0.3): `libnpmpublish@7.0.3` + ## [9.1.0](https://github.com/npm/cli/compare/v9.0.1...v9.1.0) (2022-11-02) ### Features diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index 6bdb9fc3a2ebb..1448db1b9fde5 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -9,10 +9,8 @@ graph LR; bin-links-->write-file-atomic; cacache-->fs-minipass; cacache-->npmcli-fs["@npmcli/fs"]; - cacache-->npmcli-move-file["@npmcli/move-file"]; cacache-->ssri; cacache-->unique-filename; - dezalgo-->wrappy; init-package-json-->npm-package-arg; init-package-json-->promzard; init-package-json-->read-package-json; @@ -122,9 +120,11 @@ graph LR; npm-->npmcli-fs["@npmcli/fs"]; npm-->npmcli-git["@npmcli/git"]; npm-->npmcli-map-workspaces["@npmcli/map-workspaces"]; + npm-->npmcli-mock-registry["@npmcli/mock-registry"]; npm-->npmcli-package-json["@npmcli/package-json"]; npm-->npmcli-promise-spawn["@npmcli/promise-spawn"]; npm-->npmcli-run-script["@npmcli/run-script"]; + npm-->npmcli-smoke-tests["@npmcli/smoke-tests"]; npm-->npmcli-template-oss["@npmcli/template-oss"]; npm-->npmlog; npm-->pacote; @@ -133,7 +133,6 @@ graph LR; npm-->read-package-json-fast; npm-->read-package-json; npm-->read; - npm-->readdir-scoped-modules; npm-->semver; npm-->ssri; npm-->treeverse; @@ -167,10 +166,10 @@ graph LR; npmcli-arborist-->npm-pick-manifest; npmcli-arborist-->npm-registry-fetch; npmcli-arborist-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-arborist-->npmcli-fs["@npmcli/fs"]; npmcli-arborist-->npmcli-installed-package-contents["@npmcli/installed-package-contents"]; npmcli-arborist-->npmcli-map-workspaces["@npmcli/map-workspaces"]; npmcli-arborist-->npmcli-metavuln-calculator["@npmcli/metavuln-calculator"]; - npmcli-arborist-->npmcli-move-file["@npmcli/move-file"]; npmcli-arborist-->npmcli-name-from-folder["@npmcli/name-from-folder"]; npmcli-arborist-->npmcli-node-gyp["@npmcli/node-gyp"]; npmcli-arborist-->npmcli-package-json["@npmcli/package-json"]; @@ -182,7 +181,6 @@ graph LR; npmcli-arborist-->parse-conflict-json; npmcli-arborist-->proc-log; npmcli-arborist-->read-package-json-fast; - npmcli-arborist-->readdir-scoped-modules; npmcli-arborist-->semver; npmcli-arborist-->ssri; npmcli-arborist-->treeverse; @@ -210,10 +208,19 @@ graph LR; npmcli-metavuln-calculator-->json-parse-even-better-errors; npmcli-metavuln-calculator-->pacote; npmcli-metavuln-calculator-->semver; + npmcli-mock-registry-->npm-package-arg; + npmcli-mock-registry-->npmcli-arborist["@npmcli/arborist"]; + npmcli-mock-registry-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-mock-registry-->npmcli-template-oss["@npmcli/template-oss"]; + npmcli-mock-registry-->pacote; npmcli-package-json-->json-parse-even-better-errors; npmcli-run-script-->npmcli-node-gyp["@npmcli/node-gyp"]; npmcli-run-script-->npmcli-promise-spawn["@npmcli/promise-spawn"]; npmcli-run-script-->read-package-json-fast; + npmcli-smoke-tests-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-smoke-tests-->npmcli-mock-registry["@npmcli/mock-registry"]; + npmcli-smoke-tests-->npmcli-promise-spawn["@npmcli/promise-spawn"]; + npmcli-smoke-tests-->npmcli-template-oss["@npmcli/template-oss"]; npmlog-->are-we-there-yet; npmlog-->gauge; pacote-->cacache; @@ -238,7 +245,6 @@ graph LR; read-package-json-->npm-normalize-package-bin; read-package-json-fast-->json-parse-even-better-errors; read-package-json-fast-->npm-normalize-package-bin; - readdir-scoped-modules-->dezalgo; unique-filename-->unique-slug; ``` @@ -290,8 +296,6 @@ graph LR; columnify-->wcwidth; debug-->ms; defaults-->clone; - dezalgo-->asap; - dezalgo-->wrappy; encoding-->iconv-lite; fs-minipass-->minipass; gauge-->aproba; @@ -522,9 +526,11 @@ graph LR; npm-->npmcli-fs["@npmcli/fs"]; npm-->npmcli-git["@npmcli/git"]; npm-->npmcli-map-workspaces["@npmcli/map-workspaces"]; + npm-->npmcli-mock-registry["@npmcli/mock-registry"]; npm-->npmcli-package-json["@npmcli/package-json"]; npm-->npmcli-promise-spawn["@npmcli/promise-spawn"]; npm-->npmcli-run-script["@npmcli/run-script"]; + npm-->npmcli-smoke-tests["@npmcli/smoke-tests"]; npm-->npmcli-template-oss["@npmcli/template-oss"]; npm-->npmlog; npm-->p-map; @@ -535,10 +541,11 @@ graph LR; npm-->read-package-json-fast; npm-->read-package-json; npm-->read; - npm-->readdir-scoped-modules; + npm-->remark-gfm; + npm-->remark-github; + npm-->remark; npm-->rimraf; npm-->semver; - npm-->smoke-tests; npm-->spawk; npm-->ssri; npm-->tap; @@ -588,10 +595,10 @@ graph LR; npmcli-arborist-->npm-pick-manifest; npmcli-arborist-->npm-registry-fetch; npmcli-arborist-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-arborist-->npmcli-fs["@npmcli/fs"]; npmcli-arborist-->npmcli-installed-package-contents["@npmcli/installed-package-contents"]; npmcli-arborist-->npmcli-map-workspaces["@npmcli/map-workspaces"]; npmcli-arborist-->npmcli-metavuln-calculator["@npmcli/metavuln-calculator"]; - npmcli-arborist-->npmcli-move-file["@npmcli/move-file"]; npmcli-arborist-->npmcli-name-from-folder["@npmcli/name-from-folder"]; npmcli-arborist-->npmcli-node-gyp["@npmcli/node-gyp"]; npmcli-arborist-->npmcli-package-json["@npmcli/package-json"]; @@ -605,7 +612,6 @@ graph LR; npmcli-arborist-->promise-all-reject-late; npmcli-arborist-->promise-call-limit; npmcli-arborist-->read-package-json-fast; - npmcli-arborist-->readdir-scoped-modules; npmcli-arborist-->semver; npmcli-arborist-->ssri; npmcli-arborist-->tap; @@ -623,16 +629,20 @@ graph LR; npmcli-config-->tap; npmcli-config-->walk-up-path; npmcli-disparity-colors-->ansi-styles; - npmcli-docs-->cmark-gfm; npmcli-docs-->front-matter; npmcli-docs-->ignore-walk; npmcli-docs-->isaacs-string-locale-compare["@isaacs/string-locale-compare"]; npmcli-docs-->jsdom; - npmcli-docs-->marked-man; npmcli-docs-->mkdirp; npmcli-docs-->npmcli-eslint-config["@npmcli/eslint-config"]; npmcli-docs-->npmcli-template-oss["@npmcli/template-oss"]; + npmcli-docs-->rehype-stringify; + npmcli-docs-->remark-gfm; + npmcli-docs-->remark-man; + npmcli-docs-->remark-parse; + npmcli-docs-->remark-rehype; npmcli-docs-->tap; + npmcli-docs-->unified; npmcli-docs-->yaml; npmcli-fs-->semver; npmcli-git-->lru-cache; @@ -654,6 +664,13 @@ graph LR; npmcli-metavuln-calculator-->json-parse-even-better-errors; npmcli-metavuln-calculator-->pacote; npmcli-metavuln-calculator-->semver; + npmcli-mock-registry-->nock; + npmcli-mock-registry-->npm-package-arg; + npmcli-mock-registry-->npmcli-arborist["@npmcli/arborist"]; + npmcli-mock-registry-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-mock-registry-->npmcli-template-oss["@npmcli/template-oss"]; + npmcli-mock-registry-->pacote; + npmcli-mock-registry-->tap; npmcli-move-file-->mkdirp; npmcli-move-file-->rimraf; npmcli-package-json-->json-parse-even-better-errors; @@ -664,6 +681,15 @@ graph LR; npmcli-run-script-->npmcli-promise-spawn["@npmcli/promise-spawn"]; npmcli-run-script-->read-package-json-fast; npmcli-run-script-->which; + npmcli-smoke-tests-->http-proxy; + npmcli-smoke-tests-->just-extend; + npmcli-smoke-tests-->just-safe-set; + npmcli-smoke-tests-->npmcli-eslint-config["@npmcli/eslint-config"]; + npmcli-smoke-tests-->npmcli-mock-registry["@npmcli/mock-registry"]; + npmcli-smoke-tests-->npmcli-promise-spawn["@npmcli/promise-spawn"]; + npmcli-smoke-tests-->npmcli-template-oss["@npmcli/template-oss"]; + npmcli-smoke-tests-->tap; + npmcli-smoke-tests-->which; npmlog-->are-we-there-yet; npmlog-->console-control-strings; npmlog-->gauge; @@ -705,19 +731,8 @@ graph LR; readable-stream-->inherits; readable-stream-->string_decoder; readable-stream-->util-deprecate; - readdir-scoped-modules-->debuglog; - readdir-scoped-modules-->dezalgo; - readdir-scoped-modules-->graceful-fs; - readdir-scoped-modules-->once; rimraf-->glob; semver-->lru-cache; - smoke-tests-->minify-registry-metadata; - smoke-tests-->npmcli-eslint-config["@npmcli/eslint-config"]; - smoke-tests-->npmcli-promise-spawn["@npmcli/promise-spawn"]; - smoke-tests-->npmcli-template-oss["@npmcli/template-oss"]; - smoke-tests-->rimraf; - smoke-tests-->tap; - smoke-tests-->which; socks-->ip; socks-->smart-buffer; socks-proxy-agent-->agent-base; @@ -759,13 +774,13 @@ Each group depends on packages lower down the chain, nothing depends on packages higher up the chain. - npm - - libnpmpublish - - libnpmdiff, libnpmexec, libnpmfund, libnpmpack + - @npmcli/smoke-tests, libnpmpublish + - @npmcli/mock-registry, libnpmdiff, libnpmexec, libnpmfund, libnpmpack - @npmcli/arborist - @npmcli/metavuln-calculator - pacote, libnpmaccess, libnpmhook, libnpmorg, libnpmsearch, libnpmteam, npm-profile - npm-registry-fetch, libnpmversion - @npmcli/git, make-fetch-happen, @npmcli/config, init-package-json - - @npmcli/installed-package-contents, @npmcli/map-workspaces, cacache, npm-pick-manifest, @npmcli/run-script, read-package-json, readdir-scoped-modules, promzard - - @npmcli/docs, npm-bundled, read-package-json-fast, @npmcli/fs, unique-filename, npm-install-checks, npm-package-arg, npm-packlist, normalize-package-data, @npmcli/package-json, bin-links, nopt, npmlog, parse-conflict-json, dezalgo, read - - @npmcli/eslint-config, @npmcli/template-oss, ignore-walk, npm-normalize-package-bin, @npmcli/name-from-folder, json-parse-even-better-errors, semver, @npmcli/move-file, fs-minipass, ssri, unique-slug, @npmcli/promise-spawn, hosted-git-info, proc-log, validate-npm-package-name, @npmcli/node-gyp, minipass-fetch, @npmcli/query, cmd-shim, read-cmd-shim, write-file-atomic, abbrev, are-we-there-yet, gauge, wrappy, treeverse, minify-registry-metadata, ini, @npmcli/disparity-colors, @npmcli/ci-detect, mute-stream, npm-audit-report, npm-user-validate + - @npmcli/installed-package-contents, @npmcli/map-workspaces, cacache, npm-pick-manifest, @npmcli/run-script, read-package-json, promzard + - @npmcli/docs, @npmcli/fs, npm-bundled, read-package-json-fast, unique-filename, npm-install-checks, npm-package-arg, npm-packlist, normalize-package-data, @npmcli/package-json, bin-links, nopt, npmlog, parse-conflict-json, read + - @npmcli/eslint-config, @npmcli/template-oss, ignore-walk, semver, npm-normalize-package-bin, @npmcli/name-from-folder, json-parse-even-better-errors, fs-minipass, ssri, unique-slug, @npmcli/promise-spawn, hosted-git-info, proc-log, validate-npm-package-name, @npmcli/node-gyp, minipass-fetch, @npmcli/query, cmd-shim, read-cmd-shim, write-file-atomic, abbrev, are-we-there-yet, gauge, treeverse, minify-registry-metadata, ini, @npmcli/disparity-colors, @npmcli/ci-detect, mute-stream, npm-audit-report, npm-user-validate diff --git a/SECURITY.md b/SECURITY.md index a93106d0cb896..4e7c26c66ebd9 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,3 +1,14 @@ -Please send vulnerability reports through [hackerone](https://hackerone.com/github). +GitHub takes the security of our software products and services seriously, including the open source code repositories managed through our GitHub organizations, such as [GitHub](https://github.com/GitHub). + +If you believe you have found a security vulnerability in this GitHub-owned open source repository, you can report it to us in one of two ways. + +If the vulnerability you have found is *not* [in scope for the GitHub Bug Bounty Program](https://bounty.github.com/#scope) or if you do not wish to be considered for a bounty reward, please report the issue to us directly using [private vulnerability reporting](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability). + +If the vulnerability you have found is [in scope for the GitHub Bug Bounty Program](https://bounty.github.com/#scope) and you would like for your finding to be considered for a bounty reward, please submit the vulnerability to us through [HackerOne](https://hackerone.com/github) in order to be eligible to receive a bounty award. + +**Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.** + +Thanks for helping make GitHub safe for everyone. + diff --git a/docs/lib/build.js b/docs/lib/build.js index a88804d28a456..563b4064277f1 100644 --- a/docs/lib/build.js +++ b/docs/lib/build.js @@ -19,12 +19,31 @@ const readHtml = (path) => fs.readFile(path, 'utf-8') const readYaml = (path) => fs.readFile(path, 'utf-8').then(yaml.parse) const makeTransforms = (...args) => (src, trs) => trs.reduce((acc, tr) => tr(acc, ...args), src) +const pAll = async (obj) => { + const entries = Object.entries(obj) + const results = await Promise.all(entries.map(e => e[1])) + return results.reduce((acc, res, index) => { + acc[entries[index][0]] = res + return acc + }, {}) +} + const run = async ({ content, template, nav, man, html, md }) => { - const [contentPaths, templateFile, navFile] = await Promise.all([ + await rmAll(man, html, md) + const [contentPaths, navFile, options] = await Promise.all([ readDocs(content), - readHtml(template), readYaml(nav), - rmAll(man, html, md), + pAll({ + template: readHtml(template), + // these deps are esm only so we have to import them once we + // are inside our main async function + unified: import('unified').then(r => r.unified), + remarkParse: import('remark-parse').then(r => r.default), + remarkGfm: import('remark-gfm').then(r => r.default), + remarkRehype: import('remark-rehype').then(r => r.default), + rehypeStringify: import('rehype-stringify').then(r => r.default), + remarkMan: import('remark-man').then(r => r.default), + }), ]) const sources = await Promise.all(contentPaths.map(async (childPath) => { @@ -61,7 +80,7 @@ const run = async ({ content, template, nav, man, html, md }) => { github_path: 'docs/content', }, frontmatter, - template: templateFile, + ...options, }) const transformedSrc = applyTransforms(body, [ diff --git a/docs/lib/content/commands/npm-config.md b/docs/lib/content/commands/npm-config.md index 270858f8bff8f..5267d49960fe7 100644 --- a/docs/lib/content/commands/npm-config.md +++ b/docs/lib/content/commands/npm-config.md @@ -83,6 +83,16 @@ npm config edit Opens the config file in an editor. Use the `--global` flag to edit the global config. +#### fix + +```bash +npm config fix +``` + +Attempts to repair invalid configuration items. Usually this means +attaching authentication config (i.e. `_auth`, `_authToken`) to the +configured `registry`. + ### Configuration diff --git a/docs/lib/index.js b/docs/lib/index.js index a3270f00a87cb..74aa03222f374 100644 --- a/docs/lib/index.js +++ b/docs/lib/index.js @@ -1,4 +1,3 @@ -const marked = require('marked-man') const localeCompare = require('@isaacs/string-locale-compare')('en') const { join, basename, resolve } = require('path') const transformHTML = require('./transform-html.js') @@ -142,8 +141,11 @@ const replaceHelpLinks = (src) => { ) } -const transformMan = (src, { data }) => - marked(`# ${data.title}(${data.section}) - ${data.description}\n\n${src}`) +const transformMan = (src, { data, unified, remarkParse, remarkMan }) => unified() + .use(remarkParse) + .use(remarkMan) + .processSync(`# ${data.title}(${data.section}) - ${data.description}\n\n${src}`) + .toString() const manPath = (name, { data }) => join(`man${data.section}`, `${name}.${data.section}`) diff --git a/docs/lib/transform-html.js b/docs/lib/transform-html.js index 8d13968a40fbd..c587d75e994f8 100644 --- a/docs/lib/transform-html.js +++ b/docs/lib/transform-html.js @@ -1,22 +1,18 @@ -const cmark = require('cmark-gfm') const jsdom = require('jsdom') -function transformHTML (src, { path, template, data }) { - // Render the markdown into an HTML snippet using a GFM renderer. - // This has to use the sync API due to a bug where the promise method - // doesn't properly apply the extensions so links dont get autolinked. - const content = cmark.renderHtmlSync(src, { - smart: false, - githubPreLang: true, - strikethroughDoubleTilde: true, - unsafe: false, - extensions: { - table: true, - strikethrough: true, - tagfilter: true, - autolink: true, - }, - }) +function transformHTML ( + src, + { path, template, data, unified, remarkParse, remarkGfm, remarkRehype, rehypeStringify } +) { + const content = unified() + .use(remarkParse) + .use(remarkGfm, { + singleTilde: false, + }) + .use(remarkRehype) + .use(rehypeStringify) + .processSync(src) + .toString() // Inject this data into the template, using a mustache-like // replacement scheme. diff --git a/docs/package.json b/docs/package.json index b82c639b8e6bc..6130418caee9e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,11 +11,8 @@ "lintfix": "node .. run lint -- --fix", "snap": "tap", "test": "tap", - "pretest": "node .. run rebuild-cmark", "posttest": "node .. run lint", - "build": "node bin/build.js", - "prebuild": "node .. run rebuild-cmark", - "rebuild-cmark": "node ../scripts/rebuild.js cmark-gfm" + "build": "node bin/build.js" }, "repository": { "type": "git", @@ -25,14 +22,18 @@ "devDependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", - "cmark-gfm": "^0.9.0", + "@npmcli/template-oss": "4.9.0", "front-matter": "^4.0.2", "ignore-walk": "^6.0.0", "jsdom": "^20.0.1", - "marked-man": "^0.7.0", "mkdirp": "^1.0.4", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-man": "^8.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", "tap": "^16.0.1", + "unified": "^10.1.2", "yaml": "^2.1.3" }, "author": "GitHub Inc.", @@ -55,7 +56,12 @@ "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", "ciVersions": "latest", "engines": "^14.17.0 || ^16.13.0 || >=18.0.0", - "version": "4.8.0", - "content": "../scripts/template-oss/index.js" + "version": "4.9.0", + "content": "../scripts/template-oss/index.js", + "workspaceRepo": { + "add": { + ".github/workflows/ci-{{ pkgNameFs }}.yml": "ci-npmcli-docs.yml" + } + } } } diff --git a/lib/utils/completion/installed-shallow.js b/lib/utils/completion/installed-shallow.js index 686c95e63245e..d59318fe78541 100644 --- a/lib/utils/completion/installed-shallow.js +++ b/lib/utils/completion/installed-shallow.js @@ -1,8 +1,10 @@ -const { promisify } = require('util') -const readdir = promisify(require('readdir-scoped-modules')) +const { readdirScoped } = require('@npmcli/fs') const installedShallow = async (npm, opts) => { - const names = global => readdir(global ? npm.globalDir : npm.localDir) + const names = async global => { + const paths = await readdirScoped(global ? npm.globalDir : npm.localDir) + return paths.map(p => p.replace(/\\/g, '/')) + } const { conf: { argv: { remain } } } = opts if (remain.length > 3) { return null diff --git a/mock-registry/.eslintrc.js b/mock-registry/.eslintrc.js new file mode 100644 index 0000000000000..5db9f815536f1 --- /dev/null +++ b/mock-registry/.eslintrc.js @@ -0,0 +1,17 @@ +/* This file is automatically added by @npmcli/template-oss. Do not edit. */ + +'use strict' + +const { readdirSync: readdir } = require('fs') + +const localConfigs = readdir(__dirname) + .filter((file) => file.startsWith('.eslintrc.local.')) + .map((file) => `./${file}`) + +module.exports = { + root: true, + extends: [ + '@npmcli', + ...localConfigs, + ], +} diff --git a/mock-registry/.gitignore b/mock-registry/.gitignore new file mode 100644 index 0000000000000..79af2bfcaa4d8 --- /dev/null +++ b/mock-registry/.gitignore @@ -0,0 +1,21 @@ +# This file is automatically added by @npmcli/template-oss. Do not edit. + +# ignore everything in the root +/* + +# keep these +!**/.gitignore +!/.eslintrc.js +!/.eslintrc.local.* +!/.gitignore +!/bin/ +!/CHANGELOG* +!/docs/ +!/lib/ +!/LICENSE* +!/map.js +!/package.json +!/README* +!/scripts/ +!/tap-snapshots/ +!/test/ diff --git a/test/fixtures/mock-registry.js b/mock-registry/lib/index.js similarity index 93% rename from test/fixtures/mock-registry.js rename to mock-registry/lib/index.js index a39532958b338..1652e3344f0a8 100644 --- a/test/fixtures/mock-registry.js +++ b/mock-registry/lib/index.js @@ -1,18 +1,15 @@ -/* - * Mock registry class - * - * This should end up as the centralized place where we generate test fixtures - * for tests against any registry data. - */ const pacote = require('pacote') const Arborist = require('@npmcli/arborist') const npa = require('npm-package-arg') +const Nock = require('nock') + class MockRegistry { #tap #nock #registry #authorization #basic + #debug constructor (opts) { if (!opts.registry) { @@ -21,16 +18,33 @@ class MockRegistry { this.#registry = (new URL(opts.registry)).origin this.#authorization = opts.authorization this.#basic = opts.basic + this.#debug = opts.debug // Required for this.package this.#tap = opts.tap } + static tnock (t, host, opts, { debug = false } = {}) { + if (debug) { + Nock.emitter.on('no match', req => console.error('NO MATCH', req.options)) + } + Nock.disableNetConnect() + const server = Nock(host, opts) + t.teardown(() => { + Nock.enableNetConnect() + server.done() + }) + return server + } + + get origin () { + return this.#registry + } + get nock () { if (!this.#nock) { if (!this.#tap) { throw new Error('cannot mock packages without a tap fixture') } - const tnock = require('./tnock.js') const reqheaders = {} if (this.#authorization) { reqheaders.authorization = `Bearer ${this.#authorization}` @@ -38,7 +52,12 @@ class MockRegistry { if (this.#basic) { reqheaders.authorization = `Basic ${this.#basic}` } - this.#nock = tnock(this.#tap, this.#registry, { reqheaders }) + this.#nock = MockRegistry.tnock( + this.#tap, + this.#registry, + { reqheaders }, + { debug: this.#debug } + ) } return this.#nock } @@ -260,7 +279,7 @@ class MockRegistry { // or an array of versions // the last packument in the packuments or versions array will be tagged latest manifest ({ name = 'test-package', users, packuments, versions } = {}) { - packuments = this.packuments(packuments, name) + packuments = this.packuments(versions || packuments, name) const latest = packuments.slice(-1)[0] const manifest = { _id: `${name}@${latest.version}`, @@ -276,10 +295,6 @@ class MockRegistry { if (users) { manifest.users = users } - if (versions) { - packuments = versions.map(version => ({ version })) - } - for (const packument of packuments) { manifest.versions[packument.version] = { _id: `${name}@${packument.version}`, diff --git a/mock-registry/package.json b/mock-registry/package.json new file mode 100644 index 0000000000000..3729a17f1e004 --- /dev/null +++ b/mock-registry/package.json @@ -0,0 +1,55 @@ +{ + "name": "@npmcli/mock-registry", + "version": "1.0.0", + "description": "", + "main": "lib/index.js", + "private": true, + "scripts": { + "test": "tap", + "lint": "eslint \"**/*.js\"", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "node .. run lint -- --fix", + "snap": "tap", + "posttest": "node .. run lint" + }, + "repository": { + "type": "git", + "url": "https://github.com/npm/cli.git", + "directory": "mock-registry" + }, + "keywords": [], + "author": "GitHub Inc.", + "license": "ISC", + "bugs": { + "url": "https://github.com/npm/cli/issues" + }, + "homepage": "https://github.com/npm/cli#readme", + "files": [ + "bin/", + "lib/" + ], + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "version": "4.9.0" + }, + "tap": { + "no-coverage": true, + "nyc-arg": [ + "--exclude", + "tap-snapshots/**" + ] + }, + "devDependencies": { + "@npmcli/arborist": "^6.1.1", + "@npmcli/eslint-config": "^4.0.1", + "@npmcli/template-oss": "4.9.0", + "nock": "^13.2.9", + "npm-package-arg": "^10.0.0", + "pacote": "^15.0.6", + "tap": "^16.3.0" + } +} diff --git a/mock-registry/test/index.js b/mock-registry/test/index.js new file mode 100644 index 0000000000000..45f9bc16d0dc3 --- /dev/null +++ b/mock-registry/test/index.js @@ -0,0 +1,8 @@ +const t = require('tap') +const MockRegistry = require('..') + +t.test('it works', async t => { + t.ok(new MockRegistry({ + registry: 'http://registry.npmjs.org/', + })) +}) diff --git a/node_modules/.gitignore b/node_modules/.gitignore index b1752b46d3b5e..b94e4bd99842c 100644 --- a/node_modules/.gitignore +++ b/node_modules/.gitignore @@ -23,7 +23,6 @@ !/@npmcli/installed-package-contents !/@npmcli/map-workspaces !/@npmcli/metavuln-calculator -!/@npmcli/move-file !/@npmcli/name-from-folder !/@npmcli/node-gyp !/@npmcli/package-json @@ -47,7 +46,6 @@ /are-we-there-yet/node_modules/* !/are-we-there-yet/node_modules/buffer !/are-we-there-yet/node_modules/readable-stream -!/asap !/balanced-match !/base64-js !/bin-links @@ -75,11 +73,9 @@ !/debug/node_modules/ /debug/node_modules/* !/debug/node_modules/ms -!/debuglog !/defaults !/delegates !/depd -!/dezalgo !/diff !/emoji-regex !/encoding @@ -209,7 +205,6 @@ !/read-package-json !/read !/readable-stream -!/readdir-scoped-modules !/retry !/rimraf !/rimraf/node_modules/ diff --git a/node_modules/@npmcli/fs/lib/index.js b/node_modules/@npmcli/fs/lib/index.js index 0dc02f8a3da44..81c746304cc42 100644 --- a/node_modules/@npmcli/fs/lib/index.js +++ b/node_modules/@npmcli/fs/lib/index.js @@ -2,8 +2,12 @@ const cp = require('./cp/index.js') const withTempDir = require('./with-temp-dir.js') +const readdirScoped = require('./readdir-scoped.js') +const moveFile = require('./move-file.js') module.exports = { cp, withTempDir, + readdirScoped, + moveFile, } diff --git a/node_modules/@npmcli/fs/lib/move-file.js b/node_modules/@npmcli/fs/lib/move-file.js new file mode 100644 index 0000000000000..d56e06d384659 --- /dev/null +++ b/node_modules/@npmcli/fs/lib/move-file.js @@ -0,0 +1,78 @@ +const { dirname, join, resolve, relative, isAbsolute } = require('path') +const fs = require('fs/promises') + +const pathExists = async path => { + try { + await fs.access(path) + return true + } catch (er) { + return er.code !== 'ENOENT' + } +} + +const moveFile = async (source, destination, options = {}, root = true, symlinks = []) => { + if (!source || !destination) { + throw new TypeError('`source` and `destination` file required') + } + + options = { + overwrite: true, + ...options, + } + + if (!options.overwrite && await pathExists(destination)) { + throw new Error(`The destination file exists: ${destination}`) + } + + await fs.mkdir(dirname(destination), { recursive: true }) + + try { + await fs.rename(source, destination) + } catch (error) { + if (error.code === 'EXDEV' || error.code === 'EPERM') { + const sourceStat = await fs.lstat(source) + if (sourceStat.isDirectory()) { + const files = await fs.readdir(source) + await Promise.all(files.map((file) => + moveFile(join(source, file), join(destination, file), options, false, symlinks) + )) + } else if (sourceStat.isSymbolicLink()) { + symlinks.push({ source, destination }) + } else { + await fs.copyFile(source, destination) + } + } else { + throw error + } + } + + if (root) { + await Promise.all(symlinks.map(async ({ source: symSource, destination: symDestination }) => { + let target = await fs.readlink(symSource) + // junction symlinks in windows will be absolute paths, so we need to + // make sure they point to the symlink destination + if (isAbsolute(target)) { + target = resolve(symDestination, relative(symSource, target)) + } + // try to determine what the actual file is so we can create the correct + // type of symlink in windows + let targetStat = 'file' + try { + targetStat = await fs.stat(resolve(dirname(symSource), target)) + if (targetStat.isDirectory()) { + targetStat = 'junction' + } + } catch { + // targetStat remains 'file' + } + await fs.symlink( + target, + symDestination, + targetStat + ) + })) + await fs.rm(source, { recursive: true, force: true }) + } +} + +module.exports = moveFile diff --git a/node_modules/@npmcli/fs/lib/readdir-scoped.js b/node_modules/@npmcli/fs/lib/readdir-scoped.js new file mode 100644 index 0000000000000..cd601dfbe7486 --- /dev/null +++ b/node_modules/@npmcli/fs/lib/readdir-scoped.js @@ -0,0 +1,20 @@ +const { readdir } = require('fs/promises') +const { join } = require('path') + +const readdirScoped = async (dir) => { + const results = [] + + for (const item of await readdir(dir)) { + if (item.startsWith('@')) { + for (const scopedItem of await readdir(join(dir, item))) { + results.push(join(item, scopedItem)) + } + } else { + results.push(item) + } + } + + return results +} + +module.exports = readdirScoped diff --git a/node_modules/@npmcli/fs/package.json b/node_modules/@npmcli/fs/package.json index 2eabc35dab33b..28eb613388418 100644 --- a/node_modules/@npmcli/fs/package.json +++ b/node_modules/@npmcli/fs/package.json @@ -1,6 +1,6 @@ { "name": "@npmcli/fs", - "version": "3.0.0", + "version": "3.1.0", "description": "filesystem utilities for the npm cli", "main": "lib/index.js", "files": [ @@ -29,8 +29,8 @@ "author": "GitHub Inc.", "license": "ISC", "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "4.5.1", + "@npmcli/eslint-config": "^4.0.0", + "@npmcli/template-oss": "4.8.0", "tap": "^16.0.1" }, "dependencies": { @@ -41,7 +41,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.5.1" + "version": "4.8.0" }, "tap": { "nyc-arg": [ diff --git a/node_modules/@npmcli/move-file/LICENSE.md b/node_modules/@npmcli/move-file/LICENSE.md deleted file mode 100644 index 072bf20840acd..0000000000000 --- a/node_modules/@npmcli/move-file/LICENSE.md +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) npm, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@npmcli/move-file/lib/index.js b/node_modules/@npmcli/move-file/lib/index.js deleted file mode 100644 index 5789bb127e096..0000000000000 --- a/node_modules/@npmcli/move-file/lib/index.js +++ /dev/null @@ -1,185 +0,0 @@ -const { dirname, join, resolve, relative, isAbsolute } = require('path') -const rimraf_ = require('rimraf') -const { promisify } = require('util') -const { - access: access_, - accessSync, - copyFile: copyFile_, - copyFileSync, - readdir: readdir_, - readdirSync, - rename: rename_, - renameSync, - stat: stat_, - statSync, - lstat: lstat_, - lstatSync, - symlink: symlink_, - symlinkSync, - readlink: readlink_, - readlinkSync, -} = require('fs') - -const access = promisify(access_) -const copyFile = promisify(copyFile_) -const readdir = promisify(readdir_) -const rename = promisify(rename_) -const stat = promisify(stat_) -const lstat = promisify(lstat_) -const symlink = promisify(symlink_) -const readlink = promisify(readlink_) -const rimraf = promisify(rimraf_) -const rimrafSync = rimraf_.sync - -const mkdirp = require('mkdirp') - -const pathExists = async path => { - try { - await access(path) - return true - } catch (er) { - return er.code !== 'ENOENT' - } -} - -const pathExistsSync = path => { - try { - accessSync(path) - return true - } catch (er) { - return er.code !== 'ENOENT' - } -} - -const moveFile = async (source, destination, options = {}, root = true, symlinks = []) => { - if (!source || !destination) { - throw new TypeError('`source` and `destination` file required') - } - - options = { - overwrite: true, - ...options, - } - - if (!options.overwrite && await pathExists(destination)) { - throw new Error(`The destination file exists: ${destination}`) - } - - await mkdirp(dirname(destination)) - - try { - await rename(source, destination) - } catch (error) { - if (error.code === 'EXDEV' || error.code === 'EPERM') { - const sourceStat = await lstat(source) - if (sourceStat.isDirectory()) { - const files = await readdir(source) - await Promise.all(files.map((file) => - moveFile(join(source, file), join(destination, file), options, false, symlinks) - )) - } else if (sourceStat.isSymbolicLink()) { - symlinks.push({ source, destination }) - } else { - await copyFile(source, destination) - } - } else { - throw error - } - } - - if (root) { - await Promise.all(symlinks.map(async ({ source: symSource, destination: symDestination }) => { - let target = await readlink(symSource) - // junction symlinks in windows will be absolute paths, so we need to - // make sure they point to the symlink destination - if (isAbsolute(target)) { - target = resolve(symDestination, relative(symSource, target)) - } - // try to determine what the actual file is so we can create the correct - // type of symlink in windows - let targetStat = 'file' - try { - targetStat = await stat(resolve(dirname(symSource), target)) - if (targetStat.isDirectory()) { - targetStat = 'junction' - } - } catch { - // targetStat remains 'file' - } - await symlink( - target, - symDestination, - targetStat - ) - })) - await rimraf(source) - } -} - -const moveFileSync = (source, destination, options = {}, root = true, symlinks = []) => { - if (!source || !destination) { - throw new TypeError('`source` and `destination` file required') - } - - options = { - overwrite: true, - ...options, - } - - if (!options.overwrite && pathExistsSync(destination)) { - throw new Error(`The destination file exists: ${destination}`) - } - - mkdirp.sync(dirname(destination)) - - try { - renameSync(source, destination) - } catch (error) { - if (error.code === 'EXDEV' || error.code === 'EPERM') { - const sourceStat = lstatSync(source) - if (sourceStat.isDirectory()) { - const files = readdirSync(source) - for (const file of files) { - moveFileSync(join(source, file), join(destination, file), options, false, symlinks) - } - } else if (sourceStat.isSymbolicLink()) { - symlinks.push({ source, destination }) - } else { - copyFileSync(source, destination) - } - } else { - throw error - } - } - - if (root) { - for (const { source: symSource, destination: symDestination } of symlinks) { - let target = readlinkSync(symSource) - // junction symlinks in windows will be absolute paths, so we need to - // make sure they point to the symlink destination - if (isAbsolute(target)) { - target = resolve(symDestination, relative(symSource, target)) - } - // try to determine what the actual file is so we can create the correct - // type of symlink in windows - let targetStat = 'file' - try { - targetStat = statSync(resolve(dirname(symSource), target)) - if (targetStat.isDirectory()) { - targetStat = 'junction' - } - } catch { - // targetStat remains 'file' - } - symlinkSync( - target, - symDestination, - targetStat - ) - } - rimrafSync(source) - } -} - -module.exports = moveFile -module.exports.sync = moveFileSync diff --git a/node_modules/@npmcli/move-file/package.json b/node_modules/@npmcli/move-file/package.json deleted file mode 100644 index a687ab2510c11..0000000000000 --- a/node_modules/@npmcli/move-file/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@npmcli/move-file", - "version": "3.0.0", - "files": [ - "bin/", - "lib/" - ], - "main": "lib/index.js", - "description": "move a file (fork of move-file)", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "devDependencies": { - "@npmcli/eslint-config": "^3.0.1", - "@npmcli/template-oss": "4.5.1", - "tap": "^16.0.1" - }, - "scripts": { - "test": "tap", - "snap": "tap", - "lint": "eslint \"**/*.js\"", - "postlint": "template-oss-check", - "template-oss-apply": "template-oss-apply --force", - "lintfix": "npm run lint -- --fix", - "posttest": "npm run lint" - }, - "repository": { - "type": "git", - "url": "https://github.com/npm/move-file.git" - }, - "tap": { - "check-coverage": true, - "nyc-arg": [ - "--exclude", - "tap-snapshots/**" - ] - }, - "license": "MIT", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "author": "GitHub Inc.", - "templateOSS": { - "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.5.1" - } -} diff --git a/node_modules/asap/CHANGES.md b/node_modules/asap/CHANGES.md deleted file mode 100644 index f105b91956d15..0000000000000 --- a/node_modules/asap/CHANGES.md +++ /dev/null @@ -1,70 +0,0 @@ - -## 2.0.6 - -Version 2.0.4 adds support for React Native by clarifying in package.json that -the browser environment does not support Node.js domains. -Why this is necessary, we leave as an exercise for the user. - -## 2.0.3 - -Version 2.0.3 fixes a bug when adjusting the capacity of the task queue. - -## 2.0.1-2.02 - -Version 2.0.1 fixes a bug in the way redirects were expressed that affected the -function of Browserify, but which Mr would tolerate. - -## 2.0.0 - -Version 2 of ASAP is a full rewrite with a few salient changes. -First, the ASAP source is CommonJS only and designed with [Browserify][] and -[Browserify-compatible][Mr] module loaders in mind. - -[Browserify]: https://github.com/substack/node-browserify -[Mr]: https://github.com/montagejs/mr - -The new version has been refactored in two dimensions. -Support for Node.js and browsers have been separated, using Browserify -redirects and ASAP has been divided into two modules. -The "raw" layer depends on the tasks to catch thrown exceptions and unravel -Node.js domains. - -The full implementation of ASAP is loadable as `require("asap")` in both Node.js -and browsers. - -The raw layer that lacks exception handling overhead is loadable as -`require("asap/raw")`. -The interface is the same for both layers. - -Tasks are no longer required to be functions, but can rather be any object that -implements `task.call()`. -With this feature you can recycle task objects to avoid garbage collector churn -and avoid closures in general. - -The implementation has been rigorously documented so that our successors can -understand the scope of the problem that this module solves and all of its -nuances, ensuring that the next generation of implementations know what details -are essential. - -- [asap.js](https://github.com/kriskowal/asap/blob/master/asap.js) -- [raw.js](https://github.com/kriskowal/asap/blob/master/raw.js) -- [browser-asap.js](https://github.com/kriskowal/asap/blob/master/browser-asap.js) -- [browser-raw.js](https://github.com/kriskowal/asap/blob/master/browser-raw.js) - -The new version has also been rigorously tested across a broad spectrum of -browsers, in both the window and worker context. -The following charts capture the browser test results for the most recent -release. -The first chart shows test results for ASAP running in the main window context. -The second chart shows test results for ASAP running in a web worker context. -Test results are inconclusive (grey) on browsers that do not support web -workers. -These data are captured automatically by [Continuous -Integration][]. - -![Browser Compatibility](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-results-matrix.svg) - -![Compatibility in Web Workers](http://kriskowal-asap.s3-website-us-west-2.amazonaws.com/train/integration-2/saucelabs-worker-results-matrix.svg) - -[Continuous Integration]: https://github.com/kriskowal/asap/blob/master/CONTRIBUTING.md - diff --git a/node_modules/asap/LICENSE.md b/node_modules/asap/LICENSE.md deleted file mode 100644 index ba18c61390db9..0000000000000 --- a/node_modules/asap/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ - -Copyright 2009–2014 Contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - diff --git a/node_modules/asap/asap.js b/node_modules/asap/asap.js deleted file mode 100644 index f04fcd58fc0b2..0000000000000 --- a/node_modules/asap/asap.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; - -var rawAsap = require("./raw"); -var freeTasks = []; - -/** - * Calls a task as soon as possible after returning, in its own event, with - * priority over IO events. An exception thrown in a task can be handled by - * `process.on("uncaughtException") or `domain.on("error")`, but will otherwise - * crash the process. If the error is handled, all subsequent tasks will - * resume. - * - * @param {{call}} task A callable object, typically a function that takes no - * arguments. - */ -module.exports = asap; -function asap(task) { - var rawTask; - if (freeTasks.length) { - rawTask = freeTasks.pop(); - } else { - rawTask = new RawTask(); - } - rawTask.task = task; - rawTask.domain = process.domain; - rawAsap(rawTask); -} - -function RawTask() { - this.task = null; - this.domain = null; -} - -RawTask.prototype.call = function () { - if (this.domain) { - this.domain.enter(); - } - var threw = true; - try { - this.task.call(); - threw = false; - // If the task throws an exception (presumably) Node.js restores the - // domain stack for the next event. - if (this.domain) { - this.domain.exit(); - } - } finally { - // We use try/finally and a threw flag to avoid messing up stack traces - // when we catch and release errors. - if (threw) { - // In Node.js, uncaught exceptions are considered fatal errors. - // Re-throw them to interrupt flushing! - // Ensure that flushing continues if an uncaught exception is - // suppressed listening process.on("uncaughtException") or - // domain.on("error"). - rawAsap.requestFlush(); - } - // If the task threw an error, we do not want to exit the domain here. - // Exiting the domain would prevent the domain from catching the error. - this.task = null; - this.domain = null; - freeTasks.push(this); - } -}; - diff --git a/node_modules/asap/browser-asap.js b/node_modules/asap/browser-asap.js deleted file mode 100644 index 805c9824605b0..0000000000000 --- a/node_modules/asap/browser-asap.js +++ /dev/null @@ -1,66 +0,0 @@ -"use strict"; - -// rawAsap provides everything we need except exception management. -var rawAsap = require("./raw"); -// RawTasks are recycled to reduce GC churn. -var freeTasks = []; -// We queue errors to ensure they are thrown in right order (FIFO). -// Array-as-queue is good enough here, since we are just dealing with exceptions. -var pendingErrors = []; -var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError); - -function throwFirstError() { - if (pendingErrors.length) { - throw pendingErrors.shift(); - } -} - -/** - * Calls a task as soon as possible after returning, in its own event, with priority - * over other events like animation, reflow, and repaint. An error thrown from an - * event will not interrupt, nor even substantially slow down the processing of - * other events, but will be rather postponed to a lower priority event. - * @param {{call}} task A callable object, typically a function that takes no - * arguments. - */ -module.exports = asap; -function asap(task) { - var rawTask; - if (freeTasks.length) { - rawTask = freeTasks.pop(); - } else { - rawTask = new RawTask(); - } - rawTask.task = task; - rawAsap(rawTask); -} - -// We wrap tasks with recyclable task objects. A task object implements -// `call`, just like a function. -function RawTask() { - this.task = null; -} - -// The sole purpose of wrapping the task is to catch the exception and recycle -// the task object after its single use. -RawTask.prototype.call = function () { - try { - this.task.call(); - } catch (error) { - if (asap.onerror) { - // This hook exists purely for testing purposes. - // Its name will be periodically randomized to break any code that - // depends on its existence. - asap.onerror(error); - } else { - // In a web browser, exceptions are not fatal. However, to avoid - // slowing down the queue of pending tasks, we rethrow the error in a - // lower priority turn. - pendingErrors.push(error); - requestErrorThrow(); - } - } finally { - this.task = null; - freeTasks[freeTasks.length] = this; - } -}; diff --git a/node_modules/asap/browser-raw.js b/node_modules/asap/browser-raw.js deleted file mode 100644 index 9cee7e32eb5d3..0000000000000 --- a/node_modules/asap/browser-raw.js +++ /dev/null @@ -1,223 +0,0 @@ -"use strict"; - -// Use the fastest means possible to execute a task in its own turn, with -// priority over other events including IO, animation, reflow, and redraw -// events in browsers. -// -// An exception thrown by a task will permanently interrupt the processing of -// subsequent tasks. The higher level `asap` function ensures that if an -// exception is thrown by a task, that the task queue will continue flushing as -// soon as possible, but if you use `rawAsap` directly, you are responsible to -// either ensure that no exceptions are thrown from your task, or to manually -// call `rawAsap.requestFlush` if an exception is thrown. -module.exports = rawAsap; -function rawAsap(task) { - if (!queue.length) { - requestFlush(); - flushing = true; - } - // Equivalent to push, but avoids a function call. - queue[queue.length] = task; -} - -var queue = []; -// Once a flush has been requested, no further calls to `requestFlush` are -// necessary until the next `flush` completes. -var flushing = false; -// `requestFlush` is an implementation-specific method that attempts to kick -// off a `flush` event as quickly as possible. `flush` will attempt to exhaust -// the event queue before yielding to the browser's own event loop. -var requestFlush; -// The position of the next task to execute in the task queue. This is -// preserved between calls to `flush` so that it can be resumed if -// a task throws an exception. -var index = 0; -// If a task schedules additional tasks recursively, the task queue can grow -// unbounded. To prevent memory exhaustion, the task queue will periodically -// truncate already-completed tasks. -var capacity = 1024; - -// The flush function processes all tasks that have been scheduled with -// `rawAsap` unless and until one of those tasks throws an exception. -// If a task throws an exception, `flush` ensures that its state will remain -// consistent and will resume where it left off when called again. -// However, `flush` does not make any arrangements to be called again if an -// exception is thrown. -function flush() { - while (index < queue.length) { - var currentIndex = index; - // Advance the index before calling the task. This ensures that we will - // begin flushing on the next task the task throws an error. - index = index + 1; - queue[currentIndex].call(); - // Prevent leaking memory for long chains of recursive calls to `asap`. - // If we call `asap` within tasks scheduled by `asap`, the queue will - // grow, but to avoid an O(n) walk for every task we execute, we don't - // shift tasks off the queue after they have been executed. - // Instead, we periodically shift 1024 tasks off the queue. - if (index > capacity) { - // Manually shift all values starting at the index back to the - // beginning of the queue. - for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { - queue[scan] = queue[scan + index]; - } - queue.length -= index; - index = 0; - } - } - queue.length = 0; - index = 0; - flushing = false; -} - -// `requestFlush` is implemented using a strategy based on data collected from -// every available SauceLabs Selenium web driver worker at time of writing. -// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593 - -// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that -// have WebKitMutationObserver but not un-prefixed MutationObserver. -// Must use `global` or `self` instead of `window` to work in both frames and web -// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop. - -/* globals self */ -var scope = typeof global !== "undefined" ? global : self; -var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver; - -// MutationObservers are desirable because they have high priority and work -// reliably everywhere they are implemented. -// They are implemented in all modern browsers. -// -// - Android 4-4.3 -// - Chrome 26-34 -// - Firefox 14-29 -// - Internet Explorer 11 -// - iPad Safari 6-7.1 -// - iPhone Safari 7-7.1 -// - Safari 6-7 -if (typeof BrowserMutationObserver === "function") { - requestFlush = makeRequestCallFromMutationObserver(flush); - -// MessageChannels are desirable because they give direct access to the HTML -// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera -// 11-12, and in web workers in many engines. -// Although message channels yield to any queued rendering and IO tasks, they -// would be better than imposing the 4ms delay of timers. -// However, they do not work reliably in Internet Explorer or Safari. - -// Internet Explorer 10 is the only browser that has setImmediate but does -// not have MutationObservers. -// Although setImmediate yields to the browser's renderer, it would be -// preferrable to falling back to setTimeout since it does not have -// the minimum 4ms penalty. -// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and -// Desktop to a lesser extent) that renders both setImmediate and -// MessageChannel useless for the purposes of ASAP. -// https://github.com/kriskowal/q/issues/396 - -// Timers are implemented universally. -// We fall back to timers in workers in most engines, and in foreground -// contexts in the following browsers. -// However, note that even this simple case requires nuances to operate in a -// broad spectrum of browsers. -// -// - Firefox 3-13 -// - Internet Explorer 6-9 -// - iPad Safari 4.3 -// - Lynx 2.8.7 -} else { - requestFlush = makeRequestCallFromTimer(flush); -} - -// `requestFlush` requests that the high priority event queue be flushed as -// soon as possible. -// This is useful to prevent an error thrown in a task from stalling the event -// queue if the exception handled by Node.js’s -// `process.on("uncaughtException")` or by a domain. -rawAsap.requestFlush = requestFlush; - -// To request a high priority event, we induce a mutation observer by toggling -// the text of a text node between "1" and "-1". -function makeRequestCallFromMutationObserver(callback) { - var toggle = 1; - var observer = new BrowserMutationObserver(callback); - var node = document.createTextNode(""); - observer.observe(node, {characterData: true}); - return function requestCall() { - toggle = -toggle; - node.data = toggle; - }; -} - -// The message channel technique was discovered by Malte Ubl and was the -// original foundation for this library. -// http://www.nonblocking.io/2011/06/windownexttick.html - -// Safari 6.0.5 (at least) intermittently fails to create message ports on a -// page's first load. Thankfully, this version of Safari supports -// MutationObservers, so we don't need to fall back in that case. - -// function makeRequestCallFromMessageChannel(callback) { -// var channel = new MessageChannel(); -// channel.port1.onmessage = callback; -// return function requestCall() { -// channel.port2.postMessage(0); -// }; -// } - -// For reasons explained above, we are also unable to use `setImmediate` -// under any circumstances. -// Even if we were, there is another bug in Internet Explorer 10. -// It is not sufficient to assign `setImmediate` to `requestFlush` because -// `setImmediate` must be called *by name* and therefore must be wrapped in a -// closure. -// Never forget. - -// function makeRequestCallFromSetImmediate(callback) { -// return function requestCall() { -// setImmediate(callback); -// }; -// } - -// Safari 6.0 has a problem where timers will get lost while the user is -// scrolling. This problem does not impact ASAP because Safari 6.0 supports -// mutation observers, so that implementation is used instead. -// However, if we ever elect to use timers in Safari, the prevalent work-around -// is to add a scroll event listener that calls for a flush. - -// `setTimeout` does not call the passed callback if the delay is less than -// approximately 7 in web workers in Firefox 8 through 18, and sometimes not -// even then. - -function makeRequestCallFromTimer(callback) { - return function requestCall() { - // We dispatch a timeout with a specified delay of 0 for engines that - // can reliably accommodate that request. This will usually be snapped - // to a 4 milisecond delay, but once we're flushing, there's no delay - // between events. - var timeoutHandle = setTimeout(handleTimer, 0); - // However, since this timer gets frequently dropped in Firefox - // workers, we enlist an interval handle that will try to fire - // an event 20 times per second until it succeeds. - var intervalHandle = setInterval(handleTimer, 50); - - function handleTimer() { - // Whichever timer succeeds will cancel both timers and - // execute the callback. - clearTimeout(timeoutHandle); - clearInterval(intervalHandle); - callback(); - } - }; -} - -// This is for `asap.js` only. -// Its name will be periodically randomized to break any code that depends on -// its existence. -rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer; - -// ASAP was originally a nextTick shim included in Q. This was factored out -// into this ASAP package. It was later adapted to RSVP which made further -// amendments. These decisions, particularly to marginalize MessageChannel and -// to capture the MutationObserver implementation in a closure, were integrated -// back into ASAP proper. -// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js diff --git a/node_modules/asap/package.json b/node_modules/asap/package.json deleted file mode 100644 index ae9f303bcd15d..0000000000000 --- a/node_modules/asap/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "asap", - "version": "2.0.6", - "description": "High-priority task queue for Node.js and browsers", - "keywords": [ - "event", - "task", - "queue" - ], - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/kriskowal/asap.git" - }, - "main": "./asap.js", - "browser": { - "./asap": "./browser-asap.js", - "./asap.js": "./browser-asap.js", - "./raw": "./browser-raw.js", - "./raw.js": "./browser-raw.js", - "./test/domain.js": "./test/browser-domain.js" - }, - "react-native": { - "domain": false - }, - "files": [ - "raw.js", - "asap.js", - "browser-raw.js", - "browser-asap.js" - ], - "scripts": { - "test": "npm run lint && npm run test-node", - "test-travis": "npm run lint && npm run test-node && npm run test-saucelabs && npm run test-saucelabs-worker", - "test-node": "node test/asap-test.js", - "test-publish": "node scripts/publish-bundle.js test/asap-test.js | pbcopy", - "test-browser": "node scripts/publish-bundle.js test/asap-test.js | xargs opener", - "test-saucelabs": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-spot-configurations.json", - "test-saucelabs-all": "node scripts/saucelabs.js test/asap-test.js scripts/saucelabs-all-configurations.json", - "test-saucelabs-worker": "node scripts/saucelabs-worker-test.js scripts/saucelabs-spot-configurations.json", - "test-saucelabs-worker-all": "node scripts/saucelabs-worker-test.js scripts/saucelabs-all-configurations.json", - "lint": "jshint raw.js asap.js browser-raw.js browser-asap.js $(find scripts -name '*.js' | grep -v gauntlet)", - "benchmarks": "node benchmarks" - }, - "devDependencies": { - "events": "^1.0.1", - "jshint": "^2.5.1", - "knox": "^0.8.10", - "mr": "^2.0.5", - "opener": "^1.3.0", - "q": "^2.0.3", - "q-io": "^2.0.3", - "saucelabs": "^0.1.1", - "wd": "^0.2.21", - "weak-map": "^1.0.5", - "benchmark": "^1.0.0" - } -} diff --git a/node_modules/asap/raw.js b/node_modules/asap/raw.js deleted file mode 100644 index ae3b892316842..0000000000000 --- a/node_modules/asap/raw.js +++ /dev/null @@ -1,101 +0,0 @@ -"use strict"; - -var domain; // The domain module is executed on demand -var hasSetImmediate = typeof setImmediate === "function"; - -// Use the fastest means possible to execute a task in its own turn, with -// priority over other events including network IO events in Node.js. -// -// An exception thrown by a task will permanently interrupt the processing of -// subsequent tasks. The higher level `asap` function ensures that if an -// exception is thrown by a task, that the task queue will continue flushing as -// soon as possible, but if you use `rawAsap` directly, you are responsible to -// either ensure that no exceptions are thrown from your task, or to manually -// call `rawAsap.requestFlush` if an exception is thrown. -module.exports = rawAsap; -function rawAsap(task) { - if (!queue.length) { - requestFlush(); - flushing = true; - } - // Avoids a function call - queue[queue.length] = task; -} - -var queue = []; -// Once a flush has been requested, no further calls to `requestFlush` are -// necessary until the next `flush` completes. -var flushing = false; -// The position of the next task to execute in the task queue. This is -// preserved between calls to `flush` so that it can be resumed if -// a task throws an exception. -var index = 0; -// If a task schedules additional tasks recursively, the task queue can grow -// unbounded. To prevent memory excaustion, the task queue will periodically -// truncate already-completed tasks. -var capacity = 1024; - -// The flush function processes all tasks that have been scheduled with -// `rawAsap` unless and until one of those tasks throws an exception. -// If a task throws an exception, `flush` ensures that its state will remain -// consistent and will resume where it left off when called again. -// However, `flush` does not make any arrangements to be called again if an -// exception is thrown. -function flush() { - while (index < queue.length) { - var currentIndex = index; - // Advance the index before calling the task. This ensures that we will - // begin flushing on the next task the task throws an error. - index = index + 1; - queue[currentIndex].call(); - // Prevent leaking memory for long chains of recursive calls to `asap`. - // If we call `asap` within tasks scheduled by `asap`, the queue will - // grow, but to avoid an O(n) walk for every task we execute, we don't - // shift tasks off the queue after they have been executed. - // Instead, we periodically shift 1024 tasks off the queue. - if (index > capacity) { - // Manually shift all values starting at the index back to the - // beginning of the queue. - for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) { - queue[scan] = queue[scan + index]; - } - queue.length -= index; - index = 0; - } - } - queue.length = 0; - index = 0; - flushing = false; -} - -rawAsap.requestFlush = requestFlush; -function requestFlush() { - // Ensure flushing is not bound to any domain. - // It is not sufficient to exit the domain, because domains exist on a stack. - // To execute code outside of any domain, the following dance is necessary. - var parentDomain = process.domain; - if (parentDomain) { - if (!domain) { - // Lazy execute the domain module. - // Only employed if the user elects to use domains. - domain = require("domain"); - } - domain.active = process.domain = null; - } - - // `setImmediate` is slower that `process.nextTick`, but `process.nextTick` - // cannot handle recursion. - // `requestFlush` will only be called recursively from `asap.js`, to resume - // flushing after an error is thrown into a domain. - // Conveniently, `setImmediate` was introduced in the same version - // `process.nextTick` started throwing recursion errors. - if (flushing && hasSetImmediate) { - setImmediate(flush); - } else { - process.nextTick(flush); - } - - if (parentDomain) { - domain.active = process.domain = parentDomain; - } -} diff --git a/node_modules/cacache/lib/entry-index.js b/node_modules/cacache/lib/entry-index.js index e81ef525a778d..add15e3a22a32 100644 --- a/node_modules/cacache/lib/entry-index.js +++ b/node_modules/cacache/lib/entry-index.js @@ -17,7 +17,7 @@ const uniqueFilename = require('unique-filename') const contentPath = require('./content/path') const hashToSegments = require('./util/hash-to-segments') const indexV = require('../package.json')['cache-version'].index -const moveFile = require('@npmcli/move-file') +const { moveFile } = require('@npmcli/fs') module.exports.NotFoundError = class NotFoundError extends Error { constructor (cache, key) { diff --git a/node_modules/cacache/lib/util/move-file.js b/node_modules/cacache/lib/util/move-file.js index 2d4de41cf8f91..eb3ba76107cd7 100644 --- a/node_modules/cacache/lib/util/move-file.js +++ b/node_modules/cacache/lib/util/move-file.js @@ -1,7 +1,7 @@ 'use strict' const fs = require('fs/promises') -const move = require('@npmcli/move-file') +const { moveFile: move } = require('@npmcli/fs') const pinflight = require('promise-inflight') module.exports = moveFile diff --git a/node_modules/cacache/package.json b/node_modules/cacache/package.json index ab5f13a027173..db6778ed4c038 100644 --- a/node_modules/cacache/package.json +++ b/node_modules/cacache/package.json @@ -1,6 +1,6 @@ { "name": "cacache", - "version": "17.0.1", + "version": "17.0.2", "cache-version": { "content": "2", "index": "5" @@ -45,8 +45,7 @@ ], "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.0.0", - "@npmcli/move-file": "^3.0.0", + "@npmcli/fs": "^3.1.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "lru-cache": "^7.7.1", @@ -62,7 +61,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.5.1", + "@npmcli/template-oss": "4.8.0", "tap": "^16.0.0" }, "engines": { @@ -71,7 +70,7 @@ "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", "windowsCI": false, - "version": "4.5.1" + "version": "4.8.0" }, "author": "GitHub Inc.", "tap": { diff --git a/node_modules/debuglog/LICENSE b/node_modules/debuglog/LICENSE deleted file mode 100644 index a3187cc10022f..0000000000000 --- a/node_modules/debuglog/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright Joyent, Inc. and other Node contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/node_modules/debuglog/debuglog.js b/node_modules/debuglog/debuglog.js deleted file mode 100644 index 748fd72a1a68f..0000000000000 --- a/node_modules/debuglog/debuglog.js +++ /dev/null @@ -1,22 +0,0 @@ -var util = require('util'); - -module.exports = (util && util.debuglog) || debuglog; - -var debugs = {}; -var debugEnviron = process.env.NODE_DEBUG || ''; - -function debuglog(set) { - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = util.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } - } - return debugs[set]; -}; diff --git a/node_modules/debuglog/package.json b/node_modules/debuglog/package.json deleted file mode 100644 index e51ecc95f11b5..0000000000000 --- a/node_modules/debuglog/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "debuglog", - "version": "1.0.1", - "description": "backport of util.debuglog from node v0.11", - "license": "MIT", - "main": "debuglog.js", - "repository": { - "type": "git", - "url": "https://github.com/sam-github/node-debuglog.git" - }, - "author": { - "name": "Sam Roberts", - "email": "sam@strongloop.com" - }, - "engines": { - "node": "*" - }, - "browser": { - "util": false - } -} diff --git a/node_modules/dezalgo/LICENSE b/node_modules/dezalgo/LICENSE deleted file mode 100644 index 19129e315fe59..0000000000000 --- a/node_modules/dezalgo/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/dezalgo/dezalgo.js b/node_modules/dezalgo/dezalgo.js deleted file mode 100644 index 04fd3ba78146d..0000000000000 --- a/node_modules/dezalgo/dezalgo.js +++ /dev/null @@ -1,22 +0,0 @@ -var wrappy = require('wrappy') -module.exports = wrappy(dezalgo) - -var asap = require('asap') - -function dezalgo (cb) { - var sync = true - asap(function () { - sync = false - }) - - return function zalgoSafe() { - var args = arguments - var me = this - if (sync) - asap(function() { - cb.apply(me, args) - }) - else - cb.apply(me, args) - } -} diff --git a/node_modules/dezalgo/package.json b/node_modules/dezalgo/package.json deleted file mode 100644 index f8ba8ec2b6b7a..0000000000000 --- a/node_modules/dezalgo/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "dezalgo", - "version": "1.0.4", - "description": "Contain async insanity so that the dark pony lord doesn't eat souls", - "main": "dezalgo.js", - "files": [ - "dezalgo.js" - ], - "directories": { - "test": "test" - }, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - }, - "devDependencies": { - "tap": "^12.4.0" - }, - "scripts": { - "test": "tap test/*.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/npm/dezalgo" - }, - "keywords": [ - "async", - "zalgo", - "the dark pony", - "he comes", - "asynchrony of all holy and good", - "To invoke the hive mind representing chaos", - "Invoking the feeling of chaos. /Without order", - "The Nezperdian Hive Mind of Chaos, (zalgo………………)", - "He who waits beyond the wall", - "ZALGO", - "HE COMES", - "there used to be some funky unicode keywords here, but it broke the npm website on chrome, so they were removed, sorry" - ], - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "bugs": { - "url": "https://github.com/npm/dezalgo/issues" - }, - "homepage": "https://github.com/npm/dezalgo" -} diff --git a/node_modules/readdir-scoped-modules/LICENSE b/node_modules/readdir-scoped-modules/LICENSE deleted file mode 100644 index 19129e315fe59..0000000000000 --- a/node_modules/readdir-scoped-modules/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/readdir-scoped-modules/package.json b/node_modules/readdir-scoped-modules/package.json deleted file mode 100644 index d41b99c2643a2..0000000000000 --- a/node_modules/readdir-scoped-modules/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "readdir-scoped-modules", - "version": "1.1.0", - "description": "Like `fs.readdir` but handling `@org/module` dirs as if they were a single entry.", - "main": "readdir.js", - "directories": { - "test": "test" - }, - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - }, - "devDependencies": { - "tap": "^1.2.0" - }, - "scripts": { - "test": "tap test/*.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/npm/readdir-scoped-modules" - }, - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "license": "ISC", - "bugs": { - "url": "https://github.com/npm/readdir-scoped-modules/issues" - }, - "homepage": "https://github.com/npm/readdir-scoped-modules", - "files": [ - "readdir.js" - ] -} diff --git a/node_modules/readdir-scoped-modules/readdir.js b/node_modules/readdir-scoped-modules/readdir.js deleted file mode 100644 index 806d787051852..0000000000000 --- a/node_modules/readdir-scoped-modules/readdir.js +++ /dev/null @@ -1,121 +0,0 @@ -var fs = require ('graceful-fs') -var dz = require ('dezalgo') -var once = require ('once') -var path = require ('path') -var debug = require ('debuglog') ('rds') - -module . exports = readdir -readdir.sync = readdirSync - -function readdir (dir, cb) { - fs . readdir (dir, function (er, kids) { - if (er) - return cb (er) - - debug ('dir=%j, kids=%j', dir, kids) - readScopes (dir, kids, function (er, data) { - if (er) - return cb (er) - - // Sort for bonus consistency points - data = data . sort (function (a, b) { - return a > b ? 1 : -1 - }) - - return cb (null, data) - }) - }) -} - -function readdirSync (dir) { - var kids = fs . readdirSync (dir) - debug ('dir=%j, kids=%j', dir, kids) - var data = readScopesSync (dir, kids) - // Sort for bonus consistency points - data = data . sort (function (a, b) { - return a > b ? 1 : -1 - }) - - return data -} - -// Turn [ 'a', '@scope' ] into -// ['a', '@scope/foo', '@scope/bar'] -function readScopes (root, kids, cb) { - var scopes = kids . filter (function (kid) { - return kid . charAt (0) === '@' - }) - - kids = kids . filter (function (kid) { - return kid . charAt (0) !== '@' - }) - - debug ('scopes=%j', scopes) - - if (scopes . length === 0) - dz (cb) (null, kids) // prevent maybe-sync zalgo release - - cb = once (cb) - var l = scopes . length - scopes . forEach (function (scope) { - var scopedir = path . resolve (root, scope) - debug ('root=%j scope=%j scopedir=%j', root, scope, scopedir) - fs . readdir (scopedir, then . bind (null, scope)) - }) - - function then (scope, er, scopekids) { - if (er) - return cb (er) - - // XXX: Not sure how old this node bug is. Maybe superstition? - scopekids = scopekids . filter (function (scopekid) { - return !(scopekid === '.' || scopekid === '..' || !scopekid) - }) - - kids . push . apply (kids, scopekids . map (function (scopekid) { - return scope + '/' + scopekid - })) - - debug ('scope=%j scopekids=%j kids=%j', scope, scopekids, kids) - - if (--l === 0) - cb (null, kids) - } -} - -function readScopesSync (root, kids) { - var scopes = kids . filter (function (kid) { - return kid . charAt (0) === '@' - }) - - kids = kids . filter (function (kid) { - return kid . charAt (0) !== '@' - }) - - debug ('scopes=%j', scopes) - - if (scopes . length === 0) - return kids - - var l = scopes . length - scopes . forEach (function (scope) { - var scopedir = path . resolve (root, scope) - debug ('root=%j scope=%j scopedir=%j', root, scope, scopedir) - then (scope, fs . readdirSync (scopedir)) - }) - - function then (scope, scopekids) { - // XXX: Not sure how old this node bug is. Maybe superstition? - scopekids = scopekids . filter (function (scopekid) { - return !(scopekid === '.' || scopekid === '..' || !scopekid) - }) - - kids . push . apply (kids, scopekids . map (function (scopekid) { - return scope + '/' + scopekid - })) - - debug ('scope=%j scopekids=%j kids=%j', scope, scopekids, kids) - } - - return kids -} diff --git a/package-lock.json b/package-lock.json index 6376f40669081..0c995200daf81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "npm", - "version": "9.1.0", + "version": "9.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "npm", - "version": "9.1.0", + "version": "9.1.1", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -66,7 +66,6 @@ "read", "read-package-json", "read-package-json-fast", - "readdir-scoped-modules", "rimraf", "semver", "ssri", @@ -82,11 +81,12 @@ "workspaces": [ "docs", "smoke-tests", + "mock-registry", "workspaces/*" ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/ci-detect": "^3.0.1", "@npmcli/config": "^6.1.0", "@npmcli/map-workspaces": "^3.0.0", @@ -94,7 +94,7 @@ "@npmcli/run-script": "^6.0.0", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^17.0.1", + "cacache": "^17.0.2", "chalk": "^4.1.2", "cli-columns": "^4.0.0", "cli-table3": "^0.6.3", @@ -109,13 +109,13 @@ "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^3.0.0", "libnpmaccess": "^7.0.0", - "libnpmdiff": "^5.0.2", - "libnpmexec": "^5.0.2", - "libnpmfund": "^4.0.2", + "libnpmdiff": "^5.0.3", + "libnpmexec": "^5.0.3", + "libnpmfund": "^4.0.3", "libnpmhook": "^9.0.0", "libnpmorg": "^5.0.0", - "libnpmpack": "^5.0.2", - "libnpmpublish": "^7.0.2", + "libnpmpack": "^5.0.3", + "libnpmpublish": "^7.0.3", "libnpmsearch": "^6.0.0", "libnpmteam": "^5.0.0", "libnpmversion": "^4.0.1", @@ -143,7 +143,6 @@ "read": "~1.0.7", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.1", - "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", "semver": "^7.3.8", "ssri": "^10.0.0", @@ -162,13 +161,17 @@ "devDependencies": { "@npmcli/docs": "^1.0.0", "@npmcli/eslint-config": "^4.0.0", - "@npmcli/fs": "^3.0.0", + "@npmcli/fs": "^3.1.0", "@npmcli/git": "^4.0.1", + "@npmcli/mock-registry": "^1.0.0", "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "licensee": "^9.0.0", "nock": "^13.2.4", "npm-packlist": "^7.0.1", + "remark": "^14.0.2", + "remark-gfm": "^3.0.1", + "remark-github": "^11.2.4", "spawk": "^1.7.1", "tap": "^16.0.1" }, @@ -183,20 +186,41 @@ "devDependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", - "cmark-gfm": "^0.9.0", + "@npmcli/template-oss": "4.9.0", "front-matter": "^4.0.2", "ignore-walk": "^6.0.0", "jsdom": "^20.0.1", - "marked-man": "^0.7.0", "mkdirp": "^1.0.4", + "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-man": "^8.0.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", "tap": "^16.0.1", + "unified": "^10.1.2", "yaml": "^2.1.3" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "mock-registry": { + "name": "@npmcli/mock-registry", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@npmcli/arborist": "^6.1.1", + "@npmcli/eslint-config": "^4.0.1", + "@npmcli/template-oss": "4.9.0", + "nock": "^13.2.9", + "npm-package-arg": "^10.0.0", + "pacote": "^15.0.6", + "tap": "^16.3.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@actions/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz", @@ -242,30 +266,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz", - "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", + "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", - "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.2.tgz", + "integrity": "sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-compilation-targets": "^7.19.3", - "@babel/helper-module-transforms": "^7.19.0", - "@babel/helpers": "^7.19.0", - "@babel/parser": "^7.19.3", + "@babel/generator": "^7.20.2", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-module-transforms": "^7.20.2", + "@babel/helpers": "^7.20.1", + "@babel/parser": "^7.20.2", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.3", - "@babel/types": "^7.19.3", + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -290,12 +314,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.5.tgz", - "integrity": "sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.3.tgz", + "integrity": "sha512-Wl5ilw2UD1+ZYprHVprxHZJCFeBWlzZYOovE4SDYLZnqCOD11j+0QzNeEWKLLTWM7nixrZEh7vNIyb76MyJg3A==", "dev": true, "dependencies": { - "@babel/types": "^7.19.4", + "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -318,12 +342,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz", - "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", + "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.19.3", + "@babel/compat-data": "^7.20.0", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", "semver": "^6.3.0" @@ -391,31 +415,31 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", - "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", + "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz", - "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "dependencies": { - "@babel/types": "^7.19.4" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -461,14 +485,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz", - "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz", + "integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==", "dev": true, "dependencies": { "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.4", - "@babel/types": "^7.19.4" + "@babel/traverse": "^7.20.1", + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -560,9 +584,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.4.tgz", - "integrity": "sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==", + "version": "7.20.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -586,19 +610,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.4.tgz", - "integrity": "sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==", + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", + "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.4", + "@babel/generator": "^7.20.1", "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.4", - "@babel/types": "^7.19.4", + "@babel/parser": "^7.20.1", + "@babel/types": "^7.20.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -616,9 +640,9 @@ } }, "node_modules/@babel/types": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz", - "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", + "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", @@ -645,15 +669,15 @@ } }, "node_modules/@commitlint/cli": { - "version": "17.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.1.2.tgz", - "integrity": "sha512-h/4Hlka3bvCLbnxf0Er2ri5A44VMlbMSkdTRp8Adv2tRiklSTRIoPGs7OEXDv3EoDs2AAzILiPookgM4Gi7LOw==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.2.0.tgz", + "integrity": "sha512-kd1zykcrjIKyDRftWW1E1TJqkgzeosEkv1BiYPCdzkb/g/3BrfgwZUHR1vg+HO3qKUb/0dN+jNXArhGGAHpmaQ==", "dev": true, "dependencies": { "@commitlint/format": "^17.0.0", - "@commitlint/lint": "^17.1.0", - "@commitlint/load": "^17.1.2", - "@commitlint/read": "^17.1.0", + "@commitlint/lint": "^17.2.0", + "@commitlint/load": "^17.2.0", + "@commitlint/read": "^17.2.0", "@commitlint/types": "^17.0.0", "execa": "^5.0.0", "lodash": "^4.17.19", @@ -669,9 +693,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.1.0.tgz", - "integrity": "sha512-WU2p0c9/jLi8k2q2YrDV96Y8XVswQOceIQ/wyJvQxawJSCasLdRB3kUIYdNjOCJsxkpoUlV/b90ZPxp1MYZDiA==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.2.0.tgz", + "integrity": "sha512-g5hQqRa80f++SYS233dbDSg16YdyounMTAhVcmqtInNeY/GF3aA4st9SVtJxpeGrGmueMrU4L+BBb+6Vs5wrcg==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^5.0.0" @@ -729,9 +753,9 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.1.0.tgz", - "integrity": "sha512-JITWKDMHhIh8IpdIbcbuH9rEQJty1ZWelgjleTFrVRAcEwN/sPzk1aVUXRIZNXMJWbZj8vtXRJnFihrml8uECQ==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.2.0.tgz", + "integrity": "sha512-rgUPUQraHxoMLxiE8GK430HA7/R2vXyLcOT4fQooNrZq9ERutNrP6dw3gdKLkq22Nede3+gEHQYUzL4Wu75ndg==", "dev": true, "dependencies": { "@commitlint/types": "^17.0.0", @@ -769,14 +793,14 @@ } }, "node_modules/@commitlint/lint": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.1.0.tgz", - "integrity": "sha512-ltpqM2ogt/+SDhUaScFo0MdscncEF96lvQTPMM/VTTWlw7sTGLLWkOOppsee2MN/uLNNWjQ7kqkd4h6JqoM9AQ==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.2.0.tgz", + "integrity": "sha512-N2oLn4Dj672wKH5qJ4LGO+73UkYXGHO+NTVUusGw83SjEv7GjpqPGKU6KALW2kFQ/GsDefSvOjpSi3CzWHQBDg==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^17.1.0", - "@commitlint/parse": "^17.0.0", - "@commitlint/rules": "^17.0.0", + "@commitlint/is-ignored": "^17.2.0", + "@commitlint/parse": "^17.2.0", + "@commitlint/rules": "^17.2.0", "@commitlint/types": "^17.0.0" }, "engines": { @@ -784,9 +808,9 @@ } }, "node_modules/@commitlint/load": { - "version": "17.1.2", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.1.2.tgz", - "integrity": "sha512-sk2p/jFYAWLChIfOIp/MGSIn/WzZ0vkc3afw+l4X8hGEYkvDe4gQUUAVxjl/6xMRn0HgnSLMZ04xXh5pkTsmgg==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.2.0.tgz", + "integrity": "sha512-HDD57qSqNrk399R4TIjw31AWBG8dBjNj1MrDKZKmC/wvimtnIFlqzcu1+sxfXIOHj/+M6tcMWDtvknGUd7SU+g==", "dev": true, "dependencies": { "@commitlint/config-validator": "^17.1.0", @@ -807,18 +831,18 @@ } }, "node_modules/@commitlint/message": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.0.0.tgz", - "integrity": "sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.2.0.tgz", + "integrity": "sha512-/4l2KFKxBOuoEn1YAuuNNlAU05Zt7sNsC9H0mPdPm3chOrT4rcX0pOqrQcLtdMrMkJz0gC7b3SF80q2+LtdL9Q==", "dev": true, "engines": { "node": ">=v14" } }, "node_modules/@commitlint/parse": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.0.0.tgz", - "integrity": "sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.2.0.tgz", + "integrity": "sha512-vLzLznK9Y21zQ6F9hf8D6kcIJRb2haAK5T/Vt1uW2CbHYOIfNsR/hJs0XnF/J9ctM20Tfsqv4zBitbYvVw7F6Q==", "dev": true, "dependencies": { "@commitlint/types": "^17.0.0", @@ -830,9 +854,9 @@ } }, "node_modules/@commitlint/read": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.1.0.tgz", - "integrity": "sha512-73BoFNBA/3Ozo2JQvGsE0J8SdrJAWGfZQRSHqvKaqgmY042Su4gXQLqvAzgr55S9DI1l9TiU/5WDuh8IE86d/g==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.2.0.tgz", + "integrity": "sha512-bbblBhrHkjxra3ptJNm0abxu7yeAaxumQ8ZtD6GIVqzURCETCP7Dm0tlVvGRDyXBuqX6lIJxh3W7oyKqllDsHQ==", "dev": true, "dependencies": { "@commitlint/top-level": "^17.0.0", @@ -863,13 +887,13 @@ } }, "node_modules/@commitlint/rules": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.0.0.tgz", - "integrity": "sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.2.0.tgz", + "integrity": "sha512-1YynwD4Eh7HXZNpqG8mtUlL2pSX2jBy61EejYJv4ooZPcg50Ak7LPOyD3a9UZnsE76AXWFBz+yo9Hv4MIpAa0Q==", "dev": true, "dependencies": { "@commitlint/ensure": "^17.0.0", - "@commitlint/message": "^17.0.0", + "@commitlint/message": "^17.2.0", "@commitlint/to-lines": "^17.0.0", "@commitlint/types": "^17.0.0", "execa": "^5.0.0" @@ -1017,17 +1041,16 @@ }, "node_modules/@gar/promisify": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "inBundle": true + "inBundle": true, + "license": "MIT" }, "node_modules/@google-automations/git-file-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@google-automations/git-file-utils/-/git-file-utils-1.2.1.tgz", - "integrity": "sha512-gI3YQg5tYHPEc1aeOuNoCSOQEptbRH7+vc2rxLaq5z854667ev4Mw19mCyi/fh5/DDzomKh3569SshD0dgtnDA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@google-automations/git-file-utils/-/git-file-utils-1.2.2.tgz", + "integrity": "sha512-UGZypVMDGFJjVCVHI5yqZsqZtaTJoYVyZJ9IJ1sF02Hh0QbDCJHPmPXUpKnPWt9NG51U4ws+K56c1d8s+omvFw==", "dev": true, "dependencies": { - "@octokit/rest": "19.0.4", + "@octokit/rest": "19.0.5", "@octokit/types": "^7.5.1", "minimatch": "^5.1.0" }, @@ -1035,16 +1058,31 @@ "node": ">= 14" } }, + "node_modules/@google-automations/git-file-utils/node_modules/@octokit/openapi-types": { + "version": "13.13.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.13.1.tgz", + "integrity": "sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ==", + "dev": true + }, + "node_modules/@google-automations/git-file-utils/node_modules/@octokit/types": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.5.1.tgz", + "integrity": "sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^13.11.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz", - "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==", + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", "dev": true, "peer": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" @@ -1256,9 +1294,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.16", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.16.tgz", - "integrity": "sha512-LCQ+NeThyJ4k1W2d+vIKdxuSt9R3pQSZ4P92m7EakaYuXcVWbHuT5bjNcqLd4Rdgi6xYWYDvBJZJLZSLanjDcA==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", @@ -2043,9 +2081,8 @@ }, "node_modules/@npmcli/ci-detect": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-3.0.1.tgz", - "integrity": "sha512-zQ/qTg2eWnGDToPZH5n7FggNlGC2OYWl6TZv/kDZrTttpm3y2bBcybXSIjlr1ne/ecVp4/vmRNxZP7qTMZo90g==", "inBundle": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -2056,8 +2093,7 @@ }, "node_modules/@npmcli/disparity-colors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz", - "integrity": "sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg==", + "license": "ISC", "dependencies": { "ansi-styles": "^4.3.0" }, @@ -2070,12 +2106,12 @@ "link": true }, "node_modules/@npmcli/eslint-config": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-4.0.0.tgz", - "integrity": "sha512-k89vNnv2BcTRRHZhVz18p4S5bLSEyFQAZ+yiPWIiY3CjB8jq+5uyyVZJpt2yScMi57ho9mjZMjsvu1dUIeEdZw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-4.0.1.tgz", + "integrity": "sha512-bHsOOLO2UiMb8G4Q968VJjlO4QWXf3SivgN/rQKsbzcS37S7aFWwPph3PwBaTF6O0OlUvjLiM1mzXlz/1jGV9Q==", "dev": true, "dependencies": { - "which": "^2.0.2" + "which": "^3.0.0" }, "bin": { "lint": "bin/index.js" @@ -2090,25 +2126,10 @@ "eslint-plugin-promise": "^6.0.0" } }, - "node_modules/@npmcli/eslint-config/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@npmcli/fs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.0.0.tgz", - "integrity": "sha512-GdeVD+dnBxzMslTFvnctLX5yIqV4ZNZBWNbo1OejQ++bZpnFNQ1AjOn9Sboi+LzheQbCBU1ts1mhEVduHrcZOQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "inBundle": true, "dependencies": { "semver": "^7.3.5" @@ -2119,9 +2140,8 @@ }, "node_modules/@npmcli/git": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.0.3.tgz", - "integrity": "sha512-8cXNkDIbnXPVbhXMmQ7/bklCAjtmPaXfI9aEM4iH+xSuEHINLMHhlfESvVwdqmHJRJkR48vNJTSUvoF6GRPSFA==", "inBundle": true, + "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^6.0.0", "lru-cache": "^7.4.4", @@ -2139,9 +2159,8 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.1.tgz", - "integrity": "sha512-GIykAFdOVK31Q1/zAtT5MbxqQL2vyl9mvFJv+OGu01zxbhL3p0xc8gJjdNGX1mWmUT43aEKVO2L6V/2j4TOsAA==", "inBundle": true, + "license": "ISC", "dependencies": { "npm-bundled": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -2155,9 +2174,8 @@ }, "node_modules/@npmcli/map-workspaces": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.0.tgz", - "integrity": "sha512-aaEDwQ+fUH80iNYSDAcKv9lxIFWsgGkLjIPZENyep75hKeAk2CfSbCAZ6IHDDrVlNybvvNmlFjPap6GdTz9cCw==", "inBundle": true, + "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^1.0.1", "glob": "^8.0.1", @@ -2170,8 +2188,7 @@ }, "node_modules/@npmcli/metavuln-calculator": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.0.tgz", - "integrity": "sha512-BBFQx4M12wiEuVwCgtX/Depx0B/+NHMwDWOlXT41/Pdy5W/1Fenk+hibUlMSrFWwASbX+fY90UbILAEIYH02/A==", + "license": "ISC", "dependencies": { "cacache": "^17.0.0", "json-parse-even-better-errors": "^3.0.0", @@ -2182,18 +2199,9 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/move-file": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-3.0.0.tgz", - "integrity": "sha512-mOUBUIXsqAQBfn87vGIjBAve6JmD9PkP9Vdq2SayDqQh2Ol60hnXaBSvT4V6IQiho1otw6SipnVV1fulvOiyKQ==", - "inBundle": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "node_modules/@npmcli/mock-registry": { + "resolved": "mock-registry", + "link": true }, "node_modules/@npmcli/name-from-folder": { "version": "1.0.1", @@ -2202,18 +2210,16 @@ }, "node_modules/@npmcli/node-gyp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "inBundle": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/package-json": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-3.0.0.tgz", - "integrity": "sha512-NnuPuM97xfiCpbTEJYtEuKz6CFbpUHtaT0+5via5pQeI25omvQDFbp1GcGJ/c4zvL/WX0qbde6YiLgfZbWFgvg==", "inBundle": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0" }, @@ -2223,9 +2229,8 @@ }, "node_modules/@npmcli/promise-spawn": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.1.tgz", - "integrity": "sha512-+hcUpxgx0vEpDJI9Cn+lkTdKLoqKBXFCVps5H7FujEU2vLOp6KwqjLlxbnz8Wzgm8oEqW/u5FeNAXSFjLdCD0A==", "inBundle": true, + "license": "ISC", "dependencies": { "which": "^3.0.0" }, @@ -2235,8 +2240,7 @@ }, "node_modules/@npmcli/query": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.0.0.tgz", - "integrity": "sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA==", + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -2246,9 +2250,8 @@ }, "node_modules/@npmcli/run-script": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.0.tgz", - "integrity": "sha512-ql+AbRur1TeOdl1FY+RAwGW9fcr4ZwiVKabdvm93mujGREVuVLbdkXRJDrkTXSdCjaxYydr1wlA2v67jxWG5BQ==", "inBundle": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", "@npmcli/promise-spawn": "^6.0.0", @@ -2260,10 +2263,14 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/@npmcli/smoke-tests": { + "resolved": "smoke-tests", + "link": true + }, "node_modules/@npmcli/template-oss": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.8.0.tgz", - "integrity": "sha512-rNTVjPGiqv4UCMt8eb98AQAlik5tGIoBziJnZXGxyQ+0QWs4rOdv71DsSHFAkS6cG6/I/Mfp4JFs8bkG+8d9cQ==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.9.0.tgz", + "integrity": "sha512-zfo9e5bGLXf3GAF2TWDIKBlTjP3zR578nKkCaYTFnw00TwEMjjHzNFskbJNNdBXqW9Lc7BH246LCrhYikmYlCQ==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -2301,28 +2308,28 @@ } }, "node_modules/@octokit/auth-token": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.1.tgz", - "integrity": "sha512-/USkK4cioY209wXRpund6HZzHo9GmjakpV9ycOkpMcMxMk7QVcVFVyCMtzvXYiHsB2crgDgrtNYSELYFBXhhaA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", + "integrity": "sha512-pq7CwIMV1kmzkFTimdwjAINCXKTajZErLB4wMLYapR2nuB/Jpr66+05wOTZMSCBXP6n4DdDWT2W19Bm17vU69Q==", "dev": true, "dependencies": { - "@octokit/types": "^7.0.0" + "@octokit/types": "^8.0.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/core": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.5.tgz", - "integrity": "sha512-4R3HeHTYVHCfzSAi0C6pbGXV8UDI5Rk+k3G7kLVNckswN9mvpOzW9oENfjfH3nEmzg8y3AmKmzs8Sg6pLCeOCA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.1.0.tgz", + "integrity": "sha512-Czz/59VefU+kKDy+ZfDwtOIYIkFjExOKf+HA92aiTZJ6EfWpFzYQWw0l54ji8bVmyhc+mGaLUbSUmXazG7z5OQ==", "dev": true, "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", "@octokit/request": "^6.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^7.0.0", + "@octokit/types": "^8.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -2331,12 +2338,12 @@ } }, "node_modules/@octokit/endpoint": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.2.tgz", - "integrity": "sha512-8/AUACfE9vpRpehE6ZLfEtzkibe5nfsSwFZVMsG8qabqRt1M81qZYUFRZa1B8w8lP6cdfDJfRq9HWS+MbmR7tw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.3.tgz", + "integrity": "sha512-57gRlb28bwTsdNXq+O3JTQ7ERmBTuik9+LelgcLIVfYwf235VHbN9QNo4kXExtp/h8T423cR5iJThKtFYxC7Lw==", "dev": true, "dependencies": { - "@octokit/types": "^7.0.0", + "@octokit/types": "^8.0.0", "is-plain-object": "^5.0.0", "universal-user-agent": "^6.0.0" }, @@ -2345,13 +2352,13 @@ } }, "node_modules/@octokit/graphql": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.1.tgz", - "integrity": "sha512-sxmnewSwAixkP1TrLdE6yRG53eEhHhDTYUykUwdV9x8f91WcbhunIHk9x1PZLALdBZKRPUO2HRcm4kezZ79HoA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.4.tgz", + "integrity": "sha512-amO1M5QUQgYQo09aStR/XO7KAl13xpigcy/kI8/N1PnZYSS69fgte+xA4+c2DISKqUZfsh0wwjc2FaCt99L41A==", "dev": true, "dependencies": { "@octokit/request": "^6.0.0", - "@octokit/types": "^7.0.0", + "@octokit/types": "^8.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2359,18 +2366,18 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "13.13.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.13.1.tgz", - "integrity": "sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz", - "integrity": "sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-5.0.1.tgz", + "integrity": "sha512-7A+rEkS70pH36Z6JivSlR7Zqepz3KVucEFVDnSrgHXzG7WLAzYwcHZbKdfTXHwuTHbkT1vKvz7dHl1+HNf6Qyw==", "dev": true, "dependencies": { - "@octokit/types": "^7.5.0" + "@octokit/types": "^8.0.0" }, "engines": { "node": ">= 14" @@ -2389,12 +2396,12 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.6.2.tgz", - "integrity": "sha512-n9dL5KMpz9qVFSNdcVWC8ZPbl68QbTk7+CMPXCXqaMZOLn1n1YuoSFFCy84Ge0fx333fUqpnBHv8BFjwGtUQkA==", + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.7.0.tgz", + "integrity": "sha512-orxQ0fAHA7IpYhG2flD2AygztPlGYNAdlzYz8yrD8NDgelPfOYoRPROfEyIe035PlxvbYrgkfUZIhSBKju/Cvw==", "dev": true, "dependencies": { - "@octokit/types": "^7.5.0", + "@octokit/types": "^8.0.0", "deprecation": "^2.3.1" }, "engines": { @@ -2405,14 +2412,14 @@ } }, "node_modules/@octokit/request": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.1.tgz", - "integrity": "sha512-gYKRCia3cpajRzDSU+3pt1q2OcuC6PK8PmFIyxZDWCzRXRSIBH8jXjFJ8ZceoygBIm0KsEUg4x1+XcYBz7dHPQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.2.tgz", + "integrity": "sha512-6VDqgj0HMc2FUX2awIs+sM6OwLgwHvAi4KCK3mT2H2IKRt6oH9d0fej5LluF5mck1lRR/rFWN0YIDSYXYSylbw==", "dev": true, "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", - "@octokit/types": "^7.0.0", + "@octokit/types": "^8.0.0", "is-plain-object": "^5.0.0", "node-fetch": "^2.6.7", "universal-user-agent": "^6.0.0" @@ -2422,12 +2429,12 @@ } }, "node_modules/@octokit/request-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.1.tgz", - "integrity": "sha512-ym4Bp0HTP7F3VFssV88WD1ZyCIRoE8H35pXSKwLeMizcdZAYc/t6N9X9Yr9n6t3aG9IH75XDnZ6UeZph0vHMWQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.2.tgz", + "integrity": "sha512-WMNOFYrSaX8zXWoJg9u/pKgWPo94JXilMLb2VManNOby9EZxrQaBe/QSC4a1TzpAlpxofg2X/jMnCyZgL6y7eg==", "dev": true, "dependencies": { - "@octokit/types": "^7.0.0", + "@octokit/types": "^8.0.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -2436,27 +2443,27 @@ } }, "node_modules/@octokit/rest": { - "version": "19.0.4", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz", - "integrity": "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==", + "version": "19.0.5", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.5.tgz", + "integrity": "sha512-+4qdrUFq2lk7Va+Qff3ofREQWGBeoTKNqlJO+FGjFP35ZahP+nBenhZiGdu8USSgmq4Ky3IJ/i4u0xbLqHaeow==", "dev": true, "dependencies": { - "@octokit/core": "^4.0.0", - "@octokit/plugin-paginate-rest": "^4.0.0", + "@octokit/core": "^4.1.0", + "@octokit/plugin-paginate-rest": "^5.0.0", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^6.0.0" + "@octokit/plugin-rest-endpoint-methods": "^6.7.0" }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/types": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.5.1.tgz", - "integrity": "sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.0.0.tgz", + "integrity": "sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^13.11.0" + "@octokit/openapi-types": "^14.0.0" } }, "node_modules/@tootallnate/once": { @@ -2491,6 +2498,24 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", + "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -2498,16 +2523,31 @@ "dev": true, "peer": true }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, "node_modules/@types/node": { - "version": "14.18.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.32.tgz", - "integrity": "sha512-Y6S38pFr04yb13qqHf8uk1nHE3lXgQ30WZbv1mLliV9pt0NjvqdWttLcrOYLnXbOafknVYRHZGoMSpR9UwfYow==", + "version": "14.18.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.33.tgz", + "integrity": "sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -2550,9 +2590,9 @@ "dev": true }, "node_modules/@xmldom/xmldom": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz", - "integrity": "sha512-Lv2vySXypg4nfa51LY1nU8yDAGo/5YwF+EY/rUZgIbfvwVARcd67ttCM8SMsTeJy51YhHYavEq+FS6R0hW9PFQ==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", + "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -2566,18 +2606,16 @@ }, "node_modules/abbrev": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "inBundle": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "inBundle": true, + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -2586,9 +2624,9 @@ } }, "node_modules/acorn": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", - "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2737,9 +2775,8 @@ }, "node_modules/are-we-there-yet": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz", - "integrity": "sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw==", "inBundle": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^4.1.0" @@ -2750,8 +2787,6 @@ }, "node_modules/are-we-there-yet/node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -2767,6 +2802,7 @@ } ], "inBundle": true, + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -2774,9 +2810,8 @@ }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", - "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", "inBundle": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -2834,26 +2869,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -2874,7 +2899,7 @@ }, "node_modules/asap": { "version": "2.0.6", - "inBundle": true, + "dev": true, "license": "MIT" }, "node_modules/async-hook-domain": { @@ -2910,6 +2935,16 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "inBundle": true, @@ -2917,8 +2952,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -2933,7 +2966,8 @@ "url": "https://feross.org/support" } ], - "inBundle": true + "inBundle": true, + "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", @@ -2953,8 +2987,7 @@ }, "node_modules/bin-links": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.1.tgz", - "integrity": "sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA==", + "license": "ISC", "dependencies": { "cmd-shim": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -2981,26 +3014,6 @@ "node": ">=10" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -3055,30 +3068,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3094,13 +3083,12 @@ } }, "node_modules/cacache": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.1.tgz", - "integrity": "sha512-HRnDSZUXB5hdCQc2wuB8eBQPe1a9PVU2Ow8zMTi82NGJZmBGNTSjEGzetlndKlqpVYBa4esdaJ2LH6/uOB4sFQ==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.2.tgz", + "integrity": "sha512-rYUs2x4OjSgCQND7nTrh21AHIBFgd7s/ctAYvU3a8u+nK+R5YaX/SFPDYz4Azz7SGL6+6L9ZZWI4Kawpb7grzQ==", "inBundle": true, "dependencies": { - "@npmcli/fs": "^3.0.0", - "@npmcli/move-file": "^3.0.0", + "@npmcli/fs": "^3.1.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "lru-cache": "^7.7.1", @@ -3201,9 +3189,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001418", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001418.tgz", - "integrity": "sha512-oIs7+JL3K9JRQ3jPZjlH6qyYDp+nBTCais7hjh0s+fuBwufc7uZ7hPYMXrDOJhV360KGMTcczMRObk0/iMqZRg==", + "version": "1.0.30001431", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz", + "integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==", "dev": true, "funding": [ { @@ -3216,6 +3204,16 @@ } ] }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "inBundle": true, @@ -3231,6 +3229,36 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3311,9 +3339,8 @@ }, "node_modules/cli-table3": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "inBundle": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -3343,25 +3370,9 @@ "node": ">=0.8" } }, - "node_modules/cmark-gfm": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/cmark-gfm/-/cmark-gfm-0.9.0.tgz", - "integrity": "sha512-zt++V303Zh+kqS3PERSq1knHT21TpKjbVUF/U63QhLktEH+eeZymv+mHz+6IhcTN5Hy85LdkgdKlroa/Jc6Wvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^3.0.0", - "prebuild-install": "^6.0.0" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/cmd-shim": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.0.tgz", - "integrity": "sha512-wx+RWLgiSU6SCDzMtxG0Dv1lsuOcEfqq5SbqAViezaJIkR5sbveKzFU31YnWhqrJx3o3Iu3H0Rq8R00OS3oI+Q==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -3504,6 +3515,16 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", + "integrity": "sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/common-ancestor-path": { "version": "1.0.1", "license": "ISC" @@ -3664,9 +3685,9 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.1.1.tgz", - "integrity": "sha512-9DHpa379Gp0o0Zefii35fcmuuin6q92FnLDffzdZ0l9tVd3nEobG3O+MZ06+kuBvFTSVScvNb/oHA13Nd4iipg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.2.0.tgz", + "integrity": "sha512-NkANeMnaHrlaSSlpKGyvn2R4rqUDeE/9E5YHx+b4nwo0R8dZyAqcih8/gxpCZvqWP9Vf6xuLpMSzSgdVEIM78g==", "dev": true, "engines": { "node": ">=12", @@ -3874,7 +3895,7 @@ }, "node_modules/debuglog": { "version": "1.0.1", - "inBundle": true, + "dev": true, "license": "MIT", "engines": { "node": "*" @@ -3890,9 +3911,9 @@ } }, "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { "decamelize": "^1.1.0", @@ -3900,6 +3921,9 @@ }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/decamelize-keys/node_modules/map-obj": { @@ -3912,30 +3936,22 @@ } }, "node_modules/decimal.js": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.1.tgz", - "integrity": "sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz", + "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==", "dev": true }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "dev": true, "dependencies": { - "mimic-response": "^2.0.0" + "character-entities": "^2.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/deep-is": { @@ -4012,6 +4028,15 @@ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/detect-indent": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", @@ -4021,21 +4046,9 @@ "node": ">=8" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/dezalgo": { + "version": "1.0.4", "dev": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "inBundle": true, "license": "ISC", "dependencies": { "asap": "^2.0.0", @@ -4049,19 +4062,6 @@ "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", @@ -4179,9 +4179,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.279", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.279.tgz", - "integrity": "sha512-xs7vEuSZ84+JsHSTFqqG0TE3i8EAivHomRQZhhcRvsmnjsh5C2KdhwNKf4ZRYtzq75wojpFyqb62m32Oam57wA==", + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", "dev": true }, "node_modules/emoji-regex": { @@ -4198,15 +4198,6 @@ "iconv-lite": "^0.6.2" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -4429,15 +4420,16 @@ } }, "node_modules/eslint": { - "version": "8.25.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz", - "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==", + "version": "8.27.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz", + "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==", "dev": true, "peer": true, "dependencies": { "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.10.5", + "@humanwhocodes/config-array": "^0.11.6", "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4453,14 +4445,14 @@ "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "glob-parent": "^6.0.1", + "glob-parent": "^6.0.2", "globals": "^13.15.0", - "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", @@ -4743,9 +4735,9 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.0.1.tgz", - "integrity": "sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", "dev": true, "peer": true, "engines": { @@ -4857,9 +4849,9 @@ } }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "peer": true, "dependencies": { @@ -4933,9 +4925,8 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "inBundle": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4948,9 +4939,8 @@ }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "inBundle": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -4984,14 +4974,11 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -4999,36 +4986,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5044,9 +5001,8 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "inBundle": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -5098,12 +5054,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5176,6 +5126,26 @@ "dev": true, "peer": true }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -5280,12 +5250,6 @@ "node": ">=0.10.0" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, "node_modules/fs-exists-cached": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", @@ -5378,9 +5342,8 @@ }, "node_modules/gauge": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.0.tgz", - "integrity": "sha512-0s5T5eciEG7Q3ugkxAkFtaDhrrhXsCRivA5y8C9WMHWuI8UlMOJg7+Iwf7Mccii+Dfs3H5jHepU0joPVyQU0Lw==", "inBundle": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -5485,17 +5448,16 @@ "node": ">=10" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", "dev": true }, "node_modules/glob": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "inBundle": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5557,27 +5519,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/graceful-fs": { "version": "4.2.10", "inBundle": true, @@ -5590,6 +5531,16 @@ "dev": true, "peer": true }, + "node_modules/groff-escape": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/groff-escape/-/groff-escape-2.0.1.tgz", + "integrity": "sha512-S0nG+mLFTu1buDKQsRlBtIxZU/dMvrdCURJg/zSLKpL333yi1Fs5bLUYk+v3pRYlc+qmHtukMAM2slB0AKFKAw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -5721,6 +5672,52 @@ "node": ">=8" } }, + "node_modules/hast-util-is-element": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-2.1.2.tgz", + "integrity": "sha512-thjnlGAnwP8ef/GSO1Q8BfVk2gundnc2peGQqEg2kUt/IqesiGg/5mSwN2fE7nLzy61pg88NG6xV+UrGOrx9EA==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.3.tgz", + "integrity": "sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-is-element": "^2.0.0", + "hast-util-whitespace": "^2.0.0", + "html-void-elements": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.2", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.0.tgz", + "integrity": "sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -5732,9 +5729,8 @@ }, "node_modules/hosted-git-info": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", "inBundle": true, + "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -5760,11 +5756,35 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "inBundle": true, "license": "BSD-2-Clause" }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "inBundle": true, @@ -5821,8 +5841,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -5837,7 +5855,8 @@ "url": "https://feross.org/support" } ], - "inBundle": true + "inBundle": true, + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.2.0", @@ -5851,9 +5870,8 @@ }, "node_modules/ignore-walk": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.0.tgz", - "integrity": "sha512-bTf9UWe/UP1yxG3QUrj/KOvEhTAUWPcv+WvbFZ28LcqznXabp7Xu6o9y1JEC18+oqODuS7VhTpekV5XvFwsxJg==", "inBundle": true, + "license": "ISC", "dependencies": { "minimatch": "^5.0.1" }, @@ -5931,9 +5949,8 @@ }, "node_modules/init-package-json": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-4.0.1.tgz", - "integrity": "sha512-+8aiPEdLbTZxVBMeu0qdQ378Yf7Fv6CuoTI2fYOmEN+ND7SLpHUfcKLXuPmrcvLOSUy8SzCnsqoQdMiwN6ijTw==", "inBundle": true, + "license": "ISC", "dependencies": { "npm-package-arg": "^10.0.0", "promzard": "^0.3.0", @@ -6023,6 +6040,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -6155,6 +6195,16 @@ "node": ">=8" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -6457,9 +6507,9 @@ } }, "node_modules/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A==", + "version": "20.0.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.2.tgz", + "integrity": "sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==", "dev": true, "dependencies": { "abab": "^2.0.6", @@ -6501,18 +6551,6 @@ } } }, - "node_modules/jsdom/node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/jsdom/node_modules/escodegen": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", @@ -6578,18 +6616,6 @@ "node": ">= 0.8.0" } }, - "node_modules/jsdom/node_modules/parse5": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", - "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/jsdom/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -6659,9 +6685,8 @@ }, "node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "inBundle": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -6767,6 +6792,18 @@ "inBundle": true, "license": "MIT" }, + "node_modules/just-extend": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.1.1.tgz", + "integrity": "sha512-1UWaMWIB90HnIZAmXOTLobwWc9lc1ZMUBRKf8PaozCAiNUif6wv1fyeXpqccWZCu7L9zxIgXG55vARuZluyvqw==", + "dev": true + }, + "node_modules/just-safe-set": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/just-safe-set/-/just-safe-set-4.1.1.tgz", + "integrity": "sha512-3tQtDVCvZfWc64yEbh2D8R80Zlz+x9LJVpkQ4K3ppdiO7iI1Jzf6wYgsAs1o/EMSwucRbaNb6JHex/24TbSaKw==", + "dev": true + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6776,6 +6813,15 @@ "node": ">=0.10.0" } }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6894,9 +6940,9 @@ } }, "node_modules/licensee/node_modules/@npmcli/arborist": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.6.2.tgz", - "integrity": "sha512-Lyj2g+foWKzrwW2bT/RGO982VR9vb5tlvfD88n4PwWJRrDttQbJoIdcQzN9b+NIBhI1/8iEhC5b8far9U0fQxA==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.6.3.tgz", + "integrity": "sha512-/7hbqEM6YuRjwTcQXkK1+xKslEblY5kFQe0tZ7jKyMlIR6x4iOmhLErIkBBGtTKvYxRKdpcxnFXjCobg3UqmsA==", "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", @@ -6912,6 +6958,7 @@ "bin-links": "^3.0.3", "cacache": "^16.1.3", "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^5.2.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", "minimatch": "^5.1.0", @@ -7026,6 +7073,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { "mkdirp": "^1.0.4", @@ -7204,9 +7252,9 @@ } }, "node_modules/licensee/node_modules/hosted-git-info": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.0.tgz", - "integrity": "sha512-y5aljBDICf0OFQecausUdWGZbLxSaFc012tdP4xe4GcFMeYUrOptSGaTZ21gvIsPUSe1/K9EVKLYwBOSEOPirw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", "dev": true, "dependencies": { "lru-cache": "^7.5.1" @@ -7710,6 +7758,16 @@ "dev": true, "peer": true }, + "node_modules/longest-streak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/lru-cache": { "version": "7.13.2", "inBundle": true, @@ -7750,9 +7808,8 @@ }, "node_modules/make-fetch-happen": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.0.1.tgz", - "integrity": "sha512-clv3IblugXn2CDUmqFhNzii3rjKa46u5wNeivc+QlLXkGI5FjLX3rGboo+y2kwf1pd8W0iDiC384cemeDtw9kw==", "inBundle": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^17.0.0", @@ -7787,63 +7844,359 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "node_modules/markdown-table": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.2.tgz", + "integrity": "sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==", "dev": true, - "peer": true, - "bin": { - "marked": "bin/marked" - }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/marked-man": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked-man/-/marked-man-0.7.0.tgz", - "integrity": "sha512-zxK5E4jbuARALc+fIUAanM2njVGnrd9YvKrqoDHUg2XwNLJijo39EzMIg59LecHBHsIHNtPqepqnJp4SmL/EVg==", + "node_modules/mdast-util-definitions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.1.tgz", + "integrity": "sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==", "dev": true, - "bin": { - "marked-man": "bin/marked-man" + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "unist-util-visit": "^4.0.0" }, - "peerDependencies": { - "marked": "^0.7.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", "dev": true, "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.1.tgz", + "integrity": "sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", + "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "mdast-util-to-string": "^3.1.0", + "micromark": "^3.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-decode-string": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "unist-util-stringify-position": "^3.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.1.tgz", + "integrity": "sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==", + "dev": true, + "dependencies": { + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-gfm-autolink-literal": "^1.0.0", + "mdast-util-gfm-footnote": "^1.0.0", + "mdast-util-gfm-strikethrough": "^1.0.0", + "mdast-util-gfm-table": "^1.0.0", + "mdast-util-gfm-task-list-item": "^1.0.0", + "mdast-util-to-markdown": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz", + "integrity": "sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "ccount": "^2.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "micromark-util-character": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.1.tgz", + "integrity": "sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0", + "micromark-util-normalize-identifier": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.2.tgz", + "integrity": "sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.6.tgz", + "integrity": "sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.1.tgz", + "integrity": "sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "12.2.4", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.2.4.tgz", + "integrity": "sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-definitions": "^5.0.0", + "micromark-util-sanitize-uri": "^1.1.0", + "trim-lines": "^3.0.0", + "unist-builder": "^3.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.3.0.tgz", + "integrity": "sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "longest-streak": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "micromark-util-decode-string": "^1.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", + "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" @@ -7894,30 +8247,571 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/micromark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.1.0.tgz", + "integrity": "sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==", "dev": true, - "peer": true, - "engines": { - "node": ">= 8" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "micromark-core-commonmark": "^1.0.1", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", + "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-factory-destination": "^1.0.0", + "micromark-factory-label": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-factory-title": "^1.0.0", + "micromark-factory-whitespace": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-html-tag-name": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-subtokenize": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.1", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", + "integrity": "sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==", + "dev": true, + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^1.0.0", + "micromark-extension-gfm-footnote": "^1.0.0", + "micromark-extension-gfm-strikethrough": "^1.0.0", + "micromark-extension-gfm-table": "^1.0.0", + "micromark-extension-gfm-tagfilter": "^1.0.0", + "micromark-extension-gfm-task-list-item": "^1.0.0", + "micromark-util-combine-extensions": "^1.0.0", + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz", + "integrity": "sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==", "dev": true, - "peer": true, "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "micromark-util-character": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.0.4.tgz", + "integrity": "sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==", + "dev": true, + "dependencies": { + "micromark-core-commonmark": "^1.0.0", + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-normalize-identifier": "^1.0.0", + "micromark-util-sanitize-uri": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.4.tgz", + "integrity": "sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==", + "dev": true, + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-classify-character": "^1.0.0", + "micromark-util-resolve-all": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.5.tgz", + "integrity": "sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.1.tgz", + "integrity": "sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==", + "dev": true, + "dependencies": { + "micromark-util-types": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.3.tgz", + "integrity": "sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==", + "dev": true, + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", + "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", + "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", + "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", + "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", + "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", + "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", + "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", + "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", + "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", + "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", + "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^1.0.0", + "micromark-util-decode-numeric-character-reference": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", + "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", + "integrity": "sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", + "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", + "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.1.0.tgz", + "integrity": "sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-encode": "^1.0.0", + "micromark-util-symbol": "^1.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", + "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^1.0.0", + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0", + "uvu": "^0.5.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", + "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", + "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -7948,18 +8842,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -8033,9 +8915,8 @@ }, "node_modules/minipass-fetch": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.0.tgz", - "integrity": "sha512-NSx3k5gR4Q5Ts2poCM/19d45VwhVLBtJZ6ypYcthj2BwmDx/e7lW8Aadnyt3edd2W0ecb+b0o7FYLRYE2AGcQg==", "inBundle": true, + "license": "MIT", "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -8113,12 +8994,6 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, "node_modules/mkdirp-infer-owner": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", @@ -8142,6 +9017,24 @@ "node": ">=0.10.0" } }, + "node_modules/months": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/months/-/months-2.1.0.tgz", + "integrity": "sha512-2M9gdDB/uVt304/hJ3k2UIquJhOV5dRjp9BovHmZSINaRp7pdJuHXxOcuSjmJaKNomFyYyu0y3LBigdWiAUEmQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/ms": { "version": "2.1.3", "inBundle": true, @@ -8152,12 +9045,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8194,30 +9081,6 @@ "node": ">= 10.13" } }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true - }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -8240,9 +9103,8 @@ }, "node_modules/node-gyp": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.0.tgz", - "integrity": "sha512-A6rJWfXFz7TQNjpldJ915WFb1LnhO4lIve3ANPbWreuEoLoKlFT3sxIepPBkLhM27crW8YmN+pjlgbasH6cH/Q==", "inBundle": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -8264,9 +9126,8 @@ }, "node_modules/node-gyp/node_modules/@npmcli/fs": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "inBundle": true, + "license": "ISC", "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -8277,9 +9138,8 @@ }, "node_modules/node-gyp/node_modules/@npmcli/move-file": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "inBundle": true, + "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -8290,15 +9150,13 @@ }, "node_modules/node-gyp/node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "inBundle": true + "inBundle": true, + "license": "ISC" }, "node_modules/node-gyp/node_modules/are-we-there-yet": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "inBundle": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -8318,9 +9176,8 @@ }, "node_modules/node-gyp/node_modules/cacache": { "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "inBundle": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -8347,18 +9204,16 @@ }, "node_modules/node-gyp/node_modules/cacache/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "inBundle": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/node-gyp/node_modules/cacache/node_modules/glob": { "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", "inBundle": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8375,9 +9230,8 @@ }, "node_modules/node-gyp/node_modules/cacache/node_modules/minimatch": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "inBundle": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8387,9 +9241,8 @@ }, "node_modules/node-gyp/node_modules/gauge": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "inBundle": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -8425,9 +9278,8 @@ }, "node_modules/node-gyp/node_modules/make-fetch-happen": { "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "inBundle": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -8463,9 +9315,8 @@ }, "node_modules/node-gyp/node_modules/minipass-fetch": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "inBundle": true, + "license": "MIT", "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -8480,9 +9331,8 @@ }, "node_modules/node-gyp/node_modules/nopt": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "inBundle": true, + "license": "ISC", "dependencies": { "abbrev": "^1.0.0" }, @@ -8495,9 +9345,8 @@ }, "node_modules/node-gyp/node_modules/npmlog": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "inBundle": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -8510,9 +9359,8 @@ }, "node_modules/node-gyp/node_modules/ssri": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "inBundle": true, + "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -8522,9 +9370,8 @@ }, "node_modules/node-gyp/node_modules/unique-filename": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "inBundle": true, + "license": "ISC", "dependencies": { "unique-slug": "^3.0.0" }, @@ -8534,9 +9381,8 @@ }, "node_modules/node-gyp/node_modules/unique-slug": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "inBundle": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -8546,9 +9392,8 @@ }, "node_modules/node-gyp/node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "inBundle": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -8589,9 +9434,8 @@ }, "node_modules/nopt": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.0.0.tgz", - "integrity": "sha512-e6Qw1rcrGoSxEH0hQ4GBSdUjkMOtXGhGFXdNT/3ZR0S37eR9DMj5za3dEDWE6o1T3/DP8ZOsPP4MIiky0c3QeA==", "inBundle": true, + "license": "ISC", "dependencies": { "abbrev": "^2.0.0" }, @@ -8604,9 +9448,8 @@ }, "node_modules/normalize-package-data": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "inBundle": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^6.0.0", "is-core-module": "^2.8.1", @@ -8628,9 +9471,8 @@ }, "node_modules/npm-audit-report": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-4.0.0.tgz", - "integrity": "sha512-k2o5476sLrp94b6Gl819YzlS7LAdb8lgE6yQCysBEji5E3WoUdRve6tiVMLKAPPdLfItU4kOSUycWS5HFTrbug==", "inBundle": true, + "license": "ISC", "dependencies": { "chalk": "^4.0.0" }, @@ -8640,9 +9482,8 @@ }, "node_modules/npm-bundled": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "inBundle": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^3.0.0" }, @@ -8652,9 +9493,8 @@ }, "node_modules/npm-install-checks": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.0.0.tgz", - "integrity": "sha512-SBU9oFglRVZnfElwAtF14NivyulDqF1VKqqwNsFW9HDcbHMAPHpRSsVFgKuwFGq/hVvWZExz62Th0kvxn/XE7Q==", "inBundle": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -8670,9 +9510,8 @@ }, "node_modules/npm-normalize-package-bin": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.0.tgz", - "integrity": "sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==", "inBundle": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8694,9 +9533,8 @@ }, "node_modules/npm-packlist": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.2.tgz", - "integrity": "sha512-d2+7RMySjVXssww23rV5NuIq1NzGvM04OlI5kwnvtYKfFTAPVs6Zxmxns2HRtJEA1oNj7D/BbFXeVAOLmW3N3Q==", "inBundle": true, + "license": "ISC", "dependencies": { "ignore-walk": "^6.0.0" }, @@ -8706,9 +9544,8 @@ }, "node_modules/npm-pick-manifest": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "inBundle": true, + "license": "ISC", "dependencies": { "npm-install-checks": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -8721,9 +9558,8 @@ }, "node_modules/npm-profile": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-7.0.1.tgz", - "integrity": "sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ==", "inBundle": true, + "license": "ISC", "dependencies": { "npm-registry-fetch": "^14.0.0", "proc-log": "^3.0.0" @@ -8734,9 +9570,8 @@ }, "node_modules/npm-registry-fetch": { "version": "14.0.2", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.2.tgz", - "integrity": "sha512-TMenrMagFA9KF81E2bkS5XRyzERK4KXu70vgXt5+i8FcrFeLNgNsc6e5hekTqjDwPDkL3HGn/holWcXDMfnFgw==", "inBundle": true, + "license": "ISC", "dependencies": { "make-fetch-happen": "^11.0.0", "minipass": "^3.1.6", @@ -8769,9 +9604,8 @@ }, "node_modules/npmlog": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", - "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", "inBundle": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^4.0.0", "console-control-strings": "^1.1.0", @@ -9080,15 +9914,15 @@ } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -9122,8 +9956,9 @@ }, "node_modules/opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } @@ -9311,9 +10146,8 @@ }, "node_modules/parse-conflict-json": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.0.tgz", - "integrity": "sha512-ipcKLCmZbAj7n+h9qQREvdvsBUMPetGk9mM4ljCvs5inZznAlkHPk5XPc7ROtknUKw7kO6Jnz10Y3Eec7tky/A==", "inBundle": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0", "just-diff": "^5.0.1", @@ -9359,6 +10193,30 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/parse5": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.1.tgz", + "integrity": "sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9417,243 +10275,95 @@ "funding": { "url": "https://github.com/sponsors/jonschlinkert" } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/platform": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", - "dev": true - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prebuild-install/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install/node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/prebuild-install/node_modules/are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/prebuild-install/node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "engines": { + "node": ">=6" } }, - "node_modules/prebuild-install/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "number-is-nan": "^1.0.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/prebuild-install/node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/prebuild-install/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/prebuild-install/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/prebuild-install/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prebuild-install/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/prebuild-install/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/prelude-ls": { @@ -9668,18 +10378,16 @@ }, "node_modules/proc-log": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "inBundle": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "inBundle": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -9750,22 +10458,22 @@ "node": ">= 8" } }, + "node_modules/property-information": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", + "integrity": "sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -9828,36 +10536,6 @@ "node": ">=8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read": { "version": "1.0.7", "inBundle": true, @@ -9871,17 +10549,15 @@ }, "node_modules/read-cmd-shim": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-package-json": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.0.tgz", - "integrity": "sha512-b/9jxWJ8EwogJPpv99ma+QwtqB7FSl3+V6UXS7Aaay8/5VwMY50oIFooY1UKXMWpfNCM6T/PoGqa5GD1g9xf9w==", "inBundle": true, + "license": "ISC", "dependencies": { "glob": "^8.0.1", "json-parse-even-better-errors": "^3.0.0", @@ -9894,9 +10570,8 @@ }, "node_modules/read-package-json-fast": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.1.tgz", - "integrity": "sha512-8+HW7Yo+cjfF+md8DqsZHgats2mxf7gGYow/+2JjxrftoHFZz9v4dzd0EubzYbkNaLxrTVcnllHwklXN2+7aTQ==", "inBundle": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -10049,7 +10724,7 @@ }, "node_modules/readdir-scoped-modules": { "version": "1.1.0", - "inBundle": true, + "dev": true, "license": "ISC", "dependencies": { "debuglog": "^1.0.1", @@ -10114,6 +10789,21 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/rehype-stringify": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-9.0.3.tgz", + "integrity": "sha512-kWiZ1bgyWlgOxpqD5HnxShKAdXtb2IUljn3hQAhySeak6IOQPPt6DeGnsIh4ixm7yKJWzm8TXFuC/lPfcWHJqw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-to-html": "^8.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/release-please": { "name": "@npmcli/release-please", "version": "14.2.6", @@ -10185,6 +10875,181 @@ "node": ">=4" } }, + "node_modules/remark": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", + "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "remark-parse": "^10.0.0", + "remark-stringify": "^10.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", + "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-gfm": "^2.0.0", + "micromark-extension-gfm": "^2.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-github": { + "version": "11.2.4", + "resolved": "https://registry.npmjs.org/remark-github/-/remark-github-11.2.4.tgz", + "integrity": "sha512-GJjWFpwqdrHHhPWqMbb8+lqFLiHQ9pCzUmXmRrhMFXGpYov5n2ljsZzuWgXlfzArfQYkiKIZczA2I8IHYMHqCA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-find-and-replace": "^2.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-github/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-github/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-man": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/remark-man/-/remark-man-8.0.1.tgz", + "integrity": "sha512-F/BbNaEF/QiZXoMiC43/qb8kAgGBKIS3yA+Br4CObgyoD+9Bioq1v+LmrLVbkwy9BErircQQ4J8yR2vFD34fBA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "github-slugger": "^1.0.0", + "groff-escape": "^2.0.0", + "mdast-util-definitions": "^5.0.0", + "mdast-util-to-string": "^3.0.0", + "months": "^2.0.0", + "unified": "^10.0.0", + "unist-util-visit": "^4.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-man/node_modules/unist-util-visit": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.1.tgz", + "integrity": "sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-man/node_modules/unist-util-visit-parents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.1.tgz", + "integrity": "sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", + "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-from-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz", + "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==", + "dev": true, + "dependencies": { + "@types/hast": "^2.0.0", + "@types/mdast": "^3.0.0", + "mdast-util-to-hast": "^12.1.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", + "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-markdown": "^1.0.0", + "unified": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -10358,6 +11223,18 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "funding": [ @@ -10481,37 +11358,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", - "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", - "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -10530,10 +11376,6 @@ "npm": ">= 3.0.0" } }, - "node_modules/smoke-tests": { - "resolved": "smoke-tests", - "link": true - }, "node_modules/socks": { "version": "2.7.0", "inBundle": true, @@ -10591,10 +11433,20 @@ "source-map": "^0.6.0" } }, + "node_modules/space-separated-tokens": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", + "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/spawk": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/spawk/-/spawk-1.7.1.tgz", - "integrity": "sha512-qkPqVdPp5ICEeSYKB/qCkwIBB0IWQuouEvYenQvpTq15fqSQgutpH453NjEImrpCWTwQwj2bQjGp8YGHapEiWw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/spawk/-/spawk-1.8.0.tgz", + "integrity": "sha512-/bqxBMj+ldGl/p/hjHW8VRL9DulNQV0bjvB2v6knpG6gq2Y+teLtjpjqpBXQq02o6CCVCeiFP4VjCs0CVlG8Jg==", "dev": true, "engines": { "node": ">=12.0.0" @@ -10731,9 +11583,8 @@ }, "node_modules/ssri": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.0.tgz", - "integrity": "sha512-64ghGOpqW0k+jh7m5jndBGdVEoPikWwGQmBNN5ks6jyUSMymzHDTlnNHOvzp+6MmHOljr2MokUzvRksnTwG0Iw==", "inBundle": true, + "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -10793,15 +11644,15 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10822,6 +11673,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "dev": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "inBundle": true, @@ -12992,9 +13857,8 @@ }, "node_modules/tar": { "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", "inBundle": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -13007,40 +13871,6 @@ "node": ">=10" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/tcompare": { "version": "5.0.7", "resolved": "https://registry.npmjs.org/tcompare/-/tcompare-5.0.7.tgz", @@ -13205,13 +14035,22 @@ }, "node_modules/treeverse": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "inBundle": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -13227,6 +14066,16 @@ "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==", "dev": true }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -13324,18 +14173,6 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -13385,9 +14222,9 @@ } }, "node_modules/uglify-js": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.3.tgz", - "integrity": "sha512-JmMFDME3iufZnBpyKL+uS78LRiC+mK55zWfM5f/pWBJfpOttXAqYfdDGRukYhJuyRinvPVAtUhvy7rlDybNtFg==", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, "optional": true, "bin": { @@ -13428,11 +14265,41 @@ "punycode": "^2.0.0" } }, + "node_modules/unified": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-filename": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", "inBundle": true, + "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" }, @@ -13442,9 +14309,8 @@ }, "node_modules/unique-slug": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "inBundle": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -13452,11 +14318,60 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/unist-builder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", + "integrity": "sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.3.tgz", + "integrity": "sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", + "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -13491,6 +14406,26 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-visit-parents/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -13565,6 +14500,24 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/uvu": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz", + "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==", + "dev": true, + "dependencies": { + "dequal": "^2.0.0", + "diff": "^5.0.0", + "kleur": "^4.0.3", + "sade": "^1.7.3" + }, + "bin": { + "uvu": "bin.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -13582,9 +14535,8 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", "inBundle": true, + "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -13592,6 +14544,36 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/vfile": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.5.tgz", + "integrity": "sha512-U1ho2ga33eZ8y8pkbQLH54uKqGhFJ6GYIHnnG5AhRpAh3OWjkrRHKa/KogbmQn8We+c0KVV3rTOgR9V/WowbXQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", + "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/w3c-xmlserializer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", @@ -13655,9 +14637,8 @@ }, "node_modules/which": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.0.tgz", - "integrity": "sha512-nla//68K9NU6yRiwDY/Q8aU6siKlSs64aEC7+IV56QoAuyQT2ovsJcgGYGyqMOmI/CGN1BOR6mM5EN0FBO+zyQ==", "inBundle": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -13738,9 +14719,8 @@ }, "node_modules/write-file-atomic": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", - "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", "inBundle": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -13832,9 +14812,9 @@ } }, "node_modules/ws": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.9.0.tgz", - "integrity": "sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -13900,9 +14880,9 @@ } }, "node_modules/yargs": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz", - "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==", + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", "dev": true, "dependencies": { "cliui": "^8.0.1", @@ -13911,7 +14891,7 @@ "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" + "yargs-parser": "^21.1.1" }, "engines": { "node": ">=12" @@ -13970,54 +14950,52 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "smoke-tests": { + "name": "@npmcli/smoke-tests", "version": "1.0.0", "license": "ISC", "devDependencies": { "@npmcli/eslint-config": "^4.0.0", + "@npmcli/mock-registry": "^1.0.0", "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/template-oss": "4.8.0", - "minify-registry-metadata": "^2.2.0", - "rimraf": "^3.0.2", + "@npmcli/template-oss": "4.9.0", + "http-proxy": "^1.18.1", + "just-extend": "^6.1.1", + "just-safe-set": "^4.1.1", "tap": "^16.0.1", - "which": "^2.0.2" + "which": "^3.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "smoke-tests/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "workspaces/arborist": { "name": "@npmcli/arborist", - "version": "6.1.1", + "version": "6.1.2", "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", "@npmcli/installed-package-contents": "^2.0.0", "@npmcli/map-workspaces": "^3.0.0", "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/move-file": "^3.0.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^3.0.0", "@npmcli/query": "^3.0.0", "@npmcli/run-script": "^6.0.0", "bin-links": "^4.0.1", - "cacache": "^17.0.1", + "cacache": "^17.0.2", "common-ancestor-path": "^1.0.1", "hosted-git-info": "^6.1.1", "json-parse-even-better-errors": "^3.0.0", @@ -14035,7 +15013,6 @@ "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^3.0.1", - "readdir-scoped-modules": "^1.1.0", "semver": "^7.3.7", "ssri": "^10.0.0", "treeverse": "^3.0.0", @@ -14046,7 +15023,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "benchmark": "^2.1.4", "chalk": "^4.1.0", "minify-registry-metadata": "^2.1.0", @@ -14073,7 +15050,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "tap": "^16.0.1" }, "engines": { @@ -14089,7 +15066,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -14098,10 +15075,10 @@ } }, "workspaces/libnpmdiff": { - "version": "5.0.2", + "version": "5.0.3", "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/disparity-colors": "^3.0.0", "@npmcli/installed-package-contents": "^2.0.0", "binary-extensions": "^2.2.0", @@ -14113,7 +15090,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "tap": "^16.0.1" }, "engines": { @@ -14121,10 +15098,10 @@ } }, "workspaces/libnpmexec": { - "version": "5.0.2", + "version": "5.0.3", "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/ci-detect": "^3.0.1", "@npmcli/run-script": "^6.0.0", "chalk": "^4.1.0", @@ -14139,7 +15116,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "bin-links": "^4.0.1", "minify-registry-metadata": "^2.2.0", "mkdirp": "^1.0.4", @@ -14150,14 +15127,14 @@ } }, "workspaces/libnpmfund": { - "version": "4.0.2", + "version": "4.0.3", "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.1.1" + "@npmcli/arborist": "^6.1.2" }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "tap": "^16.0.1" }, "engines": { @@ -14173,7 +15150,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -14190,7 +15167,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "minipass": "^3.1.1", "nock": "^13.2.4", "tap": "^16.0.1" @@ -14200,17 +15177,17 @@ } }, "workspaces/libnpmpack": { - "version": "5.0.2", + "version": "5.0.3", "license": "ISC", "dependencies": { - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/run-script": "^6.0.0", "npm-package-arg": "^10.0.0", "pacote": "^15.0.2" }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.0.7", "spawk": "^1.7.1", "tap": "^16.0.1" @@ -14220,7 +15197,7 @@ } }, "workspaces/libnpmpublish": { - "version": "7.0.2", + "version": "7.0.3", "license": "ISC", "dependencies": { "normalize-package-data": "^5.0.0", @@ -14231,8 +15208,8 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", - "libnpmpack": "^5.0.2", + "@npmcli/template-oss": "4.9.0", + "libnpmpack": "^5.0.3", "lodash.clonedeep": "^4.5.0", "nock": "^13.2.4", "tap": "^16.0.1" @@ -14249,7 +15226,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -14266,7 +15243,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -14286,13 +15263,36 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "require-inject": "^1.4.4", "tap": "^16.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } + }, + "workspaces/ws-a": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "abbrev": "1.0.5", + "ws-b": "1.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "workspaces/ws-b": { + "version": "1.0.0", + "extraneous": true, + "license": "ISC", + "dependencies": { + "abbrev": "1.0.6" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } } } } diff --git a/package.json b/package.json index 3c2efd351785f..ba34d7a2793ec 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { - "version": "9.1.0", + "version": "9.1.1", "name": "npm", "description": "a package manager for JavaScript", "workspaces": [ "docs", "smoke-tests", + "mock-registry", "workspaces/*" ], "files": [ @@ -56,7 +57,7 @@ }, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/ci-detect": "^3.0.1", "@npmcli/config": "^6.1.0", "@npmcli/map-workspaces": "^3.0.0", @@ -64,7 +65,7 @@ "@npmcli/run-script": "^6.0.0", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^17.0.1", + "cacache": "^17.0.2", "chalk": "^4.1.2", "cli-columns": "^4.0.0", "cli-table3": "^0.6.3", @@ -79,13 +80,13 @@ "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^3.0.0", "libnpmaccess": "^7.0.0", - "libnpmdiff": "^5.0.2", - "libnpmexec": "^5.0.2", - "libnpmfund": "^4.0.2", + "libnpmdiff": "^5.0.3", + "libnpmexec": "^5.0.3", + "libnpmfund": "^4.0.3", "libnpmhook": "^9.0.0", "libnpmorg": "^5.0.0", - "libnpmpack": "^5.0.2", - "libnpmpublish": "^7.0.2", + "libnpmpack": "^5.0.3", + "libnpmpublish": "^7.0.3", "libnpmsearch": "^6.0.0", "libnpmteam": "^5.0.0", "libnpmversion": "^4.0.1", @@ -113,7 +114,6 @@ "read": "~1.0.7", "read-package-json": "^6.0.0", "read-package-json-fast": "^3.0.1", - "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", "semver": "^7.3.8", "ssri": "^10.0.0", @@ -184,7 +184,6 @@ "read", "read-package-json", "read-package-json-fast", - "readdir-scoped-modules", "rimraf", "semver", "ssri", @@ -199,13 +198,17 @@ "devDependencies": { "@npmcli/docs": "^1.0.0", "@npmcli/eslint-config": "^4.0.0", - "@npmcli/fs": "^3.0.0", + "@npmcli/fs": "^3.1.0", "@npmcli/git": "^4.0.1", + "@npmcli/mock-registry": "^1.0.0", "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "licensee": "^9.0.0", "nock": "^13.2.4", "npm-packlist": "^7.0.1", + "remark": "^14.0.2", + "remark-gfm": "^3.0.1", + "remark-github": "^11.2.4", "spawk": "^1.7.1", "tap": "^16.0.1" }, @@ -213,7 +216,6 @@ "dependencies": "node scripts/bundle-and-gitignore-deps.js && node scripts/dependency-graph.js", "dumpconf": "env | grep npm | sort | uniq", "licenses": "licensee --production --errors-only", - "pretest": "node scripts/rebuild.js cmark-gfm", "test": "tap", "test-all": "node . run test -ws -iwr --if-present", "snap": "tap", @@ -244,15 +246,17 @@ "--exclude", "smoke-tests/**", "--exclude", + "mock-registry/**", + "--exclude", "workspaces/**", "--exclude", "tap-snapshots/**" ], - "test-ignore": "^(docs|smoke-tests|workspaces)/" + "test-ignore": "^(docs|smoke-tests|mock-registry|workspaces)/" }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "./scripts/template-oss/root.js" }, "license": "Artistic-2.0", diff --git a/scripts/bundle-and-gitignore-deps.js b/scripts/bundle-and-gitignore-deps.js index 6dd1b93f08d66..6057e8bc15e16 100644 --- a/scripts/bundle-and-gitignore-deps.js +++ b/scripts/bundle-and-gitignore-deps.js @@ -4,6 +4,7 @@ const { join, relative } = require('path') const localeCompare = require('@isaacs/string-locale-compare')('en') const PackageJson = require('@npmcli/package-json') const { run, CWD, git, fs } = require('./util') +const npmGit = require('@npmcli/git') const ALWAYS_IGNORE = ` .bin/ @@ -227,6 +228,12 @@ const main = async () => { const NODE_MODULES = join(CWD, 'node_modules') const res = await fs.writeFile(join(NODE_MODULES, '.gitignore'), ignoreFile.join('\n')) + if (!await npmGit.is({ cwd: CWD })) { + // if we are not running in a git repo then write the files but we do not + // need to run any git commands to check if we have unmatched files in source + return res + } + // After we write the file we have to check if any of the paths already checked in // inside node_modules are now going to be ignored. If we find any then fail with // a list of the paths remaining. We already attempted to `git rm` them so just diff --git a/scripts/create-node-pr.js b/scripts/create-node-pr.js index 26d4c07a793e6..712f71b7ccaef 100644 --- a/scripts/create-node-pr.js +++ b/scripts/create-node-pr.js @@ -1,4 +1,4 @@ -const { join } = require('path') +const { join, basename } = require('path') const fsp = require('fs/promises') const hgi = require('hosted-git-info') const semver = require('semver') @@ -8,11 +8,12 @@ const tar = require('tar') const { cp, withTempDir } = require('@npmcli/fs') const { CWD, run, spawn, git, fs, gh } = require('./util.js') +const NODE_FORK = 'npm/node' // this script expects node to already be cloned to a directory at the cli root named "node" const NODE_DIR = join(CWD, 'node') const gitNode = spawn.create('git', { cwd: NODE_DIR }) -const createNodeTarball = async ({ mani, registryOnly, tag, dir: extractDir }) => { +const createNodeTarball = async ({ mani, registryOnly, localTest, tag, dir: extractDir }) => { const tarball = join(extractDir, 'npm-node.tgz') await pacote.tarball.file(mani._from, tarball, { resolved: mani._resolved }) @@ -28,12 +29,26 @@ const createNodeTarball = async ({ mani, registryOnly, tag, dir: extractDir }) = await fs.rimraf(tarball) // checkout the tag since we need to get files from source. - await git.dirty() - tag && await git('checkout', tag) - for (const path of ['.npmrc', 'tap-snapshots/', 'test/']) { + if (!localTest) { + try { + await git('checkout', tag) + } catch (err) { + log.error('Use the `--local-test` flag to avoid checking out the tag') + throw err + } + } + // currently there is an empty .npmrc file in the deps/npm dir in the node repo + // i do not know why and it might not be used but in order to minimize any + // unnecessary churn, let's create that file to match the old process + await fsp.writeFile(join(extractDir, '.npmrc'), '', 'utf-8') + + // copy our test dirs so that tests can be run + for (const path of ['tap-snapshots/', 'test/']) { await cp(join(CWD, path), join(extractDir, path), { recursive: true }) } + // recreate the tarball as closely as possible to how we would before publishing + // to the registry. the only difference here is the extra files we put in the dir await tar.c({ ...pacote.DirFetcher.tarCreateOptions(mani), cwd: extractDir, @@ -43,82 +58,227 @@ const createNodeTarball = async ({ mani, registryOnly, tag, dir: extractDir }) = return tarball } -const main = async (spec, opts) => withTempDir(CWD, async (tmpDir) => { - const { dryRun, registryOnly, skipCheckout } = opts +const getPrBody = async ({ releases, closePrs }) => { + const useSummary = releases.length > 1 + const releasePath = (v) => `/npm/cli/releases/tag/v${v}` - const mani = await pacote.manifest(`npm@${spec}`, { preferOnline: true }) + // XXX: add links to relevant CI and CITGM runs once we no longer include our tests + let prBody = '' + + if (useSummary) { + const summary = releases.map(r => { + return `[\`npm@${r.version}\`](https://github.com${releasePath(r.version)})` + }) + prBody += `This PR contains changes from: ${summary.join(' ')}\n\n` + } + + if (closePrs.length) { + prBody += `This PR replaces: ${closePrs.map(pr => pr.url).join(' ')}\n\n` + } - const head = { - tag: `v${mani.version}`, - branch: `npm-v${mani.version}`, - host: hgi.fromUrl('npm/node'), - message: `deps: upgrade npm to ${mani.version}`, + if (prBody) { + prBody += '---\n\n' } - log.silly(head) + + for (const { version, body } of releases) { + prBody += useSummary + ? `
${version}\n

\n\n${body}\n\n

\n
` + : body + prBody += '\n' + } + + // These comes from the releases so those link to the raw comparison between tags. + // Since we are putting this in a PR we can change those links back to the releases. + prBody = prBody.replace(/\/npm\/cli\/compare\/v[\w.-]+\.\.\.v([\w.-]+)/g, releasePath('$1')) + + const { remark } = await import('remark') + const { default: remarkGfm } = await import('remark-gfm') + const { default: remarkGithub } = await import('remark-github') + + return remark() + .use(remarkGfm) + .use(remarkGithub, { + repository: 'npm/cli', + // dont link mentions, but anything else make the link an explicit referance to npm/cli + buildUrl: (values, buildUrl) => values.type === 'mention' ? false : buildUrl(values), + }) + .process(prBody) + .then(v => String(v)) +} + +const tokenRemoteUrl = ({ host, token }) => { + // this is a remote url that uses a github token as the username + // in order to authenticate with github + const headRemoteUrl = new URL(host.https()) + headRemoteUrl.username = token + // we have to manually change the protocol. the whatwg url spec + // does not allow changing a special protocol to another one + // but the protocol has to be `https:` without the `git+` + return headRemoteUrl.toString().replace('git+https:', 'https:') +} + +const main = async (spec, branch = 'main', opts) => withTempDir(CWD, async (tmpDir) => { + const { GITHUB_TOKEN } = process.env + const { dryRun, registryOnly, localTest } = opts + + if (!spec) { + throw new Error('`spec` is required as the first argument') + } + + if (!branch) { + throw new Error('`branch` is required as the second argument') + } + + if (!GITHUB_TOKEN) { + throw new Error(`process.env.GITHUB_TOKEN is required`) + } + + await fsp.access(NODE_DIR, fsp.constants.F_OK).catch(() => { + throw new Error(`node repo must be checked out to \`${NODE_DIR}\` to continue`) + }) + + await gh.json('repo', 'view', NODE_FORK, 'url').catch(() => { + throw new Error(`node repo must be forked to ${NODE_FORK}`) + }) + + await git.dirty().catch((er) => { + if (localTest) { + return log.info('Skipping git dirty check due to `--local-test` flag') + } + throw er + }) + + const mani = await pacote.manifest(`npm@${spec}`, { preferOnline: true }) + const packument = await pacote.packument('npm', { preferOnline: true }) + const npmVersions = Object.keys(packument.versions).sort(semver.rcompare) + + const npmVersion = semver.parse(mani.version) + const npmHost = hgi.fromUrl(NODE_FORK) + const npmTag = `v${npmVersion}` + const npmBranch = `npm-${npmTag}` + const npmRemoteUrl = tokenRemoteUrl({ host: npmHost, token: GITHUB_TOKEN }) + const npmMessage = (v = npmVersion) => `deps: upgrade npm to ${v}` const tarball = await createNodeTarball({ mani, + tag: npmTag, dir: tmpDir, registryOnly, - // the only reason this is optional is for testing when updating this script. - // if we checkout an older tag, it won't have the updates we are testing. - tag: skipCheckout ? null : head.tag, + localTest, }) + log.info('tarball path', tarball) - await fsp.access(NODE_DIR, fsp.constants.F_OK).catch(() => { - throw new Error(`node repo must be checked out to \`${NODE_DIR}\` to continue`) - }) + const nodeRemote = 'origin' + const nodeBranch = /^\d+$/.test(branch) ? `v${branch}.x-staging` : branch + const nodeHost = hgi.fromUrl(await gitNode('remote', 'get-url', nodeRemote, { out: true })) + const nodePrArgs = ['pr', '-R', nodeHost.path()] + + await gitNode('fetch', nodeRemote) + await gitNode('checkout', nodeBranch) + await gitNode('reset', '--hard', `${nodeRemote}/${nodeBranch}`) + + const nodeNpmPath = join('deps', 'npm') + const nodeNpmDir = join(NODE_DIR, nodeNpmPath) + const nodeNpmVersion = require(join(nodeNpmDir, 'package.json')).version - const base = { - // we used to send PRs sometimes for old versions to the 14.x staging - // branch. this might not be needed anymore, but this is how we - // would do it, if we needed to send a PR for backport fixes - branch: semver.major(mani.version) <= 8 ? '14.x-staging' : 'main', - remote: 'origin', - host: hgi.fromUrl(await gitNode('remote', 'get-url', 'origin', { out: true })), + // this is the range of all versions included in this update based + // on the current version of npm in node currently. we use this + // to build a list of all release notes and to close any existing PRs + const newNpmVersions = npmVersions.slice( + npmVersions.indexOf(npmVersion.toString()), + npmVersions.indexOf(nodeNpmVersion) + ) + .reverse() + .map((v) => semver.parse(v)) + .filter((version) => version.major === npmVersion.major) + + // get a list of all versions changelogs to add to the body of the PR + // do this before we checkout our branch and make any changes + const npmReleases = await Promise.all(newNpmVersions.map(async (v) => { + // dont include prereleases unless we are updating to a prerlease since we + // manually put all prerelease notes into the first stable major version + if (v.prerelease.length && !npmVersion.prerelease.length) { + return null + } + return { + version: v, + body: await gh.json('release', 'view', `v${v}`, 'body', { quiet: true }).then(r => r.trim()), + } + })).then(r => r.filter(Boolean)) + + log.info('npm versions', newNpmVersions.map(v => v.toString())) + log.info('npm releases', npmReleases.map(u => u.version.toString())) + + await gitNode('branch', '-D', npmBranch, { ok: true }) + await gitNode('checkout', '-b', npmBranch) + await fs.clean(nodeNpmDir) + await tar.x({ strip: 1, file: tarball, cwd: nodeNpmDir }) + await fs.rimraf(join(nodeNpmDir, basename(tarball))) + + await gitNode('add', '-A', nodeNpmPath) + await gitNode('commit', '-m', npmMessage()) + await gitNode('rebase', '--whitespace', 'fix', nodeBranch) + + await gitNode('remote', 'rm', npmHost.user, { ok: true }) + await gitNode('remote', 'add', npmHost.user, npmRemoteUrl) + if (!dryRun) { + await gitNode('push', npmHost.user, npmBranch, '--force') } - log.silly(base) - await gh('repo', 'fork', base.host.path(), '--org', head.host.user, { quiet: true, ok: true }) - await gitNode('fetch', base.remote) - await gitNode('checkout', base.branch) - await gitNode('reset', '--hard', `${base.remote}/${base.branch}`) - await gitNode('branch', '-D', head.branch, { ok: true }) - await gitNode('checkout', '-b', head.branch) + const npmPrs = await gh.json( + ...nodePrArgs, 'list', + '-S', `in:title "${npmMessage('')}"`, + 'number,title,url' + ) + + log.info('Found other npm PRs', npmPrs) - const npmPath = join('deps', 'npm') - const npmDir = join(NODE_DIR, npmPath) - await fs.clean(npmDir) - await tar.x({ strip: 1, file: tarball, cwd: npmDir }) + let existingPr = null + const closePrs = [] - await gitNode('add', '-A', npmPath) - await gitNode('commit', '-m', head.message) - await gitNode('rebase', '--whitespace', 'fix', base.branch) + for (const pr of npmPrs) { + const prVersion = pr.title.replace(npmMessage(''), '').trim() + log.silly('checking existing PR', prVersion, pr) - await gitNode('remote', 'add', head.host.user, head.host.ssh(), { ok: true }) - await gitNode('push', head.host.user, head.branch, '--force') + if (!existingPr && prVersion === npmVersion.toString()) { + existingPr = pr + } else if (newNpmVersions.some(v => v.toString() === prVersion)) { + closePrs.push(pr) + } + } + + log.info('Found exisiting PR', existingPr) + log.info('Found PRs to close', closePrs) - const notes = await gh.json('release', 'view', head.tag, 'body') - log.silly('body', notes) + const prBody = await getPrBody({ releases: npmReleases, closePrs }) const prArgs = [ - 'pr', 'create', - '-R', base.host.path(), - '-B', base.branch, - '-H', `${head.host.user}:${head.branch}`, - '-t', head.message, - ] + nodePrArgs, + (existingPr ? ['edit', existingPr.number] : ['create', '-H', `${npmHost.user}:${npmBranch}`]), + '-B', nodeBranch, + '-t', npmMessage(), + ].flat() if (dryRun) { log.info(`gh ${prArgs.join(' ')}`) - const url = new URL(base.host.browse()) - const compare = `${base.branch}...${head.host.user}:${head.host.project}:${head.branch}` - url.pathname += `/compare/${compare}` - url.searchParams.set('expand', '1') - return url.toString() + return prBody + } + + const newOrUpdatedPr = await gh(prArgs, '-F', '-', { input: prBody, out: true }) + const closeMessage = `Closing in favor of ${newOrUpdatedPr}` + + for (const closePr of closePrs) { + log.info('Attempting to close PR', closePr.url) + try { + await gh(nodePrArgs, 'close', closePr.number, '-c', closeMessage) + } catch (err) { + log.error('Could not close PR', err) + } } - return gh(...prArgs, '-F', '-', { cwd: NODE_DIR, input: notes, out: true }) + return newOrUpdatedPr }) -run(({ argv, ...opts }) => main(argv.remain[0], opts)) +run(({ argv, ...opts }) => main(argv.remain[0], argv.remain[1], opts), { + redact: new RegExp(process.env.GITHUB_TOKEN, 'g'), +}) diff --git a/scripts/publish.js b/scripts/publish.js index fb2ab34e6bc06..62f2217b752bf 100644 --- a/scripts/publish.js +++ b/scripts/publish.js @@ -1,59 +1,58 @@ const semver = require('semver') const log = require('proc-log') const pacote = require('pacote') -const { run, git, npm, pkg, spawn } = require('./util.js') +const { run, git, npm, pkg: cli, spawn } = require('./util.js') const resetdeps = () => npm('run', 'resetdeps') const op = () => spawn('op', 'item', 'get', 'npm', '--otp', { out: true, ok: true }) -const TAGS = { - // cli is always published to next-MAJOR - root: (v) => ({ tag: `next-${semver.major(v)}` }), - // workspaces are always published to latest, except prereleases - workspace: () => ({ tag: 'latest', preTag: 'prerelease' }), +const getVersion = async (s) => { + const mani = await pacote.manifest(s, { preferOnline: true }) + return mani.version +} +const getLatest = async (s) => { + const pack = await pacote.packument(s, { preferOnline: true }) + return pack['dist-tags'].latest +} + +const TAG = { + cli: ({ version }) => `next-${semver.major(version)}`, + workspace: async ({ name, version }) => { + const { prerelease, major } = semver.parse(version) + if (prerelease.length) { + return 'prerelease' + } + if (major === await getLatest(name).then(v => semver.major(v))) { + return 'latest' + } + return 'backport' + }, } -const needsPublish = async ({ pkg: { private, name, version }, force, tags: getTags }) => { +const needsPublish = async ({ private, name, version }, { force, getTag }) => { if (private) { return } - const tags = getTags(version) - const tag = semver.parse(version).prerelease.length && tags.preTag - ? tags.preTag - : tags.tag - - if (force) { - return tag - } - - const mani = await pacote.manifest(`${name}@${tag}`, { preferOnline: true }) - if (version !== mani.version) { + const tag = await getTag({ name, version }) + if (force || version !== await getVersion(`${name}@${tag}`)) { return tag } } -const getPublishes = async ({ force }) => { +const getPublishes = async (opts) => { const publish = [] - for (const { name, pkg: ws } of await pkg.mapWorkspaces()) { + for (const { name, pkg } of await cli.mapWorkspaces()) { publish.push({ workspace: name, - tag: await needsPublish({ - force, - pkg: ws, - tags: TAGS.workspace, - }), + tag: await needsPublish(pkg, { ...opts, getTag: TAG.workspace }), }) } publish.push({ - tag: await needsPublish({ - force, - pkg, - tags: TAGS.root, - }), + tag: await needsPublish(cli, { ...opts, getTag: TAG.cli }), }) return publish.filter(p => p.tag) diff --git a/scripts/rebuild.js b/scripts/rebuild.js deleted file mode 100644 index f3f75090c11e4..0000000000000 --- a/scripts/rebuild.js +++ /dev/null @@ -1,20 +0,0 @@ -const { join } = require('path') -const { promisify } = require('util') -const glob = promisify(require('glob')) -const log = require('proc-log') -const { npm, run } = require('./util') - -const main = async (pkgNames) => { - for (const name of pkgNames) { - const { path } = await npm.query(`#${name}`).then(r => r[0]) - const binding = await glob(join(path, '**', 'binding.node')) - log.info(name, binding) - if (!binding.length) { - await npm('rebuild', name) - } else { - log.info(`skipping ${name}, already built`) - } - } -} - -run(({ argv }) => main(argv.remain)) diff --git a/scripts/resetdeps.js b/scripts/resetdeps.js index f0aad975386f0..95899ff2a2c45 100644 --- a/scripts/resetdeps.js +++ b/scripts/resetdeps.js @@ -1,6 +1,6 @@ const { join } = require('path') -const { CWD, run, pkg, fs, spawn, git, npm } = require('./util.js') +const { CWD, run, pkg, fs, git, npm } = require('./util.js') const checkout = () => git('checkout', 'node_modules/') @@ -14,12 +14,6 @@ const main = async ({ packageLock }) => { await npm('i', '--ignore-scripts', '--no-audit', '--no-fund', packageLock && '--package-lock') await npm('rebuild', '--ignore-scripts') await npm('run', 'dependencies', '--ignore-scripts') - if (process.env.CI) { - // this script can take awhile to rebuild the cmark-gfm bindings - // so we only run it in CI. locally this is handled by pretest and - // prebuild scripts, which don't run in CI due to --ignore-scripts - await spawn('node', join('scripts', 'rebuild.js'), 'cmark-gfm') - } } run(main).catch(checkout) diff --git a/scripts/template-oss/ci-npmcli-docs.yml b/scripts/template-oss/ci-npmcli-docs.yml new file mode 100644 index 0000000000000..1e3cd054262d3 --- /dev/null +++ b/scripts/template-oss/ci-npmcli-docs.yml @@ -0,0 +1,22 @@ +{{> ci }} + + compare-docs: + {{> job jobName="Compare Docs" jobCheckout=(obj fetch-depth=0) jobIf="github.event_name == 'pull_request'" }} + - name: Build Docs + run: | + node . run build -w docs + mv man/ man-update/ + mv docs/output/ docs/output-update/ + mv docs/content/ docs/content-update/ + - name: Get Current Docs + run: | + git clean -fd + git checkout $\{{ github.event.pull_request.base.ref }} + node . run resetdeps + node . run build -w docs + - name: Diff Man + run: diff -r --color=always man/ man-update/ || true + - name: Diff HTML + run: diff -r --color=always docs/output/ docs/output-update/ || true + - name: Diff Markdown + run: diff -r --color=always docs/content/ docs/content-update/ || true diff --git a/scripts/template-oss/ci.yml b/scripts/template-oss/ci.yml index f1dcc1a4b427a..ec8e9540d648d 100644 --- a/scripts/template-oss/ci.yml +++ b/scripts/template-oss/ci.yml @@ -10,4 +10,4 @@ - name: Run Smoke Tests run: {{rootNpmPath}} test -w smoke-tests --ignore-scripts - name: Check Git Status - run: node scripts/git-dirty.js \ No newline at end of file + run: node scripts/git-dirty.js diff --git a/scripts/template-oss/create-node-pr.yml b/scripts/template-oss/create-node-pr.yml index 23b267d58ee86..3946ba7b264ed 100644 --- a/scripts/template-oss/create-node-pr.yml +++ b/scripts/template-oss/create-node-pr.yml @@ -7,12 +7,16 @@ on: description: "The npm spec to create the PR from" required: true default: 'latest' + branch: + description: "The major node version to serve as the base of the PR. Should be `main` or a number like `18`, `19`, etc." + required: true + default: 'main' dryRun: description: "Setting this to anything will run all the steps except opening the PR" jobs: create-pull-request: - {{> job jobName="Create Node PR" }} + {{> job jobName="Create Node PR" jobCheckout=(obj fetch-depth=0) }} - name: Checkout Node uses: actions/checkout@v3 with: @@ -25,4 +29,4 @@ jobs: GITHUB_TOKEN: $\{{ secrets.NODE_PULL_REQUEST_TOKEN }} run: | DRY_RUN=$([ -z "$\{{ inputs.dryRun }}" ] && echo "" || echo "--dry-run") - node scripts/create-node-pr.js "$\{{ inputs.spec }}" "$DRY_RUN" + node scripts/create-node-pr.js $\{{ inputs.spec }} $\{{ inputs.branch }} "$DRY_RUN" diff --git a/scripts/update-authors.js b/scripts/update-authors.js index 23c4430570c38..fc567b664825a 100755 --- a/scripts/update-authors.js +++ b/scripts/update-authors.js @@ -4,6 +4,7 @@ const { CWD, run, git, fs } = require('./util.js') const main = async () => { const allAuthors = await git('log', '--use-mailmap', '--reverse', '--format=%aN <%aE>', { lines: true, + quiet: true, }) const authors = new Set() diff --git a/scripts/util.js b/scripts/util.js index 7e74eee3fb099..bb8dd48f8c01e 100644 --- a/scripts/util.js +++ b/scripts/util.js @@ -47,7 +47,7 @@ const getArgs = (allArgs) => { const spawn = async (cmd, ...allArgs) => { const { args, - opts: { ok, input, out, lines, quiet, ...opts }, + opts: { ok, input, out, lines, quiet, env, ...opts }, } = getArgs(allArgs) log.info('spawn', `${cmd} ${args.join(' ')}`) @@ -57,10 +57,12 @@ const spawn = async (cmd, ...allArgs) => { const spawnOpts = { stdio: quiet || out || lines ? 'pipe' : 'inherit', cwd: CWD, + env: { ...process.env, ...env }, ...opts, } const proc = cmd === 'git' ? npmGit.spawn(args, spawnOpts) : promiseSpawn(cmd, args, spawnOpts) if (input && proc.stdin) { + log.silly('input', input) proc.stdin.write(input) proc.stdin.end() } @@ -69,12 +71,12 @@ const spawn = async (cmd, ...allArgs) => { if (!ok) { throw err } - log.info('suppressed error', err.message) + log.silly('suppressed error', err) } if (res?.stdout) { res.stdout = res.stdout.toString().trim() - if (res.stdout) { + if (res.stdout && !quiet) { log.silly('stdout', res.stdout) } } @@ -125,16 +127,17 @@ git.dirty = () => npmGit.isClean({ cwd: CWD }).then(async r => { }) const gh = spawn.create('gh') -gh.json = async (...args) => { +gh.json = async (..._args) => { + const { args, opts } = getArgs(_args) const keys = args.pop() - let data = await gh(...args, '--json', keys, { out: true }).then(JSON.parse) + let data = await gh(...args, '--json', keys, { ...opts, out: true }).then(JSON.parse) if (keys.split(',').length === 1) { data = data[keys] } return data } -const run = async (main) => { +const run = async (main, { redact } = {}) => { const argv = {} for (const [k, v] of Object.entries(nopt({}, {}, process.argv))) { argv[k] = v @@ -142,11 +145,13 @@ const run = async (main) => { argv[k.replace(/-([a-z])/g, (_, c) => c.toUpperCase())] = v } + const defaultLevels = ['error', 'warn', 'info'] process.on('log', (l, ...args) => { - if (argv.debug || process.env.CI || l === 'error') { + if (argv.debug || process.env.CI || defaultLevels.includes(l)) { for (const line of formatWithOptions({ colors: true }, ...args).split('\n')) { + const redacted = redact ? line.replace(redact, '***') : line // eslint-disable-next-line no-console - console.error(l.slice(0, 4).toUpperCase(), line) + console.error(l.slice(0, 4).toUpperCase(), redacted) } } }) diff --git a/smoke-tests/package.json b/smoke-tests/package.json index 04577ae822adc..e2ca299c69884 100644 --- a/smoke-tests/package.json +++ b/smoke-tests/package.json @@ -1,5 +1,5 @@ { - "name": "smoke-tests", + "name": "@npmcli/smoke-tests", "description": "The npm cli smoke tests", "version": "1.0.0", "private": true, @@ -19,24 +19,26 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", + "@npmcli/mock-registry": "^1.0.0", "@npmcli/promise-spawn": "^6.0.1", - "@npmcli/template-oss": "4.8.0", - "minify-registry-metadata": "^2.2.0", - "rimraf": "^3.0.2", + "@npmcli/template-oss": "4.9.0", + "http-proxy": "^1.18.1", + "just-extend": "^6.1.1", + "just-safe-set": "^4.1.1", "tap": "^16.0.1", - "which": "^2.0.2" + "which": "^3.0.0" }, "author": "GitHub Inc.", "license": "ISC", "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../scripts/template-oss/index.js" }, "tap": { "no-coverage": true, - "timeout": 300, - "files": "test/index.js", + "timeout": 600, + "test-ignore": "fixtures/*", "nyc-arg": [ "--exclude", "tap-snapshots/**" diff --git a/smoke-tests/tap-snapshots/test/index.js.test.cjs b/smoke-tests/tap-snapshots/test/index.js.test.cjs index 9f539bf8aeeff..de87748529e5f 100644 --- a/smoke-tests/tap-snapshots/test/index.js.test.cjs +++ b/smoke-tests/tap-snapshots/test/index.js.test.cjs @@ -5,7 +5,7 @@ * Make sure to inspect the output below. Do not ignore changes! */ 'use strict' -exports[`test/index.js TAP npm (no args) > should have expected no args output 1`] = ` +exports[`test/index.js TAP basic npm (no args) > should have expected no args output 1`] = ` npm Usage: @@ -32,16 +32,16 @@ All commands: unstar, update, version, view, whoami Specify configs in the ini-formatted file: - {CWD}/smoke-tests/test/tap-testdir-index/.npmrc + {NPM}/{TESTDIR}/project/.npmrc or on the command line via: npm --key=value More configuration info: npm help config Configuration fields: npm help 7 config -npm {CWD} +npm {NPM} ` -exports[`test/index.js TAP npm ci > should throw mismatch deps in lock file error 1`] = ` +exports[`test/index.js TAP basic npm ci > should throw mismatch deps in lock file error 1`] = ` npm ERR! code EUSAGE npm ERR! npm ERR! \`npm ci\` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with \`npm install\` before continuing. @@ -71,274 +71,43 @@ npm ERR! A complete log of this run can be found in: ` -exports[`test/index.js TAP npm diff > should have expected diff output 1`] = ` +exports[`test/index.js TAP basic npm diff > should have expected diff output 1`] = ` +diff --git a/index.js b/index.js +index v1.0.4..v1.1.1 100644 +--- a/index.js ++++ b/index.js +@@ -1,1 +1,1 @@ +-module.exports = "1.0.4" +/ No newline at end of file ++module.exports = "1.1.1" +/ No newline at end of file diff --git a/package.json b/package.json index v1.0.4..v1.1.1 100644 --- a/package.json +++ b/package.json -@@ -1,15 +1,21 @@ +@@ -1,4 +1,4 @@ { "name": "abbrev", -- "version": "1.0.4", -+ "version": "1.1.1", - "description": "Like ruby's abbrev module, but in js", - "author": "Isaac Z. Schlueter ", -- "main": "./lib/abbrev.js", -+ "main": "abbrev.js", - "scripts": { -- "test": "node lib/abbrev.js" -+ "test": "tap test.js --100", -+ "preversion": "npm test", -+ "postversion": "npm publish", -+ "postpublish": "git push origin --all; git push origin --tags" - }, - "repository": "http://github.com/isaacs/abbrev-js", -- "license": { -- "type": "MIT", -- "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE" -- } -+ "license": "ISC", -+ "devDependencies": { -+ "tap": "^10.1" -+ }, -+ "files": [ -+ "abbrev.js" -+ ] +- "version": "1.0.4" ++ "version": "1.1.1" } -diff --git a/LICENSE b/LICENSE -index v1.0.4..v1.1.1 100644 ---- a/LICENSE -+++ b/LICENSE -@@ -1,4 +1,27 @@ --Copyright 2009, 2010, 2011 Isaac Z. Schlueter. -+This software is dual-licensed under the ISC and MIT licenses. -+You may use this software under EITHER of the following licenses. -+ -+---------- -+ -+The ISC License -+ -+Copyright (c) Isaac Z. Schlueter and Contributors -+ -+Permission to use, copy, modify, and/or distribute this software for any -+purpose with or without fee is hereby granted, provided that the above -+copyright notice and this permission notice appear in all copies. -+ -+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ -+---------- -+ -+Copyright Isaac Z. Schlueter and Contributors - All rights reserved. - - Permission is hereby granted, free of charge, to any person -diff --git a/lib/abbrev.js b/lib/abbrev.js -deleted file mode 100644 -index v1.0.4..v1.1.1 ---- a/lib/abbrev.js -+++ b/lib/abbrev.js -@@ -1,111 +0,0 @@ -- --module.exports = exports = abbrev.abbrev = abbrev -- --abbrev.monkeyPatch = monkeyPatch -- --function monkeyPatch () { -- Object.defineProperty(Array.prototype, 'abbrev', { -- value: function () { return abbrev(this) }, -- enumerable: false, configurable: true, writable: true -- }) -- -- Object.defineProperty(Object.prototype, 'abbrev', { -- value: function () { return abbrev(Object.keys(this)) }, -- enumerable: false, configurable: true, writable: true -- }) --} -- --function abbrev (list) { -- if (arguments.length !== 1 || !Array.isArray(list)) { -- list = Array.prototype.slice.call(arguments, 0) -- } -- for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { -- args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) -- } -- -- // sort them lexicographically, so that they're next to their nearest kin -- args = args.sort(lexSort) -- -- // walk through each, seeing how much it has in common with the next and previous -- var abbrevs = {} -- , prev = "" -- for (var i = 0, l = args.length ; i < l ; i ++) { -- var current = args[i] -- , next = args[i + 1] || "" -- , nextMatches = true -- , prevMatches = true -- if (current === next) continue -- for (var j = 0, cl = current.length ; j < cl ; j ++) { -- var curChar = current.charAt(j) -- nextMatches = nextMatches && curChar === next.charAt(j) -- prevMatches = prevMatches && curChar === prev.charAt(j) -- if (!nextMatches && !prevMatches) { -- j ++ -- break -- } -- } -- prev = current -- if (j === cl) { -- abbrevs[current] = current -- continue -- } -- for (var a = current.substr(0, j) ; j <= cl ; j ++) { -- abbrevs[a] = current -- a += current.charAt(j) -- } -- } -- return abbrevs --} -- --function lexSort (a, b) { -- return a === b ? 0 : a > b ? 1 : -1 --} -- -- --// tests --if (module === require.main) { -- --var assert = require("assert") --var util = require("util") -- --console.log("running tests") --function test (list, expect) { -- var actual = abbrev(list) -- assert.deepEqual(actual, expect, -- "abbrev("+util.inspect(list)+") === " + util.inspect(expect) + "/n"+ -- "actual: "+util.inspect(actual)) -- actual = abbrev.apply(exports, list) -- assert.deepEqual(abbrev.apply(exports, list), expect, -- "abbrev("+list.map(JSON.stringify).join(",")+") === " + util.inspect(expect) + "/n"+ -- "actual: "+util.inspect(actual)) --} -- --test([ "ruby", "ruby", "rules", "rules", "rules" ], --{ rub: 'ruby' --, ruby: 'ruby' --, rul: 'rules' --, rule: 'rules' --, rules: 'rules' --}) --test(["fool", "foom", "pool", "pope"], --{ fool: 'fool' --, foom: 'foom' --, poo: 'pool' --, pool: 'pool' --, pop: 'pope' --, pope: 'pope' --}) --test(["a", "ab", "abc", "abcd", "abcde", "acde"], --{ a: 'a' --, ab: 'ab' --, abc: 'abc' --, abcd: 'abcd' --, abcde: 'abcde' --, ac: 'acde' --, acd: 'acde' --, acde: 'acde' --}) -- --console.log("pass") -- --} / No newline at end of file -diff --git a/abbrev.js b/abbrev.js -new file mode 100644 -index v1.0.4..v1.1.1 ---- a/abbrev.js -+++ b/abbrev.js -@@ -0,0 +1,61 @@ -+module.exports = exports = abbrev.abbrev = abbrev -+ -+abbrev.monkeyPatch = monkeyPatch -+ -+function monkeyPatch () { -+ Object.defineProperty(Array.prototype, 'abbrev', { -+ value: function () { return abbrev(this) }, -+ enumerable: false, configurable: true, writable: true -+ }) -+ -+ Object.defineProperty(Object.prototype, 'abbrev', { -+ value: function () { return abbrev(Object.keys(this)) }, -+ enumerable: false, configurable: true, writable: true -+ }) -+} -+ -+function abbrev (list) { -+ if (arguments.length !== 1 || !Array.isArray(list)) { -+ list = Array.prototype.slice.call(arguments, 0) -+ } -+ for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { -+ args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) -+ } -+ -+ // sort them lexicographically, so that they're next to their nearest kin -+ args = args.sort(lexSort) -+ -+ // walk through each, seeing how much it has in common with the next and previous -+ var abbrevs = {} -+ , prev = "" -+ for (var i = 0, l = args.length ; i < l ; i ++) { -+ var current = args[i] -+ , next = args[i + 1] || "" -+ , nextMatches = true -+ , prevMatches = true -+ if (current === next) continue -+ for (var j = 0, cl = current.length ; j < cl ; j ++) { -+ var curChar = current.charAt(j) -+ nextMatches = nextMatches && curChar === next.charAt(j) -+ prevMatches = prevMatches && curChar === prev.charAt(j) -+ if (!nextMatches && !prevMatches) { -+ j ++ -+ break -+ } -+ } -+ prev = current -+ if (j === cl) { -+ abbrevs[current] = current -+ continue -+ } -+ for (var a = current.substr(0, j) ; j <= cl ; j ++) { -+ abbrevs[a] = current -+ a += current.charAt(j) -+ } -+ } -+ return abbrevs -+} -+ -+function lexSort (a, b) { -+ return a === b ? 0 : a > b ? 1 : -1 -+} ` -exports[`test/index.js TAP npm explain > should have expected explain output 1`] = ` +exports[`test/index.js TAP basic npm explain > should have expected explain output 1`] = ` abbrev@1.0.4 node_modules/abbrev abbrev@"^1.0.4" from the root project ` -exports[`test/index.js TAP npm fund > should have expected fund output 1`] = ` +exports[`test/index.js TAP basic npm fund > should have expected fund output 1`] = ` project@1.0.0 -\`-- https://github.com/sponsors/isaacs - \`-- promise-all-reject-late@1.0.1 +\`-- https://github.com/sponsors + \`-- promise-all-reject-late@5.0.0 ` -exports[`test/index.js TAP npm init > should have successful npm init result 1`] = ` -Wrote to {CWD}/smoke-tests/test/tap-testdir-index/project/package.json: +exports[`test/index.js TAP basic npm init > should have successful npm init result 1`] = ` +Wrote to {NPM}/{TESTDIR}/project/package.json: { "name": "project", @@ -354,194 +123,185 @@ Wrote to {CWD}/smoke-tests/test/tap-testdir-index/project/package.json: } ` -exports[`test/index.js TAP npm install dev dep > should have expected dev dep added lockfile result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm install dev dep > should have expected dev dep added lockfile result 1`] = ` +Object { "lockfileVersion": 3, - "requires": true, - "packages": { - "": { + "name": "project", + "packages": Object { + "": Object { + "dependencies": Object { + "abbrev": "^1.0.4", + }, + "devDependencies": Object { + "promise-all-reject-late": "^5.0.0", + }, + "license": "ISC", "name": "project", "version": "1.0.0", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - }, - "devDependencies": { - "promise-all-reject-late": "^1.0.1" - } }, - "node_modules/abbrev": { + "node_modules/abbrev": Object { + "resolved": "{REGISTRY}/abbrev/-/abbrev-1.0.4.tgz", "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz", - "integrity": "sha1-vVWuXkE7oXIu5Mq6H26hBBSlns0=" }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "node_modules/promise-all-reject-late": Object { "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - } - } + "funding": Object { + "url": "https://github.com/sponsors", + }, + "resolved": "{REGISTRY}/promise-all-reject-late/-/promise-all-reject-late-5.0.0.tgz", + "version": "5.0.0", + }, + }, + "requires": true, + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm install dev dep > should have expected dev dep added package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm install dev dep > should have expected dev dep added package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", - "main": "index.js", - "scripts": { - "test": "echo /"Error: no test specified/" && exit 1" + "devDependencies": Object { + "promise-all-reject-late": "^5.0.0", }, - "keywords": [], - "author": "", + "keywords": Array [], "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" + "main": "index.js", + "name": "project", + "scripts": Object { + "test": "echo /"Error: no test specified/" && exit 1", }, - "devDependencies": { - "promise-all-reject-late": "^1.0.1" - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm install dev dep > should have expected dev dep added reify output 1`] = ` -added 1 package +exports[`test/index.js TAP basic npm install dev dep > should have expected dev dep added reify output 1`] = ` +added 1 package in {TIME} 1 package is looking for funding run \`npm fund\` for details ` -exports[`test/index.js TAP npm install prodDep@version > should have expected install reify output 1`] = ` -added 1 package +exports[`test/index.js TAP basic npm install prodDep@version > should have expected install reify output 1`] = ` +added 1 package in {TIME} ` -exports[`test/index.js TAP npm install prodDep@version > should have expected lockfile result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm install prodDep@version > should have expected lockfile result 1`] = ` +Object { "lockfileVersion": 3, - "requires": true, - "packages": { - "": { + "name": "project", + "packages": Object { + "": Object { + "dependencies": Object { + "abbrev": "^1.0.4", + }, + "license": "ISC", "name": "project", "version": "1.0.0", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - } }, - "node_modules/abbrev": { + "node_modules/abbrev": Object { + "resolved": "{REGISTRY}/abbrev/-/abbrev-1.0.4.tgz", "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz", - "integrity": "sha1-vVWuXkE7oXIu5Mq6H26hBBSlns0=" - } - } + }, + }, + "requires": true, + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm install prodDep@version > should have expected package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm install prodDep@version > should have expected package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", + "keywords": Array [], + "license": "ISC", "main": "index.js", - "scripts": { - "test": "echo /"Error: no test specified/" && exit 1" + "name": "project", + "scripts": Object { + "test": "echo /"Error: no test specified/" && exit 1", }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm ls > should have expected ls output 1`] = ` -project@1.0.0 {CWD}/smoke-tests/test/tap-testdir-index/project +exports[`test/index.js TAP basic npm ls > should have expected ls output 1`] = ` +project@1.0.0 {NPM}/{TESTDIR}/project +-- abbrev@1.0.4 -\`-- promise-all-reject-late@1.0.1 +\`-- promise-all-reject-late@5.0.0 ` -exports[`test/index.js TAP npm outdated > should have expected outdated output 1`] = ` +exports[`test/index.js TAP basic npm outdated > should have expected outdated output 1`] = ` Package Current Wanted Latest Location Depended by abbrev 1.0.4 1.1.1 1.1.1 node_modules/abbrev project ` -exports[`test/index.js TAP npm pkg > should have expected npm pkg delete modified package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm pkg > should have expected npm pkg delete modified package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", + "keywords": Array [], + "license": "ISC", "main": "index.js", - "scripts": { + "name": "project", + "scripts": Object { + "hello": "echo Hello", "test": "echo /"Error: no test specified/" && exit 1", - "hello": "echo Hello" }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm pkg > should have expected npm pkg set modified package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm pkg > should have expected npm pkg set modified package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", + "keywords": Array [], + "license": "ISC", "main": "index.js", - "scripts": { + "name": "project", + "scripts": Object { + "hello": "echo Hello", "test": "echo /"Error: no test specified/" && exit 1", - "hello": "echo Hello" }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" + "tap": Object { + "test-env": Array [ + "LC_ALL=sk", + ], }, - "tap": { - "test-env": [ - "LC_ALL=sk" - ] - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm pkg > should have expected pkg delete output 1`] = ` +exports[`test/index.js TAP basic npm pkg > should have expected pkg delete output 1`] = ` ` -exports[`test/index.js TAP npm pkg > should have expected pkg get output 1`] = ` +exports[`test/index.js TAP basic npm pkg > should have expected pkg get output 1`] = ` "ISC" ` -exports[`test/index.js TAP npm pkg > should have expected pkg set output 1`] = ` +exports[`test/index.js TAP basic npm pkg > should have expected pkg set output 1`] = ` ` -exports[`test/index.js TAP npm pkg > should print package.json contents 1`] = ` +exports[`test/index.js TAP basic npm pkg > should print package.json contents 1`] = ` { "name": "project", "version": "1.0.0", "description": "", - "ma", + "main": "index.js", "scripts": { "test": "echo /"Error: no test specified/" && exit 1", "hello": "echo Hello" @@ -560,178 +320,162 @@ exports[`test/index.js TAP npm pkg > should print package.json contents 1`] = ` } ` -exports[`test/index.js TAP npm pkg set scripts > should have expected script added package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm pkg set scripts > should have expected script added package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", - "main": "index.js", - "scripts": { - "test": "echo /"Error: no test specified/" && exit 1", - "hello": "echo Hello" + "devDependencies": Object { + "promise-all-reject-late": "^5.0.0", }, - "keywords": [], - "author": "", + "keywords": Array [], "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" + "main": "index.js", + "name": "project", + "scripts": Object { + "hello": "echo Hello", + "test": "echo /"Error: no test specified/" && exit 1", }, - "devDependencies": { - "promise-all-reject-late": "^1.0.1" - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm pkg set scripts > should have expected set-script output 1`] = ` +exports[`test/index.js TAP basic npm pkg set scripts > should have expected set-script output 1`] = ` ` -exports[`test/index.js TAP npm prefix > should have expected prefix output 1`] = ` -{CWD}/smoke-tests/test/tap-testdir-index/project +exports[`test/index.js TAP basic npm prefix > should have expected prefix output 1`] = ` +{NPM}/{TESTDIR}/project ` -exports[`test/index.js TAP npm run-script > should have expected run-script output 1`] = ` +exports[`test/index.js TAP basic npm run-script > should have expected run-script output 1`] = ` > project@1.0.0 hello > echo Hello Hello ` -exports[`test/index.js TAP npm uninstall > should have expected uninstall lockfile result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm uninstall > should have expected uninstall lockfile result 1`] = ` +Object { "lockfileVersion": 3, - "requires": true, - "packages": { - "": { + "name": "project", + "packages": Object { + "": Object { + "dependencies": Object { + "abbrev": "^1.0.4", + }, + "license": "ISC", "name": "project", "version": "1.0.0", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - } }, - "node_modules/abbrev": { + "node_modules/abbrev": Object { + "resolved": "{REGISTRY}/abbrev/-/abbrev-1.1.1.tgz", "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - } - } + }, + }, + "requires": true, + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm uninstall > should have expected uninstall package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm uninstall > should have expected uninstall package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", + "keywords": Array [], + "license": "ISC", "main": "index.js", - "scripts": { + "name": "project", + "scripts": Object { + "hello": "echo Hello", "test": "echo /"Error: no test specified/" && exit 1", - "hello": "echo Hello" }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm uninstall > should have expected uninstall reify output 1`] = ` -removed 1 package +exports[`test/index.js TAP basic npm uninstall > should have expected uninstall reify output 1`] = ` +removed 1 package in {TIME} ` -exports[`test/index.js TAP npm update dep > should have expected update lockfile result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm update dep > should have expected update lockfile result 1`] = ` +Object { "lockfileVersion": 3, - "requires": true, - "packages": { - "": { + "name": "project", + "packages": Object { + "": Object { + "dependencies": Object { + "abbrev": "^1.0.4", + }, + "devDependencies": Object { + "promise-all-reject-late": "^5.0.0", + }, + "license": "ISC", "name": "project", "version": "1.0.0", - "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" - }, - "devDependencies": { - "promise-all-reject-late": "^1.0.1" - } }, - "node_modules/abbrev": { + "node_modules/abbrev": Object { + "resolved": "{REGISTRY}/abbrev/-/abbrev-1.1.1.tgz", "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "node_modules/promise-all-reject-late": Object { "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - } - } + "funding": Object { + "url": "https://github.com/sponsors", + }, + "resolved": "{REGISTRY}/promise-all-reject-late/-/promise-all-reject-late-5.0.0.tgz", + "version": "5.0.0", + }, + }, + "requires": true, + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm update dep > should have expected update package.json result 1`] = ` -{ - "name": "project", - "version": "1.0.0", +exports[`test/index.js TAP basic npm update dep > should have expected update package.json result 1`] = ` +Object { + "author": "", + "dependencies": Object { + "abbrev": "^1.0.4", + }, "description": "", - "main": "index.js", - "scripts": { - "test": "echo /"Error: no test specified/" && exit 1", - "hello": "echo Hello" + "devDependencies": Object { + "promise-all-reject-late": "^5.0.0", }, - "keywords": [], - "author": "", + "keywords": Array [], "license": "ISC", - "dependencies": { - "abbrev": "^1.0.4" + "main": "index.js", + "name": "project", + "scripts": Object { + "hello": "echo Hello", + "test": "echo /"Error: no test specified/" && exit 1", }, - "devDependencies": { - "promise-all-reject-late": "^1.0.1" - } + "version": "1.0.0", } - ` -exports[`test/index.js TAP npm update dep > should have expected update reify output 1`] = ` -changed 1 package +exports[`test/index.js TAP basic npm update dep > should have expected update reify output 1`] = ` +changed 1 package in {TIME} 1 package is looking for funding run \`npm fund\` for details ` -exports[`test/index.js TAP npm view > should have expected view output 1`] = ` -abbrev@1.0.4 | MIT | deps: none | versions: 8 -Like ruby's abbrev module, but in js -https://github.com/isaacs/abbrev-js#readme +exports[`test/index.js TAP basic npm view > should have expected view output 1`] = ` +abbrev@1.0.4 | Proprietary | deps: none | versions: 2 +mocked test package dist -.tarball: https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz -.shasum: bd55ae5e413ba1722ee4caba1f6ea10414a59ecd - -maintainers: -- nlf -- ruyadorno -- darcyclarke -- adam_baldwin -- isaacs +.tarball: {REGISTRY}/abbrev/-/abbrev-1.0.4.tgz +.shasum: undefined dist-tags: latest: 1.1.1 -published over a year ago by isaacs +published just now ` diff --git a/smoke-tests/test/fixtures/abbrev.json b/smoke-tests/test/fixtures/abbrev.json deleted file mode 100644 index ffcf5474a9de8..0000000000000 --- a/smoke-tests/test/fixtures/abbrev.json +++ /dev/null @@ -1,449 +0,0 @@ -{ - "_id": "abbrev", - "_rev": "72-d1d46bef3d311d6da6737e109e771869", - "name": "abbrev", - "dist-tags": { - "latest": "1.1.1" - }, - "versions": { - "1.0.3": { - "name": "abbrev", - "version": "1.0.3", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "./lib/abbrev.js", - "scripts": { - "test": "node lib/abbrev.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/isaacs/abbrev-js.git" - }, - "_id": "abbrev@1.0.3", - "engines": { - "node": "*" - }, - "_engineSupported": true, - "_npmVersion": "1.0.0rc7", - "_nodeVersion": "v0.5.0-pre", - "_defaultsLoaded": true, - "dist": { - "shasum": "aa049c967f999222aa42e14434f0c562ef468241", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.3.tgz" - }, - "directories": {} - }, - "1.0.4": { - "name": "abbrev", - "version": "1.0.4", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "./lib/abbrev.js", - "scripts": { - "test": "node lib/abbrev.js" - }, - "repository": { - "type": "git", - "url": "http://github.com/isaacs/abbrev-js" - }, - "license": { - "type": "MIT", - "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE" - }, - "_id": "abbrev@1.0.4", - "dist": { - "shasum": "bd55ae5e413ba1722ee4caba1f6ea10414a59ecd", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz" - }, - "_npmVersion": "1.1.70", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {} - }, - "1.0.5": { - "name": "abbrev", - "version": "1.0.5", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "http://github.com/isaacs/abbrev-js" - }, - "license": { - "type": "MIT", - "url": "https://github.com/isaacs/abbrev-js/raw/master/LICENSE" - }, - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js", - "_id": "abbrev@1.0.5", - "_shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03", - "_from": ".", - "_npmVersion": "1.4.7", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "dist": { - "shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - }, - "directories": {} - }, - "1.0.6": { - "name": "abbrev", - "version": "1.0.6", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "license": "ISC", - "gitHead": "648a6735d9c5a7a04885e3ada49eed4db36181c2", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "_id": "abbrev@1.0.6", - "_shasum": "b6d632b859b3fa2d6f7e4b195472461b9e32dc30", - "_from": ".", - "_npmVersion": "2.10.0", - "_nodeVersion": "2.0.1", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "b6d632b859b3fa2d6f7e4b195472461b9e32dc30", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {} - }, - "1.0.7": { - "name": "abbrev", - "version": "1.0.7", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "tap test.js --cov" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "license": "ISC", - "devDependencies": { - "tap": "^1.2.0" - }, - "gitHead": "821d09ce7da33627f91bbd8ed631497ed6f760c2", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "_id": "abbrev@1.0.7", - "_shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", - "_from": ".", - "_npmVersion": "2.10.1", - "_nodeVersion": "2.0.1", - "_npmUser": { - "name": "isaacs", - "email": "isaacs@npmjs.com" - }, - "dist": { - "shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "directories": {} - }, - "1.0.9": { - "name": "abbrev", - "version": "1.0.9", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "tap test.js --cov" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "license": "ISC", - "devDependencies": { - "tap": "^5.7.2" - }, - "files": [ - "abbrev.js" - ], - "gitHead": "c386cd9dbb1d8d7581718c54d4ba944cc9298d6f", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "_id": "abbrev@1.0.9", - "_shasum": "91b4792588a7738c25f35dd6f63752a2f8776135", - "_from": ".", - "_npmVersion": "3.9.1", - "_nodeVersion": "4.4.4", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "dist": { - "shasum": "91b4792588a7738c25f35dd6f63752a2f8776135", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/abbrev-1.0.9.tgz_1466016055839_0.7825860097073019" - }, - "directories": {} - }, - "1.1.0": { - "name": "abbrev", - "version": "1.1.0", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "tap test.js --100", - "preversion": "npm test", - "postversion": "npm publish", - "postpublish": "git push origin --all; git push origin --tags" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "license": "ISC", - "devDependencies": { - "tap": "^10.1" - }, - "files": [ - "abbrev.js" - ], - "gitHead": "7136d4d95449dc44115d4f78b80ec907724f64e0", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "_id": "abbrev@1.1.0", - "_shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f", - "_from": ".", - "_npmVersion": "4.3.0", - "_nodeVersion": "8.0.0-pre", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "dist": { - "shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/abbrev-1.1.0.tgz_1487054000015_0.9229173036292195" - }, - "directories": {} - }, - "1.1.1": { - "name": "abbrev", - "version": "1.1.1", - "description": "Like ruby's abbrev module, but in js", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "main": "abbrev.js", - "scripts": { - "test": "tap test.js --100", - "preversion": "npm test", - "postversion": "npm publish", - "postpublish": "git push origin --all; git push origin --tags" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "license": "ISC", - "devDependencies": { - "tap": "^10.1" - }, - "files": [ - "abbrev.js" - ], - "gitHead": "a9ee72ebc8fe3975f1b0c7aeb3a8f2a806a432eb", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "_id": "abbrev@1.1.1", - "_npmVersion": "5.4.2", - "_nodeVersion": "8.5.0", - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "dist": { - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "shasum": "f8f2c887ad10bf67f634f005b6987fed3179aac8", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - }, - "maintainers": [ - { - "name": "gabra", - "email": "jerry+1@npmjs.com" - }, - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_npmOperationalInternal": { - "host": "s3://npm-registry-packages", - "tmp": "tmp/abbrev-1.1.1.tgz_1506566833068_0.05750026390887797" - }, - "directories": {} - } - }, - "maintainers": [ - { - "email": "quitlahok@gmail.com", - "name": "nlf" - }, - { - "email": "ruyadorno@hotmail.com", - "name": "ruyadorno" - }, - { - "email": "darcy@darcyclarke.me", - "name": "darcyclarke" - }, - { - "email": "evilpacket@gmail.com", - "name": "adam_baldwin" - }, - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - "description": "Like ruby's abbrev module, but in js", - "time": { - "modified": "2020-10-13T05:04:03.636Z", - "created": "2011-03-21T22:21:11.183Z", - "1.0.1": "2011-03-21T22:21:11.183Z", - "1.0.2": "2011-03-21T22:21:11.183Z", - "1.0.3": "2011-03-21T22:21:11.183Z", - "1.0.3-1": "2011-03-24T23:01:19.581Z", - "1.0.4": "2013-01-09T00:01:24.135Z", - "1.0.5": "2014-04-17T20:09:12.523Z", - "1.0.6": "2015-05-21T00:58:16.778Z", - "1.0.7": "2015-05-30T22:57:54.685Z", - "1.0.9": "2016-06-15T18:41:01.215Z", - "1.1.0": "2017-02-14T06:33:20.235Z", - "1.1.1": "2017-09-28T02:47:13.220Z" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "users": { - "leesei": true, - "ceejbot": true, - "isaacs": true, - "npm-www": true, - "tunnckocore": true, - "ruanyu1": true, - "leodutra": true, - "jessaustin": true, - "jian263994241": true, - "floriannagel": true, - "tdmalone": true, - "ryanve": true, - "detj": true, - "monjer": true, - "d-band": true - }, - "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n var abbrev = require(\"abbrev\");\n abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n \n // returns:\n { fl: 'flop'\n , flo: 'flop'\n , flop: 'flop'\n , fol: 'folding'\n , fold: 'folding'\n , foldi: 'folding'\n , foldin: 'folding'\n , folding: 'folding'\n , foo: 'foo'\n , fool: 'fool'\n }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n", - "readmeFilename": "README.md", - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "license": "ISC" -} diff --git a/smoke-tests/test/fixtures/abbrev.min.json b/smoke-tests/test/fixtures/abbrev.min.json deleted file mode 100644 index c03d91c9c8c19..0000000000000 --- a/smoke-tests/test/fixtures/abbrev.min.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "name": "abbrev", - "dist-tags": { - "latest": "1.1.1" - }, - "versions": { - "1.0.3": { - "name": "abbrev", - "version": "1.0.3", - "dist": { - "shasum": "aa049c967f999222aa42e14434f0c562ef468241", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.3.tgz" - }, - "engines": { - "node": "*" - } - }, - "1.0.4": { - "name": "abbrev", - "version": "1.0.4", - "dist": { - "shasum": "bd55ae5e413ba1722ee4caba1f6ea10414a59ecd", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.4.tgz" - } - }, - "1.0.5": { - "name": "abbrev", - "version": "1.0.5", - "dist": { - "shasum": "5d8257bd9ebe435e698b2fa431afde4fe7b10b03", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz" - } - }, - "1.0.6": { - "name": "abbrev", - "version": "1.0.6", - "dist": { - "shasum": "b6d632b859b3fa2d6f7e4b195472461b9e32dc30", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.6.tgz" - } - }, - "1.0.7": { - "name": "abbrev", - "version": "1.0.7", - "devDependencies": { - "tap": "^1.2.0" - }, - "dist": { - "shasum": "5b6035b2ee9d4fb5cf859f08a9be81b208491843", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" - } - }, - "1.0.9": { - "name": "abbrev", - "version": "1.0.9", - "devDependencies": { - "tap": "^5.7.2" - }, - "dist": { - "shasum": "91b4792588a7738c25f35dd6f63752a2f8776135", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" - } - }, - "1.1.0": { - "name": "abbrev", - "version": "1.1.0", - "devDependencies": { - "tap": "^10.1" - }, - "dist": { - "shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz" - } - }, - "1.1.1": { - "name": "abbrev", - "version": "1.1.1", - "devDependencies": { - "tap": "^10.1" - }, - "dist": { - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "shasum": "f8f2c887ad10bf67f634f005b6987fed3179aac8", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - } - } - }, - "modified": "2020-10-13T05:04:03.636Z" -} diff --git a/smoke-tests/test/fixtures/abbrev/-/abbrev-1.0.4.tgz b/smoke-tests/test/fixtures/abbrev/-/abbrev-1.0.4.tgz deleted file mode 100644 index dfd1b55919e2f..0000000000000 Binary files a/smoke-tests/test/fixtures/abbrev/-/abbrev-1.0.4.tgz and /dev/null differ diff --git a/smoke-tests/test/fixtures/abbrev/-/abbrev-1.1.1.tgz b/smoke-tests/test/fixtures/abbrev/-/abbrev-1.1.1.tgz deleted file mode 100644 index 4d9504504f5a3..0000000000000 Binary files a/smoke-tests/test/fixtures/abbrev/-/abbrev-1.1.1.tgz and /dev/null differ diff --git a/smoke-tests/test/fixtures/promise-all-reject-late.json b/smoke-tests/test/fixtures/promise-all-reject-late.json deleted file mode 100644 index e243b92a3b92e..0000000000000 --- a/smoke-tests/test/fixtures/promise-all-reject-late.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "_id": "promise-all-reject-late", - "_rev": "1-bb2ac9479869cc8479d1dd01c568acc0", - "name": "promise-all-reject-late", - "dist-tags": { - "latest": "1.0.1" - }, - "versions": { - "1.0.0": { - "name": "promise-all-reject-late", - "version": "1.0.0", - "description": "Like Promise.all, but save rejections until all promises are resolved", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "https://izs.me" - }, - "license": "ISC", - "scripts": { - "test": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags" - }, - "tap": { - "check-coverage": true - }, - "devDependencies": { - "tap": "^14.10.5" - }, - "gitHead": "e9614a15b22f421aa97ff281d4e0f23681edbe98", - "_id": "promise-all-reject-late@1.0.0", - "_nodeVersion": "13.3.0", - "_npmVersion": "6.13.4", - "dist": { - "integrity": "sha512-f5XvVl++12pEo7Sv7f7FGfzVuVpeY2msNKjn7nNcXyOSKh5uVu7IAzDO6RE9hDVoHJhxvg+gqEacwkZ891Se5g==", - "shasum": "4fa37515e2d78c3b0462414402a8debce62b8b9f", - "tarball": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.0.tgz", - "fileCount": 7, - "unpackedSize": 123039, - "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeBmldCRA9TVsSAnZWagAAaigP/2CarvNCbglNS0dgjOoH\n7ZuFo1cG+N8BkZct00TyEJjuB+5UUmv9TSnZogfEOGutvMqUTSRhvm3fOWsJ\n7TXs8zJ6SotDR9+xlxqi/skpYXfRdNjdaMvo9kYO5jaV84pstdbl17sPeYXd\nCudbAKp1sYodlaJyqpyfUd2PWUNe/VGLODmjLogHB4/bevT3tdjsdauKrUS4\n3VFw8sS1Fwp7P2YneNIK3C1TY/Yb66KysZO23VsQemCQFKXpQJMa9B6yj8zs\n5BQp+W5tM70IfW6OXD0+Vt2jWr9jmKmoWVEiL5usJT3zD7vRbeH3xQvSEgDD\nskI8vH8iJ+3EbEOWTGlIu7mX88Dp2KnHOoRUkOR03WJWuGnsTC8Uyqi0F1Xd\nFeFlaeNzynR/R2LcdRNiFOM+1xtzfAtVGF7TIp9UjgJwSNNkEMlkNzQqSiC7\n/AeqsAYoBBNmYWY2fvXdS9HQ4HfIGjI++jCYWX4I7sUvOjqfcwlEz8MwromA\nqeBAFPdvnB0F/q/AOOLkcdsO81jES7ts0nB7bDt0rDbztWWq34BSMDnNoSDo\nDE9q8u7g68tQcr3WmOQr4ro10sSbJVJZmz8DSJKCbVJ+FN0+GM+49oyyhIFl\nOjokXn5U8ASEdiZnmFnt51dr9A4fyjhehotJA6qSs7t2fBe86VnufijC971U\nv3Jc\r\n=lLwf\r\n-----END PGP SIGNATURE-----\r\n" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "directories": {}, - "_npmOperationalInternal": { - "host": "s3://npm-registry-packages", - "tmp": "tmp/promise-all-reject-late_1.0.0_1577478492470_0.9438095135747766" - }, - "_hasShrinkwrap": false - }, - "1.0.1": { - "name": "promise-all-reject-late", - "version": "1.0.1", - "description": "Like Promise.all, but save rejections until all promises are resolved", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "https://izs.me" - }, - "license": "ISC", - "scripts": { - "test": "tap", - "preversion": "npm test", - "postversion": "npm publish", - "prepublishOnly": "git push origin --follow-tags" - }, - "tap": { - "check-coverage": true - }, - "devDependencies": { - "tap": "^14.10.5" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "gitHead": "c892a9db86650c9229ab4cc70395106684d6818a", - "_id": "promise-all-reject-late@1.0.1", - "_nodeVersion": "12.14.1", - "_npmVersion": "6.13.6", - "dist": { - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "shasum": "f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2", - "tarball": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "fileCount": 8, - "unpackedSize": 123171, - "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeL65kCRA9TVsSAnZWagAAas4P/2WFFJvncp0LWb3DbE0t\ndx9BhZEwY3W8V6ug8uKvph24LoQp1PakkncscKS7PsCVHyIslD+fi6V99AmI\nOmL2ECAMUd5N69Cs8eTi4tKTNtUoIslfCu0+SMlCAF11D7oBXSabdOxGQofA\nuksoHdCqGM6M1y2BGjK7FR8dSwvgbQCPaUzazZ5w7w4XqVxDlzbvNj2E5mSF\n5HjlT5q239uNQppwPIFpisyi9DKa0ran2N7F2ioZ1PHvhFCqo6rmL8tAQsxQ\n+3OA4eFD0FJCJuqd3MOaY66mkncfNpmPvQYMyigKBUdJJyrgNsB67yfaFduy\ndK198Bnva5kotttQ4EHxM6gkqRm2d9o1/sYmAUtDELgrVDxzeNl+yG+nCkho\n1ta4cY+wy1dTjqAYaprQJ855nIeGGnr3tvz4dEGX/5eyh5K+oYVOYRFvWFX6\nVlEhBmSRqamfW5N1ndMyY18FM+Vc12yu66yZ3z1FqbgEGqdf3EP3lwWqClpP\nbPdXANzHM1FIz1PGHC7IZFWXH5KV1z+JXXahg/d8CLzz0PY6jaBt4c2xDvo7\nLaEAm7kNMbdewKvuTuG7x2Kqyf1KwjpOhXMrq6h0rlFm0pRt0xAArQ9Sglw8\n2Vq9Ic9EEsSIpzA5iQ86O1xkTREGHTB3uTRXUJixXIGkhLkhBB+Uj9y+GoOh\nX+Dm\r\n=yF+m\r\n-----END PGP SIGNATURE-----\r\n" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "_npmUser": { - "name": "isaacs", - "email": "i@izs.me" - }, - "directories": {}, - "_npmOperationalInternal": { - "host": "s3://npm-registry-packages", - "tmp": "tmp/promise-all-reject-late_1.0.1_1580183139628_0.5159334029276426" - }, - "_hasShrinkwrap": false - } - }, - "time": { - "created": "2019-12-27T20:28:12.428Z", - "1.0.0": "2019-12-27T20:28:12.645Z", - "modified": "2020-01-28T03:45:42.154Z", - "1.0.1": "2020-01-28T03:45:39.762Z" - }, - "maintainers": [ - { - "name": "isaacs", - "email": "i@izs.me" - } - ], - "description": "Like Promise.all, but save rejections until all promises are resolved", - "author": { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me", - "url": "https://izs.me" - }, - "license": "ISC", - "readme": "# promise-all-reject-late\n\nLike Promise.all, but save rejections until all promises are resolved.\n\nThis is handy when you want to do a bunch of things in parallel, and\nrollback on failure, without clobbering or conflicting with those parallel\nactions that may be in flight. For example, creating a bunch of files,\nand deleting any if they don't all succeed.\n\nExample:\n\n```js\nconst lateReject = require('promise-all-reject-late')\n\nconst { promisify } = require('util')\nconst fs = require('fs')\nconst writeFile = promisify(fs.writeFile)\n\nconst createFilesOrRollback = (files) => {\n return lateReject(files.map(file => writeFile(file, 'some data')))\n .catch(er => {\n // try to clean up, then fail with the initial error\n // we know that all write attempts are finished at this point\n return lateReject(files.map(file => rimraf(file)))\n .catch(er => {\n console.error('failed to clean up, youre on your own i guess', er)\n })\n .then(() => {\n // fail with the original error\n throw er\n })\n })\n}\n```\n\n## API\n\n* `lateReject([array, of, promises])` - Resolve all the promises,\n returning a promise that rejects with the first error, or resolves with\n the array of results, but only after all promises are settled.\n", - "readmeFilename": "README.md", - "_cached": false, - "_contentLength": 0 -} \ No newline at end of file diff --git a/smoke-tests/test/fixtures/promise-all-reject-late.min.json b/smoke-tests/test/fixtures/promise-all-reject-late.min.json deleted file mode 100644 index 699be7aaf2e82..0000000000000 --- a/smoke-tests/test/fixtures/promise-all-reject-late.min.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "promise-all-reject-late", - "dist-tags": { - "latest": "1.0.1" - }, - "versions": { - "1.0.0": { - "name": "promise-all-reject-late", - "version": "1.0.0", - "devDependencies": { - "tap": "^14.10.5" - }, - "dist": { - "integrity": "sha512-f5XvVl++12pEo7Sv7f7FGfzVuVpeY2msNKjn7nNcXyOSKh5uVu7IAzDO6RE9hDVoHJhxvg+gqEacwkZ891Se5g==", - "shasum": "4fa37515e2d78c3b0462414402a8debce62b8b9f", - "tarball": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.0.tgz", - "fileCount": 7, - "unpackedSize": 123039, - "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeBmldCRA9TVsSAnZWagAAaigP/2CarvNCbglNS0dgjOoH\n7ZuFo1cG+N8BkZct00TyEJjuB+5UUmv9TSnZogfEOGutvMqUTSRhvm3fOWsJ\n7TXs8zJ6SotDR9+xlxqi/skpYXfRdNjdaMvo9kYO5jaV84pstdbl17sPeYXd\nCudbAKp1sYodlaJyqpyfUd2PWUNe/VGLODmjLogHB4/bevT3tdjsdauKrUS4\n3VFw8sS1Fwp7P2YneNIK3C1TY/Yb66KysZO23VsQemCQFKXpQJMa9B6yj8zs\n5BQp+W5tM70IfW6OXD0+Vt2jWr9jmKmoWVEiL5usJT3zD7vRbeH3xQvSEgDD\nskI8vH8iJ+3EbEOWTGlIu7mX88Dp2KnHOoRUkOR03WJWuGnsTC8Uyqi0F1Xd\nFeFlaeNzynR/R2LcdRNiFOM+1xtzfAtVGF7TIp9UjgJwSNNkEMlkNzQqSiC7\n/AeqsAYoBBNmYWY2fvXdS9HQ4HfIGjI++jCYWX4I7sUvOjqfcwlEz8MwromA\nqeBAFPdvnB0F/q/AOOLkcdsO81jES7ts0nB7bDt0rDbztWWq34BSMDnNoSDo\nDE9q8u7g68tQcr3WmOQr4ro10sSbJVJZmz8DSJKCbVJ+FN0+GM+49oyyhIFl\nOjokXn5U8ASEdiZnmFnt51dr9A4fyjhehotJA6qSs7t2fBe86VnufijC971U\nv3Jc\r\n=lLwf\r\n-----END PGP SIGNATURE-----\r\n" - } - }, - "1.0.1": { - "name": "promise-all-reject-late", - "version": "1.0.1", - "devDependencies": { - "tap": "^14.10.5" - }, - "dist": { - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "shasum": "f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2", - "tarball": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "fileCount": 8, - "unpackedSize": 123171, - "npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeL65kCRA9TVsSAnZWagAAas4P/2WFFJvncp0LWb3DbE0t\ndx9BhZEwY3W8V6ug8uKvph24LoQp1PakkncscKS7PsCVHyIslD+fi6V99AmI\nOmL2ECAMUd5N69Cs8eTi4tKTNtUoIslfCu0+SMlCAF11D7oBXSabdOxGQofA\nuksoHdCqGM6M1y2BGjK7FR8dSwvgbQCPaUzazZ5w7w4XqVxDlzbvNj2E5mSF\n5HjlT5q239uNQppwPIFpisyi9DKa0ran2N7F2ioZ1PHvhFCqo6rmL8tAQsxQ\n+3OA4eFD0FJCJuqd3MOaY66mkncfNpmPvQYMyigKBUdJJyrgNsB67yfaFduy\ndK198Bnva5kotttQ4EHxM6gkqRm2d9o1/sYmAUtDELgrVDxzeNl+yG+nCkho\n1ta4cY+wy1dTjqAYaprQJ855nIeGGnr3tvz4dEGX/5eyh5K+oYVOYRFvWFX6\nVlEhBmSRqamfW5N1ndMyY18FM+Vc12yu66yZ3z1FqbgEGqdf3EP3lwWqClpP\nbPdXANzHM1FIz1PGHC7IZFWXH5KV1z+JXXahg/d8CLzz0PY6jaBt4c2xDvo7\nLaEAm7kNMbdewKvuTuG7x2Kqyf1KwjpOhXMrq6h0rlFm0pRt0xAArQ9Sglw8\n2Vq9Ic9EEsSIpzA5iQ86O1xkTREGHTB3uTRXUJixXIGkhLkhBB+Uj9y+GoOh\nX+Dm\r\n=yF+m\r\n-----END PGP SIGNATURE-----\r\n" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - } - }, - "modified": "2020-01-28T03:45:42.154Z", - "_cached": false, - "_contentLength": 2803 -} \ No newline at end of file diff --git a/smoke-tests/test/fixtures/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz b/smoke-tests/test/fixtures/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz deleted file mode 100644 index 7da4044238766..0000000000000 Binary files a/smoke-tests/test/fixtures/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz and /dev/null differ diff --git a/smoke-tests/test/fixtures/server.js b/smoke-tests/test/fixtures/server.js deleted file mode 100644 index b1056a2219066..0000000000000 --- a/smoke-tests/test/fixtures/server.js +++ /dev/null @@ -1,49 +0,0 @@ -const { join, basename } = require('path') -const { existsSync, readFileSync } = require('fs') -const http = require('http') -const PORT = 12345 + (+process.env.TAP_CHILD_ID || 0) - -let server = null -const corgiDoc = 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' - -const start = () => new Promise((resolve) => { - server = http.createServer((req, res) => { - res.setHeader('connection', 'close') - - const f = join(__dirname, join('/', req.url.replace(/@/, '').replace(/%2f/i, '/'))) - - // a magic package that causes us to return an error that will be logged - if (basename(f) === 'fail_reflect_user_agent') { - res.statusCode = 404 - res.setHeader('npm-notice', req.headers['user-agent']) - return res.end() - } - - const isCorgi = req.headers.accept.includes('application/vnd.npm.install-v1+json') - const file = f + ( - isCorgi && existsSync(`${f}.min.json`) ? '.min.json' - : existsSync(`${f}.json`) ? '.json' - : existsSync(`${f}/index.json`) ? 'index.json' - : '' - ) - - try { - const body = readFileSync(file) - res.setHeader('content-length', body.length) - res.setHeader('content-type', /\.min\.json$/.test(file) ? corgiDoc - : /\.json$/.test(file) ? 'application/json' - : 'application/octet-stream') - res.end(body) - } catch { - res.statusCode = 500 - res.setHeader('content-type', 'text/plain') - res.end('bad') - } - }).listen(PORT, resolve) -}) - -module.exports = { - start, - stop: () => server.close(), - registry: `http://localhost:${PORT}/`, -} diff --git a/smoke-tests/test/fixtures/setup.js b/smoke-tests/test/fixtures/setup.js new file mode 100644 index 0000000000000..4291006b435e0 --- /dev/null +++ b/smoke-tests/test/fixtures/setup.js @@ -0,0 +1,219 @@ +const fs = require('fs/promises') +const { existsSync } = require('fs') +const { join, resolve, sep, extname, relative, delimiter } = require('path') +const which = require('which') +const spawn = require('@npmcli/promise-spawn') +const justExtend = require('just-extend') +const justSet = require('just-safe-set') +const MockRegistry = require('@npmcli/mock-registry') +const { Blob } = require('buffer') +const http = require('http') +const httpProxy = require('http-proxy') + +const { SMOKE_PUBLISH_NPM, CI, PATH, Path, TAP_CHILD_ID = '0' } = process.env +const PORT = 12345 + (+TAP_CHILD_ID) +const CLI_ROOT = resolve(process.cwd(), '..') + +const set = (obj, ...args) => justSet(obj, ...args) && obj +const merge = (...args) => justExtend(true, ...args) +const normalizePath = path => path.replace(/[A-Z]:/, '').replace(/\\/g, '/') + +const testdirHelper = (obj) => { + for (const [key, value] of Object.entries(obj)) { + if (extname(key) === '.json') { + obj[key] = JSON.stringify(value, null, 2) + } else if (typeof value === 'object') { + obj[key] = testdirHelper(value) + } else { + obj[key] = value + } + } + return obj +} + +const getSpawnArgs = async () => { + const cliBin = join('bin', 'npm') + const cliJsBin = join('bin', 'npm-cli.js') + const npmLinks = await which('npm', { all: true }) + const npmPaths = await Promise.all(npmLinks.map(npm => fs.realpath(npm))) + + const cleanNpmPaths = [...new Set([ + CLI_ROOT, + join(CLI_ROOT, cliBin), + join(CLI_ROOT, cliJsBin), + ...npmLinks, + ...npmPaths, + ...npmPaths.map(n => n.replace(sep + cliBin, '')), + ...npmPaths.map(n => n.replace(sep + cliJsBin, '')), + ])] + + if (SMOKE_PUBLISH_NPM) { + return { + command: ['npm'], + NPM: cleanNpmPaths, + } + } + + return { + command: [process.execPath, join(CLI_ROOT, cliJsBin)], + NODE: process.execPath, + NPM: cleanNpmPaths, + } +} + +module.exports = async (t, { testdir = {}, debug } = {}) => { + // setup fixtures + const root = t.testdir({ + cache: {}, + project: { '.npmrc': '' }, + bin: {}, + global: { '.npmrc': '' }, + ...testdirHelper(testdir), + }) + const paths = { + root, + project: join(root, 'project'), + global: join(root, 'global'), + userConfig: join(root, 'project', '.npmrc'), + globalConfig: join(root, 'global', '.npmrc'), + cache: join(root, 'cache'), + bin: join(root, 'bin'), + } + + const registry = new MockRegistry({ + tap: t, + registry: 'http://smoke-test-registry.club/', + debug, + }) + const httpProxyRegistry = `http://localhost:${PORT}` + const proxy = httpProxy.createProxyServer({}) + const server = http.createServer((req, res) => proxy.web(req, res, { target: registry.origin })) + await new Promise(res => server.listen(PORT, res)) + t.teardown(() => server.close()) + + // update notifier should never be written + t.afterEach(async (t) => { + t.equal(existsSync(join(paths.cache, '_update-notifier-last-checked')), false) + // this requires that mocks not be shared between sub tests but it helps + // find mistakes quicker instead of waiting for the entire test to end + t.strictSame(registry.nock.pendingMocks(), [], 'no pending mocks after each') + t.strictSame(registry.nock.activeMocks(), [], 'no active mocks after each') + }) + + const debugLog = debug || CI ? (...a) => console.error(...a) : () => {} + const { command, ...spawnPaths } = await getSpawnArgs({ log: debugLog }) + const cleanPaths = Object.entries(spawnPaths) + + const cleanOutput = s => { + // sometimes we print normalized paths in snapshots regardless of + // platform so replace those first then replace platform style paths + for (const [key, value] of cleanPaths) { + const values = [].concat(value) + for (const v of values) { + s = s.split(normalizePath(v)).join(`{${key}}`) + } + } + for (const [key, value] of cleanPaths) { + const values = [].concat(value) + for (const v of values) { + s = s.split(v).join(`{${key}}`) + } + } + return s + .split(relative(CLI_ROOT, t.testdirName)).join('{TESTDIR}') + .split(httpProxyRegistry).join('{REGISTRY}') + .split(registry.origin).join('{REGISTRY}') + .replace(/\\+/g, '/') + .replace(/\r\n/g, '\n') + .replace(/ \(in a browser\)/g, '') + .replace(/^npm@.* /gm, 'npm ') + .replace(/^.*debug-[0-9]+.log$/gm, '') + .replace(/in \d+ms$/gm, 'in {TIME}') + } + const log = (...a) => debugLog(cleanOutput(a.join(' '))) + t.cleanSnapshot = cleanOutput + + const npm = async (...args) => { + const defaultFlags = [ + `--registry=${httpProxyRegistry}`, + `--cache=${paths.cache}`, + `--prefix=${paths.project}`, + `--userconfig=${paths.userConfig}`, + `--globalconfig=${paths.globalConfig}`, + '--no-audit', + '--no-update-notifier', + '--loglevel=silly', + ] + const [positionals, flags] = args.reduce((acc, arg) => { + if (arg.startsWith('-')) { + acc[1].push(arg) + } else { + acc[0].push(arg) + } + return acc + }, [[], defaultFlags]) + + const spawnCmd = command[0] + const spawnArgs = [...command.slice(1), ...positionals, ...flags] + + log(`${spawnCmd} ${spawnArgs.filter(a => !defaultFlags.includes(a)).join(' ')}`) + log('-'.repeat(40)) + + const { stderr, stdout } = await spawn(spawnCmd, spawnArgs, { + cwd: paths.project, + env: { + HTTP_PROXY: httpProxyRegistry, + HOME: paths.root, + [Path ? 'Path' : 'PATH']: `${Path || PATH}${delimiter}${paths.bin}`, + COMSPEC: process.env.COMSPEC, + }, + }) + + log(stderr) + log('-'.repeat(40)) + log(stdout) + log('='.repeat(40)) + + return cleanOutput(stdout) + } + + // helpers for reading/writing files and their source + const readFile = async (f) => { + const file = await fs.readFile(join(paths.project, f), 'utf-8') + return extname(f) === '.json' ? JSON.parse(file) : file + } + + // Returns a recurisve list of relative file paths in the testdir root + // will also follow symlinks and print their relative paths + const tree = async (rootDir = paths.project, dir = rootDir) => { + const results = {} + for (const item of await fs.readdir(dir)) { + const itemPath = join(dir, item) + const relPath = relative(rootDir, itemPath) + const stat = await fs.lstat(itemPath) + + if (stat.isSymbolicLink()) { + const realpath = await fs.realpath(itemPath) + merge(results, await tree(rootDir, realpath)) + } else if (stat.isDirectory()) { + merge(results, await tree(rootDir, itemPath)) + } else { + const raw = await readFile(relPath) + const content = typeof raw === 'string' ? `${new Blob([raw]).size} bytes` : raw + merge(results, set({}, relPath.split(sep), content)) + } + } + return results + } + + return { + npm, + readFile, + tree, + paths, + registry, + isSmokePublish: !!SMOKE_PUBLISH_NPM, + } +} + +module.exports.testdir = testdirHelper diff --git a/smoke-tests/test/index.js b/smoke-tests/test/index.js index 65a0363f2d441..4aafcb2cbd2e1 100644 --- a/smoke-tests/test/index.js +++ b/smoke-tests/test/index.js @@ -1,360 +1,338 @@ -const { readFileSync, realpathSync, mkdirSync, existsSync, writeFileSync } = require('fs') -const spawn = require('@npmcli/promise-spawn') -const { join, resolve, sep } = require('path') +const { join } = require('path') const t = require('tap') -const rimraf = require('rimraf') -const which = require('which').sync -const { start, stop, registry } = require('./fixtures/server.js') - -const { SMOKE_PUBLISH_NPM, CI, PATH } = process.env -const log = CI ? console.error : () => {} - -const cwd = resolve(__dirname, '..', '..') -const npmCli = join('bin', 'npm-cli.js') -const execArgv = SMOKE_PUBLISH_NPM ? ['npm'] : [process.execPath, join(cwd, npmCli)] -const npmDir = SMOKE_PUBLISH_NPM ? realpathSync(which('npm')).replace(sep + npmCli, '') : cwd - -// setup server -t.before(start) -t.teardown(stop) -// update notifier should never be written -t.afterEach((t) => { - const updateExists = existsSync(join(cacheLocation, '_update-notifier-last-checked')) - t.equal(updateExists, false) -}) - -const readFile = filename => readFileSync(resolve(localPrefix, filename), 'utf-8') -const normalizePath = path => path.replace(/[A-Z]:/, '').replace(/\\/g, '/') - -t.cleanSnapshot = s => - s - // sometimes we print normalized paths in snapshots regardless of - // platform so replace those first - .split(normalizePath(npmDir)) - .join('{CWD}') - .split(normalizePath(cwd)) - .join('{CWD}') - .split(registry) - .join('https://registry.npmjs.org/') - .split(normalizePath(process.execPath)) - .join('node') - // then replace platform style paths - .split(npmDir) - .join('{CWD}') - .split(cwd) - .join('{CWD}') - .replace(/\\+/g, '/') - .replace(/\r\n/g, '\n') - .replace(/ \(in a browser\)/g, '') - .replace(/^npm@.* /gm, 'npm ') - .replace(/^.*debug-[0-9]+.log$/gm, '') - -// setup fixtures -const path = t.testdir({ - '.npmrc': '', - cache: {}, - project: {}, - bin: {}, -}) -const localPrefix = resolve(path, 'project') -const userconfigLocation = resolve(path, '.npmrc') -const cacheLocation = resolve(path, 'cache') -const binLocation = resolve(path, 'bin') - -const exec = async (...args) => { - const cmd = [] - const opts = [ - `--registry=${registry}`, - `--cache=${cacheLocation}`, - `--userconfig=${userconfigLocation}`, - '--no-audit', - '--no-update-notifier', - '--loglevel=silly', - ] - for (const arg of args) { - if (arg.startsWith('--')) { - opts.push(arg) - } else { - cmd.push(arg) - } - } - - // XXX: not sure why outdated fails with no-workspaces but works without it - if (!opts.includes('--workspaces') && cmd[0] !== 'outdated') { - // This is required so we dont detect any workspace roots above the testdir - opts.push('--no-workspaces') - } - - const spawnArgs = [execArgv[0], [...execArgv.slice(1), ...cmd, ...opts]] - log([spawnArgs[0], ...spawnArgs[1]].join(' ')) - - const res = await spawn(...spawnArgs, { - cwd: localPrefix, - env: { - HOME: path, - PATH: `${PATH}:${binLocation}`, - COMSPEC: process.env.COMSPEC, +const setup = require('./fixtures/setup.js') + +t.test('basic', async t => { + const { registry, npm, isSmokePublish, readFile, paths } = await setup(t, { + testdir: { + packages: { + 'abbrev-1.0.4': { + 'package.json': { name: 'abbrev', version: '1.0.4' }, + 'index.js': 'module.exports = "1.0.4"', + }, + 'abbrev-1.1.1': { + 'package.json': { name: 'abbrev', version: '1.1.1' }, + 'index.js': 'module.exports = "1.1.1"', + }, + 'promise-all-reject-late': { + 'package.json': { name: 'promise-all-reject-late', version: '5.0.0' }, + 'index.js': 'module.exports = null', + }, + }, }, - encoding: 'utf-8', - }) - - log(res.stderr) - return res.stdout -} - -// this test must come first, its package.json will be destroyed and the one -// created in the next test (npm init) will create a new one that must be -// present for later tests -t.test('npm install sends correct user-agent', async t => { - const pkgPath = join(localPrefix, 'package.json') - const pkgContent = JSON.stringify({ - name: 'smoke-test-workspaces', - workspaces: ['packages/*'], }) - writeFileSync(pkgPath, pkgContent, { encoding: 'utf8' }) - const wsRoot = join(localPrefix, 'packages') - mkdirSync(wsRoot) + const abbrevManifest = () => registry.manifest({ name: 'abbrev', versions: ['1.0.4', '1.1.1'] }) - const wsPath = join(wsRoot, 'foo') - mkdirSync(wsPath) + await t.test('npm init', async t => { + const cmdRes = await npm('init', '-y') - const wsPkgPath = join(wsPath, 'package.json') - const wsContent = JSON.stringify({ - name: 'foo', + t.matchSnapshot(cmdRes, 'should have successful npm init result') + const pkg = await readFile('package.json') + t.equal(pkg.name, 'project', 'should have expected generated name') + t.equal(pkg.version, '1.0.0', 'should have expected generated version') }) - writeFileSync(wsPkgPath, wsContent, { encoding: 'utf8' }) - t.teardown(() => rimraf.sync(`${localPrefix}/*`)) - await t.rejects( - exec('install', 'fail_reflect_user_agent'), - { - stderr: /workspaces\/false/, - }, - 'workspaces/false is present in output' - ) + await t.test('npm --version', async t => { + const v = await npm('--version') - await t.rejects( - exec('install', 'fail_reflect_user_agent', '--workspaces'), - { - stderr: /workspaces\/true/, - }, - 'workspaces/true is present in output' - ) -}) + if (isSmokePublish) { + t.match(v.trim(), /-[0-9a-f]{40}\.\d$/, 'must have a git version') + } else { + t.match(v.trim(), /^\d+\.\d+\.\d+/, 'has a version') + } + }) -t.test('npm init', async t => { - const cmdRes = await exec('init', '-y') + await t.test('npm (no args)', async t => { + const err = await npm('--loglevel=notice').catch(e => e) - t.matchSnapshot(cmdRes, 'should have successful npm init result') - const pkg = JSON.parse(readFileSync(resolve(localPrefix, 'package.json'))) - t.equal(pkg.name, 'project', 'should have expected generated name') - t.equal(pkg.version, '1.0.0', 'should have expected generated version') -}) + t.equal(err.code, 1, 'should exit with error code') + t.equal(err.stderr, '', 'should have no stderr output') + t.matchSnapshot(err.stdout, 'should have expected no args output') + }) -t.test('npm --version', async t => { - const v = await exec('--version') + await t.test('npm install prodDep@version', async t => { + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + tarballs: { '1.0.4': join(paths.root, 'packages', 'abbrev-1.0.4') }, + }) - if (SMOKE_PUBLISH_NPM) { - t.match(v.trim(), /-[0-9a-f]{40}\.\d$/, 'must have a git version') - } else { - t.skip('not checking version') - } -}) + const cmdRes = await npm('install', 'abbrev@1.0.4') -t.test('npm (no args)', async t => { - const err = await exec('--loglevel=notice').catch(e => e) + t.matchSnapshot(cmdRes, 'should have expected install reify output') + t.resolveMatchSnapshot(readFile('package.json'), 'should have expected package.json result') + t.resolveMatchSnapshot(readFile('package-lock.json'), 'should have expected lockfile result') + }) - t.equal(err.code, 1, 'should exit with error code') - t.equal(err.stderr, '', 'should have no stderr output') - t.matchSnapshot(err.stdout, 'should have expected no args output') -}) + await t.test('npm install dev dep', async t => { + const manifest = registry.manifest({ + name: 'promise-all-reject-late', + packuments: [{ version: '5.0.0', funding: 'https://github.com/sponsors' }], + }) + await registry.package({ + manifest: manifest, + tarballs: { '5.0.0': join(paths.root, 'packages', 'promise-all-reject-late') }, + }) + + const cmdRes = await npm('install', 'promise-all-reject-late', '-D') + + t.matchSnapshot(cmdRes, 'should have expected dev dep added reify output') + t.resolveMatchSnapshot( + readFile('package.json'), + 'should have expected dev dep added package.json result' + ) + t.resolveMatchSnapshot( + readFile('package-lock.json'), + 'should have expected dev dep added lockfile result' + ) + }) -t.test('npm install prodDep@version', async t => { - const cmdRes = await exec('install', 'abbrev@1.0.4') + await t.test('npm ls', async t => { + const cmdRes = await npm('ls') - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected install reify output') - t.matchSnapshot(readFile('package.json'), 'should have expected package.json result') - t.matchSnapshot(readFile('package-lock.json'), 'should have expected lockfile result') -}) + t.matchSnapshot(cmdRes, 'should have expected ls output') + }) -t.test('npm install dev dep', async t => { - const cmdRes = await exec('install', 'promise-all-reject-late', '-D') - - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected dev dep added reify output') - t.matchSnapshot( - readFile('package.json'), - 'should have expected dev dep added package.json result' - ) - t.matchSnapshot( - readFile('package-lock.json'), - 'should have expected dev dep added lockfile result' - ) -}) + await t.test('npm fund', async t => { + const cmdRes = await npm('fund') -t.test('npm ls', async t => { - const cmdRes = await exec('ls') + t.matchSnapshot(cmdRes, 'should have expected fund output') + }) - t.matchSnapshot(cmdRes, 'should have expected ls output') -}) + await t.test('npm explain', async t => { + const cmdRes = await npm('explain', 'abbrev') -t.test('npm fund', async t => { - const cmdRes = await exec('fund') + t.matchSnapshot(cmdRes, 'should have expected explain output') + }) - t.matchSnapshot(cmdRes, 'should have expected fund output') -}) + await t.test('npm diff', async t => { + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + tarballs: { '1.0.4': join(paths.root, 'packages', 'abbrev-1.0.4') }, + }) + await registry.package({ + manifest: manifest, + tarballs: { '1.1.1': join(paths.root, 'packages', 'abbrev-1.1.1') }, + }) -t.test('npm explain', async t => { - const cmdRes = await exec('explain', 'abbrev') + const cmdRes = await npm('diff', '--diff=abbrev@1.0.4', '--diff=abbrev@1.1.1') - t.matchSnapshot(cmdRes, 'should have expected explain output') -}) - -t.test('npm diff', async t => { - const cmdRes = await exec('diff', '--diff=abbrev@1.0.4', '--diff=abbrev@1.1.1') + t.matchSnapshot(cmdRes, 'should have expected diff output') + }) - t.matchSnapshot(cmdRes, 'should have expected diff output') -}) + await t.test('npm outdated', async t => { + await registry.package({ + manifest: registry.manifest({ + name: 'promise-all-reject-late', + versions: ['5.0.0'], + }), + }) + await registry.package({ + manifest: abbrevManifest(), + }) + + const outdated = await npm('outdated').catch(e => e) + + t.equal(outdated.code, 1, 'should exit with error code') + t.not(outdated.stderr, '', 'should have stderr output') + t.matchSnapshot(outdated.stdout, 'should have expected outdated output') + }) -t.test('npm outdated', async t => { - const err = await exec('outdated').catch(e => e) + await t.test('npm pkg set scripts', async t => { + const cmdRes = await npm('pkg', 'set', 'scripts.hello=echo Hello') - t.equal(err.code, 1, 'should exit with error code') - t.not(err.stderr, '', 'should have stderr output') - t.matchSnapshot(err.stdout, 'should have expected outdated output') -}) + t.matchSnapshot(cmdRes, 'should have expected set-script output') + t.resolveMatchSnapshot( + readFile('package.json'), + 'should have expected script added package.json result' + ) + }) -t.test('npm pkg set scripts', async t => { - const cmdRes = await exec('pkg', 'set', 'scripts.hello=echo Hello') + await t.test('npm run-script', async t => { + const cmdRes = await npm('run', 'hello') - t.matchSnapshot(cmdRes, 'should have expected set-script output') - t.matchSnapshot( - readFile('package.json'), - 'should have expected script added package.json result' - ) -}) + t.matchSnapshot(cmdRes, 'should have expected run-script output') + }) -t.test('npm run-script', async t => { - const cmdRes = await exec('run', 'hello') + await t.test('npm prefix', async t => { + const cmdRes = await npm('prefix') - t.matchSnapshot(cmdRes, 'should have expected run-script output') -}) + t.matchSnapshot(cmdRes, 'should have expected prefix output') + }) -t.test('npm prefix', async t => { - const cmdRes = await exec('prefix') + await t.test('npm view', async t => { + await registry.package({ + manifest: abbrevManifest(), + }) + const cmdRes = await npm('view', 'abbrev@1.0.4') - t.matchSnapshot(cmdRes, 'should have expected prefix output') -}) + t.matchSnapshot(cmdRes, 'should have expected view output') + }) -t.test('npm view', async t => { - const cmdRes = await exec('view', 'abbrev@1.0.4') + await t.test('npm update dep', async t => { + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + tarballs: { + '1.1.1': join(paths.root, 'packages', 'abbrev-1.1.1'), + }, + }) + + const cmdRes = await npm('update', 'abbrev') + + t.matchSnapshot(cmdRes, 'should have expected update reify output') + t.resolveMatchSnapshot(readFile('package.json'), + 'should have expected update package.json result') + t.resolveMatchSnapshot(readFile('package-lock.json'), + 'should have expected update lockfile result') + }) - t.matchSnapshot(cmdRes, 'should have expected view output') -}) + await t.test('npm uninstall', async t => { + const cmdRes = await npm('uninstall', 'promise-all-reject-late') -t.test('npm update dep', async t => { - const cmdRes = await exec('update', 'abbrev') + t.matchSnapshot(cmdRes, 'should have expected uninstall reify output') + t.resolveMatchSnapshot(readFile('package.json'), + 'should have expected uninstall package.json result') + t.resolveMatchSnapshot(readFile('package-lock.json'), + 'should have expected uninstall lockfile result') + }) - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected update reify output') - t.matchSnapshot(readFile('package.json'), 'should have expected update package.json result') - t.matchSnapshot(readFile('package-lock.json'), 'should have expected update lockfile result') -}) + await t.test('npm pkg', async t => { + let cmdRes = await npm('pkg', 'get', 'license') + t.matchSnapshot(cmdRes, 'should have expected pkg get output') -t.test('npm uninstall', async t => { - const cmdRes = await exec('uninstall', 'promise-all-reject-late') + cmdRes = await npm('pkg', 'set', 'tap[test-env][0]=LC_ALL=sk') + t.matchSnapshot(cmdRes, 'should have expected pkg set output') - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected uninstall reify output') - t.matchSnapshot(readFile('package.json'), 'should have expected uninstall package.json result') - t.matchSnapshot(readFile('package-lock.json'), 'should have expected uninstall lockfile result') -}) + t.resolveMatchSnapshot( + readFile('package.json'), + 'should have expected npm pkg set modified package.json result' + ) -t.test('npm pkg', async t => { - let cmdRes = await exec('pkg', 'get', 'license') - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected pkg get output') + cmdRes = await npm('pkg', 'get') + t.matchSnapshot(cmdRes, 'should print package.json contents') - cmdRes = await exec('pkg', 'set', 'tap[test-env][0]=LC_ALL=sk') - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected pkg set output') + cmdRes = await npm('pkg', 'delete', 'tap') + t.matchSnapshot(cmdRes, 'should have expected pkg delete output') - t.matchSnapshot( - readFile('package.json'), - 'should have expected npm pkg set modified package.json result' - ) + t.resolveMatchSnapshot( + readFile('package.json'), + 'should have expected npm pkg delete modified package.json result' + ) + }) - cmdRes = await exec('pkg', 'get') - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should print package.json contents') + await t.test('npm update --no-save --no-package-lock', async t => { + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + tarballs: { + '1.0.4': join(paths.root, 'packages', 'abbrev-1.0.4'), + }, + }) + + // setup, manually reset dep value + await npm('pkg', 'set', 'dependencies.abbrev==1.0.4') + await npm('install') + + await registry.package({ + manifest: manifest, + tarballs: { + '1.1.1': join(paths.root, 'packages', 'abbrev-1.1.1'), + }, + }) + + await npm('pkg', 'set', 'dependencies.abbrev=^1.0.4') + await npm('update', '--no-save', '--no-package-lock') + + t.equal( + (await readFile('package.json')).dependencies.abbrev, + '^1.0.4', + 'should have expected update --no-save --no-package-lock package.json result' + ) + t.equal( + (await readFile('package-lock.json')).packages['node_modules/abbrev'].version, + '1.0.4', + 'should have expected update --no-save --no-package-lock lockfile result' + ) + t.equal( + (await readFile('node_modules/abbrev/package.json')).version, + '1.1.1', + 'actual installed version is 1.1.1' + ) + }) - cmdRes = await exec('pkg', 'delete', 'tap') - t.matchSnapshot(cmdRes.replace(/in.*s/, ''), 'should have expected pkg delete output') + await t.test('npm update --no-save', async t => { + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + tarballs: { + '1.1.1': join(paths.root, 'packages', 'abbrev-1.1.1'), + }, + }) + + await npm('update', '--no-save') + + t.equal( + (await readFile('package.json')).dependencies.abbrev, + '^1.0.4', + 'should have expected update --no-save package.json result' + ) + t.equal( + (await readFile('package-lock.json')).packages['node_modules/abbrev'].version, + '1.1.1', + 'should have expected update --no-save lockfile result' + ) + }) - t.matchSnapshot( - readFile('package.json'), - 'should have expected npm pkg delete modified package.json result' - ) -}) + await t.test('npm update --save', async t => { + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + }) + + await npm('update', '--save') + + t.equal( + (await readFile('package.json')).dependencies.abbrev, + '^1.1.1', + 'should have expected update --save package.json result' + ) + t.equal( + (await readFile('package-lock.json')).packages['node_modules/abbrev'].version, + '1.1.1', + 'should have expected update --save lockfile result' + ) + }) -t.test('npm update --no-save --no-package-lock', async t => { - // setup, manually reset dep value - await exec('pkg', 'set', 'dependencies.abbrev==1.0.4') - await exec(`install`) - await exec('pkg', 'set', 'dependencies.abbrev=^1.0.4') - - await exec('update', '--no-save', '--no-package-lock') - - t.equal( - JSON.parse(readFile('package.json')).dependencies.abbrev, - '^1.0.4', - 'should have expected update --no-save --no-package-lock package.json result' - ) - t.equal( - JSON.parse(readFile('package-lock.json')).packages['node_modules/abbrev'].version, - '1.0.4', - 'should have expected update --no-save --no-package-lock lockfile result' - ) -}) + await t.test('npm ci', async t => { + await npm('uninstall', 'abbrev') -t.test('npm update --no-save', async t => { - await exec('update', '--no-save') - - t.equal( - JSON.parse(readFile('package.json')).dependencies.abbrev, - '^1.0.4', - 'should have expected update --no-save package.json result' - ) - t.equal( - JSON.parse(readFile('package-lock.json')).packages['node_modules/abbrev'].version, - '1.1.1', - 'should have expected update --no-save lockfile result' - ) -}) + const manifest = abbrevManifest() + await registry.package({ + manifest: manifest, + tarballs: { + '1.0.4': join(paths.root, 'packages', 'abbrev-1.0.4'), + }, + }) -t.test('npm update --save', async t => { - await exec('update', '--save') - - t.equal( - JSON.parse(readFile('package.json')).dependencies.abbrev, - '^1.1.1', - 'should have expected update --save package.json result' - ) - t.equal( - JSON.parse(readFile('package-lock.json')).packages['node_modules/abbrev'].version, - '1.1.1', - 'should have expected update --save lockfile result' - ) -}) + await npm('install', 'abbrev@1.0.4', '--save-exact') -t.test('npm ci', async t => { - await exec('uninstall', 'abbrev') - await exec('install', 'abbrev@1.0.4', '--save-exact') + t.equal( + (await readFile('package-lock.json')).packages['node_modules/abbrev'].version, + '1.0.4', + 'should have stored exact installed version' + ) - t.equal( - JSON.parse(readFile('package-lock.json')).packages['node_modules/abbrev'].version, - '1.0.4', - 'should have stored exact installed version' - ) + await npm('pkg', 'set', 'dependencies.abbrev=^1.1.1') - await exec('pkg', 'set', 'dependencies.abbrev=^1.1.1') + await registry.package({ + manifest, + }) - const err = await exec('ci', '--loglevel=error').catch(e => e) - t.equal(err.code, 1) - t.matchSnapshot(err.stderr, 'should throw mismatch deps in lock file error') + const err = await npm('ci', '--loglevel=error').catch(e => e) + t.equal(err.code, 1) + t.matchSnapshot(err.stderr, 'should throw mismatch deps in lock file error') + }) }) diff --git a/smoke-tests/test/workspace-ua.js b/smoke-tests/test/workspace-ua.js new file mode 100644 index 0000000000000..8cfc4041715dd --- /dev/null +++ b/smoke-tests/test/workspace-ua.js @@ -0,0 +1,36 @@ + +const t = require('tap') +const setup = require('./fixtures/setup.js') + +t.test('basic', async t => { + const { registry, npm } = await setup(t) + + const mock = () => registry.nock + .get(`/fail_reflect_user_agent`) + // XXX: why does this get fetched twice for each uninstall? + .times(2) + .reply(404, {}, { 'npm-notice': (req) => req.headers['user-agent'] }) + + await t.test('npm install sends correct user-agent', async t => { + await npm('init', '-y') + await npm('init', '-y', `--workspace=foo`) + + mock() + await t.rejects( + npm('install', 'fail_reflect_user_agent'), + { + stderr: /workspaces\/false/, + }, + 'workspaces/false is present in output' + ) + + mock() + await t.rejects( + npm('install', 'fail_reflect_user_agent', '--workspaces'), + { + stderr: /workspaces\/true/, + }, + 'workspaces/true is present in output' + ) + }) +}) diff --git a/test/lib/commands/access.js b/test/lib/commands/access.js index ae26f4c9332dc..b0057545ba026 100644 --- a/test/lib/commands/access.js +++ b/test/lib/commands/access.js @@ -1,7 +1,7 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const token = 'test-auth-token' const auth = { '//registry.npmjs.org/:_authToken': 'test-auth-token' } diff --git a/test/lib/commands/adduser.js b/test/lib/commands/adduser.js index 73e446309ef3b..90ed10df70274 100644 --- a/test/lib/commands/adduser.js +++ b/test/lib/commands/adduser.js @@ -5,7 +5,7 @@ const ini = require('ini') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') const mockGlobals = require('../../fixtures/mock-globals.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const stream = require('stream') t.test('usage', async t => { diff --git a/test/lib/commands/audit.js b/test/lib/commands/audit.js index bfa68955c5c7b..02b00f7f9ad88 100644 --- a/test/lib/commands/audit.js +++ b/test/lib/commands/audit.js @@ -4,7 +4,7 @@ const path = require('path') const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const gunzip = zlib.gunzipSync const gzip = zlib.gzipSync diff --git a/test/lib/commands/cache.js b/test/lib/commands/cache.js index 625caf7ffc0b6..fe2854f9aa626 100644 --- a/test/lib/commands/cache.js +++ b/test/lib/commands/cache.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const mockGlobals = require('../../fixtures/mock-globals') const cacache = require('cacache') diff --git a/test/lib/commands/ci.js b/test/lib/commands/ci.js index 7019cb177e01e..bd3fd9be9a6a0 100644 --- a/test/lib/commands/ci.js +++ b/test/lib/commands/ci.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: _loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const path = require('path') const fs = require('fs') diff --git a/test/lib/commands/dedupe.js b/test/lib/commands/dedupe.js index 0ca51245cc818..604ed21a257fc 100644 --- a/test/lib/commands/dedupe.js +++ b/test/lib/commands/dedupe.js @@ -3,7 +3,7 @@ const path = require('path') const fs = require('fs') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') t.test('should throw in global mode', async (t) => { const { npm } = await loadMockNpm(t, { diff --git a/test/lib/commands/deprecate.js b/test/lib/commands/deprecate.js index 57ed9c93ba0f4..22ddfe182de6e 100644 --- a/test/lib/commands/deprecate.js +++ b/test/lib/commands/deprecate.js @@ -1,7 +1,7 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const user = 'test-user' const token = 'test-auth-token' diff --git a/test/lib/commands/exec.js b/test/lib/commands/exec.js index aef4c856df1f5..1a03b1a2e6a5b 100644 --- a/test/lib/commands/exec.js +++ b/test/lib/commands/exec.js @@ -2,7 +2,7 @@ const t = require('tap') const fs = require('fs/promises') const path = require('path') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') t.test('call with args', async t => { const { npm } = await loadMockNpm(t, { diff --git a/test/lib/commands/find-dupes.js b/test/lib/commands/find-dupes.js index 228ac662b4454..40022fa065121 100644 --- a/test/lib/commands/find-dupes.js +++ b/test/lib/commands/find-dupes.js @@ -3,7 +3,7 @@ const path = require('path') const fs = require('fs') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const treeWithDupes = { 'package.json': JSON.stringify({ diff --git a/test/lib/commands/login.js b/test/lib/commands/login.js index 6c1d40c0d6edb..ae7e3ffab0f02 100644 --- a/test/lib/commands/login.js +++ b/test/lib/commands/login.js @@ -5,7 +5,7 @@ const ini = require('ini') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') const mockGlobals = require('../../fixtures/mock-globals.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const stream = require('stream') t.test('usage', async t => { diff --git a/test/lib/commands/owner.js b/test/lib/commands/owner.js index f8ab7feef5be7..5b6bb443712f0 100644 --- a/test/lib/commands/owner.js +++ b/test/lib/commands/owner.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const path = require('path') const npa = require('npm-package-arg') diff --git a/test/lib/commands/ping.js b/test/lib/commands/ping.js index dd2f83de08fc9..77201955ff2a8 100644 --- a/test/lib/commands/ping.js +++ b/test/lib/commands/ping.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') t.test('no details', async t => { const { npm, logs, joinedOutput } = await loadMockNpm(t) diff --git a/test/lib/commands/publish.js b/test/lib/commands/publish.js index b5cb72dbc98bd..496c02394eb17 100644 --- a/test/lib/commands/publish.js +++ b/test/lib/commands/publish.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const pacote = require('pacote') const Arborist = require('@npmcli/arborist') const path = require('path') diff --git a/test/lib/commands/search.js b/test/lib/commands/search.js index f18fcc475a99c..596c849909229 100644 --- a/test/lib/commands/search.js +++ b/test/lib/commands/search.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const libnpmsearchResultFixture = require('../../fixtures/libnpmsearch-stream-result.js') diff --git a/test/lib/commands/star.js b/test/lib/commands/star.js index ce9d258be1855..c5f233f01cc4a 100644 --- a/test/lib/commands/star.js +++ b/test/lib/commands/star.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const pkgName = '@npmcli/test-package' const authToken = 'test-auth-token' diff --git a/test/lib/commands/unpublish.js b/test/lib/commands/unpublish.js index 9efd2a147d42f..cba7298475133 100644 --- a/test/lib/commands/unpublish.js +++ b/test/lib/commands/unpublish.js @@ -1,7 +1,7 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const user = 'test-user' const pkg = 'test-package' const auth = { '//registry.npmjs.org/:_authToken': 'test-auth-token' } diff --git a/test/lib/commands/unstar.js b/test/lib/commands/unstar.js index 85c33d2793563..ee31428546d06 100644 --- a/test/lib/commands/unstar.js +++ b/test/lib/commands/unstar.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm.js') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const pkgName = '@npmcli/test-package' const authToken = 'test-auth-token' diff --git a/test/lib/commands/whoami.js b/test/lib/commands/whoami.js index d63b49015f0d0..a4532390bc66b 100644 --- a/test/lib/commands/whoami.js +++ b/test/lib/commands/whoami.js @@ -1,6 +1,6 @@ const t = require('tap') const { load: loadMockNpm } = require('../../fixtures/mock-npm') -const MockRegistry = require('../../fixtures/mock-registry.js') +const MockRegistry = require('@npmcli/mock-registry') const username = 'foo' const auth = { '//registry.npmjs.org/:_authToken': 'test-auth-token' } diff --git a/workspaces/arborist/CHANGELOG.md b/workspaces/arborist/CHANGELOG.md index ec5423b353b6f..1e74c11923202 100644 --- a/workspaces/arborist/CHANGELOG.md +++ b/workspaces/arborist/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [6.1.2](https://github.com/npm/cli/compare/arborist-v6.1.1...arborist-v6.1.2) (2022-11-09) + +### Dependencies + +* [`335c7e4`](https://github.com/npm/cli/commit/335c7e4348f5505fad33b8a78348a02a82b91426) [#5813](https://github.com/npm/cli/pull/5813) `cacache@17.0.2` +* [`878ddfb`](https://github.com/npm/cli/commit/878ddfb5b68c03bdcd7d7da8dae92c4947942801) `@npmcli/fs@3.1.0` + ## [6.1.1](https://github.com/npm/cli/compare/arborist-v6.1.0...arborist-v6.1.1) (2022-11-02) ### Bug Fixes diff --git a/workspaces/arborist/lib/arborist/build-ideal-tree.js b/workspaces/arborist/lib/arborist/build-ideal-tree.js index afcb67903da6d..d64bdd7e496ae 100644 --- a/workspaces/arborist/lib/arborist/build-ideal-tree.js +++ b/workspaces/arborist/lib/arborist/build-ideal-tree.js @@ -7,9 +7,8 @@ const cacache = require('cacache') const promiseCallLimit = require('promise-call-limit') const realpath = require('../../lib/realpath.js') const { resolve, dirname } = require('path') -const { promisify } = require('util') const treeCheck = require('../tree-check.js') -const readdir = promisify(require('readdir-scoped-modules')) +const { readdirScoped } = require('@npmcli/fs') const { lstat, readlink } = require('fs/promises') const { depth } = require('treeverse') const log = require('proc-log') @@ -447,7 +446,8 @@ module.exports = cls => class IdealTreeBuilder extends cls { const globalExplicitUpdateNames = [] if (this[_global] && (this[_updateAll] || this[_updateNames].length)) { const nm = resolve(this.path, 'node_modules') - for (const name of await readdir(nm).catch(() => [])) { + const paths = await readdirScoped(nm).catch(() => []) + for (const name of paths.map((p) => p.replace(/\\/g, '/'))) { tree.package.dependencies = tree.package.dependencies || {} const updateName = this[_updateNames].includes(name) if (this[_updateAll] || updateName) { diff --git a/workspaces/arborist/lib/arborist/load-actual.js b/workspaces/arborist/lib/arborist/load-actual.js index bb813806e5556..6c3f917c6ac9d 100644 --- a/workspaces/arborist/lib/arborist/load-actual.js +++ b/workspaces/arborist/lib/arborist/load-actual.js @@ -3,8 +3,7 @@ const { relative, dirname, resolve, join, normalize } = require('path') const rpj = require('read-package-json-fast') -const { promisify } = require('util') -const readdir = promisify(require('readdir-scoped-modules')) +const { readdirScoped } = require('@npmcli/fs') const walkUp = require('walk-up-path') const ancestorPath = require('common-ancestor-path') const treeCheck = require('../tree-check.js') @@ -362,7 +361,7 @@ module.exports = cls => class ActualLoader extends cls { async [_loadFSChildren] (node) { const nm = resolve(node.realpath, 'node_modules') try { - const kids = await readdir(nm) + const kids = await readdirScoped(nm).then(paths => paths.map(p => p.replace(/\\/g, '/'))) return Promise.all( // ignore . dirs and retired scoped package folders kids.filter(kid => !/^(@[^/]+\/)?\./.test(kid)) @@ -411,8 +410,8 @@ module.exports = cls => class ActualLoader extends cls { break } - const entries = nmContents.get(p) || - await readdir(p + '/node_modules').catch(() => []) + const entries = nmContents.get(p) || await readdirScoped(p + '/node_modules') + .catch(() => []).then(paths => paths.map(p => p.replace(/\\/g, '/'))) nmContents.set(p, entries) if (!entries.includes(name)) { continue diff --git a/workspaces/arborist/lib/arborist/reify.js b/workspaces/arborist/lib/arborist/reify.js index c3cbf02b31080..36aabd6f0fcdd 100644 --- a/workspaces/arborist/lib/arborist/reify.js +++ b/workspaces/arborist/lib/arborist/reify.js @@ -19,7 +19,7 @@ const { rm, symlink, } = require('fs/promises') -const moveFile = require('@npmcli/move-file') +const { moveFile } = require('@npmcli/fs') const PackageJson = require('@npmcli/package-json') const packageContents = require('@npmcli/installed-package-contents') const runScript = require('@npmcli/run-script') diff --git a/workspaces/arborist/package.json b/workspaces/arborist/package.json index d739aa26ab7b8..8ff8546f42ed0 100644 --- a/workspaces/arborist/package.json +++ b/workspaces/arborist/package.json @@ -1,20 +1,20 @@ { "name": "@npmcli/arborist", - "version": "6.1.1", + "version": "6.1.2", "description": "Manage node_modules trees", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.0", "@npmcli/installed-package-contents": "^2.0.0", "@npmcli/map-workspaces": "^3.0.0", "@npmcli/metavuln-calculator": "^5.0.0", - "@npmcli/move-file": "^3.0.0", "@npmcli/name-from-folder": "^1.0.1", "@npmcli/node-gyp": "^3.0.0", "@npmcli/package-json": "^3.0.0", "@npmcli/query": "^3.0.0", "@npmcli/run-script": "^6.0.0", "bin-links": "^4.0.1", - "cacache": "^17.0.1", + "cacache": "^17.0.2", "common-ancestor-path": "^1.0.1", "hosted-git-info": "^6.1.1", "json-parse-even-better-errors": "^3.0.0", @@ -32,7 +32,6 @@ "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^1.0.1", "read-package-json-fast": "^3.0.1", - "readdir-scoped-modules": "^1.1.0", "semver": "^7.3.7", "ssri": "^10.0.0", "treeverse": "^3.0.0", @@ -40,7 +39,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "benchmark": "^2.1.4", "chalk": "^4.1.0", "minify-registry-metadata": "^2.1.0", @@ -102,7 +101,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" } } diff --git a/workspaces/arborist/test/arborist/reify.js b/workspaces/arborist/test/arborist/reify.js index 257fcb4cbcf7b..7c250a34d236b 100644 --- a/workspaces/arborist/test/arborist/reify.js +++ b/workspaces/arborist/test/arborist/reify.js @@ -3,8 +3,9 @@ const t = require('tap') const runScript = require('@npmcli/run-script') const localeCompare = require('@isaacs/string-locale-compare')('en') const tnock = require('../fixtures/tnock') - const fs = require('fs') +const fsp = require('fs/promises') +const npmFs = require('@npmcli/fs') let failRm = false let failRename = null @@ -41,26 +42,41 @@ const fsMock = { realRm(...args) }, } -const mocks = { - fs: fsMock, - 'fs/promises': { - ...fs.promises, - mkdir: async (...args) => { - if (failMkdir) { - throw failMkdir - } +const fspMock = { + ...fsp, + mkdir: async (...args) => { + if (failMkdir) { + throw failMkdir + } - return fs.promises.mkdir(...args) - }, - rm: async (...args) => { - if (failRm) { - throw new Error('rm fail') - } + return fsp.mkdir(...args) + }, + rename: async (...args) => { + if (failRename) { + throw failRename + } else if (failRenameOnce) { + const er = failRenameOnce + failRenameOnce = null + throw er + } else { + return fsp.rename(...args) + } + }, + rm: async (...args) => { + if (failRm) { + throw new Error('rm fail') + } - return fs.promises.rm(...args) - }, + return fsp.rm(...args) }, } +// need this to be injected so that it doesn't pull from main cache +const { moveFile } = t.mock('@npmcli/fs', { 'fs/promises': fspMock }) +const mocks = { + fs: fsMock, + 'fs/promises': fspMock, + '@npmcli/fs': { ...npmFs, moveFile }, +} const oldLockfileWarning = [ 'warn', @@ -73,10 +89,6 @@ This is a one-time fix-up, please be patient... `, ] -// need this to be injected so that it doesn't pull from main cache -const moveFile = t.mock('@npmcli/move-file', { fs: fsMock }) -mocks['@npmcli/move-file'] = moveFile - // track the warnings that are emitted. returns a function that removes // the listener and provides the list of what it saw. const warningTracker = () => { diff --git a/workspaces/config/package.json b/workspaces/config/package.json index 5d659cc322e0a..faeefbd08de49 100644 --- a/workspaces/config/package.json +++ b/workspaces/config/package.json @@ -33,7 +33,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "tap": "^16.0.1" }, "dependencies": { @@ -50,6 +50,6 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0" + "version": "4.9.0" } } diff --git a/workspaces/libnpmaccess/package.json b/workspaces/libnpmaccess/package.json index 0f345fb052adb..121c16418d3bf 100644 --- a/workspaces/libnpmaccess/package.json +++ b/workspaces/libnpmaccess/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -40,7 +40,7 @@ ], "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmdiff/CHANGELOG.md b/workspaces/libnpmdiff/CHANGELOG.md index 6195aa8781f0a..40f783c57efde 100644 --- a/workspaces/libnpmdiff/CHANGELOG.md +++ b/workspaces/libnpmdiff/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [5.0.3](https://github.com/npm/cli/compare/libnpmdiff-v5.0.2...libnpmdiff-v5.0.3) (2022-11-09) + +### Dependencies + +* [Workspace](https://github.com/npm/cli/compare/arborist-v6.1.1...arborist-v6.1.2): `@npmcli/arborist@6.1.2` + ## [5.0.2](https://github.com/npm/cli/compare/libnpmdiff-v5.0.1...libnpmdiff-v5.0.2) (2022-11-02) ### Dependencies diff --git a/workspaces/libnpmdiff/package.json b/workspaces/libnpmdiff/package.json index 83502b066a9f7..07acc9852e362 100644 --- a/workspaces/libnpmdiff/package.json +++ b/workspaces/libnpmdiff/package.json @@ -1,6 +1,6 @@ { "name": "libnpmdiff", - "version": "5.0.2", + "version": "5.0.3", "description": "The registry diff", "repository": { "type": "git", @@ -43,11 +43,11 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "tap": "^16.0.1" }, "dependencies": { - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/disparity-colors": "^3.0.0", "@npmcli/installed-package-contents": "^2.0.0", "binary-extensions": "^2.2.0", @@ -59,7 +59,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmexec/CHANGELOG.md b/workspaces/libnpmexec/CHANGELOG.md index 6312b392287e0..7cbe7d1dbbfd5 100644 --- a/workspaces/libnpmexec/CHANGELOG.md +++ b/workspaces/libnpmexec/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [5.0.3](https://github.com/npm/cli/compare/libnpmexec-v5.0.2...libnpmexec-v5.0.3) (2022-11-09) + +### Bug Fixes + +* [`a767aae`](https://github.com/npm/cli/commit/a767aae7148dbbc943095ba994bbfab58bf2a8be) npx: look for bins in local package.json (@wraithgar) + +### Dependencies + +* [Workspace](https://github.com/npm/cli/compare/arborist-v6.1.1...arborist-v6.1.2): `@npmcli/arborist@6.1.2` + ## [5.0.2](https://github.com/npm/cli/compare/libnpmexec-v5.0.1...libnpmexec-v5.0.2) (2022-11-02) ### Bug Fixes diff --git a/workspaces/libnpmexec/lib/index.js b/workspaces/libnpmexec/lib/index.js index 7a224ab7f0a62..575f8e6ea4a5e 100644 --- a/workspaces/libnpmexec/lib/index.js +++ b/workspaces/libnpmexec/lib/index.js @@ -79,7 +79,6 @@ const exec = async (opts) => { const { args = [], call = '', - color = false, localBin = resolve('./node_modules/.bin'), locationMsg = undefined, globalBin = '', @@ -97,7 +96,6 @@ const exec = async (opts) => { const run = () => runScript({ args, call, - color, flatOptions, locationMsg, output, @@ -114,20 +112,36 @@ const exec = async (opts) => { const needPackageCommandSwap = (args.length > 0) && (packages.length === 0) // If they asked for a command w/o specifying a package, see if there is a - // bin that directly matches that name either globally or in the local tree. + // bin that directly matches that name: + // - in the local package itself + // - in the local tree + // - globally if (needPackageCommandSwap) { - const dir = dirname(dirname(localBin)) - const localBinPath = await localFileExists(dir, args[0], '/') - if (localBinPath) { - binPaths.push(localBinPath) - return await run() - } else if (globalPath && await fileExists(`${globalBin}/${args[0]}`)) { - binPaths.push(globalBin) - return await run() + let localManifest + try { + localManifest = await pacote.manifest(path, flatOptions) + } catch { + // no local package.json? no problem, move one. + } + if (localManifest?.bin?.[args[0]]) { + // we have to install the local package into the npx cache so that its + // bin links get set up + packages.push(path) + yes = true + flatOptions.installLinks = false + } else { + const dir = dirname(dirname(localBin)) + const localBinPath = await localFileExists(dir, args[0], '/') + if (localBinPath) { + binPaths.push(localBinPath) + return await run() + } else if (globalPath && await fileExists(`${globalBin}/${args[0]}`)) { + binPaths.push(globalBin) + return await run() + } + // We swap out args[0] with the bin from the manifest later + packages.push(args[0]) } - - // We swap out args[0] with the bin from the manifest later - packages.push(args[0]) } // Resolve any directory specs so that the npx directory is unique to the diff --git a/workspaces/libnpmexec/lib/run-script.js b/workspaces/libnpmexec/lib/run-script.js index b34895c824e6d..2f7b258345faa 100644 --- a/workspaces/libnpmexec/lib/run-script.js +++ b/workspaces/libnpmexec/lib/run-script.js @@ -15,7 +15,6 @@ const nocolor = { const run = async ({ args, call, - color, flatOptions, locationMsg, output = () => {}, @@ -26,6 +25,7 @@ const run = async ({ }) => { // turn list of args into command string const script = call || args.shift() || scriptShell + const color = !!flatOptions.color const colorize = color ? chalk : nocolor // do the fakey runScript dance diff --git a/workspaces/libnpmexec/package.json b/workspaces/libnpmexec/package.json index bdd10efcd394a..31f3531cbc538 100644 --- a/workspaces/libnpmexec/package.json +++ b/workspaces/libnpmexec/package.json @@ -1,6 +1,6 @@ { "name": "libnpmexec", - "version": "5.0.2", + "version": "5.0.3", "files": [ "bin/", "lib/" @@ -51,14 +51,14 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "bin-links": "^4.0.1", "minify-registry-metadata": "^2.2.0", "mkdirp": "^1.0.4", "tap": "^16.0.1" }, "dependencies": { - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/ci-detect": "^3.0.1", "@npmcli/run-script": "^6.0.0", "chalk": "^4.1.0", @@ -73,7 +73,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" } } diff --git a/workspaces/libnpmexec/test/index.js b/workspaces/libnpmexec/test/index.js index 8d34118296200..739a686aba8c3 100644 --- a/workspaces/libnpmexec/test/index.js +++ b/workspaces/libnpmexec/test/index.js @@ -24,39 +24,31 @@ const baseOpts = { yes: true, } -t.test('local pkg', async t => { +t.test('bin in local pkg', async t => { const pkg = { - name: 'pkg', + name: '@npmcli/local-pkg-bin-test', bin: { - a: 'index.js', + a: 'local-bin-test.js', }, } const path = t.testdir({ cache: {}, npxCache: {}, - node_modules: { - '.bin': {}, - a: { - 'index.js': `#!/usr/bin/env node + 'local-bin-test.js': `#!/usr/bin/env node require('fs').writeFileSync(process.argv.slice(2)[0], 'LOCAL PKG')`, - }, - }, 'package.json': JSON.stringify(pkg), }) const localBin = resolve(path, 'node_modules/.bin') const runPath = path + const npxCache = resolve(path, 'npxCache') - const executable = resolve(path, 'node_modules/a') + const executable = resolve(path, 'local-bin-test.js') fs.chmodSync(executable, 0o775) - await binLinks({ - path: resolve(path, 'node_modules/a'), - pkg, - }) - await libexec({ ...baseOpts, args: ['a', 'resfile'], + npxCache, localBin, path, runPath, diff --git a/workspaces/libnpmexec/test/run-script.js b/workspaces/libnpmexec/test/run-script.js index 40b31ebdf2b19..4b1cafa0dec73 100644 --- a/workspaces/libnpmexec/test/run-script.js +++ b/workspaces/libnpmexec/test/run-script.js @@ -4,6 +4,7 @@ const baseOpts = { args: [], call: '', color: false, + flatOptions: {}, path: '', runPath: '', shell: process.platform === 'win32' @@ -73,7 +74,7 @@ t.test('colorized interactive mode msg', async t => { OUTPUT.push(msg) }, runPath: '/foo/', - color: true, + flatOptions: { color: true }, }) t.matchSnapshot(OUTPUT.join('\n'), 'should print colorized output') }) diff --git a/workspaces/libnpmfund/CHANGELOG.md b/workspaces/libnpmfund/CHANGELOG.md index a84dd61e43c58..4889150836b7e 100644 --- a/workspaces/libnpmfund/CHANGELOG.md +++ b/workspaces/libnpmfund/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [4.0.3](https://github.com/npm/cli/compare/libnpmfund-v4.0.2...libnpmfund-v4.0.3) (2022-11-09) + +### Dependencies + +* [Workspace](https://github.com/npm/cli/compare/arborist-v6.1.1...arborist-v6.1.2): `@npmcli/arborist@6.1.2` + ## [4.0.2](https://github.com/npm/cli/compare/libnpmfund-v4.0.1...libnpmfund-v4.0.2) (2022-11-02) ### Dependencies diff --git a/workspaces/libnpmfund/package.json b/workspaces/libnpmfund/package.json index 99833181dece9..352babd7a7c84 100644 --- a/workspaces/libnpmfund/package.json +++ b/workspaces/libnpmfund/package.json @@ -1,6 +1,6 @@ { "name": "libnpmfund", - "version": "4.0.2", + "version": "4.0.3", "main": "lib/index.js", "files": [ "bin/", @@ -42,18 +42,18 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "tap": "^16.0.1" }, "dependencies": { - "@npmcli/arborist": "^6.1.1" + "@npmcli/arborist": "^6.1.2" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmhook/package.json b/workspaces/libnpmhook/package.json index bdd9756c0d96c..7b2c911663700 100644 --- a/workspaces/libnpmhook/package.json +++ b/workspaces/libnpmhook/package.json @@ -37,7 +37,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -46,7 +46,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmorg/package.json b/workspaces/libnpmorg/package.json index a234750d5f33f..e1d309162bc0a 100644 --- a/workspaces/libnpmorg/package.json +++ b/workspaces/libnpmorg/package.json @@ -28,7 +28,7 @@ ], "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "minipass": "^3.1.1", "nock": "^13.2.4", "tap": "^16.0.1" @@ -49,7 +49,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmpack/CHANGELOG.md b/workspaces/libnpmpack/CHANGELOG.md index 235af82111896..1da3688596da1 100644 --- a/workspaces/libnpmpack/CHANGELOG.md +++ b/workspaces/libnpmpack/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [5.0.3](https://github.com/npm/cli/compare/libnpmpack-v5.0.2...libnpmpack-v5.0.3) (2022-11-09) + +### Dependencies + +* [Workspace](https://github.com/npm/cli/compare/arborist-v6.1.1...arborist-v6.1.2): `@npmcli/arborist@6.1.2` + ## [5.0.2](https://github.com/npm/cli/compare/libnpmpack-v5.0.1...libnpmpack-v5.0.2) (2022-11-02) ### Bug Fixes diff --git a/workspaces/libnpmpack/package.json b/workspaces/libnpmpack/package.json index 23dcd361c198c..469864a4fb184 100644 --- a/workspaces/libnpmpack/package.json +++ b/workspaces/libnpmpack/package.json @@ -1,6 +1,6 @@ { "name": "libnpmpack", - "version": "5.0.2", + "version": "5.0.3", "description": "Programmatic API for the bits behind npm pack", "author": "GitHub Inc.", "main": "lib/index.js", @@ -23,7 +23,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.0.7", "spawk": "^1.7.1", "tap": "^16.0.1" @@ -36,7 +36,7 @@ "bugs": "https://github.com/npm/libnpmpack/issues", "homepage": "https://npmjs.com/package/libnpmpack", "dependencies": { - "@npmcli/arborist": "^6.1.1", + "@npmcli/arborist": "^6.1.2", "@npmcli/run-script": "^6.0.0", "npm-package-arg": "^10.0.0", "pacote": "^15.0.2" @@ -46,7 +46,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmpublish/CHANGELOG.md b/workspaces/libnpmpublish/CHANGELOG.md index ef912f60e6d9c..7b27afdf3b925 100644 --- a/workspaces/libnpmpublish/CHANGELOG.md +++ b/workspaces/libnpmpublish/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [7.0.3](https://github.com/npm/cli/compare/libnpmpublish-v7.0.2...libnpmpublish-v7.0.3) (2022-11-09) + +### Dependencies + +* [Workspace](https://github.com/npm/cli/compare/libnpmpack-v5.0.2...libnpmpack-v5.0.3): `libnpmpack@5.0.3` + ## [7.0.2](https://github.com/npm/cli/compare/libnpmpublish-v7.0.1...libnpmpublish-v7.0.2) (2022-11-02) ### Dependencies diff --git a/workspaces/libnpmpublish/package.json b/workspaces/libnpmpublish/package.json index 29ca5e58c8d28..0498dcce2919d 100644 --- a/workspaces/libnpmpublish/package.json +++ b/workspaces/libnpmpublish/package.json @@ -1,6 +1,6 @@ { "name": "libnpmpublish", - "version": "7.0.2", + "version": "7.0.3", "description": "Programmatic API for the bits behind npm publish and unpublish", "author": "GitHub Inc.", "main": "lib/index.js", @@ -25,8 +25,8 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", - "libnpmpack": "^5.0.2", + "@npmcli/template-oss": "4.9.0", + "libnpmpack": "^5.0.3", "lodash.clonedeep": "^4.5.0", "nock": "^13.2.4", "tap": "^16.0.1" @@ -50,7 +50,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmsearch/package.json b/workspaces/libnpmsearch/package.json index d727ee5579db8..25b8c2664f0e5 100644 --- a/workspaces/libnpmsearch/package.json +++ b/workspaces/libnpmsearch/package.json @@ -26,7 +26,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -45,7 +45,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmteam/package.json b/workspaces/libnpmteam/package.json index 5fc2f29e799c0..f85f67de8d3ae 100644 --- a/workspaces/libnpmteam/package.json +++ b/workspaces/libnpmteam/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "nock": "^13.2.4", "tap": "^16.0.1" }, @@ -39,7 +39,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" }, "tap": { diff --git a/workspaces/libnpmversion/package.json b/workspaces/libnpmversion/package.json index 3237b62d19382..410bcfe0b727e 100644 --- a/workspaces/libnpmversion/package.json +++ b/workspaces/libnpmversion/package.json @@ -32,7 +32,7 @@ }, "devDependencies": { "@npmcli/eslint-config": "^4.0.0", - "@npmcli/template-oss": "4.8.0", + "@npmcli/template-oss": "4.9.0", "require-inject": "^1.4.4", "tap": "^16.0.1" }, @@ -48,7 +48,7 @@ }, "templateOSS": { "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", - "version": "4.8.0", + "version": "4.9.0", "content": "../../scripts/template-oss/index.js" } }