diff --git a/README.md b/README.md index a426b56..b93b495 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,25 @@ Install pnpm package manager. ### `version` -**Required** Version of pnpm to install. +Can either specifiy a specific version of pnpm to install (e.g. "6.14.6") or can +specifiy a version range (in the [semver range +format](https://github.com/npm/node-semver#ranges)). The latest version to +match the range is used and if the input version is not specified, the latest +overall version is used. Version ranges are only supported for versions +starting at 6.13.0 and higher, because that is the first version of pnpm to be +published to github releases. ### `dest` -**Optional** Where to store pnpm files. +This option is obsolete. It is only used when a specific version of pnpm which +is 6.12 or lower is specified. For these old versions of pnpm, the `dest` input +is where to store pnpm files. ### `run_install` -**Optional** (_default:_ `null`) If specified, run `pnpm install`. +If specified, run `pnpm install`. -If `run_install` is either `null` or `false`, pnpm will not install any npm package. +If `run_install` is either `null` (the default) or `false`, pnpm will not install any npm package. If `run_install` is `true`, pnpm will install dependencies recursively. @@ -24,100 +32,100 @@ If `run_install` is a YAML string representation of either an object or an array #### `run_install.recursive` -**Optional** (_type:_ `boolean`, _default:_ `false`) Whether to use `pnpm recursive install`. +(_type:_ `boolean`, _default:_ `false`) Whether to use `pnpm recursive install`. #### `run_install.cwd` -**Optional** (_type:_ `string`) Working directory when run `pnpm [recursive] install`. +(_type:_ `string`) Working directory when run `pnpm [recursive] install`. #### `run_install.args` -**Optional** (_type:_ `string[]`) Additional arguments after `pnpm [recursive] install`, e.g. `[--frozen-lockfile, --strict-peer-dependencies]`. +(_type:_ `string[]`) Additional arguments after `pnpm [recursive] install`, e.g. `[--frozen-lockfile, --strict-peer-dependencies]`. ## Outputs -### `dest` - -Expanded path of inputs#dest. - ### `bin_dest` -Location of `pnpm` and `pnpx` command. +Folder containing the `pnpm` executable. + +### `dest` + +Expanded path of inputs#dest, only set if a version before "6.14.6" is specified. ## Usage example -### Just install pnpm +### Install latest pnpm and cache store + +The following yaml will first install the latest version of pnpm, install node, +and setup caching of the pnpm store. +[actions/setup-node](https://github.com/actions/setup-node) has support for +caching the pnpm store, as long as pnpm is installed first. ```yaml -on: - - push - - pull_request +steps: + - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2.0.1 + - uses: actions/setup-node@v2 + with: + node-version: "16" + cache: "pnpm" -jobs: - runs-on: ubuntu-latest + - run: pnpm install --frozen-lockfile - steps: - - uses: pnpm/action-setup@v2.0.1 - with: - version: 6.0.2 + # more build/run commands ... + + - run: pnpm store prune +``` + +### Install specific range of pnpm + +```yaml +steps: + - uses: actions/checkout@v2 + + - uses: pnpm/action-setup@v2.0.1 + with: + version: "^6.14.6" + + - uses: actions/setup-node@v2 + with: + node-version: "16" + cache: "pnpm" + + - run: pnpm install --frozen-lockfile + + # more build/run commands ... + + - run: pnpm store prune ``` ### Install pnpm and a few npm packages -```yaml -on: - - push - - pull_request - -jobs: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - uses: pnpm/action-setup@v2.0.1 - with: - version: 6.0.2 - run_install: | - - recursive: true - args: [--frozen-lockfile, --strict-peer-dependencies] - - args: [--global, gulp, prettier, typescript] -``` - -### Use cache to reduce installation time +Unfortunately, using `run_install` does not work together with the caching +in `actions/setup-node`. The caching in `actions/setup-node` requires pnpm +to be installed before node, while the `run_install` option +requires node to be installed first. In this situation, you will need to setup +the caching yourself. ```yaml -on: - - push - - pull_request +steps: + - uses: actions/checkout@v2 -jobs: - runs-on: ubuntu-latest + - uses: actions/setup-node@v2 + with: + node-version: "16" - steps: - build: - - uses: actions/checkout@v2 + - uses: pnpm/action-setup@v2.0.1 + with: + version: "6.*" + run_install: | + - recursive: true + args: [--frozen-lockfile, --strict-peer-dependencies] + - args: [--global, gulp, prettier, typescript] - - name: Cache pnpm modules - uses: actions/cache@v2 - with: - path: ~/.pnpm-store - key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}- - - - uses: pnpm/action-setup@v2.0.1 - with: - version: 6.0.2 - run_install: true + # Setup caching here using actions/cache ``` -**Note:** You don't need to run `pnpm store prune` at the end; post-action has already taken care of that. - -## Notes - -This action does not setup Node.js for you, use [actions/setup-node](https://github.com/actions/setup-node) yourself. - ## License [MIT](https://git.io/JfclH) © [Hoàng Văn Khải](https://github.com/KSXGitHub/) diff --git a/action.yml b/action.yml index cbb4c7e..ff9f4dc 100644 --- a/action.yml +++ b/action.yml @@ -6,7 +6,8 @@ branding: inputs: version: description: Version of PNPM to install - required: true + required: false + default: '' dest: description: Where to store PNPM files required: false @@ -14,8 +15,7 @@ inputs: run_install: description: If specified, run `pnpm install` required: false - default: 'null' + default: '' runs: using: node12 main: dist/index.js - post: dist/index.js diff --git a/dist/index.js b/dist/index.js index 347c662..63e041a 100644 Binary files a/dist/index.js and b/dist/index.js differ diff --git a/package.json b/package.json index f880e74..d289b9e 100644 --- a/package.json +++ b/package.json @@ -3,25 +3,29 @@ "scripts": { "build:schemas": "ts-schema-autogen generate", "build:ncc": "ncc build --minify --no-source-map-register --no-cache dist/tsc/index.js --out dist/", - "build": "pnpm run build:schemas && tsc && pnpm run build:ncc", + "build": "pnpm run build:schemas && tsc --skipLibCheck && pnpm run build:ncc", "start": "pnpm run build && sh ./run.sh" }, "dependencies": { - "node-fetch": "^2.6.1", - "expand-tilde": "^2.0.2", - "js-yaml": "^4.0.0", - "ajv": "^6.12.5", - "fs-extra": "^9.1.0", - "@actions/core": "^1.2.6", + "@actions/core": "^1.5.0", + "@actions/tool-cache": "^1.7.1", + "@octokit/rest": "^18.10.0", "@types/expand-tilde": "^2.0.0", - "@types/node-fetch": "^2.5.8", - "@types/js-yaml": "^4.0.0", - "@types/fs-extra": "^9.0.8", - "@types/node": "^14.14.35" + "@types/fs-extra": "^9.0.12", + "@types/js-yaml": "^4.0.3", + "@types/node": "^14.17.14", + "@types/node-fetch": "^2.5.12", + "ajv": "^6.12.6", + "expand-tilde": "^2.0.2", + "fs-extra": "^9.1.0", + "js-yaml": "^4.1.0", + "node-fetch": "^2.6.1", + "semver": "^7.3.5" }, "devDependencies": { - "typescript": "^4.2.3", "@ts-schema-autogen/cli": "^0.1.2", - "@vercel/ncc": "^0.27.0" + "@types/semver": "^7.3.8", + "@vercel/ncc": "^0.27.0", + "typescript": "^4.4.2" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f6f6e76..996e64c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,40 +1,195 @@ +lockfileVersion: 5.3 + +specifiers: + '@actions/core': ^1.5.0 + '@actions/tool-cache': ^1.7.1 + '@octokit/rest': ^18.10.0 + '@ts-schema-autogen/cli': ^0.1.2 + '@types/expand-tilde': ^2.0.0 + '@types/fs-extra': ^9.0.12 + '@types/js-yaml': ^4.0.3 + '@types/node': ^14.17.14 + '@types/node-fetch': ^2.5.12 + '@types/semver': ^7.3.8 + '@vercel/ncc': ^0.27.0 + ajv: ^6.12.6 + expand-tilde: ^2.0.2 + fs-extra: ^9.1.0 + js-yaml: ^4.1.0 + node-fetch: ^2.6.1 + semver: ^7.3.5 + typescript: ^4.4.2 + dependencies: - '@actions/core': 1.2.6 + '@actions/core': 1.5.0 + '@actions/tool-cache': 1.7.1 + '@octokit/rest': 18.10.0 '@types/expand-tilde': 2.0.0 - '@types/fs-extra': 9.0.8 - '@types/js-yaml': 4.0.0 - '@types/node': 14.14.35 - '@types/node-fetch': 2.5.8 + '@types/fs-extra': 9.0.12 + '@types/js-yaml': 4.0.3 + '@types/node': 14.17.14 + '@types/node-fetch': 2.5.12 ajv: 6.12.6 expand-tilde: 2.0.2 fs-extra: 9.1.0 - js-yaml: 4.0.0 + js-yaml: 4.1.0 node-fetch: 2.6.1 + semver: 7.3.5 + devDependencies: '@ts-schema-autogen/cli': 0.1.2 + '@types/semver': 7.3.8 '@vercel/ncc': 0.27.0 - typescript: 4.2.3 -lockfileVersion: 5.2 + typescript: 4.4.2 + packages: - /@actions/core/1.2.6: + + /@actions/core/1.5.0: + resolution: {integrity: sha512-eDOLH1Nq9zh+PJlYLqEMkS/jLQxhksPNmUGNBHfa4G+tQmnIhzpctxmchETtVGyBOvXgOVVpYuE40+eS4cUnwQ==} dev: false - resolution: - integrity: sha512-ZQYitnqiyBc3D+k7LsgSBmMDVkOVidaagDG7j3fOym77jNunWRuYx7VSHa9GNfFZh+zh61xsCjRj4JxMZlDqTA== + + /@actions/exec/1.1.0: + resolution: {integrity: sha512-LImpN9AY0J1R1mEYJjVJfSZWU4zYOlEcwSTgPve1rFQqK5AwrEs6uWW5Rv70gbDIQIAUwI86z6B+9mPK4w9Sbg==} + dependencies: + '@actions/io': 1.1.1 + dev: false + + /@actions/http-client/1.0.11: + resolution: {integrity: sha512-VRYHGQV1rqnROJqdMvGUbY/Kn8vriQe/F9HR2AlYHzmKuM/p3kjNuXhmdBfcVgsvRWTz5C5XW5xvndZrVBuAYg==} + dependencies: + tunnel: 0.0.6 + dev: false + + /@actions/io/1.1.1: + resolution: {integrity: sha512-Qi4JoKXjmE0O67wAOH6y0n26QXhMKMFo7GD/4IXNVcrtLjUlGjGuVys6pQgwF3ArfGTQu0XpqaNr0YhED2RaRA==} + dev: false + + /@actions/tool-cache/1.7.1: + resolution: {integrity: sha512-y1xxxOhXaBUIUit3lhepmu/0xdgiTMpnZRLmVdtF0hTm521doi+MdRRRP62czHvM7wxH6epj4JPNJQ3iJpOrkQ==} + dependencies: + '@actions/core': 1.5.0 + '@actions/exec': 1.1.0 + '@actions/http-client': 1.0.11 + '@actions/io': 1.1.1 + semver: 6.3.0 + uuid: 3.4.0 + dev: false + + /@octokit/auth-token/2.4.5: + resolution: {integrity: sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==} + dependencies: + '@octokit/types': 6.27.0 + dev: false + + /@octokit/core/3.5.1: + resolution: {integrity: sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==} + dependencies: + '@octokit/auth-token': 2.4.5 + '@octokit/graphql': 4.8.0 + '@octokit/request': 5.6.1 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.27.0 + before-after-hook: 2.2.2 + universal-user-agent: 6.0.0 + dev: false + + /@octokit/endpoint/6.0.12: + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + dependencies: + '@octokit/types': 6.27.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.0 + dev: false + + /@octokit/graphql/4.8.0: + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + dependencies: + '@octokit/request': 5.6.1 + '@octokit/types': 6.27.0 + universal-user-agent: 6.0.0 + dev: false + + /@octokit/openapi-types/10.1.0: + resolution: {integrity: sha512-Nq5TMBwijRXco+Bm/Rq1n5maxxXsHLwd/Cm3lyNeOxbjyzAOSD0qmr4TwKCD4TN4rHZ7lq/tARuqSv/WJHF7IA==} + dev: false + + /@octokit/plugin-paginate-rest/2.16.0_@octokit+core@3.5.1: + resolution: {integrity: sha512-8YYzALPMvEZ35kgy5pdYvQ22Roz+BIuEaedO575GwE2vb/ACDqQn0xQrTJR4tnZCJn7pi8+AWPVjrFDaERIyXQ==} + peerDependencies: + '@octokit/core': '>=2' + dependencies: + '@octokit/core': 3.5.1 + '@octokit/types': 6.27.0 + dev: false + + /@octokit/plugin-request-log/1.0.4_@octokit+core@3.5.1: + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.5.1 + dev: false + + /@octokit/plugin-rest-endpoint-methods/5.10.0_@octokit+core@3.5.1: + resolution: {integrity: sha512-HiUZliq5wNg15cevJlTo9zDnPXAD0BMRhLxbRNPnq9J3HELKesDTOiou56ax2jC/rECUkK/uJTugrizYKSo/jg==} + peerDependencies: + '@octokit/core': '>=3' + dependencies: + '@octokit/core': 3.5.1 + '@octokit/types': 6.27.0 + deprecation: 2.3.1 + dev: false + + /@octokit/request-error/2.1.0: + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + dependencies: + '@octokit/types': 6.27.0 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request/5.6.1: + resolution: {integrity: sha512-Ls2cfs1OfXaOKzkcxnqw5MR6drMA/zWX/LIS/p8Yjdz7QKTPQLMsB3R+OvoxE6XnXeXEE2X7xe4G4l4X0gRiKQ==} + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.27.0 + is-plain-object: 5.0.0 + node-fetch: 2.6.1 + universal-user-agent: 6.0.0 + dev: false + + /@octokit/rest/18.10.0: + resolution: {integrity: sha512-esHR5OKy38bccL/sajHqZudZCvmv4yjovMJzyXlphaUo7xykmtOdILGJ3aAm0mFHmMLmPFmDMJXf39cAjNJsrw==} + dependencies: + '@octokit/core': 3.5.1 + '@octokit/plugin-paginate-rest': 2.16.0_@octokit+core@3.5.1 + '@octokit/plugin-request-log': 1.0.4_@octokit+core@3.5.1 + '@octokit/plugin-rest-endpoint-methods': 5.10.0_@octokit+core@3.5.1 + dev: false + + /@octokit/types/6.27.0: + resolution: {integrity: sha512-ha27f8DToxXBPEJdzHCCuqpw7AgKfjhWGdNf3yIlBAhAsaexBXTfWw36zNSsncALXGvJq4EjLy1p3Wz45Aqb4A==} + dependencies: + '@octokit/openapi-types': 10.1.0 + dev: false + /@ts-schema-autogen/cli/0.1.2: + resolution: {integrity: sha512-61aIkJh7RDDNLCQJtp++1pL/LWlPAI9dxgWyhXycyRm4TRaTVaRBOoxTVnN0IVT+akdhWeiXkhNkCzG6Vd5zAw==} + hasBin: true dependencies: '@ts-schema-autogen/main': 0.1.1 - '@types/fs-extra': 8.1.0 - '@types/node': 13.13.5 - '@types/yargs': 15.0.4 + '@types/fs-extra': 8.1.2 + '@types/node': 13.13.52 + '@types/yargs': 15.0.14 fs-extra: 8.1.0 - tslib: 1.11.2 + tslib: 1.14.1 typescript-json-schema: 0.42.0 - yargs: 15.3.1 + yargs: 15.4.1 dev: true - hasBin: true - resolution: - integrity: sha512-61aIkJh7RDDNLCQJtp++1pL/LWlPAI9dxgWyhXycyRm4TRaTVaRBOoxTVnN0IVT+akdhWeiXkhNkCzG6Vd5zAw== + /@ts-schema-autogen/lib/0.1.1: + resolution: {integrity: sha512-1oOQ9lbGnA3RVfIMiX1thvC0OEvTpvuTyLC6kwaBm8CnOBSFsxWUtoQ9ceyVe/otOqZL4SoucMmbJ3kOUnK7EQ==} dependencies: '@ts-schema-autogen/status': 0.1.1 '@ts-schema-autogen/types': 0.1.1 @@ -42,16 +197,16 @@ packages: '@ts-schema-autogen/validate': 0.1.1 '@tsfun/object': 0.0.17 '@tsfun/result': 0.0.16 - '@types/js-yaml': 3.12.3 - '@types/node': 13.13.5 + '@types/js-yaml': 3.12.7 + '@types/node': 13.13.52 better-path-join: 0.0.1 - fast-traverse: 0.1.6 - js-yaml: 3.13.1 - tslib: 1.11.2 + fast-traverse: 0.1.7 + js-yaml: 3.14.1 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-1oOQ9lbGnA3RVfIMiX1thvC0OEvTpvuTyLC6kwaBm8CnOBSFsxWUtoQ9ceyVe/otOqZL4SoucMmbJ3kOUnK7EQ== + /@ts-schema-autogen/main/0.1.1: + resolution: {integrity: sha512-IC193iebvbbERdx2DGugDq97ne4Fn+zXNVqTc40QuyTbzTGBES6+DnSfI3t1e2f/jX0xGT1e6pDMN8DbdrK1Hw==} dependencies: '@ts-schema-autogen/lib': 0.1.1 '@ts-schema-autogen/status': 0.1.1 @@ -59,427 +214,402 @@ packages: '@ts-schema-autogen/utils': 0.0.1 '@tsfun/object': 0.0.17 '@tsfun/pipe': 0.0.11 - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-IC193iebvbbERdx2DGugDq97ne4Fn+zXNVqTc40QuyTbzTGBES6+DnSfI3t1e2f/jX0xGT1e6pDMN8DbdrK1Hw== + /@ts-schema-autogen/schemas/0.1.1: + resolution: {integrity: sha512-cHzhHPJsCQbZCYetSpxRcIEB17MLDOUnuxZiuZ0Yn1BRS72qMwgXqCDckMgGuf9TAsfbkBxUiOIT0C8S7FPYyw==} dependencies: '@ts-schema-autogen/types': 0.1.1 - '@types/node': 13.13.5 - exec-once: 0.1.6 - tslib: 1.11.2 + '@types/node': 13.13.52 + exec-once: 0.1.8 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-cHzhHPJsCQbZCYetSpxRcIEB17MLDOUnuxZiuZ0Yn1BRS72qMwgXqCDckMgGuf9TAsfbkBxUiOIT0C8S7FPYyw== + /@ts-schema-autogen/status/0.1.1: + resolution: {integrity: sha512-zN5KSkk9HjrsgCRFiENYUL7K/fZvK/afQolfSDrqj3nnyuYzRazIn/i2fV5pgTrdEKG3fK/95Zznko7evtK2ow==} dependencies: '@ts-schema-autogen/types': 0.1.1 '@ts-schema-autogen/utils': 0.0.1 - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-zN5KSkk9HjrsgCRFiENYUL7K/fZvK/afQolfSDrqj3nnyuYzRazIn/i2fV5pgTrdEKG3fK/95Zznko7evtK2ow== + /@ts-schema-autogen/types/0.1.1: + resolution: {integrity: sha512-ePh2vU49xe8Tb4gXytOFDtI/dtSVzQpT1fp5WlyS4KwADZH4Gplj5c3M9t0m7bXl07qUVw5HnF7O6G7iliQ/XQ==} dependencies: '@ts-schema-autogen/utils': 0.0.1 - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 typescript-json-schema: 0.42.0 dev: true - resolution: - integrity: sha512-ePh2vU49xe8Tb4gXytOFDtI/dtSVzQpT1fp5WlyS4KwADZH4Gplj5c3M9t0m7bXl07qUVw5HnF7O6G7iliQ/XQ== + /@ts-schema-autogen/utils/0.0.1: + resolution: {integrity: sha512-ASFLu03+zcRBaVAeRCTP84WvuHxmpGiksORB8QpE3nOmWC9m+f/dDRTvgTq/t3bNIYVSe1vKs4LutXX5pjhdjA==} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-ASFLu03+zcRBaVAeRCTP84WvuHxmpGiksORB8QpE3nOmWC9m+f/dDRTvgTq/t3bNIYVSe1vKs4LutXX5pjhdjA== + /@ts-schema-autogen/validate/0.1.1: + resolution: {integrity: sha512-5h1xEHsCBk4JZeecLATpEDvCzuQifqA6YzmlEu2C1u8zEMNpv6Y49Yw7ABDGOnam8HQVdnCG6QggKVjVE4GyJQ==} dependencies: '@ts-schema-autogen/schemas': 0.1.1 '@ts-schema-autogen/types': 0.1.1 '@tsfun/result': 0.0.16 - '@types/node': 13.13.5 - ajv: 6.12.0 - exec-once: 0.1.6 - tslib: 1.11.2 + '@types/node': 13.13.52 + ajv: 6.12.6 + exec-once: 0.1.8 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-5h1xEHsCBk4JZeecLATpEDvCzuQifqA6YzmlEu2C1u8zEMNpv6Y49Yw7ABDGOnam8HQVdnCG6QggKVjVE4GyJQ== + /@tsfun/object/0.0.17: + resolution: {integrity: sha512-H/hRAlGWkoui1ZqIX2iPSQdK07mUF7QZwIkyY5SzwBIe1jVkSRNXmHtm9WvWMuoaGCr3peCZGXphximX3DEzig==} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 utility-types: 3.10.0 dev: true - resolution: - integrity: sha512-H/hRAlGWkoui1ZqIX2iPSQdK07mUF7QZwIkyY5SzwBIe1jVkSRNXmHtm9WvWMuoaGCr3peCZGXphximX3DEzig== + /@tsfun/pipe/0.0.11: + resolution: {integrity: sha512-jL88eyhDR/Pena+eBzY9bw8SOED9nET2QPNSgvXpz4XK9t2CBmwtu6YUPzdZCBG6RTSZoQV5VKmsXu4255qVaA==} + engines: {node: '>= 8.9.0'} dependencies: '@tsfun/tap': 0.0.10 - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - engines: - node: '>= 8.9.0' - resolution: - integrity: sha512-jL88eyhDR/Pena+eBzY9bw8SOED9nET2QPNSgvXpz4XK9t2CBmwtu6YUPzdZCBG6RTSZoQV5VKmsXu4255qVaA== + /@tsfun/prv-option-result-common/0.0.11: + resolution: {integrity: sha512-AIp2Oygr9WD12BG4p+fUEhyGtPnchRVALahzDab2eobkD2IhxRnHsKZh4J3v84faEIuXbnpdfALwGkzaOcgkPA==} + engines: {node: '>= 8.9.0'} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - engines: - node: '>= 8.9.0' - resolution: - integrity: sha512-AIp2Oygr9WD12BG4p+fUEhyGtPnchRVALahzDab2eobkD2IhxRnHsKZh4J3v84faEIuXbnpdfALwGkzaOcgkPA== + /@tsfun/prv-types/0.0.6: + resolution: {integrity: sha512-s97gvRX2SjGTdU+Odsi6RgsVFi+xNOx3T6Jew2mo7m7Wj6eJmM0HB0HlFPmwIIi2MtXIpSr71TZmRVcMeU3Atw==} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-s97gvRX2SjGTdU+Odsi6RgsVFi+xNOx3T6Jew2mo7m7Wj6eJmM0HB0HlFPmwIIi2MtXIpSr71TZmRVcMeU3Atw== + /@tsfun/result/0.0.16: + resolution: {integrity: sha512-lUpVISAm0RUxRdyVUuAOLBe7ArdrQkepdLz4nML0a/2/WvrDsAIn2PIdRL3eZXqqdyhS2dy+ot5E5vc/RNWOEQ==} + engines: {node: '>= 8.9.0'} dependencies: '@tsfun/prv-option-result-common': 0.0.11 '@tsfun/prv-types': 0.0.6 '@tsfun/tap': 0.0.10 - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - engines: - node: '>= 8.9.0' - resolution: - integrity: sha512-lUpVISAm0RUxRdyVUuAOLBe7ArdrQkepdLz4nML0a/2/WvrDsAIn2PIdRL3eZXqqdyhS2dy+ot5E5vc/RNWOEQ== + /@tsfun/tap/0.0.10: + resolution: {integrity: sha512-ArfW5g+1BxUXhqWOCOceiR3iviWn6PvDjOHzSBCCw3luYlVJ8JwYMcvj9ZXITBbP33uM8NKbxwzjRGGVckXLdg==} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-ArfW5g+1BxUXhqWOCOceiR3iviWn6PvDjOHzSBCCw3luYlVJ8JwYMcvj9ZXITBbP33uM8NKbxwzjRGGVckXLdg== - /@types/color-name/1.1.1: - dev: true - resolution: - integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + /@types/expand-tilde/2.0.0: + resolution: {integrity: sha512-17h/6MRHoetV2QVUVnUfrmaFCXNIFJ3uDJmXlklX2xDtlEb1W0OXLgP+qwND2Ibg/PtQfQi0vx19KGuPayjLiw==} dev: false - resolution: - integrity: sha512-17h/6MRHoetV2QVUVnUfrmaFCXNIFJ3uDJmXlklX2xDtlEb1W0OXLgP+qwND2Ibg/PtQfQi0vx19KGuPayjLiw== - /@types/fs-extra/8.1.0: + + /@types/fs-extra/8.1.2: + resolution: {integrity: sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==} dependencies: - '@types/node': 13.13.5 + '@types/node': 14.17.14 dev: true - resolution: - integrity: sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== - /@types/fs-extra/9.0.8: + + /@types/fs-extra/9.0.12: + resolution: {integrity: sha512-I+bsBr67CurCGnSenZZ7v94gd3tc3+Aj2taxMT4yu4ABLuOgOjeFxX3dokG24ztSRg5tnT00sL8BszO7gSMoIw==} dependencies: - '@types/node': 14.14.35 + '@types/node': 14.17.14 dev: false - resolution: - integrity: sha512-bnlTVTwq03Na7DpWxFJ1dvnORob+Otb8xHyUqUWhqvz/Ksg8+JXPlR52oeMSZ37YEOa5PyccbgUNutiQdi13TA== - /@types/js-yaml/3.12.3: + + /@types/js-yaml/3.12.7: + resolution: {integrity: sha512-S6+8JAYTE1qdsc9HMVsfY7+SgSuUU/Tp6TYTmITW0PZxiyIMvol3Gy//y69Wkhs0ti4py5qgR3uZH6uz/DNzJQ==} dev: true - resolution: - integrity: sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA== - /@types/js-yaml/4.0.0: + + /@types/js-yaml/4.0.3: + resolution: {integrity: sha512-5t9BhoORasuF5uCPr+d5/hdB++zRFUTMIZOzbNkr+jZh3yQht4HYbRDyj9fY8n2TZT30iW9huzav73x4NikqWg==} dev: false - resolution: - integrity: sha512-4vlpCM5KPCL5CfGmTbpjwVKbISRYhduEJvvUWsH5EB7QInhEj94XPZ3ts/9FPiLZFqYO0xoW4ZL8z2AabTGgJA== - /@types/json-schema/7.0.4: + + /@types/json-schema/7.0.9: + resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} dev: true - resolution: - integrity: sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== - /@types/node-fetch/2.5.8: + + /@types/node-fetch/2.5.12: + resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==} dependencies: - '@types/node': 14.14.35 - form-data: 3.0.0 + '@types/node': 14.17.14 + form-data: 3.0.1 dev: false - resolution: - integrity: sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== - /@types/node/13.13.5: + + /@types/node/13.13.52: + resolution: {integrity: sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==} dev: true - resolution: - integrity: sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g== - /@types/node/14.14.35: - dev: false - resolution: - integrity: sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag== - /@types/yargs-parser/15.0.0: + + /@types/node/14.17.14: + resolution: {integrity: sha512-rsAj2u8Xkqfc332iXV12SqIsjVi07H479bOP4q94NAcjzmAvapumEhuVIt53koEf7JFrpjgNKjBga5Pnn/GL8A==} + + /@types/semver/7.3.8: + resolution: {integrity: sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==} dev: true - resolution: - integrity: sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== - /@types/yargs/15.0.4: + + /@types/yargs-parser/20.2.1: + resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} + dev: true + + /@types/yargs/15.0.14: + resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==} dependencies: - '@types/yargs-parser': 15.0.0 + '@types/yargs-parser': 20.2.1 dev: true - resolution: - integrity: sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== + /@vercel/ncc/0.27.0: - dev: true + resolution: {integrity: sha512-DllIJQapnU2YwewIhh/4dYesmMQw3h2cFtabECc/zSJHqUbNa0eJuEkRa6DXbZvh1YPWBtYQoPV17NlDpBw1Vw==} hasBin: true - resolution: - integrity: sha512-DllIJQapnU2YwewIhh/4dYesmMQw3h2cFtabECc/zSJHqUbNa0eJuEkRa6DXbZvh1YPWBtYQoPV17NlDpBw1Vw== - /ajv/6.12.0: - dependencies: - fast-deep-equal: 3.1.1 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.2.2 dev: true - resolution: - integrity: sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: - fast-deep-equal: 3.1.1 + fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 - uri-js: 4.2.2 - dev: false - resolution: - integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + uri-js: 4.4.1 + /ansi-regex/4.1.0: + resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-regex/5.0.0: + resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - engines: - node: '>=4' - resolution: - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - /ansi-styles/4.2.1: + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: - '@types/color-name': 1.1.1 color-convert: 2.0.1 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 dev: true - resolution: - integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: false - resolution: - integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + /asynckit/0.4.0: + resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} dev: false - resolution: - integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k= + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} dev: false - engines: - node: '>= 4.0.0' - resolution: - integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - /balanced-match/1.0.0: + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - resolution: - integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + + /before-after-hook/2.2.2: + resolution: {integrity: sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==} + dev: false + /better-path-join/0.0.1: + resolution: {integrity: sha512-JIv4V7rh19/Hg0O5I0l8eSobC3F+aUWaL9D9QQKAKFw4Qj+whdRrlRejrYICPS2NEJ/2vsDjhKur3iFhQf49QQ==} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 13.13.52 + tslib: 1.14.1 dev: true - resolution: - integrity: sha512-JIv4V7rh19/Hg0O5I0l8eSobC3F+aUWaL9D9QQKAKFw4Qj+whdRrlRejrYICPS2NEJ/2vsDjhKur3iFhQf49QQ== + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: - balanced-match: 1.0.0 + balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - resolution: - integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + /cliui/5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} dependencies: string-width: 3.1.0 strip-ansi: 5.2.0 wrap-ansi: 5.1.0 dev: true - resolution: - integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: - string-width: 4.2.0 + string-width: 4.2.2 strip-ansi: 6.0.0 wrap-ansi: 6.2.0 dev: true - resolution: - integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - resolution: - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true - engines: - node: '>=7.0.0' - resolution: - integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} dev: true - resolution: - integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - resolution: - integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: false - engines: - node: '>= 0.8' - resolution: - integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - resolution: - integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /decamelize/1.2.0: + resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /delayed-stream/1.0.0: + resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} + engines: {node: '>=0.4.0'} dev: false - engines: - node: '>=0.4.0' - resolution: - integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + + /deprecation/2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + /emoji-regex/7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} dev: true - resolution: - integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - resolution: - integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /esprima/4.0.1: - dev: true - engines: - node: '>=4' + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true - resolution: - integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - /exec-once/0.1.6: - dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 dev: true - resolution: - integrity: sha512-DMCRTmVoGgGJLS+Z7NfaV53QiQTi8XedoBNVWsl5S7ZQGgt587MOKqlu8k/ybtkEEVjkl4RjO4REOJv4v2ZBxw== + + /exec-once/0.1.8: + resolution: {integrity: sha512-zv8nmN+jF366nAEuNgOh5U2owy5MMkv+N1LCp1utCH63ujSXr92H3x2lDR+Mstm9xNmXNlo45W/Ch+TrN1jAdw==} + dependencies: + '@types/node': 14.17.14 + tslib: 2.3.1 + dev: true + /expand-tilde/2.0.2: + resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=} + engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - /fast-deep-equal/3.1.1: - resolution: - integrity: sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + /fast-json-stable-stringify/2.1.0: - resolution: - integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - /fast-traverse/0.1.6: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-traverse/0.1.7: + resolution: {integrity: sha512-gZTQvJSgrGV24F8AeeTNxip8OEkjRHwDDpGw0b51TzRVGjJsKzh6CuHf9ltVjJZzni5Ead+EEQJ0IFCuoCJUtA==} dependencies: - '@types/node': 13.13.5 - tslib: 1.11.2 + '@types/node': 14.17.14 + tslib: 2.3.1 dev: true - resolution: - integrity: sha512-/5Ati6Qr9r++gG4R6ANxYH8RxQkZTrUDQF6EuSShgJCIrluPrvVSQRDpVl6SA4V/5nFALlF15OfXG1A3U3U6Mw== + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - /form-data/3.0.0: + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.27 + mime-types: 2.1.32 dev: false - engines: - node: '>= 6' - resolution: - integrity: sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + /fs-extra/8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} dependencies: - graceful-fs: 4.2.3 + graceful-fs: 4.2.8 jsonfile: 4.0.0 universalify: 0.1.2 dev: true - engines: - node: '>=6 <7 || >=8' - resolution: - integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.3 + graceful-fs: 4.2.8 jsonfile: 6.1.0 universalify: 2.0.0 dev: false - engines: - node: '>=10' - resolution: - integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true - resolution: - integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} dev: true - engines: - node: 6.* || 8.* || >= 10.* - resolution: - integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - /glob/7.1.6: + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -488,347 +618,363 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 dev: true - resolution: - integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - /graceful-fs/4.2.3: - resolution: - integrity: sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + + /graceful-fs/4.2.8: + resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} + /homedir-polyfill/1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - resolution: - integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - resolution: - integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - /js-yaml/3.13.1: + + /is-plain-object/5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - resolution: - integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - /js-yaml/4.0.0: dependencies: argparse: 2.0.1 dev: false - hasBin: true - resolution: - integrity: sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + /json-schema-traverse/0.4.1: - resolution: - integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + /json-stable-stringify/1.0.1: + resolution: {integrity: sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=} dependencies: jsonify: 0.0.0 dev: true - resolution: - integrity: sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + /jsonfile/4.0.0: - dev: true + resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} optionalDependencies: - graceful-fs: 4.2.3 - resolution: - integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + graceful-fs: 4.2.8 + dev: true + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 - dev: false optionalDependencies: - graceful-fs: 4.2.3 - resolution: - integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + graceful-fs: 4.2.8 + dev: false + /jsonify/0.0.0: + resolution: {integrity: sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=} dev: true - resolution: - integrity: sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - /mime-db/1.44.0: - dev: false - engines: - node: '>= 0.6' - resolution: - integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - /mime-types/2.1.27: + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} dependencies: - mime-db: 1.44.0 + yallist: 4.0.0 dev: false - engines: - node: '>= 0.6' - resolution: - integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + + /mime-db/1.49.0: + resolution: {integrity: sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types/2.1.32: + resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.49.0 + dev: false + /minimatch/3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: brace-expansion: 1.1.11 dev: true - resolution: - integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /node-fetch/2.6.1: + resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} + engines: {node: 4.x || >=6.0.0} dev: false - engines: - node: 4.x || >=6.0.0 - resolution: - integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: wrappy: 1.0.2 - dev: true - resolution: - integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /parse-passwd/1.0.0: + resolution: {integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=} + engines: {node: '>=0.10.0'} dev: false - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + /path-exists/3.0.0: + resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} + engines: {node: '>=4'} dev: true - engines: - node: '>=4' - resolution: - integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /punycode/2.1.1: - engines: - node: '>=6' - resolution: - integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + /require-directory/2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} dev: true - engines: - node: '>=0.10.0' - resolution: - integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + /require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true - resolution: - integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: false + + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + /set-blocking/2.0.0: + resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} dev: true - resolution: - integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /sprintf-js/1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true - resolution: - integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /string-width/3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} dependencies: emoji-regex: 7.0.3 is-fullwidth-code-point: 2.0.0 strip-ansi: 5.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - /string-width/4.2.0: + + /string-width/4.2.2: + resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + /strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} dependencies: ansi-regex: 4.1.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-ansi/6.0.0: + resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - /tslib/1.11.2: + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - resolution: - integrity: sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg== + + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + + /tunnel/0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + dev: false + /typescript-json-schema/0.42.0: + resolution: {integrity: sha512-9WO+lVmlph7Ecb7lPd9tU84XFUQh44kpAf3cWe/Ym4G5EKw/SS6XGpi1DZDthvxqkIdNSDlWi7FhKfxuIV/3yw==} + hasBin: true dependencies: - '@types/json-schema': 7.0.4 - glob: 7.1.6 + '@types/json-schema': 7.0.9 + glob: 7.1.7 json-stable-stringify: 1.0.1 - typescript: 3.8.3 + typescript: 3.9.10 yargs: 14.2.3 dev: true + + /typescript/3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} hasBin: true - resolution: - integrity: sha512-9WO+lVmlph7Ecb7lPd9tU84XFUQh44kpAf3cWe/Ym4G5EKw/SS6XGpi1DZDthvxqkIdNSDlWi7FhKfxuIV/3yw== - /typescript/3.8.3: dev: true - engines: - node: '>=4.2.0' + + /typescript/4.4.2: + resolution: {integrity: sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ==} + engines: {node: '>=4.2.0'} hasBin: true - resolution: - integrity: sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - /typescript/4.2.3: dev: true - engines: - node: '>=4.2.0' - hasBin: true - resolution: - integrity: sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== - /universalify/0.1.2: - dev: true - engines: - node: '>= 4.0.0' - resolution: - integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - /universalify/2.0.0: + + /universal-user-agent/6.0.0: + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} dev: false - engines: - node: '>= 10.0.0' - resolution: - integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - /uri-js/4.2.2: + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: false + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 - resolution: - integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + /utility-types/3.10.0: + resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} + engines: {node: '>= 4'} dev: true - engines: - node: '>= 4' - resolution: - integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + + /uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: false + /which-module/2.0.0: + resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} dev: true - resolution: - integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + /wrap-ansi/5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} dependencies: ansi-styles: 3.2.1 string-width: 3.1.0 strip-ansi: 5.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: - ansi-styles: 4.2.1 - string-width: 4.2.0 + ansi-styles: 4.3.0 + string-width: 4.2.2 strip-ansi: 6.0.0 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} dev: true - resolution: - integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - /y18n/4.0.0: - dev: true - resolution: - integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - /yargs-parser/15.0.1: + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + + /yargs-parser/15.0.3: + resolution: {integrity: sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - resolution: - integrity: sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} dependencies: camelcase: 5.3.1 decamelize: 1.2.0 dev: true - engines: - node: '>=6' - resolution: - integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + /yargs/14.2.3: + resolution: {integrity: sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==} dependencies: cliui: 5.0.0 decamelize: 1.2.0 @@ -839,12 +985,13 @@ packages: set-blocking: 2.0.0 string-width: 3.1.0 which-module: 2.0.0 - y18n: 4.0.0 - yargs-parser: 15.0.1 + y18n: 4.0.3 + yargs-parser: 15.0.3 dev: true - resolution: - integrity: sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - /yargs/15.3.1: + + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -853,27 +1000,8 @@ packages: require-directory: 2.1.1 require-main-filename: 2.0.0 set-blocking: 2.0.0 - string-width: 4.2.0 + string-width: 4.2.2 which-module: 2.0.0 - y18n: 4.0.0 + y18n: 4.0.3 yargs-parser: 18.1.3 dev: true - engines: - node: '>=8' - resolution: - integrity: sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== -specifiers: - '@actions/core': ^1.2.6 - '@ts-schema-autogen/cli': ^0.1.2 - '@types/expand-tilde': ^2.0.0 - '@types/fs-extra': ^9.0.8 - '@types/js-yaml': ^4.0.0 - '@types/node': ^14.14.35 - '@types/node-fetch': ^2.5.8 - '@vercel/ncc': ^0.27.0 - ajv: ^6.12.5 - expand-tilde: ^2.0.2 - fs-extra: ^9.1.0 - js-yaml: ^4.0.0 - node-fetch: ^2.6.1 - typescript: ^4.2.3 diff --git a/src/index.ts b/src/index.ts index ecea472..c24579b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,22 +1,18 @@ -import { setFailed, saveState, getState } from '@actions/core' -import getInputs from './inputs' -import setOutputs from './outputs' -import installPnpm from './install-pnpm' -import pnpmInstall from './pnpm-install' -import pruneStore from './pnpm-store-prune' +import { setFailed } from "@actions/core"; +import getInputs from "./inputs"; +import setOutputs from "./outputs"; +import installPnpm from "./install-pnpm"; +import pnpmInstall from "./pnpm-install"; async function main() { - const inputs = getInputs() - const isPost = getState('is_post') - if (isPost === 'true') return pruneStore(inputs) - saveState('is_post', 'true') - await installPnpm(inputs) - console.log('Installation Completed!') - setOutputs(inputs) - pnpmInstall(inputs) + const inputs = getInputs(); + const installLoc = await installPnpm(inputs); + console.log("Installation Completed!"); + setOutputs(installLoc); + pnpmInstall(inputs, installLoc); } -main().catch(error => { - console.error(error) - setFailed(error) -}) +main().catch((error) => { + console.error(error); + setFailed(error); +}); diff --git a/src/inputs/index.ts b/src/inputs/index.ts index 142fcae..074815d 100644 --- a/src/inputs/index.ts +++ b/src/inputs/index.ts @@ -1,23 +1,19 @@ -import { getInput, InputOptions } from '@actions/core' -import expandTilde from 'expand-tilde' -import { RunInstall, parseRunInstall } from './run-install' +import { getInput } from "@actions/core"; +import expandTilde from "expand-tilde"; +import { RunInstall, parseRunInstall } from "./run-install"; export interface Inputs { - readonly version: string - readonly dest: string - readonly runInstall: RunInstall[] + readonly version?: string; + readonly dest: string; + readonly runInstall: RunInstall[]; } -const options: InputOptions = { - required: true, +export function getInputs(): Inputs { + const dest = expandTilde(getInput("dest")); + let version: string | undefined = getInput("version"); + if (version === "") version = undefined; + const runInstall = parseRunInstall(getInput("run_install")); + return { version, dest, runInstall }; } -const parseInputPath = (name: string) => expandTilde(getInput(name, options)) - -export const getInputs = (): Inputs => ({ - version: getInput('version', options), - dest: parseInputPath('dest'), - runInstall: parseRunInstall('run_install'), -}) - -export default getInputs +export default getInputs; diff --git a/src/inputs/run-install.ts b/src/inputs/run-install.ts index a24ed3d..3b94a84 100644 --- a/src/inputs/run-install.ts +++ b/src/inputs/run-install.ts @@ -1,39 +1,34 @@ -import process from 'process' -import { load } from 'js-yaml' -import Ajv from 'ajv' -import { getInput, error, InputOptions } from '@actions/core' -import runInstallSchema from './run-install-input.schema.json' +import process from "process"; +import { load } from "js-yaml"; +import Ajv from "ajv"; +import { getInput, error } from "@actions/core"; +import runInstallSchema from "./run-install-input.schema.json"; export interface RunInstall { - readonly recursive?: boolean - readonly cwd?: string - readonly args?: readonly string[] + readonly recursive?: boolean; + readonly cwd?: string; + readonly args?: readonly string[]; } -export type RunInstallInput = - | null - | boolean - | RunInstall - | RunInstall[] - -const options: InputOptions = { - required: true, -} +export type RunInstallInput = null | boolean | RunInstall | RunInstall[]; export function parseRunInstall(name: string): RunInstall[] { - const result: RunInstallInput = load(getInput(name, options)) as any + const runInstall = getInput(name, { required: false }); + if (runInstall === "") return []; + + const result: RunInstallInput = load(runInstall) as any; const ajv = new Ajv({ allErrors: true, - }) - const validate = ajv.compile(runInstallSchema) + }); + const validate = ajv.compile(runInstallSchema); if (!validate(result)) { for (const errorItem of validate.errors!) { - error(`with.run_install${errorItem.dataPath}: ${errorItem.message}`) + error(`with.run_install${errorItem.dataPath}: ${errorItem.message}`); } - return process.exit(1) + return process.exit(1); } - if (!result) return [] - if (result === true) return [{ recursive: true }] - if (Array.isArray(result)) return result - return [result] + if (!result) return []; + if (result === true) return [{ recursive: true }]; + if (Array.isArray(result)) return result; + return [result]; } diff --git a/src/install-pnpm/githubRelease.ts b/src/install-pnpm/githubRelease.ts new file mode 100644 index 0000000..1582587 --- /dev/null +++ b/src/install-pnpm/githubRelease.ts @@ -0,0 +1,83 @@ +import { Inputs } from "../inputs"; +import * as tc from "@actions/tool-cache"; +import { info } from "@actions/core"; +import { Octokit } from "@octokit/rest"; +import * as semver from "semver"; +import * as fs from "fs"; +import * as util from "util"; +const chmod = util.promisify(fs.chmod); + +export async function installFromGithubRelease( + inputs: Inputs +): Promise { + let releaseExeName: string; + let targetExeName: string; + let needChmod: boolean = false; + if (process.platform === "win32") { + releaseExeName = "pnpm-win-x64.exe"; + targetExeName = "pnpm.exe"; + } else if (process.platform === "darwin") { + releaseExeName = "pnpm-macos-x64"; + targetExeName = "pnpm"; + } else { + releaseExeName = "pnpm-linux-x64"; + targetExeName = "pnpm"; + needChmod = true; + } + + let verToInstall: string; + let downloadUrl: string; + if (inputs.version && semver.valid(inputs.version)) { + // a specific version is requested + verToInstall = semver.clean(inputs.version)!; + downloadUrl = `https://github.com/pnpm/pnpm/releases/download/v${verToInstall}/${releaseExeName}`; + } else { + // search for version by pattern in inputs.version or use latest + const octokit = new Octokit(); + const allReleases = await octokit.repos.listReleases({ + owner: "pnpm", + repo: "pnpm", + }); + const releases = allReleases.data.filter((r) => { + if (inputs.version) { + const ver = semver.parse(r.tag_name); + return ver && semver.satisfies(ver, inputs.version); + } else { + return semver.valid(r.tag_name) && !r.prerelease && !r.draft; + } + }); + + if (releases.length === 0) { + throw new Error( + `Unable to find any pnpm releases matching ${inputs.version}` + ); + } + + const release = releases.reduce((max, r) => + semver.gt(max.tag_name, r.tag_name) ? max : r + ); + + verToInstall = semver.clean(release.tag_name)!; + downloadUrl = release.assets.find( + (a) => a.name === releaseExeName + )!.browser_download_url; + } + + const cachedToolPath = tc.find("pnpm", verToInstall); + if (!cachedToolPath) { + info("Downloading " + downloadUrl); + const pnpmDownloadPath = await tc.downloadTool(downloadUrl); + if (needChmod) { + await chmod(pnpmDownloadPath, 0o755); + } + return await tc.cacheFile( + pnpmDownloadPath, + targetExeName, + "pnpm", + verToInstall + ); + } else { + info("Loading from tool cache"); + return cachedToolPath; + } +} diff --git a/src/install-pnpm/index.ts b/src/install-pnpm/index.ts index 6952ead..77759fa 100644 --- a/src/install-pnpm/index.ts +++ b/src/install-pnpm/index.ts @@ -1,16 +1,34 @@ -import { setFailed, startGroup, endGroup } from '@actions/core' -import { Inputs } from '../inputs' -import runSelfInstaller from './run' +import { startGroup, endGroup } from "@actions/core"; +import { Inputs } from "../inputs"; +import { runSelfInstaller } from "./run"; +import { installFromGithubRelease } from "./githubRelease"; +import * as semver from "semver"; -export { runSelfInstaller } - -export async function install(inputs: Inputs) { - startGroup('Running self-installer...') - const status = await runSelfInstaller(inputs) - endGroup() - if (status) { - return setFailed(`Something does wrong, self-installer exits with code ${status}`) - } +export interface InstallLocation { + readonly installFolder: string; + readonly dest?: string; } -export default install +export async function install(inputs: Inputs): Promise { + if (inputs.version) { + const ver = semver.parse(inputs.version); + if (ver && semver.lt(ver, "6.13.0")) { + startGroup("Running self-installer..."); + const binDir = await runSelfInstaller(inputs); + endGroup(); + return { + installFolder: binDir, + dest: inputs.dest, + }; + } + } + + startGroup("Installing from github releases..."); + const installFolder = await installFromGithubRelease(inputs); + endGroup(); + return { + installFolder, + }; +} + +export default install; diff --git a/src/install-pnpm/run.ts b/src/install-pnpm/run.ts index c79905f..9f2c3ef 100644 --- a/src/install-pnpm/run.ts +++ b/src/install-pnpm/run.ts @@ -1,31 +1,35 @@ -import { spawn } from 'child_process' -import { execPath } from 'process' -import { join } from 'path' -import { remove, ensureFile, writeFile } from 'fs-extra' -import fetch from 'node-fetch' -import { Inputs } from '../inputs' +import { spawn } from "child_process"; +import { execPath } from "process"; +import { join } from "path"; +import { remove, ensureFile, writeFile } from "fs-extra"; +import fetch from "node-fetch"; +import { Inputs } from "../inputs"; -export async function runSelfInstaller(inputs: Inputs): Promise { - const { version, dest } = inputs - const target = version ? `pnpm@${version}` : 'pnpm' - const pkgJson = join(dest, 'package.json') +export async function runSelfInstaller(inputs: Inputs): Promise { + const { version, dest } = inputs; + const target = version ? `pnpm@${version}` : "pnpm"; + const pkgJson = join(dest, "package.json"); - await remove(dest) - await ensureFile(pkgJson) - await writeFile(pkgJson, JSON.stringify({ private: true })) + await remove(dest); + await ensureFile(pkgJson); + await writeFile(pkgJson, JSON.stringify({ private: true })); - const cp = spawn(execPath, ['-', 'install', target, '--no-lockfile'], { + const cp = spawn(execPath, ["-", "install", target, "--no-lockfile"], { cwd: dest, - stdio: ['pipe', 'inherit', 'inherit'], - }) + stdio: ["pipe", "inherit", "inherit"], + }); - const response = await fetch('https://pnpm.js.org/pnpm.js') - response.body.pipe(cp.stdin) + const response = await fetch("https://pnpm.js.org/pnpm.js"); + response.body.pipe(cp.stdin); - return new Promise((resolve, reject) => { - cp.on('error', reject) - cp.on('close', resolve) - }) + const status: number = await new Promise((resolve, reject) => { + cp.on("error", reject); + cp.on("close", resolve); + }); + + if (status) { + throw new Error(`pnpm self installer exited with status ${status}`); + } else { + return join(inputs.dest, "node_modules", ".bin"); + } } - -export default runSelfInstaller diff --git a/src/outputs/index.ts b/src/outputs/index.ts index e25a6b0..fc93ea1 100644 --- a/src/outputs/index.ts +++ b/src/outputs/index.ts @@ -1,12 +1,12 @@ -import { setOutput, addPath } from '@actions/core' -import { Inputs } from '../inputs' -import { getBinDest } from '../utils' +import { addPath, setOutput } from "@actions/core"; +import { InstallLocation } from "../install-pnpm"; -export function setOutputs(inputs: Inputs) { - const binDest = getBinDest(inputs) - addPath(binDest) - setOutput('dest', inputs.dest) - setOutput('bin_dest', binDest) +export function setOutputs(install: InstallLocation) { + setOutput("bin_dest", install.installFolder); + addPath(install.installFolder); + if (install.dest) { + setOutput("dest", install.dest); + } } -export default setOutputs +export default setOutputs; diff --git a/src/pnpm-install/index.ts b/src/pnpm-install/index.ts index 821e114..9c16493 100644 --- a/src/pnpm-install/index.ts +++ b/src/pnpm-install/index.ts @@ -1,38 +1,44 @@ -import { spawnSync } from 'child_process' -import { setFailed, startGroup, endGroup } from '@actions/core' -import { Inputs } from '../inputs' -import { patchPnpmEnv } from '../utils' +import { spawnSync } from "child_process"; +import path from "path"; +import { setFailed, startGroup, endGroup } from "@actions/core"; +import { Inputs } from "../inputs"; +import { InstallLocation } from "../install-pnpm"; -export function runPnpmInstall(inputs: Inputs) { - const env = patchPnpmEnv(inputs) +export function runPnpmInstall(inputs: Inputs, installLoc: InstallLocation) { + const env = { + ...process.env, + PATH: installLoc.installFolder + path.delimiter + process.env.PATH, + }; for (const options of inputs.runInstall) { - const args = ['install'] - if (options.recursive) args.unshift('recursive') - if (options.args) args.push(...options.args) + const args = ["install"]; + if (options.recursive) args.unshift("recursive"); + if (options.args) args.push(...options.args); - const cmdStr = ['pnpm', ...args].join(' ') - startGroup(`Running ${cmdStr}...`) + const cmdStr = ["pnpm", ...args].join(" "); + startGroup(`Running ${cmdStr}...`); - const { error, status } = spawnSync('pnpm', args, { - stdio: 'inherit', + const { error, status } = spawnSync("pnpm", args, { + stdio: "inherit", cwd: options.cwd, shell: true, env, - }) + }); - endGroup() + endGroup(); if (error) { - setFailed(error) - continue + setFailed(error); + continue; } if (status) { - setFailed(`Command ${cmdStr} (cwd: ${options.cwd}) exits with status ${status}`) - continue + setFailed( + `Command ${cmdStr} (cwd: ${options.cwd}) exits with status ${status}` + ); + continue; } } } -export default runPnpmInstall +export default runPnpmInstall; diff --git a/src/pnpm-store-prune/index.ts b/src/pnpm-store-prune/index.ts deleted file mode 100644 index 792552a..0000000 --- a/src/pnpm-store-prune/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { spawnSync } from 'child_process' -import { warning, startGroup, endGroup } from '@actions/core' -import { Inputs } from '../inputs' -import { patchPnpmEnv } from '../utils' - -export function pruneStore(inputs: Inputs) { - if (inputs.runInstall.length === 0) { - console.log('Pruning is unnecessary.') - return - } - - startGroup('Running pnpm store prune...') - const { error, status } = spawnSync('pnpm', ['store', 'prune'], { - stdio: 'inherit', - shell: true, - env: patchPnpmEnv(inputs) - }) - endGroup() - - if (error) { - warning(error) - return - } - - if (status) { - warning(`command pnpm store prune exits with code ${status}`) - return - } -} - -export default pruneStore diff --git a/src/utils/index.ts b/src/utils/index.ts deleted file mode 100644 index b8f1b71..0000000 --- a/src/utils/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import process from 'process' -import path from 'path' -import { Inputs } from '../inputs' - -export const getBinDest = (inputs: Inputs): string => path.join(inputs.dest, 'node_modules', '.bin') - -export const patchPnpmEnv = (inputs: Inputs): NodeJS.ProcessEnv => ({ - ...process.env, - PATH: getBinDest(inputs) + path.delimiter + process.env.PATH -}) diff --git a/tsconfig.json b/tsconfig.json index 0f323f6..ac37407 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,6 @@ - { "compilerOptions": { - "target": "ES2018", + "target": "ES2019", "module": "CommonJS", "moduleResolution": "Node", "resolveJsonModule": true, @@ -27,4 +26,4 @@ "experimentalDecorators": true, "emitDecoratorMetadata": true } -} +} \ No newline at end of file