feat: support cache type bun
Signed-off-by: Jan van den Berg <koozz@linux.com>
This commit is contained in:
parent
c2ac33f2c6
commit
79cae9176d
26
README.md
26
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
|
||||||
|
|
@ -52,23 +52,23 @@ See [action.yml](action.yml)
|
||||||
# Default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
# Default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
||||||
token: ''
|
token: ''
|
||||||
|
|
||||||
# Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm.
|
# Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm, bun.
|
||||||
# Package manager should be pre-installed
|
# Package manager should be pre-installed
|
||||||
# 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: ''
|
||||||
|
|
@ -120,7 +120,7 @@ It's **always** recommended to commit the lockfile of your package manager for s
|
||||||
|
|
||||||
## Caching global packages data
|
## Caching global packages data
|
||||||
|
|
||||||
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under the hood for caching global packages data but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+). The `cache` input is optional, and caching is turned off by default.
|
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under the hood for caching global packages data but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+), `bun`. The `cache` input is optional, and caching is turned off by default.
|
||||||
|
|
||||||
The action defaults to search for the dependency file (`package-lock.json`, `npm-shrinkwrap.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
|
The action defaults to search for the dependency file (`package-lock.json`, `npm-shrinkwrap.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ describe('cache-utils', () => {
|
||||||
['npm', utils.supportedPackageManagers.npm],
|
['npm', utils.supportedPackageManagers.npm],
|
||||||
['pnpm', utils.supportedPackageManagers.pnpm],
|
['pnpm', utils.supportedPackageManagers.pnpm],
|
||||||
['yarn', utils.supportedPackageManagers.yarn],
|
['yarn', utils.supportedPackageManagers.yarn],
|
||||||
|
['bun', utils.supportedPackageManagers.bun],
|
||||||
['yarn1', null],
|
['yarn1', null],
|
||||||
['yarn2', null],
|
['yarn2', null],
|
||||||
['npm7', null]
|
['npm7', null]
|
||||||
|
|
|
||||||
|
|
@ -22,13 +22,13 @@ inputs:
|
||||||
description: Used to pull node distributions from node-versions. 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 on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
|
description: Used to pull node distributions from node-versions. 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 on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
|
||||||
default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
default: ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
||||||
cache:
|
cache:
|
||||||
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, bun.'
|
||||||
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, bun.lockb, etc. Supports wildcards or a list of file names for caching multiple dependencies.'
|
||||||
# TODO: add input to control forcing to pull from cloud or dist.
|
# TODO: add input to control forcing to pull from cloud or dist.
|
||||||
# escape valve for someone having issues or needing the absolute latest which isn't cached yet
|
# 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.'
|
||||||
|
|
|
||||||
|
|
@ -83594,6 +83594,11 @@ exports.supportedPackageManagers = {
|
||||||
}
|
}
|
||||||
return stdOut;
|
return stdOut;
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
bun: {
|
||||||
|
name: 'bun',
|
||||||
|
lockFilePatterns: ['bun.lockb'],
|
||||||
|
getCacheFolderPath: () => (0, exports.getCommandOutputNotEmpty)('bun pm cache', 'Could not get bun cache folder path')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
|
const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
|
@ -83625,6 +83630,9 @@ const getPackageManagerInfo = (packageManager) => __awaiter(void 0, void 0, void
|
||||||
else if (packageManager === 'yarn') {
|
else if (packageManager === 'yarn') {
|
||||||
return exports.supportedPackageManagers.yarn;
|
return exports.supportedPackageManagers.yarn;
|
||||||
}
|
}
|
||||||
|
else if (packageManager === 'bun') {
|
||||||
|
return exports.supportedPackageManagers.bun;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -83792,6 +83800,7 @@ var LockType;
|
||||||
LockType["Npm"] = "npm";
|
LockType["Npm"] = "npm";
|
||||||
LockType["Pnpm"] = "pnpm";
|
LockType["Pnpm"] = "pnpm";
|
||||||
LockType["Yarn"] = "yarn";
|
LockType["Yarn"] = "yarn";
|
||||||
|
LockType["Bun"] = "bun";
|
||||||
})(LockType || (exports.LockType = LockType = {}));
|
})(LockType || (exports.LockType = LockType = {}));
|
||||||
var State;
|
var State;
|
||||||
(function (State) {
|
(function (State) {
|
||||||
|
|
|
||||||
|
|
@ -54518,6 +54518,348 @@ function isPlainObject(o) {
|
||||||
exports.isPlainObject = isPlainObject;
|
exports.isPlainObject = isPlainObject;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 7129:
|
||||||
|
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
|
||||||
|
// A linked list to keep track of recently-used-ness
|
||||||
|
const Yallist = __nccwpck_require__(665)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 7426:
|
/***/ 7426:
|
||||||
|
|
@ -59465,7 +59807,7 @@ class Range {
|
||||||
|
|
||||||
module.exports = Range
|
module.exports = Range
|
||||||
|
|
||||||
const LRU = __nccwpck_require__(1196)
|
const LRU = __nccwpck_require__(7129)
|
||||||
const cache = new LRU({ max: 1000 })
|
const cache = new LRU({ max: 1000 })
|
||||||
|
|
||||||
const parseOptions = __nccwpck_require__(785)
|
const parseOptions = __nccwpck_require__(785)
|
||||||
|
|
@ -61004,798 +61346,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:
|
||||||
|
|
@ -92960,6 +92510,456 @@ function wrappy (fn, cb) {
|
||||||
}).call(this);
|
}).call(this);
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 4091:
|
||||||
|
/***/ ((module) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
module.exports = function (Yallist) {
|
||||||
|
Yallist.prototype[Symbol.iterator] = function* () {
|
||||||
|
for (let walker = this.head; walker; walker = walker.next) {
|
||||||
|
yield walker.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 665:
|
||||||
|
/***/ ((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__(4091)(Yallist)
|
||||||
|
} catch (er) {}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 7573:
|
/***/ 7573:
|
||||||
|
|
@ -93215,6 +93215,11 @@ exports.supportedPackageManagers = {
|
||||||
}
|
}
|
||||||
return stdOut;
|
return stdOut;
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
bun: {
|
||||||
|
name: 'bun',
|
||||||
|
lockFilePatterns: ['bun.lockb'],
|
||||||
|
getCacheFolderPath: () => (0, exports.getCommandOutputNotEmpty)('bun pm cache', 'Could not get bun cache folder path')
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
|
const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
|
||||||
|
|
@ -93246,6 +93251,9 @@ const getPackageManagerInfo = (packageManager) => __awaiter(void 0, void 0, void
|
||||||
else if (packageManager === 'yarn') {
|
else if (packageManager === 'yarn') {
|
||||||
return exports.supportedPackageManagers.yarn;
|
return exports.supportedPackageManagers.yarn;
|
||||||
}
|
}
|
||||||
|
else if (packageManager === 'bun') {
|
||||||
|
return exports.supportedPackageManagers.bun;
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
@ -93413,6 +93421,7 @@ var LockType;
|
||||||
LockType["Npm"] = "npm";
|
LockType["Npm"] = "npm";
|
||||||
LockType["Pnpm"] = "pnpm";
|
LockType["Pnpm"] = "pnpm";
|
||||||
LockType["Yarn"] = "yarn";
|
LockType["Yarn"] = "yarn";
|
||||||
|
LockType["Bun"] = "bun";
|
||||||
})(LockType || (exports.LockType = LockType = {}));
|
})(LockType || (exports.LockType = LockType = {}));
|
||||||
var State;
|
var State;
|
||||||
(function (State) {
|
(function (State) {
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ interface SupportedPackageManagers {
|
||||||
npm: PackageManagerInfo;
|
npm: PackageManagerInfo;
|
||||||
pnpm: PackageManagerInfo;
|
pnpm: PackageManagerInfo;
|
||||||
yarn: PackageManagerInfo;
|
yarn: PackageManagerInfo;
|
||||||
|
bun: PackageManagerInfo;
|
||||||
}
|
}
|
||||||
export const supportedPackageManagers: SupportedPackageManagers = {
|
export const supportedPackageManagers: SupportedPackageManagers = {
|
||||||
npm: {
|
npm: {
|
||||||
|
|
@ -63,6 +64,15 @@ export const supportedPackageManagers: SupportedPackageManagers = {
|
||||||
}
|
}
|
||||||
return stdOut;
|
return stdOut;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
bun: {
|
||||||
|
name: 'bun',
|
||||||
|
lockFilePatterns: ['bun.lockb'],
|
||||||
|
getCacheFolderPath: () =>
|
||||||
|
getCommandOutputNotEmpty(
|
||||||
|
'bun pm cache',
|
||||||
|
'Could not get bun cache folder path'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -105,6 +115,8 @@ export const getPackageManagerInfo = async (packageManager: string) => {
|
||||||
return supportedPackageManagers.pnpm;
|
return supportedPackageManagers.pnpm;
|
||||||
} else if (packageManager === 'yarn') {
|
} else if (packageManager === 'yarn') {
|
||||||
return supportedPackageManagers.yarn;
|
return supportedPackageManagers.yarn;
|
||||||
|
} else if (packageManager === 'bun') {
|
||||||
|
return supportedPackageManagers.bun;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
export enum LockType {
|
export enum LockType {
|
||||||
Npm = 'npm',
|
Npm = 'npm',
|
||||||
Pnpm = 'pnpm',
|
Pnpm = 'pnpm',
|
||||||
Yarn = 'yarn'
|
Yarn = 'yarn',
|
||||||
|
Bun = 'bun'
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum State {
|
export enum State {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue