mirror of
https://github.com/actions/setup-node.git
synced 2026-07-11 19:15:38 +00:00
Compare commits
12 Commits
d07c1ac129
...
6d8cdac49c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d8cdac49c | ||
|
|
574f09a9fa | ||
|
|
260f8702db | ||
|
|
0c618ceb2e | ||
|
|
c73bf9098a | ||
|
|
c871b9da45 | ||
|
|
802542be35 | ||
|
|
d8a8b93089 | ||
|
|
28c91a3bbc | ||
|
|
f9532b258e | ||
|
|
7c0fdd03f5 | ||
|
|
2936fe8cda |
38
.github/workflows/e2e-cache.yml
vendored
38
.github/workflows/e2e-cache.yml
vendored
@ -135,6 +135,44 @@ jobs:
|
|||||||
run: __tests__/verify-node.sh "${{ matrix.node-version }}"
|
run: __tests__/verify-node.sh "${{ matrix.node-version }}"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
|
node-yarn4-corepack-dependencies-caching:
|
||||||
|
name: Test yarn 4 (Node ${{ matrix.node-version}}, ${{ matrix.os }})
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
env:
|
||||||
|
YARN_ENABLE_IMMUTABLE_INSTALLS: false
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
|
node-version: [18, 20]
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Update yarn
|
||||||
|
run: yarn set version 4.1.0
|
||||||
|
- name: Yarn version
|
||||||
|
run: yarn --version
|
||||||
|
- name: Generate simple .yarnrc.yml
|
||||||
|
run: |
|
||||||
|
echo "nodeLinker: node-modules" >> .yarnrc.yml
|
||||||
|
- name: Generate yarn file
|
||||||
|
run: yarn install
|
||||||
|
- name: Remove dependencies
|
||||||
|
shell: pwsh
|
||||||
|
run: Remove-Item node_modules -Force -Recurse
|
||||||
|
- name: Clean global cache
|
||||||
|
run: yarn cache clean --all
|
||||||
|
- name: Setup Node
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: 'yarn'
|
||||||
|
corepack: true
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install
|
||||||
|
- name: Verify node and yarn
|
||||||
|
run: __tests__/verify-node.sh "${{ matrix.node-version }}"
|
||||||
|
shell: bash
|
||||||
|
|
||||||
yarn-subprojects:
|
yarn-subprojects:
|
||||||
name: Test yarn subprojects
|
name: Test yarn subprojects
|
||||||
strategy:
|
strategy:
|
||||||
|
|||||||
BIN
.licenses/npm/lru-cache.dep.yml
generated
BIN
.licenses/npm/lru-cache.dep.yml
generated
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/yallist.dep.yml
generated
BIN
.licenses/npm/yallist.dep.yml
generated
Binary file not shown.
23
README.md
23
README.md
@ -26,22 +26,22 @@ See [action.yml](action.yml)
|
|||||||
node-version: ''
|
node-version: ''
|
||||||
|
|
||||||
# File containing the version Spec of the version to use. Examples: package.json, .nvmrc, .node-version, .tool-versions.
|
# File containing the version Spec of the version to use. Examples: package.json, .nvmrc, .node-version, .tool-versions.
|
||||||
# If node-version and node-version-file are both provided the action will use version from node-version.
|
# If node-version and node-version-file are both provided the action will use version from node-version.
|
||||||
node-version-file: ''
|
node-version-file: ''
|
||||||
|
|
||||||
# Set this option if you want the action to check for the latest available version
|
# Set this option if you want the action to check for the latest available version
|
||||||
# that satisfies the version spec.
|
# that satisfies the version spec.
|
||||||
# It will only get affect for lts Nodejs versions (12.x, >=10.15.0, lts/Hydrogen).
|
# It will only get affect for lts Nodejs versions (12.x, >=10.15.0, lts/Hydrogen).
|
||||||
# Default: false
|
# Default: false
|
||||||
check-latest: false
|
check-latest: false
|
||||||
|
|
||||||
# Target architecture for Node to use. Examples: x86, x64. Will use system architecture by default.
|
# Target architecture for Node to use. Examples: x86, x64. Will use system architecture by default.
|
||||||
# Default: ''. The action use system architecture by default
|
# Default: ''. The action use system architecture by default
|
||||||
architecture: ''
|
architecture: ''
|
||||||
|
|
||||||
# Used to pull node distributions from https://github.com/actions/node-versions.
|
# Used to pull node distributions from https://github.com/actions/node-versions.
|
||||||
# Since there's a default, this is typically not supplied by the user.
|
# Since there's a default, this is typically not supplied by the user.
|
||||||
# When running this action on github.com, the default value is sufficient.
|
# When running this action on github.com, the default value is sufficient.
|
||||||
# When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
|
# When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
|
||||||
#
|
#
|
||||||
# We recommend using a service account with the least permissions necessary. Also
|
# We recommend using a service account with the least permissions necessary. Also
|
||||||
@ -57,18 +57,18 @@ See [action.yml](action.yml)
|
|||||||
# Default: ''
|
# Default: ''
|
||||||
cache: ''
|
cache: ''
|
||||||
|
|
||||||
# Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc.
|
# Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc.
|
||||||
# It will generate hash from the target file for primary key. It works only If cache is specified.
|
# It will generate hash from the target file for primary key. It works only If cache is specified.
|
||||||
# Supports wildcards or a list of file names for caching multiple dependencies.
|
# Supports wildcards or a list of file names for caching multiple dependencies.
|
||||||
# Default: ''
|
# Default: ''
|
||||||
cache-dependency-path: ''
|
cache-dependency-path: ''
|
||||||
|
|
||||||
# Optional registry to set up for auth. Will set the registry in a project level .npmrc and .yarnrc file,
|
# Optional registry to set up for auth. Will set the registry in a project level .npmrc and .yarnrc file,
|
||||||
# and set up auth to read in from env.NODE_AUTH_TOKEN.
|
# and set up auth to read in from env.NODE_AUTH_TOKEN.
|
||||||
# Default: ''
|
# Default: ''
|
||||||
registry-url: ''
|
registry-url: ''
|
||||||
|
|
||||||
# Optional scope for authenticating against scoped registries.
|
# Optional scope for authenticating against scoped registries.
|
||||||
# Will fall back to the repository owner when using the GitHub Packages registry (https://npm.pkg.github.com/).
|
# Will fall back to the repository owner when using the GitHub Packages registry (https://npm.pkg.github.com/).
|
||||||
# Default: ''
|
# Default: ''
|
||||||
scope: ''
|
scope: ''
|
||||||
@ -203,6 +203,7 @@ If the runner is not able to access github.com, any Nodejs versions requested du
|
|||||||
- [Publishing to npmjs and GPR with npm](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-npm)
|
- [Publishing to npmjs and GPR with npm](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-npm)
|
||||||
- [Publishing to npmjs and GPR with yarn](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-yarn)
|
- [Publishing to npmjs and GPR with yarn](docs/advanced-usage.md#publish-to-npmjs-and-gpr-with-yarn)
|
||||||
- [Using private packages](docs/advanced-usage.md#use-private-packages)
|
- [Using private packages](docs/advanced-usage.md#use-private-packages)
|
||||||
|
- [Enabling Corepack](docs/advanced-usage.md#enabling-corepack)
|
||||||
|
|
||||||
## Recommended permissions
|
## Recommended permissions
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import each from 'jest-each';
|
|||||||
|
|
||||||
import * as main from '../src/main';
|
import * as main from '../src/main';
|
||||||
import * as util from '../src/util';
|
import * as util from '../src/util';
|
||||||
|
import * as cacheUtil from '../src/cache-utils';
|
||||||
import OfficialBuilds from '../src/distributions/official_builds/official_builds';
|
import OfficialBuilds from '../src/distributions/official_builds/official_builds';
|
||||||
|
|
||||||
describe('main tests', () => {
|
describe('main tests', () => {
|
||||||
@ -30,6 +31,7 @@ describe('main tests', () => {
|
|||||||
let existsSpy: jest.SpyInstance;
|
let existsSpy: jest.SpyInstance;
|
||||||
|
|
||||||
let getExecOutputSpy: jest.SpyInstance;
|
let getExecOutputSpy: jest.SpyInstance;
|
||||||
|
let getCommandOutputSpy: jest.SpyInstance;
|
||||||
|
|
||||||
let getNodeVersionFromFileSpy: jest.SpyInstance;
|
let getNodeVersionFromFileSpy: jest.SpyInstance;
|
||||||
let cnSpy: jest.SpyInstance;
|
let cnSpy: jest.SpyInstance;
|
||||||
@ -63,6 +65,7 @@ describe('main tests', () => {
|
|||||||
whichSpy = jest.spyOn(io, 'which');
|
whichSpy = jest.spyOn(io, 'which');
|
||||||
|
|
||||||
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
getExecOutputSpy = jest.spyOn(exec, 'getExecOutput');
|
||||||
|
getCommandOutputSpy = jest.spyOn(cacheUtil, 'getCommandOutput');
|
||||||
|
|
||||||
findSpy = jest.spyOn(tc, 'find');
|
findSpy = jest.spyOn(tc, 'find');
|
||||||
|
|
||||||
@ -280,4 +283,38 @@ describe('main tests', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('corepack flag', () => {
|
||||||
|
it('should not enable corepack when no input', async () => {
|
||||||
|
inputs['corepack'] = '';
|
||||||
|
await main.run();
|
||||||
|
expect(getCommandOutputSpy).not.toHaveBeenCalledWith(expect.stringContaining('corepack'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not enable corepack when input is "false"', async () => {
|
||||||
|
inputs['corepack'] = 'false';
|
||||||
|
await main.run();
|
||||||
|
expect(getCommandOutputSpy).not.toHaveBeenCalledWith(expect.stringContaining('corepack'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should enable corepack when input is "true"', async () => {
|
||||||
|
inputs['corepack'] = 'true';
|
||||||
|
await main.run();
|
||||||
|
expect(getCommandOutputSpy).toHaveBeenCalledWith('corepack enable');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should enable corepack with a single package manager', async () => {
|
||||||
|
inputs['corepack'] = 'npm';
|
||||||
|
await main.run();
|
||||||
|
expect(getCommandOutputSpy).toHaveBeenCalledWith('corepack enable npm');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should enable corepack with multiple package managers', async () => {
|
||||||
|
inputs['corepack'] = 'npm yarn';
|
||||||
|
await main.run();
|
||||||
|
expect(getCommandOutputSpy).toHaveBeenCalledWith(
|
||||||
|
'corepack enable npm yarn'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -25,10 +25,13 @@ inputs:
|
|||||||
description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.'
|
description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.'
|
||||||
cache-dependency-path:
|
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.'
|
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.'
|
||||||
|
corepack:
|
||||||
|
description: 'Used to specify whether to enable Corepack. Set to true to enable all package managers or set it to one or more package manager names separated by a space. Supported package manager names: npm, yarn, pnpm.'
|
||||||
|
default: 'false'
|
||||||
# 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
|
# escape valve for someone having issues or needing the absolute latest which isn't cached yet
|
||||||
outputs:
|
outputs:
|
||||||
cache-hit:
|
cache-hit:
|
||||||
description: 'A boolean value to indicate if a cache was hit.'
|
description: 'A boolean value to indicate if a cache was hit.'
|
||||||
node-version:
|
node-version:
|
||||||
description: 'The installed node version.'
|
description: 'The installed node version.'
|
||||||
|
|||||||
16
dist/cache-save/index.js
vendored
16
dist/cache-save/index.js
vendored
@ -92471,12 +92471,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.unique = exports.printEnvDetailsAndSetOutput = exports.getNodeVersionFromFile = void 0;
|
exports.enableCorepack = exports.unique = exports.printEnvDetailsAndSetOutput = exports.getNodeVersionFromFile = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
const exec = __importStar(__nccwpck_require__(1514));
|
const exec = __importStar(__nccwpck_require__(1514));
|
||||||
const io = __importStar(__nccwpck_require__(7436));
|
const io = __importStar(__nccwpck_require__(7436));
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
||||||
const path_1 = __importDefault(__nccwpck_require__(1017));
|
const path_1 = __importDefault(__nccwpck_require__(1017));
|
||||||
|
const cache_utils_1 = __nccwpck_require__(1678);
|
||||||
function getNodeVersionFromFile(versionFilePath) {
|
function getNodeVersionFromFile(versionFilePath) {
|
||||||
var _a, _b, _c, _d, _e;
|
var _a, _b, _c, _d, _e;
|
||||||
if (!fs_1.default.existsSync(versionFilePath)) {
|
if (!fs_1.default.existsSync(versionFilePath)) {
|
||||||
@ -92569,6 +92570,19 @@ const unique = () => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
exports.unique = unique;
|
exports.unique = unique;
|
||||||
|
function enableCorepack(input) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (input.length && input !== 'false') {
|
||||||
|
const corepackArgs = ['enable'];
|
||||||
|
if (input !== 'true') {
|
||||||
|
const packageManagers = input.split(' ');
|
||||||
|
corepackArgs.push(...packageManagers);
|
||||||
|
}
|
||||||
|
yield (0, cache_utils_1.getCommandOutput)(`corepack ${corepackArgs.join(' ')}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.enableCorepack = enableCorepack;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|||||||
900
dist/setup/index.js
vendored
900
dist/setup/index.js
vendored
@ -66522,6 +66522,8 @@ const Range = __nccwpck_require__(9828)
|
|||||||
/***/ 9828:
|
/***/ 9828:
|
||||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
const SPACE_CHARACTERS = /\s+/g
|
||||||
|
|
||||||
// hoisted class for cyclic dependency
|
// hoisted class for cyclic dependency
|
||||||
class Range {
|
class Range {
|
||||||
constructor (range, options) {
|
constructor (range, options) {
|
||||||
@ -66542,7 +66544,7 @@ class Range {
|
|||||||
// just put it in the set and return
|
// just put it in the set and return
|
||||||
this.raw = range.value
|
this.raw = range.value
|
||||||
this.set = [[range]]
|
this.set = [[range]]
|
||||||
this.format()
|
this.formatted = undefined
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66553,10 +66555,7 @@ class Range {
|
|||||||
// First reduce all whitespace as much as possible so we do not have to rely
|
// First reduce all whitespace as much as possible so we do not have to rely
|
||||||
// on potentially slow regexes like \s*. This is then stored and used for
|
// on potentially slow regexes like \s*. This is then stored and used for
|
||||||
// future error messages as well.
|
// future error messages as well.
|
||||||
this.raw = range
|
this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')
|
||||||
.trim()
|
|
||||||
.split(/\s+/)
|
|
||||||
.join(' ')
|
|
||||||
|
|
||||||
// First, split on ||
|
// First, split on ||
|
||||||
this.set = this.raw
|
this.set = this.raw
|
||||||
@ -66590,14 +66589,29 @@ class Range {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.format()
|
this.formatted = undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
get range () {
|
||||||
|
if (this.formatted === undefined) {
|
||||||
|
this.formatted = ''
|
||||||
|
for (let i = 0; i < this.set.length; i++) {
|
||||||
|
if (i > 0) {
|
||||||
|
this.formatted += '||'
|
||||||
|
}
|
||||||
|
const comps = this.set[i]
|
||||||
|
for (let k = 0; k < comps.length; k++) {
|
||||||
|
if (k > 0) {
|
||||||
|
this.formatted += ' '
|
||||||
|
}
|
||||||
|
this.formatted += comps[k].toString().trim()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.formatted
|
||||||
}
|
}
|
||||||
|
|
||||||
format () {
|
format () {
|
||||||
this.range = this.set
|
|
||||||
.map((comps) => comps.join(' ').trim())
|
|
||||||
.join('||')
|
|
||||||
.trim()
|
|
||||||
return this.range
|
return this.range
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66722,8 +66736,8 @@ class Range {
|
|||||||
|
|
||||||
module.exports = Range
|
module.exports = Range
|
||||||
|
|
||||||
const LRU = __nccwpck_require__(1196)
|
const LRU = __nccwpck_require__(5339)
|
||||||
const cache = new LRU({ max: 1000 })
|
const cache = new LRU()
|
||||||
|
|
||||||
const parseOptions = __nccwpck_require__(785)
|
const parseOptions = __nccwpck_require__(785)
|
||||||
const Comparator = __nccwpck_require__(1532)
|
const Comparator = __nccwpck_require__(1532)
|
||||||
@ -66994,9 +67008,10 @@ const replaceGTE0 = (comp, options) => {
|
|||||||
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
||||||
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
|
||||||
// 1.2 - 3.4 => >=1.2.0 <3.5.0-0
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0-0
|
||||||
|
// TODO build?
|
||||||
const hyphenReplace = incPr => ($0,
|
const hyphenReplace = incPr => ($0,
|
||||||
from, fM, fm, fp, fpr, fb,
|
from, fM, fm, fp, fpr, fb,
|
||||||
to, tM, tm, tp, tpr, tb) => {
|
to, tM, tm, tp, tpr) => {
|
||||||
if (isX(fM)) {
|
if (isX(fM)) {
|
||||||
from = ''
|
from = ''
|
||||||
} else if (isX(fm)) {
|
} else if (isX(fm)) {
|
||||||
@ -67228,7 +67243,7 @@ class SemVer {
|
|||||||
do {
|
do {
|
||||||
const a = this.build[i]
|
const a = this.build[i]
|
||||||
const b = other.build[i]
|
const b = other.build[i]
|
||||||
debug('prerelease compare', i, a, b)
|
debug('build compare', i, a, b)
|
||||||
if (a === undefined && b === undefined) {
|
if (a === undefined && b === undefined) {
|
||||||
return 0
|
return 0
|
||||||
} else if (b === undefined) {
|
} else if (b === undefined) {
|
||||||
@ -68015,6 +68030,53 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 5339:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
class LRUCache {
|
||||||
|
constructor () {
|
||||||
|
this.max = 1000
|
||||||
|
this.map = new Map()
|
||||||
|
}
|
||||||
|
|
||||||
|
get (key) {
|
||||||
|
const value = this.map.get(key)
|
||||||
|
if (value === undefined) {
|
||||||
|
return undefined
|
||||||
|
} else {
|
||||||
|
// Remove the key from the map and add it to the end
|
||||||
|
this.map.delete(key)
|
||||||
|
this.map.set(key, value)
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete (key) {
|
||||||
|
return this.map.delete(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
set (key, value) {
|
||||||
|
const deleted = this.delete(key)
|
||||||
|
|
||||||
|
if (!deleted && value !== undefined) {
|
||||||
|
// If cache is full, delete the least recently used item
|
||||||
|
if (this.map.size >= this.max) {
|
||||||
|
const firstKey = this.map.keys().next().value
|
||||||
|
this.delete(firstKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.map.set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = LRUCache
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 785:
|
/***/ 785:
|
||||||
@ -68261,798 +68323,6 @@ createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$')
|
|||||||
createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$')
|
createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$')
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 1196:
|
|
||||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
|
|
||||||
// A linked list to keep track of recently-used-ness
|
|
||||||
const Yallist = __nccwpck_require__(220)
|
|
||||||
|
|
||||||
const MAX = Symbol('max')
|
|
||||||
const LENGTH = Symbol('length')
|
|
||||||
const LENGTH_CALCULATOR = Symbol('lengthCalculator')
|
|
||||||
const ALLOW_STALE = Symbol('allowStale')
|
|
||||||
const MAX_AGE = Symbol('maxAge')
|
|
||||||
const DISPOSE = Symbol('dispose')
|
|
||||||
const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')
|
|
||||||
const LRU_LIST = Symbol('lruList')
|
|
||||||
const CACHE = Symbol('cache')
|
|
||||||
const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')
|
|
||||||
|
|
||||||
const naiveLength = () => 1
|
|
||||||
|
|
||||||
// lruList is a yallist where the head is the youngest
|
|
||||||
// item, and the tail is the oldest. the list contains the Hit
|
|
||||||
// objects as the entries.
|
|
||||||
// Each Hit object has a reference to its Yallist.Node. This
|
|
||||||
// never changes.
|
|
||||||
//
|
|
||||||
// cache is a Map (or PseudoMap) that matches the keys to
|
|
||||||
// the Yallist.Node object.
|
|
||||||
class LRUCache {
|
|
||||||
constructor (options) {
|
|
||||||
if (typeof options === 'number')
|
|
||||||
options = { max: options }
|
|
||||||
|
|
||||||
if (!options)
|
|
||||||
options = {}
|
|
||||||
|
|
||||||
if (options.max && (typeof options.max !== 'number' || options.max < 0))
|
|
||||||
throw new TypeError('max must be a non-negative number')
|
|
||||||
// Kind of weird to have a default max of Infinity, but oh well.
|
|
||||||
const max = this[MAX] = options.max || Infinity
|
|
||||||
|
|
||||||
const lc = options.length || naiveLength
|
|
||||||
this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc
|
|
||||||
this[ALLOW_STALE] = options.stale || false
|
|
||||||
if (options.maxAge && typeof options.maxAge !== 'number')
|
|
||||||
throw new TypeError('maxAge must be a number')
|
|
||||||
this[MAX_AGE] = options.maxAge || 0
|
|
||||||
this[DISPOSE] = options.dispose
|
|
||||||
this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
|
|
||||||
this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false
|
|
||||||
this.reset()
|
|
||||||
}
|
|
||||||
|
|
||||||
// resize the cache when the max changes.
|
|
||||||
set max (mL) {
|
|
||||||
if (typeof mL !== 'number' || mL < 0)
|
|
||||||
throw new TypeError('max must be a non-negative number')
|
|
||||||
|
|
||||||
this[MAX] = mL || Infinity
|
|
||||||
trim(this)
|
|
||||||
}
|
|
||||||
get max () {
|
|
||||||
return this[MAX]
|
|
||||||
}
|
|
||||||
|
|
||||||
set allowStale (allowStale) {
|
|
||||||
this[ALLOW_STALE] = !!allowStale
|
|
||||||
}
|
|
||||||
get allowStale () {
|
|
||||||
return this[ALLOW_STALE]
|
|
||||||
}
|
|
||||||
|
|
||||||
set maxAge (mA) {
|
|
||||||
if (typeof mA !== 'number')
|
|
||||||
throw new TypeError('maxAge must be a non-negative number')
|
|
||||||
|
|
||||||
this[MAX_AGE] = mA
|
|
||||||
trim(this)
|
|
||||||
}
|
|
||||||
get maxAge () {
|
|
||||||
return this[MAX_AGE]
|
|
||||||
}
|
|
||||||
|
|
||||||
// resize the cache when the lengthCalculator changes.
|
|
||||||
set lengthCalculator (lC) {
|
|
||||||
if (typeof lC !== 'function')
|
|
||||||
lC = naiveLength
|
|
||||||
|
|
||||||
if (lC !== this[LENGTH_CALCULATOR]) {
|
|
||||||
this[LENGTH_CALCULATOR] = lC
|
|
||||||
this[LENGTH] = 0
|
|
||||||
this[LRU_LIST].forEach(hit => {
|
|
||||||
hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
|
|
||||||
this[LENGTH] += hit.length
|
|
||||||
})
|
|
||||||
}
|
|
||||||
trim(this)
|
|
||||||
}
|
|
||||||
get lengthCalculator () { return this[LENGTH_CALCULATOR] }
|
|
||||||
|
|
||||||
get length () { return this[LENGTH] }
|
|
||||||
get itemCount () { return this[LRU_LIST].length }
|
|
||||||
|
|
||||||
rforEach (fn, thisp) {
|
|
||||||
thisp = thisp || this
|
|
||||||
for (let walker = this[LRU_LIST].tail; walker !== null;) {
|
|
||||||
const prev = walker.prev
|
|
||||||
forEachStep(this, fn, walker, thisp)
|
|
||||||
walker = prev
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
forEach (fn, thisp) {
|
|
||||||
thisp = thisp || this
|
|
||||||
for (let walker = this[LRU_LIST].head; walker !== null;) {
|
|
||||||
const next = walker.next
|
|
||||||
forEachStep(this, fn, walker, thisp)
|
|
||||||
walker = next
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
keys () {
|
|
||||||
return this[LRU_LIST].toArray().map(k => k.key)
|
|
||||||
}
|
|
||||||
|
|
||||||
values () {
|
|
||||||
return this[LRU_LIST].toArray().map(k => k.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
reset () {
|
|
||||||
if (this[DISPOSE] &&
|
|
||||||
this[LRU_LIST] &&
|
|
||||||
this[LRU_LIST].length) {
|
|
||||||
this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))
|
|
||||||
}
|
|
||||||
|
|
||||||
this[CACHE] = new Map() // hash of items by key
|
|
||||||
this[LRU_LIST] = new Yallist() // list of items in order of use recency
|
|
||||||
this[LENGTH] = 0 // length of items in the list
|
|
||||||
}
|
|
||||||
|
|
||||||
dump () {
|
|
||||||
return this[LRU_LIST].map(hit =>
|
|
||||||
isStale(this, hit) ? false : {
|
|
||||||
k: hit.key,
|
|
||||||
v: hit.value,
|
|
||||||
e: hit.now + (hit.maxAge || 0)
|
|
||||||
}).toArray().filter(h => h)
|
|
||||||
}
|
|
||||||
|
|
||||||
dumpLru () {
|
|
||||||
return this[LRU_LIST]
|
|
||||||
}
|
|
||||||
|
|
||||||
set (key, value, maxAge) {
|
|
||||||
maxAge = maxAge || this[MAX_AGE]
|
|
||||||
|
|
||||||
if (maxAge && typeof maxAge !== 'number')
|
|
||||||
throw new TypeError('maxAge must be a number')
|
|
||||||
|
|
||||||
const now = maxAge ? Date.now() : 0
|
|
||||||
const len = this[LENGTH_CALCULATOR](value, key)
|
|
||||||
|
|
||||||
if (this[CACHE].has(key)) {
|
|
||||||
if (len > this[MAX]) {
|
|
||||||
del(this, this[CACHE].get(key))
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
const node = this[CACHE].get(key)
|
|
||||||
const item = node.value
|
|
||||||
|
|
||||||
// dispose of the old one before overwriting
|
|
||||||
// split out into 2 ifs for better coverage tracking
|
|
||||||
if (this[DISPOSE]) {
|
|
||||||
if (!this[NO_DISPOSE_ON_SET])
|
|
||||||
this[DISPOSE](key, item.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
item.now = now
|
|
||||||
item.maxAge = maxAge
|
|
||||||
item.value = value
|
|
||||||
this[LENGTH] += len - item.length
|
|
||||||
item.length = len
|
|
||||||
this.get(key)
|
|
||||||
trim(this)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
const hit = new Entry(key, value, len, now, maxAge)
|
|
||||||
|
|
||||||
// oversized objects fall out of cache automatically.
|
|
||||||
if (hit.length > this[MAX]) {
|
|
||||||
if (this[DISPOSE])
|
|
||||||
this[DISPOSE](key, value)
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
this[LENGTH] += hit.length
|
|
||||||
this[LRU_LIST].unshift(hit)
|
|
||||||
this[CACHE].set(key, this[LRU_LIST].head)
|
|
||||||
trim(this)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
has (key) {
|
|
||||||
if (!this[CACHE].has(key)) return false
|
|
||||||
const hit = this[CACHE].get(key).value
|
|
||||||
return !isStale(this, hit)
|
|
||||||
}
|
|
||||||
|
|
||||||
get (key) {
|
|
||||||
return get(this, key, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
peek (key) {
|
|
||||||
return get(this, key, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
pop () {
|
|
||||||
const node = this[LRU_LIST].tail
|
|
||||||
if (!node)
|
|
||||||
return null
|
|
||||||
|
|
||||||
del(this, node)
|
|
||||||
return node.value
|
|
||||||
}
|
|
||||||
|
|
||||||
del (key) {
|
|
||||||
del(this, this[CACHE].get(key))
|
|
||||||
}
|
|
||||||
|
|
||||||
load (arr) {
|
|
||||||
// reset the cache
|
|
||||||
this.reset()
|
|
||||||
|
|
||||||
const now = Date.now()
|
|
||||||
// A previous serialized cache has the most recent items first
|
|
||||||
for (let l = arr.length - 1; l >= 0; l--) {
|
|
||||||
const hit = arr[l]
|
|
||||||
const expiresAt = hit.e || 0
|
|
||||||
if (expiresAt === 0)
|
|
||||||
// the item was created without expiration in a non aged cache
|
|
||||||
this.set(hit.k, hit.v)
|
|
||||||
else {
|
|
||||||
const maxAge = expiresAt - now
|
|
||||||
// dont add already expired items
|
|
||||||
if (maxAge > 0) {
|
|
||||||
this.set(hit.k, hit.v, maxAge)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
prune () {
|
|
||||||
this[CACHE].forEach((value, key) => get(this, key, false))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const get = (self, key, doUse) => {
|
|
||||||
const node = self[CACHE].get(key)
|
|
||||||
if (node) {
|
|
||||||
const hit = node.value
|
|
||||||
if (isStale(self, hit)) {
|
|
||||||
del(self, node)
|
|
||||||
if (!self[ALLOW_STALE])
|
|
||||||
return undefined
|
|
||||||
} else {
|
|
||||||
if (doUse) {
|
|
||||||
if (self[UPDATE_AGE_ON_GET])
|
|
||||||
node.value.now = Date.now()
|
|
||||||
self[LRU_LIST].unshiftNode(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return hit.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const isStale = (self, hit) => {
|
|
||||||
if (!hit || (!hit.maxAge && !self[MAX_AGE]))
|
|
||||||
return false
|
|
||||||
|
|
||||||
const diff = Date.now() - hit.now
|
|
||||||
return hit.maxAge ? diff > hit.maxAge
|
|
||||||
: self[MAX_AGE] && (diff > self[MAX_AGE])
|
|
||||||
}
|
|
||||||
|
|
||||||
const trim = self => {
|
|
||||||
if (self[LENGTH] > self[MAX]) {
|
|
||||||
for (let walker = self[LRU_LIST].tail;
|
|
||||||
self[LENGTH] > self[MAX] && walker !== null;) {
|
|
||||||
// We know that we're about to delete this one, and also
|
|
||||||
// what the next least recently used key will be, so just
|
|
||||||
// go ahead and set it now.
|
|
||||||
const prev = walker.prev
|
|
||||||
del(self, walker)
|
|
||||||
walker = prev
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const del = (self, node) => {
|
|
||||||
if (node) {
|
|
||||||
const hit = node.value
|
|
||||||
if (self[DISPOSE])
|
|
||||||
self[DISPOSE](hit.key, hit.value)
|
|
||||||
|
|
||||||
self[LENGTH] -= hit.length
|
|
||||||
self[CACHE].delete(hit.key)
|
|
||||||
self[LRU_LIST].removeNode(node)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class Entry {
|
|
||||||
constructor (key, value, length, now, maxAge) {
|
|
||||||
this.key = key
|
|
||||||
this.value = value
|
|
||||||
this.length = length
|
|
||||||
this.now = now
|
|
||||||
this.maxAge = maxAge || 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const forEachStep = (self, fn, node, thisp) => {
|
|
||||||
let hit = node.value
|
|
||||||
if (isStale(self, hit)) {
|
|
||||||
del(self, node)
|
|
||||||
if (!self[ALLOW_STALE])
|
|
||||||
hit = undefined
|
|
||||||
}
|
|
||||||
if (hit)
|
|
||||||
fn.call(thisp, hit.value, hit.key, self)
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = LRUCache
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 5327:
|
|
||||||
/***/ ((module) => {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
module.exports = function (Yallist) {
|
|
||||||
Yallist.prototype[Symbol.iterator] = function* () {
|
|
||||||
for (let walker = this.head; walker; walker = walker.next) {
|
|
||||||
yield walker.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
|
|
||||||
/***/ 220:
|
|
||||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
module.exports = Yallist
|
|
||||||
|
|
||||||
Yallist.Node = Node
|
|
||||||
Yallist.create = Yallist
|
|
||||||
|
|
||||||
function Yallist (list) {
|
|
||||||
var self = this
|
|
||||||
if (!(self instanceof Yallist)) {
|
|
||||||
self = new Yallist()
|
|
||||||
}
|
|
||||||
|
|
||||||
self.tail = null
|
|
||||||
self.head = null
|
|
||||||
self.length = 0
|
|
||||||
|
|
||||||
if (list && typeof list.forEach === 'function') {
|
|
||||||
list.forEach(function (item) {
|
|
||||||
self.push(item)
|
|
||||||
})
|
|
||||||
} else if (arguments.length > 0) {
|
|
||||||
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
||||||
self.push(arguments[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return self
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.removeNode = function (node) {
|
|
||||||
if (node.list !== this) {
|
|
||||||
throw new Error('removing node which does not belong to this list')
|
|
||||||
}
|
|
||||||
|
|
||||||
var next = node.next
|
|
||||||
var prev = node.prev
|
|
||||||
|
|
||||||
if (next) {
|
|
||||||
next.prev = prev
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prev) {
|
|
||||||
prev.next = next
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node === this.head) {
|
|
||||||
this.head = next
|
|
||||||
}
|
|
||||||
if (node === this.tail) {
|
|
||||||
this.tail = prev
|
|
||||||
}
|
|
||||||
|
|
||||||
node.list.length--
|
|
||||||
node.next = null
|
|
||||||
node.prev = null
|
|
||||||
node.list = null
|
|
||||||
|
|
||||||
return next
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.unshiftNode = function (node) {
|
|
||||||
if (node === this.head) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node.list) {
|
|
||||||
node.list.removeNode(node)
|
|
||||||
}
|
|
||||||
|
|
||||||
var head = this.head
|
|
||||||
node.list = this
|
|
||||||
node.next = head
|
|
||||||
if (head) {
|
|
||||||
head.prev = node
|
|
||||||
}
|
|
||||||
|
|
||||||
this.head = node
|
|
||||||
if (!this.tail) {
|
|
||||||
this.tail = node
|
|
||||||
}
|
|
||||||
this.length++
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.pushNode = function (node) {
|
|
||||||
if (node === this.tail) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (node.list) {
|
|
||||||
node.list.removeNode(node)
|
|
||||||
}
|
|
||||||
|
|
||||||
var tail = this.tail
|
|
||||||
node.list = this
|
|
||||||
node.prev = tail
|
|
||||||
if (tail) {
|
|
||||||
tail.next = node
|
|
||||||
}
|
|
||||||
|
|
||||||
this.tail = node
|
|
||||||
if (!this.head) {
|
|
||||||
this.head = node
|
|
||||||
}
|
|
||||||
this.length++
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.push = function () {
|
|
||||||
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
||||||
push(this, arguments[i])
|
|
||||||
}
|
|
||||||
return this.length
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.unshift = function () {
|
|
||||||
for (var i = 0, l = arguments.length; i < l; i++) {
|
|
||||||
unshift(this, arguments[i])
|
|
||||||
}
|
|
||||||
return this.length
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.pop = function () {
|
|
||||||
if (!this.tail) {
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
var res = this.tail.value
|
|
||||||
this.tail = this.tail.prev
|
|
||||||
if (this.tail) {
|
|
||||||
this.tail.next = null
|
|
||||||
} else {
|
|
||||||
this.head = null
|
|
||||||
}
|
|
||||||
this.length--
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.shift = function () {
|
|
||||||
if (!this.head) {
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
|
|
||||||
var res = this.head.value
|
|
||||||
this.head = this.head.next
|
|
||||||
if (this.head) {
|
|
||||||
this.head.prev = null
|
|
||||||
} else {
|
|
||||||
this.tail = null
|
|
||||||
}
|
|
||||||
this.length--
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.forEach = function (fn, thisp) {
|
|
||||||
thisp = thisp || this
|
|
||||||
for (var walker = this.head, i = 0; walker !== null; i++) {
|
|
||||||
fn.call(thisp, walker.value, i, this)
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.forEachReverse = function (fn, thisp) {
|
|
||||||
thisp = thisp || this
|
|
||||||
for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
|
|
||||||
fn.call(thisp, walker.value, i, this)
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.get = function (n) {
|
|
||||||
for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
|
|
||||||
// abort out of the list early if we hit a cycle
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
if (i === n && walker !== null) {
|
|
||||||
return walker.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.getReverse = function (n) {
|
|
||||||
for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
|
|
||||||
// abort out of the list early if we hit a cycle
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
if (i === n && walker !== null) {
|
|
||||||
return walker.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.map = function (fn, thisp) {
|
|
||||||
thisp = thisp || this
|
|
||||||
var res = new Yallist()
|
|
||||||
for (var walker = this.head; walker !== null;) {
|
|
||||||
res.push(fn.call(thisp, walker.value, this))
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.mapReverse = function (fn, thisp) {
|
|
||||||
thisp = thisp || this
|
|
||||||
var res = new Yallist()
|
|
||||||
for (var walker = this.tail; walker !== null;) {
|
|
||||||
res.push(fn.call(thisp, walker.value, this))
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.reduce = function (fn, initial) {
|
|
||||||
var acc
|
|
||||||
var walker = this.head
|
|
||||||
if (arguments.length > 1) {
|
|
||||||
acc = initial
|
|
||||||
} else if (this.head) {
|
|
||||||
walker = this.head.next
|
|
||||||
acc = this.head.value
|
|
||||||
} else {
|
|
||||||
throw new TypeError('Reduce of empty list with no initial value')
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; walker !== null; i++) {
|
|
||||||
acc = fn(acc, walker.value, i)
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
|
|
||||||
return acc
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.reduceReverse = function (fn, initial) {
|
|
||||||
var acc
|
|
||||||
var walker = this.tail
|
|
||||||
if (arguments.length > 1) {
|
|
||||||
acc = initial
|
|
||||||
} else if (this.tail) {
|
|
||||||
walker = this.tail.prev
|
|
||||||
acc = this.tail.value
|
|
||||||
} else {
|
|
||||||
throw new TypeError('Reduce of empty list with no initial value')
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = this.length - 1; walker !== null; i--) {
|
|
||||||
acc = fn(acc, walker.value, i)
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
|
|
||||||
return acc
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.toArray = function () {
|
|
||||||
var arr = new Array(this.length)
|
|
||||||
for (var i = 0, walker = this.head; walker !== null; i++) {
|
|
||||||
arr[i] = walker.value
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
return arr
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.toArrayReverse = function () {
|
|
||||||
var arr = new Array(this.length)
|
|
||||||
for (var i = 0, walker = this.tail; walker !== null; i++) {
|
|
||||||
arr[i] = walker.value
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
return arr
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.slice = function (from, to) {
|
|
||||||
to = to || this.length
|
|
||||||
if (to < 0) {
|
|
||||||
to += this.length
|
|
||||||
}
|
|
||||||
from = from || 0
|
|
||||||
if (from < 0) {
|
|
||||||
from += this.length
|
|
||||||
}
|
|
||||||
var ret = new Yallist()
|
|
||||||
if (to < from || to < 0) {
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
if (from < 0) {
|
|
||||||
from = 0
|
|
||||||
}
|
|
||||||
if (to > this.length) {
|
|
||||||
to = this.length
|
|
||||||
}
|
|
||||||
for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
for (; walker !== null && i < to; i++, walker = walker.next) {
|
|
||||||
ret.push(walker.value)
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.sliceReverse = function (from, to) {
|
|
||||||
to = to || this.length
|
|
||||||
if (to < 0) {
|
|
||||||
to += this.length
|
|
||||||
}
|
|
||||||
from = from || 0
|
|
||||||
if (from < 0) {
|
|
||||||
from += this.length
|
|
||||||
}
|
|
||||||
var ret = new Yallist()
|
|
||||||
if (to < from || to < 0) {
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
if (from < 0) {
|
|
||||||
from = 0
|
|
||||||
}
|
|
||||||
if (to > this.length) {
|
|
||||||
to = this.length
|
|
||||||
}
|
|
||||||
for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
for (; walker !== null && i > from; i--, walker = walker.prev) {
|
|
||||||
ret.push(walker.value)
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
|
|
||||||
if (start > this.length) {
|
|
||||||
start = this.length - 1
|
|
||||||
}
|
|
||||||
if (start < 0) {
|
|
||||||
start = this.length + start;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
|
|
||||||
walker = walker.next
|
|
||||||
}
|
|
||||||
|
|
||||||
var ret = []
|
|
||||||
for (var i = 0; walker && i < deleteCount; i++) {
|
|
||||||
ret.push(walker.value)
|
|
||||||
walker = this.removeNode(walker)
|
|
||||||
}
|
|
||||||
if (walker === null) {
|
|
||||||
walker = this.tail
|
|
||||||
}
|
|
||||||
|
|
||||||
if (walker !== this.head && walker !== this.tail) {
|
|
||||||
walker = walker.prev
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < nodes.length; i++) {
|
|
||||||
walker = insert(this, walker, nodes[i])
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
Yallist.prototype.reverse = function () {
|
|
||||||
var head = this.head
|
|
||||||
var tail = this.tail
|
|
||||||
for (var walker = head; walker !== null; walker = walker.prev) {
|
|
||||||
var p = walker.prev
|
|
||||||
walker.prev = walker.next
|
|
||||||
walker.next = p
|
|
||||||
}
|
|
||||||
this.head = tail
|
|
||||||
this.tail = head
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
function insert (self, node, value) {
|
|
||||||
var inserted = node === self.head ?
|
|
||||||
new Node(value, null, node, self) :
|
|
||||||
new Node(value, node, node.next, self)
|
|
||||||
|
|
||||||
if (inserted.next === null) {
|
|
||||||
self.tail = inserted
|
|
||||||
}
|
|
||||||
if (inserted.prev === null) {
|
|
||||||
self.head = inserted
|
|
||||||
}
|
|
||||||
|
|
||||||
self.length++
|
|
||||||
|
|
||||||
return inserted
|
|
||||||
}
|
|
||||||
|
|
||||||
function push (self, item) {
|
|
||||||
self.tail = new Node(item, self.tail, null, self)
|
|
||||||
if (!self.head) {
|
|
||||||
self.head = self.tail
|
|
||||||
}
|
|
||||||
self.length++
|
|
||||||
}
|
|
||||||
|
|
||||||
function unshift (self, item) {
|
|
||||||
self.head = new Node(item, null, self.head, self)
|
|
||||||
if (!self.tail) {
|
|
||||||
self.tail = self.head
|
|
||||||
}
|
|
||||||
self.length++
|
|
||||||
}
|
|
||||||
|
|
||||||
function Node (value, prev, next, list) {
|
|
||||||
if (!(this instanceof Node)) {
|
|
||||||
return new Node(value, prev, next, list)
|
|
||||||
}
|
|
||||||
|
|
||||||
this.list = list
|
|
||||||
this.value = value
|
|
||||||
|
|
||||||
if (prev) {
|
|
||||||
prev.next = this
|
|
||||||
this.prev = prev
|
|
||||||
} else {
|
|
||||||
this.prev = null
|
|
||||||
}
|
|
||||||
|
|
||||||
if (next) {
|
|
||||||
next.prev = this
|
|
||||||
this.next = next
|
|
||||||
} else {
|
|
||||||
this.next = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// add if support for Symbol.iterator is present
|
|
||||||
__nccwpck_require__(5327)(Yallist)
|
|
||||||
} catch (er) {}
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 9380:
|
/***/ 9380:
|
||||||
@ -102872,6 +102142,8 @@ function run() {
|
|||||||
if (registryUrl) {
|
if (registryUrl) {
|
||||||
auth.configAuthentication(registryUrl, alwaysAuth);
|
auth.configAuthentication(registryUrl, alwaysAuth);
|
||||||
}
|
}
|
||||||
|
const corepack = core.getInput('corepack') || 'false';
|
||||||
|
yield (0, util_1.enableCorepack)(corepack);
|
||||||
if (cache && (0, cache_utils_1.isCacheFeatureAvailable)()) {
|
if (cache && (0, cache_utils_1.isCacheFeatureAvailable)()) {
|
||||||
core.saveState(constants_1.State.CachePackageManager, cache);
|
core.saveState(constants_1.State.CachePackageManager, cache);
|
||||||
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
||||||
@ -102955,12 +102227,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.unique = exports.printEnvDetailsAndSetOutput = exports.getNodeVersionFromFile = void 0;
|
exports.enableCorepack = exports.unique = exports.printEnvDetailsAndSetOutput = exports.getNodeVersionFromFile = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
const exec = __importStar(__nccwpck_require__(1514));
|
const exec = __importStar(__nccwpck_require__(1514));
|
||||||
const io = __importStar(__nccwpck_require__(7436));
|
const io = __importStar(__nccwpck_require__(7436));
|
||||||
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
const fs_1 = __importDefault(__nccwpck_require__(7147));
|
||||||
const path_1 = __importDefault(__nccwpck_require__(1017));
|
const path_1 = __importDefault(__nccwpck_require__(1017));
|
||||||
|
const cache_utils_1 = __nccwpck_require__(1678);
|
||||||
function getNodeVersionFromFile(versionFilePath) {
|
function getNodeVersionFromFile(versionFilePath) {
|
||||||
var _a, _b, _c, _d, _e;
|
var _a, _b, _c, _d, _e;
|
||||||
if (!fs_1.default.existsSync(versionFilePath)) {
|
if (!fs_1.default.existsSync(versionFilePath)) {
|
||||||
@ -103053,6 +102326,19 @@ const unique = () => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
exports.unique = unique;
|
exports.unique = unique;
|
||||||
|
function enableCorepack(input) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
if (input.length && input !== 'false') {
|
||||||
|
const corepackArgs = ['enable'];
|
||||||
|
if (input !== 'true') {
|
||||||
|
const packageManagers = input.split(' ');
|
||||||
|
corepackArgs.push(...packageManagers);
|
||||||
|
}
|
||||||
|
yield (0, cache_utils_1.getCommandOutput)(`corepack ${corepackArgs.join(' ')}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.enableCorepack = enableCorepack;
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|||||||
@ -159,7 +159,7 @@ jobs:
|
|||||||
|
|
||||||
## Nightly versions
|
## Nightly versions
|
||||||
|
|
||||||
You can specify a nightly version to download it from https://nodejs.org/download/nightly.
|
You can specify a nightly version to download it from https://nodejs.org/download/nightly.
|
||||||
|
|
||||||
### Install the nightly build for a major version
|
### Install the nightly build for a major version
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ steps:
|
|||||||
- run: pnpm test
|
- run: pnpm test
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note**: By default `--frozen-lockfile` option is passed starting from pnpm `6.10.x`. It will be automatically added if you run it on [CI](https://pnpm.io/cli/install#--frozen-lockfile).
|
> **Note**: By default `--frozen-lockfile` option is passed starting from pnpm `6.10.x`. It will be automatically added if you run it on [CI](https://pnpm.io/cli/install#--frozen-lockfile).
|
||||||
> If the `pnpm-lock.yaml` file changes then pass `--frozen-lockfile` option.
|
> If the `pnpm-lock.yaml` file changes then pass `--frozen-lockfile` option.
|
||||||
|
|
||||||
|
|
||||||
@ -418,3 +418,30 @@ Please refer to the [Ensuring workflow access to your package - Configuring a pa
|
|||||||
|
|
||||||
### always-auth input
|
### always-auth input
|
||||||
The always-auth input sets `always-auth=true` in .npmrc file. With this option set [npm](https://docs.npmjs.com/cli/v6/using-npm/config#always-auth)/yarn sends the authentication credentials when making a request to the registries.
|
The always-auth input sets `always-auth=true` in .npmrc file. With this option set [npm](https://docs.npmjs.com/cli/v6/using-npm/config#always-auth)/yarn sends the authentication credentials when making a request to the registries.
|
||||||
|
|
||||||
|
## Enabling Corepack
|
||||||
|
You can enable [Corepack](https://github.com/nodejs/corepack) by using the `corepack` input. You can then use `pnpm` and `yarn` commands in your project.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '18.x'
|
||||||
|
corepack: true
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --immutable
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also pass package manager names separated by a space to enable corepack for specific package managers only.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: '18.x'
|
||||||
|
corepack: yarn pnpm
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --immutable
|
||||||
|
```
|
||||||
|
|||||||
43
package-lock.json
generated
43
package-lock.json
generated
@ -10,18 +10,18 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^4.0.0",
|
"@actions/cache": "^4.0.0",
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^1.1.0",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^5.1.1",
|
"@actions/github": "^5.1.1",
|
||||||
"@actions/glob": "^0.4.0",
|
"@actions/glob": "^0.4.0",
|
||||||
"@actions/http-client": "^2.2.1",
|
"@actions/http-client": "^2.2.1",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.0.2",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^2.0.1",
|
||||||
"semver": "^7.6.0",
|
"semver": "^7.6.3",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.12",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^20.11.25",
|
"@types/node": "^20.11.25",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
||||||
@ -88,6 +88,7 @@
|
|||||||
"version": "1.11.1",
|
"version": "1.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz",
|
||||||
"integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==",
|
"integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/http-client": "^2.0.1"
|
"@actions/http-client": "^2.0.1"
|
||||||
@ -97,6 +98,7 @@
|
|||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz",
|
||||||
"integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
|
"integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/io": "^1.0.1"
|
"@actions/io": "^1.0.1"
|
||||||
}
|
}
|
||||||
@ -1853,10 +1855,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/jest": {
|
"node_modules/@types/jest": {
|
||||||
"version": "29.5.12",
|
"version": "29.5.14",
|
||||||
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
|
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
|
||||||
"integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
|
"integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"expect": "^29.0.0",
|
"expect": "^29.0.0",
|
||||||
"pretty-format": "^29.0.0"
|
"pretty-format": "^29.0.0"
|
||||||
@ -5174,12 +5177,10 @@
|
|||||||
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
|
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.6.0",
|
"version": "7.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
|
||||||
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
|
"integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
|
||||||
"dependencies": {
|
"license": "ISC",
|
||||||
"lru-cache": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
},
|
},
|
||||||
@ -5187,22 +5188,6 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/semver/node_modules/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==",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/semver/node_modules/yallist": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
|
||||||
},
|
|
||||||
"node_modules/shebang-command": {
|
"node_modules/shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
|
|||||||
@ -26,18 +26,18 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^4.0.0",
|
"@actions/cache": "^4.0.0",
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/exec": "^1.1.0",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/github": "^5.1.1",
|
"@actions/github": "^5.1.1",
|
||||||
"@actions/glob": "^0.4.0",
|
"@actions/glob": "^0.4.0",
|
||||||
"@actions/http-client": "^2.2.1",
|
"@actions/http-client": "^2.2.1",
|
||||||
"@actions/io": "^1.0.2",
|
"@actions/io": "^1.0.2",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^2.0.1",
|
||||||
"semver": "^7.6.0",
|
"semver": "^7.6.3",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^9.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.12",
|
"@types/jest": "^29.5.14",
|
||||||
"@types/node": "^20.11.25",
|
"@types/node": "^20.11.25",
|
||||||
"@types/semver": "^7.5.8",
|
"@types/semver": "^7.5.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
||||||
|
|||||||
@ -7,7 +7,11 @@ import * as path from 'path';
|
|||||||
import {restoreCache} from './cache-restore';
|
import {restoreCache} from './cache-restore';
|
||||||
import {isCacheFeatureAvailable} from './cache-utils';
|
import {isCacheFeatureAvailable} from './cache-utils';
|
||||||
import {getNodejsDistribution} from './distributions/installer-factory';
|
import {getNodejsDistribution} from './distributions/installer-factory';
|
||||||
import {getNodeVersionFromFile, printEnvDetailsAndSetOutput} from './util';
|
import {
|
||||||
|
getNodeVersionFromFile,
|
||||||
|
printEnvDetailsAndSetOutput,
|
||||||
|
enableCorepack
|
||||||
|
} from './util';
|
||||||
import {State} from './constants';
|
import {State} from './constants';
|
||||||
|
|
||||||
export async function run() {
|
export async function run() {
|
||||||
@ -59,6 +63,9 @@ export async function run() {
|
|||||||
auth.configAuthentication(registryUrl, alwaysAuth);
|
auth.configAuthentication(registryUrl, alwaysAuth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const corepack = core.getInput('corepack') || 'false';
|
||||||
|
await enableCorepack(corepack);
|
||||||
|
|
||||||
if (cache && isCacheFeatureAvailable()) {
|
if (cache && isCacheFeatureAvailable()) {
|
||||||
core.saveState(State.CachePackageManager, cache);
|
core.saveState(State.CachePackageManager, cache);
|
||||||
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
const cacheDependencyPath = core.getInput('cache-dependency-path');
|
||||||
|
|||||||
12
src/util.ts
12
src/util.ts
@ -4,6 +4,7 @@ import * as io from '@actions/io';
|
|||||||
|
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import {getCommandOutput} from './cache-utils';
|
||||||
|
|
||||||
export function getNodeVersionFromFile(versionFilePath: string): string | null {
|
export function getNodeVersionFromFile(versionFilePath: string): string | null {
|
||||||
if (!fs.existsSync(versionFilePath)) {
|
if (!fs.existsSync(versionFilePath)) {
|
||||||
@ -106,3 +107,14 @@ export const unique = () => {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export async function enableCorepack(input: string): Promise<void> {
|
||||||
|
if (input.length && input !== 'false') {
|
||||||
|
const corepackArgs = ['enable'];
|
||||||
|
if (input !== 'true') {
|
||||||
|
const packageManagers = input.split(' ');
|
||||||
|
corepackArgs.push(...packageManagers);
|
||||||
|
}
|
||||||
|
await getCommandOutput(`corepack ${corepackArgs.join(' ')}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user