diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..5d47c21c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.gitattributes b/.gitattributes index f6ac05f4..0fe3b2d3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ +* text=auto eol=lf .licenses/** -diff linguist-generated=true diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index ca881129..f9782449 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,7 +4,6 @@ about: Create a bug report title: '' labels: bug, needs triage assignees: '' - --- @@ -17,15 +16,18 @@ A clear and concise description of what the bug is. Specify the action version **Platform:** + - [ ] Ubuntu - [ ] macOS - [ ] Windows **Runner type:** + - [ ] Hosted - [ ] Self-hosted **Tools version:** + **Repro steps:** diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ec4bb386..3ba13e0c 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1 +1 @@ -blank_issues_enabled: false \ No newline at end of file +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 1c370271..a3fc8405 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -5,6 +5,7 @@ title: '' labels: feature request, needs triage assignees: '' --- + @@ -15,4 +16,5 @@ Describe your proposal. Justification or a use case for your proposal. **Are you willing to submit a PR?** - \ No newline at end of file + + diff --git a/.github/eslint-compact.json b/.github/eslint-compact.json index 72173f0c..c280fdbd 100644 --- a/.github/eslint-compact.json +++ b/.github/eslint-compact.json @@ -1,18 +1,18 @@ { - "problemMatcher": [ + "problemMatcher": [ + { + "owner": "eslint-compact", + "pattern": [ { - "owner": "eslint-compact", - "pattern": [ - { - "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s(Error|Warning|Info)\\s-\\s(.+)\\s\\((.+)\\)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5, - "code": 6 - } - ] + "regexp": "^(.+):\\sline\\s(\\d+),\\scol\\s(\\d+),\\s(Error|Warning|Info)\\s-\\s(.+)\\s\\((.+)\\)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5, + "code": 6 } - ] + ] + } + ] } diff --git a/.github/eslint-stylish.json b/.github/eslint-stylish.json index 1d75d6c3..eba0bf60 100644 --- a/.github/eslint-stylish.json +++ b/.github/eslint-stylish.json @@ -1,22 +1,22 @@ { - "problemMatcher": [ + "problemMatcher": [ + { + "owner": "eslint-stylish", + "pattern": [ { - "owner": "eslint-stylish", - "pattern": [ - { - "regexp": "^([^\\s].*)$", - "file": 1 - }, - { - "regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$", - "line": 1, - "column": 2, - "severity": 3, - "message": 4, - "code": 5, - "loop": true - } - ] + "regexp": "^([^\\s].*)$", + "file": 1 + }, + { + "regexp": "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.*)\\s\\s+(.*)$", + "line": 1, + "column": 2, + "severity": 3, + "message": 4, + "code": 5, + "loop": true } - ] + ] + } + ] } diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index ef54acad..77714ebc 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,5 +5,6 @@ Describe your changes. Add link to the related issue. **Check list:** + - [ ] Mark if documentation changes are required. -- [ ] Mark if tests were added or updated to cover the changes. \ No newline at end of file +- [ ] Mark if tests were added or updated to cover the changes. diff --git a/.github/tsc.json b/.github/tsc.json index 7d8df569..22e7fade 100644 --- a/.github/tsc.json +++ b/.github/tsc.json @@ -1,18 +1,18 @@ { - "problemMatcher": [ + "problemMatcher": [ + { + "owner": "tsc", + "pattern": [ { - "owner": "tsc", - "pattern": [ - { - "regexp": "^([^\\s].*)[\\(:](\\d+)[,:](\\d+)(?:\\):\\s+|\\s+-\\s+)(error|warning|info)\\s+TS(\\d+)\\s*:\\s*(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "code": 5, - "message": 6 - } - ] + "regexp": "^([^\\s].*)[\\(:](\\d+)[,:](\\d+)(?:\\):\\s+|\\s+-\\s+)(error|warning|info)\\s+TS(\\d+)\\s*:\\s*(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "code": 5, + "message": 6 } - ] + ] + } + ] } diff --git a/.github/workflows/release-new-action-version.yml b/.github/workflows/release-new-action-version.yml index 908248b8..797c81a3 100644 --- a/.github/workflows/release-new-action-version.yml +++ b/.github/workflows/release-new-action-version.yml @@ -20,8 +20,8 @@ jobs: name: releaseNewActionVersion runs-on: ubuntu-latest steps: - - name: Update the ${{ env.TAG_NAME }} tag - uses: actions/publish-action@v0.1.0 - with: - source-tag: ${{ env.TAG_NAME }} - slack-webhook: ${{ secrets.SLACK_WEBHOOK }} + - name: Update the ${{ env.TAG_NAME }} tag + uses: actions/publish-action@v0.1.0 + with: + source-tag: ${{ env.TAG_NAME }} + slack-webhook: ${{ secrets.SLACK_WEBHOOK }} diff --git a/.licensed.yml b/.licensed.yml index e97382c4..fe63d2d0 100644 --- a/.licensed.yml +++ b/.licensed.yml @@ -12,4 +12,4 @@ allowed: - unlicense reviewed: - npm: \ No newline at end of file + npm: diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..341d6c82 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +.licenses/ +dist/ +pnpm-lock.yaml diff --git a/.prettierrc.json b/.prettierrc.json index f6736bc7..9beaf12b 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,11 +1,8 @@ { - "printWidth": 80, - "tabWidth": 2, - "useTabs": false, - "semi": true, - "singleQuote": true, - "trailingComma": "none", - "bracketSpacing": false, - "arrowParens": "avoid", - "parser": "typescript" - } \ No newline at end of file + "printWidth": 80, + "semi": true, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": false, + "arrowParens": "avoid" +} diff --git a/.vscode/launch.json b/.vscode/launch.json index 01362e34..b04bf4f3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,21 +1,21 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Debug Jest Tests on Nix", - "type": "node", - "request": "launch", - "runtimeArgs": [ - "--inspect-brk", - "${workspaceRoot}/node_modules/.bin/jest", - "--runInBand" - ], - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "port": 9229 - } - ] -} \ No newline at end of file + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Jest Tests on Nix", + "type": "node", + "request": "launch", + "runtimeArgs": [ + "--inspect-brk", + "${workspaceRoot}/node_modules/.bin/jest", + "--runInBand" + ], + "console": "integratedTerminal", + "internalConsoleOptions": "neverOpen", + "port": 9229 + } + ] +} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 517657b8..5f1b1c6a 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -14,21 +14,21 @@ appearance, race, religion, or sexual identity and orientation. Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or +- The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities @@ -73,4 +73,4 @@ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.ht [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq \ No newline at end of file +https://www.contributor-covenant.org/faq diff --git a/README.md b/README.md index 6f44fdc6..18b2733d 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,12 @@ See [action.yml](action.yml) ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: 16 -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + - run: npm ci + - run: npm test ``` The `node-version` input is optional. If not supplied, the node version from PATH will be used. However, it is recommended to always specify Node.js version and don't rely on the system one. @@ -39,10 +39,10 @@ The `node-version` input supports the Semantic Versioning Specification, for mor Examples: - - Major versions: `14`, `16`, `18` - - More specific versions: `10.15`, `16.15.1` , `18.4.0` - - NVM LTS syntax: `lts/erbium`, `lts/fermium`, `lts/*`, `lts/-n` - - Latest release: `*` or `latest`/`current`/`node` +- Major versions: `14`, `16`, `18` +- More specific versions: `10.15`, `16.15.1` , `18.4.0` +- NVM LTS syntax: `lts/erbium`, `lts/fermium`, `lts/*`, `lts/-n` +- Latest release: `*` or `latest`/`current`/`node` **Note:** Like the other values, `*` will get the latest [locally-cached Node.js version](https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md#nodejs), or the latest version from [actions/node-versions](https://github.com/actions/node-versions/blob/main/versions-manifest.json), depending on the [`check-latest`](docs/advanced-usage.md#check-latest-version) input. @@ -68,27 +68,27 @@ See the examples of using cache for `yarn`/`pnpm` and `cache-dependency-path` in ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: 16 - cache: 'npm' -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: 'npm' + - run: npm ci + - run: npm test ``` **Caching npm dependencies in monorepos:** ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: subdir/package-lock.json -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 16 + cache: 'npm' + cache-dependency-path: subdir/package-lock.json + - run: npm ci + - run: npm test ``` ## Matrix Testing @@ -99,7 +99,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - node: [ 14, 16, 18 ] + node: [14, 16, 18] name: Node ${{ matrix.node }} sample steps: - uses: actions/checkout@v3 diff --git a/__tests__/authutil.test.ts b/__tests__/authutil.test.ts index 1ec4e1e1..9501cc1a 100644 --- a/__tests__/authutil.test.ts +++ b/__tests__/authutil.test.ts @@ -15,11 +15,7 @@ describe('authutil tests', () => { let dbgSpy: jest.SpyInstance; beforeAll(async () => { - const randPath = path.join( - Math.random() - .toString(36) - .substring(7) - ); + const randPath = path.join(Math.random().toString(36).substring(7)); console.log('::stop-commands::stoptoken'); // Disable executing of runner commands when running tests in actions process.env['GITHUB_ENV'] = ''; // Stub out Environment file functionality so we can verify it writes to standard out (toolkit is backwards compatible) const tempDir = path.join(_runnerDir, randPath, 'temp'); diff --git a/__tests__/data/node-dist-index.json b/__tests__/data/node-dist-index.json index 09cca7ca..ffabbabf 100644 --- a/__tests__/data/node-dist-index.json +++ b/__tests__/data/node-dist-index.json @@ -1,770 +1,770 @@ [ - { - "version": "v14.1.0", - "date": "2020-04-29", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "8.1.307.31", - "uv": "1.37.0", - "zlib": "1.2.11", - "openssl": "1.1.1g", - "modules": "83", - "lts": false, - "security": false - }, - { - "version": "v14.0.0", - "date": "2020-04-21", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "8.1.307.30", - "uv": "1.37.0", - "zlib": "1.2.11", - "openssl": "1.1.1f", - "modules": "83", - "lts": false, - "security": false - }, - { - "version": "v13.14.0", - "date": "2020-04-28", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "7.9.317.25", - "uv": "1.37.0", - "zlib": "1.2.11", - "openssl": "1.1.1g", - "modules": "79", - "lts": false, - "security": false - }, - { - "version": "v13.13.0", - "date": "2020-04-14", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "7.9.317.25", - "uv": "1.35.0", - "zlib": "1.2.11", - "openssl": "1.1.1f", - "modules": "79", - "lts": false, - "security": false - }, - { - "version": "v12.16.3", - "date": "2020-04-28", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "7.8.279.23", - "uv": "1.34.2", - "zlib": "1.2.11", - "openssl": "1.1.1g", - "modules": "72", - "lts": "Erbium", - "security": false - }, - { - "version": "v12.16.2", - "date": "2020-04-08", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "7.8.279.23", - "uv": "1.34.2", - "zlib": "1.2.11", - "openssl": "1.1.1e", - "modules": "72", - "lts": "Erbium", - "security": false - }, - { - "version": "v12.1.0", - "date": "2019-04-29", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.9.0", - "v8": "7.4.288.21", - "uv": "1.28.0", - "zlib": "1.2.11", - "openssl": "1.1.1b", - "modules": "72", - "lts": false, - "security": false - }, - { - "version": "v11.15.0", - "date": "2019-04-30", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.7.0", - "v8": "7.0.276.38", - "uv": "1.27.0", - "zlib": "1.2.11", - "openssl": "1.1.1b", - "modules": "67", - "lts": false, - "security": false - }, - { - "version": "v10.20.1", - "date": "2020-04-10", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "6.8.275.32", - "uv": "1.34.2", - "zlib": "1.2.11", - "openssl": "1.1.1e", - "modules": "64", - "lts": "Dubnium", - "security": false - }, - { - "version": "v10.20.0", - "date": "2020-03-24", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.14.4", - "v8": "6.8.275.32", - "uv": "1.34.2", - "zlib": "1.2.11", - "openssl": "1.1.1e", - "modules": "64", - "lts": "Dubnium", - "security": false - }, - { - "version": "v9.11.2", - "date": "2018-06-12", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "5.6.0", - "v8": "6.2.414.46", - "uv": "1.19.2", - "zlib": "1.2.11", - "openssl": "1.0.2o", - "modules": "59", - "lts": false, - "security": false - }, - { - "version": "v9.11.1", - "date": "2018-04-05", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "5.6.0", - "v8": "6.2.414.46", - "uv": "1.19.2", - "zlib": "1.2.11", - "openssl": "1.0.2o", - "modules": "59", - "lts": false, - "security": false - }, - { - "version": "v8.17.0", - "date": "2019-12-17", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.13.4", - "v8": "6.2.414.78", - "uv": "1.23.2", - "zlib": "1.2.11", - "openssl": "1.0.2s", - "modules": "57", - "lts": "Carbon", - "security": true - }, - { - "version": "v8.16.2", - "date": "2019-10-08", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "6.4.1", - "v8": "6.2.414.78", - "uv": "1.23.2", - "zlib": "1.2.11", - "openssl": "1.0.2s", - "modules": "57", - "lts": "Carbon", - "security": false - }, - { - "version": "v7.10.1", - "date": "2017-07-11", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "4.2.0", - "v8": "5.5.372.43", - "uv": "1.11.0", - "zlib": "1.2.11", - "openssl": "1.0.2k", - "modules": "51", - "lts": false, - "security": true - }, - { - "version": "v7.10.0", - "date": "2017-05-02", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "4.2.0", - "v8": "5.5.372.43", - "uv": "1.11.0", - "zlib": "1.2.11", - "openssl": "1.0.2k", - "modules": "51", - "lts": false, - "security": false - }, - { - "version": "v6.17.1", - "date": "2019-04-03", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "3.10.10", - "v8": "5.1.281.111", - "uv": "1.16.1", - "zlib": "1.2.11", - "openssl": "1.0.2r", - "modules": "48", - "lts": "Boron", - "security": false - }, - { - "version": "v6.17.0", - "date": "2019-02-28", - "files": [ - "aix-ppc64", - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-s390x", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "3.10.10", - "v8": "5.1.281.111", - "uv": "1.16.1", - "zlib": "1.2.11", - "openssl": "1.0.2r", - "modules": "48", - "lts": "Boron", - "security": true - }, - { - "version": "v5.12.0", - "date": "2016-06-23", - "files": [ - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-exe", - "win-x64-msi", - "win-x86-exe", - "win-x86-msi" - ], - "npm": "3.8.6", - "v8": "4.6.85.32", - "uv": "1.8.0", - "zlib": "1.2.8", - "openssl": "1.0.2h", - "modules": "47", - "lts": false, - "security": false - }, - { - "version": "v4.9.1", - "date": "2018-03-29", - "files": [ - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "2.15.11", - "v8": "4.5.103.53", - "uv": "1.9.1", - "zlib": "1.2.11", - "openssl": "1.0.2o", - "modules": "46", - "lts": "Argon", - "security": false - }, - { - "version": "v4.9.0", - "date": "2018-03-28", - "files": [ - "headers", - "linux-arm64", - "linux-armv6l", - "linux-armv7l", - "linux-ppc64le", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-7z", - "win-x64-exe", - "win-x64-msi", - "win-x64-zip", - "win-x86-7z", - "win-x86-exe", - "win-x86-msi", - "win-x86-zip" - ], - "npm": "2.15.11", - "v8": "4.5.103.53", - "uv": "1.9.1", - "zlib": "1.2.11", - "openssl": "1.0.2o", - "modules": "46", - "lts": "Argon", - "security": true - }, - { - "version": "v0.12.18", - "date": "2017-02-22", - "files": [ - "headers", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "osx-x86-tar", - "src", - "sunos-x86", - "win-x64-exe", - "win-x86-exe", - "win-x86-msi" - ], - "npm": "2.15.11", - "v8": "3.28.71.20", - "uv": "1.6.1", - "zlib": "1.2.8", - "openssl": "1.0.1u", - "modules": "14", - "lts": false, - "security": false - }, - { - "version": "v0.12.17", - "date": "2016-10-18", - "files": [ - "headers", - "linux-x64", - "linux-x86", - "osx-x64-pkg", - "osx-x64-tar", - "osx-x86-tar", - "src", - "sunos-x64", - "sunos-x86", - "win-x64-exe", - "win-x86-exe", - "win-x86-msi" - ], - "npm": "2.15.1", - "v8": "3.28.71.19", - "uv": "1.6.1", - "zlib": "1.2.8", - "openssl": "1.0.1u", - "modules": "14", - "lts": false, - "security": true - } -] \ No newline at end of file + { + "version": "v14.1.0", + "date": "2020-04-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "8.1.307.31", + "uv": "1.37.0", + "zlib": "1.2.11", + "openssl": "1.1.1g", + "modules": "83", + "lts": false, + "security": false + }, + { + "version": "v14.0.0", + "date": "2020-04-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "8.1.307.30", + "uv": "1.37.0", + "zlib": "1.2.11", + "openssl": "1.1.1f", + "modules": "83", + "lts": false, + "security": false + }, + { + "version": "v13.14.0", + "date": "2020-04-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "7.9.317.25", + "uv": "1.37.0", + "zlib": "1.2.11", + "openssl": "1.1.1g", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.13.0", + "date": "2020-04-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "7.9.317.25", + "uv": "1.35.0", + "zlib": "1.2.11", + "openssl": "1.1.1f", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v12.16.3", + "date": "2020-04-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "7.8.279.23", + "uv": "1.34.2", + "zlib": "1.2.11", + "openssl": "1.1.1g", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.16.2", + "date": "2020-04-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "7.8.279.23", + "uv": "1.34.2", + "zlib": "1.2.11", + "openssl": "1.1.1e", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.1.0", + "date": "2019-04-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v11.15.0", + "date": "2019-04-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v10.20.1", + "date": "2020-04-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "6.8.275.32", + "uv": "1.34.2", + "zlib": "1.2.11", + "openssl": "1.1.1e", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.20.0", + "date": "2020-03-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.14.4", + "v8": "6.8.275.32", + "uv": "1.34.2", + "zlib": "1.2.11", + "openssl": "1.1.1e", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v9.11.2", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.11.1", + "date": "2018-04-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v8.17.0", + "date": "2019-12-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.2.414.78", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2s", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.16.2", + "date": "2019-10-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.78", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2s", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v7.10.1", + "date": "2017-07-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": true + }, + { + "version": "v7.10.0", + "date": "2017-05-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v6.17.1", + "date": "2019-04-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.17.0", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v5.12.0", + "date": "2016-06-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.32", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v4.9.1", + "date": "2018-03-29", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.9.0", + "date": "2018-03-28", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v0.12.18", + "date": "2017-02-22", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.11", + "v8": "3.28.71.20", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.17", + "date": "2016-10-18", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": true + } +] diff --git a/__tests__/data/package-lock.json b/__tests__/data/package-lock.json index 2e3a8e06..86e61539 100644 --- a/__tests__/data/package-lock.json +++ b/__tests__/data/package-lock.json @@ -1,395 +1,395 @@ { - "name": "test", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "requires": { - "mime-db": "1.47.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "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==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "name": "test", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } - } \ No newline at end of file + } +} diff --git a/action.yml b/action.yml index ae2e8243..83a72201 100644 --- a/action.yml +++ b/action.yml @@ -25,10 +25,10 @@ inputs: description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.' cache-dependency-path: description: 'Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies.' -# TODO: add input to control forcing to pull from cloud or dist. +# TODO: add input to control forcing to pull from cloud or dist. # escape valve for someone having issues or needing the absolute latest which isn't cached yet outputs: - cache-hit: + cache-hit: description: 'A boolean value to indicate if a cache was hit.' node-version: description: 'The installed node version.' diff --git a/docs/adrs/0000-caching-dependencies.md b/docs/adrs/0000-caching-dependencies.md index c862a8d4..9e1a6dd4 100644 --- a/docs/adrs/0000-caching-dependencies.md +++ b/docs/adrs/0000-caching-dependencies.md @@ -1,25 +1,30 @@ # 0. Caching dependencies + Date: 2021-05-21 Status: Accepted # Context + `actions/setup-node` is the 2nd most popular action in GitHub Actions. A lot of customers use it in conjunction with [actions/cache](https://github.com/actions/cache) to speed up dependencies installation. See more examples on proper usage in [actions/cache documentation](https://github.com/actions/cache/blob/main/examples.md#node---npm). # Goals & Anti-Goals + Integration of caching functionality into `actions/setup-node` action will bring the following benefits for action users: + - Decrease the entry threshold for using the cache for Node.js dependencies and simplify initial configuration - Simplify YAML pipelines because no need additional steps to enable caching - More users will use cache for Node.js so more customers will have fast builds! We will add support for NPM and Yarn dependencies caching. -As the first stage, we won't support custom locations for `package-lock.json`, `yarn.lock` files and action will work only when files are located in repository root. +As the first stage, we won't support custom locations for `package-lock.json`, `yarn.lock` files and action will work only when files are located in repository root. We don't pursue the goal to provide wide customization of caching in scope of `actions/setup-node` action. The purpose of this integration is covering ~90% of basic use-cases. If user needs flexible customization, we should advice them to use `actions/cache` directly. # Decision -- Add `cache` input parameter to `actions/setup-node`. For now, input will accept the following values: + +- Add `cache` input parameter to `actions/setup-node`. For now, input will accept the following values: - `npm` - enable caching for npm dependencies - `yarn` - enable caching for yarn dependencies - `''` - disable caching (default value) @@ -33,24 +38,27 @@ We don't pursue the goal to provide wide customization of caching in scope of `a - Yarn 2 (retrieved via `yarn config get cacheFolder`) # Example of real use-cases + Npm package manager: + ```yml steps: -- uses: actions/checkout@v2 -- uses: actions/setup-node@v2 - with: - node-version: '14' - cache: npm + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14' + cache: npm ``` Yarn package manager: + ```yml steps: -- uses: actions/checkout@v2 -- uses: actions/setup-node@v2 - with: - node-version: '14' - cache: yarn + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14' + cache: yarn ``` # Release process diff --git a/docs/adrs/0001-support-caching-deps-for-monorepos.md b/docs/adrs/0001-support-caching-deps-for-monorepos.md index 0677873d..982d3476 100644 --- a/docs/adrs/0001-support-caching-deps-for-monorepos.md +++ b/docs/adrs/0001-support-caching-deps-for-monorepos.md @@ -1,9 +1,11 @@ # 0. Support caching dependencies for mono repos + Date: 2021-07-13 Status: Proposed ## Context + Currently, `actions/setup-node` supports caching dependencies for Npm and Yarn package managers. For the first iteration, we have decided to not support cases where `package-lock.json` / `yarn.lock` are located outside of repository root. Current implementation searches the following file patterns in the repository root: `package-lock.json`, `yarn.lock` (in order of resolving priorities) @@ -12,11 +14,14 @@ Obviously, it made build-in caching unusable for mono-repos and repos with compl We would like to revisit this decision and add customization for dependencies lock file location. ## Proposal + We have the following options: -1. Allow to specify directory where `package-lock.json` or `yarn.lock` are located + +1. Allow to specify directory where `package-lock.json` or `yarn.lock` are located 2. Allow to specify path to the dependencies lock file (including directory path and filename) The second option looks more generic because it allows to: + - specify multiple dependencies files using file patterns like `**/package-lock.json` ([one of recommended approaches in actions/cache](https://github.com/actions/cache/blob/main/examples.md#macos-and-ubuntu)) - specify custom dependencies files like `src/npm-shrinkwrap.json` - change default resolving priority if both `yarn.lock` and `package-lock.json` exist in repository @@ -28,21 +33,23 @@ If provided path contains wildcards, the action will search all maching files an The hash of provided matched files will be used as a part of cache key. Yaml examples: + ```yml steps: -- uses: actions/checkout@v2 -- uses: actions/setup-node@v2 - with: - node-version: 14 - cache: npm - cache-dependency-path: 'sub-project/package-lock.json' + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 14 + cache: npm + cache-dependency-path: 'sub-project/package-lock.json' ``` + ```yml steps: -- uses: actions/checkout@v2 -- uses: actions/setup-node@v2 - with: - node-version: 14 - cache: yarn - cache-dependency-path: 'sub-project/**/yarn.lock' + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: 14 + cache: yarn + cache-dependency-path: 'sub-project/**/yarn.lock' ``` diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 00f4198d..79b38893 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -14,6 +14,7 @@ In order to get the most out of using your lockfile on continuous integration fo Ensure that `package-lock.json` is always committed, use `npm ci` instead of `npm install` when installing packages. **See also:** + - [Documentation of `package-lock.json`](https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json) - [Documentation of `npm ci`](https://docs.npmjs.com/cli/v8/commands/npm-ci) @@ -22,6 +23,7 @@ Ensure that `package-lock.json` is always committed, use `npm ci` instead of `np To ensure that `yarn.lock` is always committed, use `yarn install --immutable` when installing packages. **See also:** + - [Documentation of `yarn.lock`](https://classic.yarnpkg.com/en/docs/yarn-lock) - [Documentation of `--frozen-lockfile` option](https://classic.yarnpkg.com/en/docs/cli/install#toc-yarn-install-frozen-lockfile) - [QA - Should lockfiles be committed to the repoistory?](https://yarnpkg.com/getting-started/qa/#should-lockfiles-be-committed-to-the-repository) @@ -32,6 +34,7 @@ To ensure that `yarn.lock` is always committed, use `yarn install --immutable` w Ensure that `pnpm-lock.yaml` is always committed, when on CI pass `--frozen-lockfile` to `pnpm install` when installing packages. **See also:** + - [Working with Git - Lockfiles](https://pnpm.io/git#lockfiles) - [Documentation of `--frozen-lockfile` option](https://pnpm.io/cli/install#--frozen-lockfile) @@ -45,29 +48,30 @@ If `check-latest` is set to `true`, the action first checks if the cached versio ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14' - check-latest: true -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14' + check-latest: true + - run: npm ci + - run: npm test ``` ## Node version file The `node-version-file` input accepts a path to a file containing the version of Node.js to be used by a project, for example `.nvmrc`, `.node-version` or `.tool-versions`. If both the `node-version` and the `node-version-file` inputs are provided then the `node-version` input is used. See [supported version syntax](https://github.com/actions/setup-node#supported-version-syntax) + > The action will search for the node version file relative to the repository root. ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version-file: '.nvmrc' -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + - run: npm ci + - run: npm test ``` ## Architecture @@ -75,6 +79,7 @@ steps: You can use any of the [supported operating systems](https://docs.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners), and the compatible `architecture` can be selected using `architecture`. Values are `x86`, `x64`, `arm64`, `armv6l`, `armv7l`, `ppc64le`, `s390x` (not all of the architectures are available on all platforms). When using `architecture`, `node-version` must be provided as well. + ```yaml jobs: build: @@ -91,22 +96,25 @@ jobs: ``` ## Caching packages data + The action follows [actions/cache](https://github.com/actions/cache/blob/main/examples.md#node---npm) guidelines, and caches global cache on the machine instead of `node_modules`, so cache can be reused between different Node.js versions. **Caching yarn dependencies:** Yarn caching handles both yarn versions: 1 or 2. + ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14' - cache: 'yarn' -- run: yarn install --frozen-lockfile # optional, --immutable -- run: yarn test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14' + cache: 'yarn' + - run: yarn install --frozen-lockfile # optional, --immutable + - run: yarn test ``` **Caching pnpm (v6.10+) dependencies:** + ```yaml # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by @@ -116,44 +124,46 @@ steps: # NOTE: pnpm caching support requires pnpm version >= 6.10.0 steps: -- uses: actions/checkout@v3 -- uses: pnpm/action-setup@v2 - with: - version: 6.32.9 -- uses: actions/setup-node@v3 - with: - node-version: '14' - cache: 'pnpm' -- run: pnpm install --frozen-lockfile -- run: pnpm test + - uses: actions/checkout@v3 + - uses: pnpm/action-setup@v2 + with: + version: 6.32.9 + - uses: actions/setup-node@v3 + with: + node-version: '14' + cache: 'pnpm' + - run: pnpm install --frozen-lockfile + - run: pnpm test ``` **Using wildcard patterns to cache dependencies** + ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14' - cache: 'npm' - cache-dependency-path: '**/package-lock.json' -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14' + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + - run: npm ci + - run: npm test ``` **Using a list of file paths to cache dependencies** + ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14' - cache: 'npm' - cache-dependency-path: | - server/app/package-lock.json - frontend/app/package-lock.json -- run: npm ci -- run: npm test + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14' + cache: 'npm' + cache-dependency-path: | + server/app/package-lock.json + frontend/app/package-lock.json + - run: npm ci + - run: npm test ``` ## Multiple Operating Systems and Architectures @@ -192,80 +202,86 @@ jobs: ``` ## Publish to npmjs and GPR with npm + ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14.x' - registry-url: 'https://registry.npmjs.org' -- run: npm ci -- run: npm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} -- uses: actions/setup-node@v3 - with: - registry-url: 'https://npm.pkg.github.com' -- run: npm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14.x' + registry-url: 'https://registry.npmjs.org' + - run: npm ci + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + - uses: actions/setup-node@v3 + with: + registry-url: 'https://npm.pkg.github.com' + - run: npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` ## Publish to npmjs and GPR with yarn + ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14.x' - registry-url: -- run: yarn install --frozen-lockfile -- run: yarn publish - env: - NODE_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }} -- uses: actions/setup-node@v3 - with: - registry-url: 'https://npm.pkg.github.com' -- run: yarn publish - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14.x' + registry-url: + - run: yarn install --frozen-lockfile + - run: yarn publish + env: + NODE_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }} + - uses: actions/setup-node@v3 + with: + registry-url: 'https://npm.pkg.github.com' + - run: yarn publish + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ``` ## Use private packages + ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14.x' - registry-url: 'https://registry.npmjs.org' -# Skip post-install scripts here, as a malicious -# script could steal NODE_AUTH_TOKEN. -- run: npm ci --ignore-scripts - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} -# `npm rebuild` will run all those post-install scripts for us. -- run: npm rebuild && npm run prepare --if-present + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14.x' + registry-url: 'https://registry.npmjs.org' + # Skip post-install scripts here, as a malicious + # script could steal NODE_AUTH_TOKEN. + - run: npm ci --ignore-scripts + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + # `npm rebuild` will run all those post-install scripts for us. + - run: npm rebuild && npm run prepare --if-present ``` + ### Yarn2 configuration + Yarn2 ignores both .npmrc and .yarnrc files created by the action, so before installing dependencies from the private repo it is necessary either to create or to modify existing yarnrc.yml file with `yarn config set` commands. Below you can find a sample "Setup .yarnrc.yml" step, that is going to allow you to configure a private GitHub registry for 'my-org' organisation. ```yaml steps: -- uses: actions/checkout@v3 -- uses: actions/setup-node@v3 - with: - node-version: '14.x' -- name: Setup .yarnrc.yml - run: | - yarn config set npmScopes.my-org.npmRegistryServer "https://npm.pkg.github.com" - yarn config set npmScopes.my-org.npmAlwaysAuth true - yarn config set npmScopes.my-org.npmAuthToken $NPM_AUTH_TOKEN - env: - NPM_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }} -- name: Install dependencies - run: yarn install --immutable + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: '14.x' + - name: Setup .yarnrc.yml + run: | + yarn config set npmScopes.my-org.npmRegistryServer "https://npm.pkg.github.com" + yarn config set npmScopes.my-org.npmAlwaysAuth true + yarn config set npmScopes.my-org.npmAuthToken $NPM_AUTH_TOKEN + env: + NPM_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }} + - name: Install dependencies + run: yarn install --immutable ``` + NOTE: As per https://github.com/actions/setup-node/issues/49 you cannot use `secrets.GITHUB_TOKEN` to access private GitHub Packages within the same organisation but in a different repository. diff --git a/docs/contributors.md b/docs/contributors.md index 7289d2a7..07b94ee3 100644 --- a/docs/contributors.md +++ b/docs/contributors.md @@ -6,17 +6,17 @@ We have prepared a short guide so that the process of making your contribution i ## How can I contribute... -* [Contribute Documentation:green_book:](#contribute-documentation) +- [Contribute Documentation:green_book:](#contribute-documentation) -* [Contribute Code :computer:](#contribute-code) +- [Contribute Code :computer:](#contribute-code) -* [Provide Support on Issues:pencil:](#provide-support-on-issues) +- [Provide Support on Issues:pencil:](#provide-support-on-issues) -* [Review Pull Requests:mag:](#review-pull-requests) +- [Review Pull Requests:mag:](#review-pull-requests) ## Contribute documentation -Documentation is a super important, critical part of this project. Docs are how we keep track of what we're doing, how, and why. It's how we stay on the same page about our policies and how we tell others everything they need to be able to use this project or contribute to it. +Documentation is a super important, critical part of this project. Docs are how we keep track of what we're doing, how, and why. It's how we stay on the same page about our policies and how we tell others everything they need to be able to use this project or contribute to it. Documentation contributions of any size are welcome! Feel free to contribute even if you're just rewording a sentence to be more clear, or fixing a spelling mistake! @@ -25,7 +25,7 @@ Documentation contributions of any size are welcome! Feel free to contribute eve Pull requests are the easiest way to contribute changes to git repos at GitHub. They are the preferred contribution method, as they offer a convenient way of commenting and amending the proposed changes. - Please check that no one else has already created a pull request with these or similar changes -- Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request +- Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request - Make sure your changes are formatted properly and consistently with the rest of the documentation - Re-read what you wrote, and run a spellchecker on it to make sure you didn't miss anything - If your pull request is connected to an open issue, please, leave a link to this issue in the `Related issue:` section @@ -36,7 +36,7 @@ Pull requests are the easiest way to contribute changes to git repos at GitHub. - Maintainers will review your pull request - If a maintainer requests changes, first of all, try to think about this request critically and only after that implement and request another review - If your PR gets accepted, it will soon be merged into the main branch. But your contribution will take effect only after the release of a new version of the action and updating the major tag -> Sometimes maintainers reject pull requests and that's ok! Usually, along with rejection, we supply the reason for it. Nonetheless, we still really appreciate you taking the time to do it, and we don't take that lightly :heart: + > Sometimes maintainers reject pull requests and that's ok! Usually, along with rejection, we supply the reason for it. Nonetheless, we still really appreciate you taking the time to do it, and we don't take that lightly :heart: ## Contribute code @@ -52,7 +52,7 @@ Pull requests are the easiest way to contribute changes to git repos at GitHub. - Please check that no one else has already created a pull request with these or similar changes - Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request -- **Run `pre-checkin` script to format, build and test changes** +- **Run `pre-checkin` script to format, build and test changes** - Make sure your changes are well formatted and that all tests are passing - If your pull request is connected to an open issue, please, leave a link to this issue in the `Related issue:` section - If you later need to add new commits to the pull request, you can simply commit the changes to the local branch and then push them. The pull request gets automatically updated @@ -66,7 +66,7 @@ Pull requests are the easiest way to contribute changes to git repos at GitHub. **Learn more about how to implement tests:** -Adding or changing tests is an integral part of making a change to the code. +Adding or changing tests is an integral part of making a change to the code. Unit tests are in the `__tests__` folder, and end-to-end tests are in the `workflows` folder, particularly in the [versions.yml](https://github.com/e-korolevskii/setup-node/blob/update-contributors-guide/.github/workflows/versions.yml) and [e2e-cache.yml](https://github.com/actions/setup-node/blob/main/.github/workflows/e2e-cache.yml) files. - The contributor can add various types of tests (like unit tests or end-to-end tests), which, in his opinion, will be necessary and sufficient for testing new or changed functionality @@ -79,7 +79,7 @@ Unit tests are in the `__tests__` folder, and end-to-end tests are in the `workf - Maintainers will review your pull request - If a maintainer requests changes, first of all, try to think about his request critically and only after that implement and request another review - If your PR gets accepted, it will soon be merged into the main branch. But your contribution will take effect only after the release of a new version of the action and updating the major tag -> Sometimes maintainers reject pull requests and that's ok! Usually, along with rejection, we supply the reason for it. Nonetheless, we still really appreciate you taking the time to do it, and we don't take that lightly :heart: + > Sometimes maintainers reject pull requests and that's ok! Usually, along with rejection, we supply the reason for it. Nonetheless, we still really appreciate you taking the time to do it, and we don't take that lightly :heart: ## Provide support on issues @@ -91,25 +91,23 @@ Helping out other users with their questions is an awesome way of contributing t - Read through the list until you find something that you're familiar enough with to answer to - Respond to the issue with whatever details are needed to clarify the question, or get more details about what's going on - Once the discussion wraps up and things are clarified, ask the original issue filer (or a maintainer) to close it for you - -*Some notes on picking up support issues:* + +_Some notes on picking up support issues:_ - Avoid responding to issues you don't know you can answer accurately - Try to refer to past issues with accepted answers as much as possible. Link to them from your replies - Be kind and patient with users. Often, folks who have run into confusing things might be upset or impatient. This is natural. If you feel uncomfortable in conversation with them, it's better to stay away or withdraw from the issue. - > If some user is violating our code of conduct [standards](https://github.com/actions/setup-node/blob/main/CODE_OF_CONDUCT.md#our-standards), refer to the [Enforcement](https://github.com/actions/setup-node/blob/main/CODE_OF_CONDUCT.md#enforcement) section of the Code of Conduct to resolve the conflict - +> If some user is violating our code of conduct [standards](https://github.com/actions/setup-node/blob/main/CODE_OF_CONDUCT.md#our-standards), refer to the [Enforcement](https://github.com/actions/setup-node/blob/main/CODE_OF_CONDUCT.md#enforcement) section of the Code of Conduct to resolve the conflict ## Review pull requests - Another great way to contribute is to review pull request. Please, be extra kind: people who submit code/doc contributions are putting themselves in a pretty vulnerable position, and have put time and care into what they've done (even if that's not obvious to you!) Please, always respond with respect, and be understanding, but don't feel like you need to sacrifice your standards for their sake, either. - + **How to review:** - Go to the [pull requests](https://github.com/actions/setup-node/pulls) - Make sure you're familiar with the code or documentation is updated, unless it's a minor change (spellchecking, minor formatting, etc.) -- Review changes using the GitHub functionality. You can ask a clarifying question, point out an error or suggest an alternative. -> Note: You may ask for minor changes - "nitpicks", but consider whether they are real blockers to merging or not -- Submit your review, which may include comments, an approval, or a changes request \ No newline at end of file +- Review changes using the GitHub functionality. You can ask a clarifying question, point out an error or suggest an alternative. + > Note: You may ask for minor changes - "nitpicks", but consider whether they are real blockers to merging or not +- Submit your review, which may include comments, an approval, or a changes request diff --git a/jest.config.js b/jest.config.js index 563d4ccb..a977c637 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,4 +8,4 @@ module.exports = { '^.+\\.ts$': 'ts-jest' }, verbose: true -} \ No newline at end of file +}; diff --git a/package-lock.json b/package-lock.json index 9c7c87b3..7996aab4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,7 +26,7 @@ "@vercel/ncc": "^0.33.4", "jest": "^27.2.5", "jest-circus": "^27.2.5", - "prettier": "^1.19.1", + "prettier": "^2.7.1", "ts-jest": "^27.0.5", "typescript": "^3.8.3" } @@ -4247,15 +4247,18 @@ } }, "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { @@ -8426,9 +8429,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "pretty-format": { diff --git a/package.json b/package.json index 10595093..730ac9a6 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "main": "lib/setup-node.js", "scripts": { "build": "ncc build -o dist/setup src/setup-node.ts && ncc build -o dist/cache-save src/cache-save.ts", - "format": "prettier --write **/*.ts", - "format-check": "prettier --check **/*.ts", + "format": "prettier --write .", + "format-check": "prettier --check .", "test": "jest --coverage", "pre-checkin": "npm run format && npm run build && npm test" }, @@ -40,7 +40,7 @@ "@vercel/ncc": "^0.33.4", "jest": "^27.2.5", "jest-circus": "^27.2.5", - "prettier": "^1.19.1", + "prettier": "^2.7.1", "ts-jest": "^27.0.5", "typescript": "^3.8.3" } diff --git a/tsconfig.json b/tsconfig.json index 8405b0a1..ccb0051c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,13 @@ { "compilerOptions": { - "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - "outDir": "./lib", /* Redirect output structure to the directory. */ - "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + "outDir": "./lib" /* Redirect output structure to the directory. */, + "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, "sourceMap": true, - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": false, /* Raise error on expressions and declarations with an implied 'any' type. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": false /* Raise error on expressions and declarations with an implied 'any' type. */, + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ }, "exclude": ["__tests__", "lib", "node_modules"] }