npm-check-updates 20.0.2 → 21.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -8
- package/build/chunks/p-map-DaKUJ_MH.js +109 -0
- package/build/chunks/p-map-DaKUJ_MH.js.map +1 -0
- package/build/chunks/p-map-iLLJQmmj.cjs +3 -0
- package/build/chunks/p-map-iLLJQmmj.cjs.map +1 -0
- package/build/cli.cjs +67 -0
- package/build/cli.cjs.map +1 -0
- package/build/cli.js +6079 -29
- package/build/cli.js.map +1 -1
- package/build/index.cjs +783 -0
- package/build/index.cjs.map +1 -0
- package/build/index.js +40593 -758
- package/build/index.js.map +1 -1
- package/package.json +79 -84
- package/build/index-B-xDFGsq.js +0 -2
- package/build/index-B-xDFGsq.js.map +0 -1
- package/build/index-Bl96b__P.js +0 -6
- package/build/index-Bl96b__P.js.map +0 -1
- package/build/index-CG9irf3b.js +0 -2
- package/build/index-CG9irf3b.js.map +0 -1
- package/build/index-D8bKSgSs.js +0 -35
- package/build/index-D8bKSgSs.js.map +0 -1
package/README.md
CHANGED
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
- sensible defaults, but highly customizable
|
|
11
11
|
- compatible with npm, yarn, pnpm, deno, and bun
|
|
12
12
|
- CLI and module usage
|
|
13
|
+
- **Pure ESM** architecture with dual-build support (ESM/CJS)
|
|
14
|
+
|
|
15
|
+
> ## ⚠️ v21.0.0 Breaking Changes (ESM Migration)
|
|
16
|
+
>
|
|
17
|
+
> `npm-check-updates` is now a dual ESM/CJS module. If you use a `.ncurc.js` config or programmatic imports,
|
|
18
|
+
> please see the [ESM Migration Guide in the CHANGELOG](CHANGELOG.md#migration-guide) for required updates.
|
|
13
19
|
|
|
14
20
|
<img width="500" alt="example output" src="https://github.com/user-attachments/assets/4808618b-ac20-4fc0-92e0-a777de70a2b6">
|
|
15
21
|
|
|
@@ -17,6 +23,13 @@ $${\color{red}Red}$$ major upgrade (and all [major version zero](https://semver.
|
|
|
17
23
|
$${\color{cyan}Cyan}$$ minor upgrade<br/>
|
|
18
24
|
$${\color{green}Green}$$ patch upgrade<br/>
|
|
19
25
|
|
|
26
|
+
## Requirements
|
|
27
|
+
|
|
28
|
+
- **Node.js:** `^20.19.0 || ^22.12.0 || >=24.0.0`
|
|
29
|
+
- **npm:** `>=10.0.0`
|
|
30
|
+
|
|
31
|
+
> npm-check-updates v21+ requires modern Node.js and npm versions to support native ESM and Vite 8's Rolldown bundler.
|
|
32
|
+
|
|
20
33
|
## Installation
|
|
21
34
|
|
|
22
35
|
Install globally to use `npm-check-updates` or the shorter `ncu`:
|
|
@@ -912,19 +925,24 @@ You can also specify a custom config file name or path using the `--configFileNa
|
|
|
912
925
|
|
|
913
926
|
### Config Functions
|
|
914
927
|
|
|
915
|
-
Some options offer more advanced configuration using a function definition. These include [filter](https://github.com/raineorshine/npm-check-updates#filter), [filterVersion](https://github.com/raineorshine/npm-check-updates#filterversion), [filterResults](https://github.com/raineorshine/npm-check-updates#filterresults), [reject](https://github.com/raineorshine/npm-check-updates#reject), [rejectVersion](https://github.com/raineorshine/npm-check-updates#rejectversion), and [groupFunction](https://github.com/raineorshine/npm-check-updates#groupfunction). To define
|
|
928
|
+
Some options offer more advanced configuration using a function definition. These include [filter](https://github.com/raineorshine/npm-check-updates#filter), [filterVersion](https://github.com/raineorshine/npm-check-updates#filterversion), [filterResults](https://github.com/raineorshine/npm-check-updates#filterresults), [reject](https://github.com/raineorshine/npm-check-updates#reject), [rejectVersion](https://github.com/raineorshine/npm-check-updates#rejectversion), and [groupFunction](https://github.com/raineorshine/npm-check-updates#groupfunction). To define these, use a JavaScript-based configuration file.
|
|
929
|
+
|
|
930
|
+
#### ESM (Recommended)
|
|
916
931
|
|
|
917
|
-
|
|
932
|
+
Rename your config to `.ncurc.js` (if using `"type": "module"`) or `.ncurc.mjs`.
|
|
918
933
|
|
|
919
934
|
```js
|
|
920
|
-
|
|
921
|
-
|
|
935
|
+
import { defineConfig } from 'npm-check-updates'
|
|
936
|
+
|
|
937
|
+
export default defineConfig({
|
|
922
938
|
upgrade: true,
|
|
923
939
|
filter: name => name.startsWith('@myorg/'),
|
|
924
|
-
}
|
|
940
|
+
})
|
|
925
941
|
```
|
|
926
942
|
|
|
927
|
-
|
|
943
|
+
#### CommonJS
|
|
944
|
+
|
|
945
|
+
Use the `.ncurc.cjs` extension or a standard `.ncurc.js` file (if useing `"type": "commonjs"`).
|
|
928
946
|
|
|
929
947
|
```js
|
|
930
948
|
const { defineConfig } = require('npm-check-updates')
|
|
@@ -935,6 +953,28 @@ module.exports = defineConfig({
|
|
|
935
953
|
})
|
|
936
954
|
```
|
|
937
955
|
|
|
956
|
+
Alternatively, if you prefer not to use the helper, you can use JSDoc for IntelliSense:
|
|
957
|
+
|
|
958
|
+
#### ESM (JSDoc)
|
|
959
|
+
|
|
960
|
+
```js
|
|
961
|
+
/** @type {import('npm-check-updates').RcOptions} */
|
|
962
|
+
export default {
|
|
963
|
+
upgrade: true,
|
|
964
|
+
filter: name => name.startsWith('@myorg/'),
|
|
965
|
+
}
|
|
966
|
+
```
|
|
967
|
+
|
|
968
|
+
#### CommonJS (JSDoc)
|
|
969
|
+
|
|
970
|
+
```js
|
|
971
|
+
/** @type {import('npm-check-updates').RcOptions} */
|
|
972
|
+
module.exports = {
|
|
973
|
+
upgrade: true,
|
|
974
|
+
filter: name => name.startsWith('@myorg/'),
|
|
975
|
+
}
|
|
976
|
+
```
|
|
977
|
+
|
|
938
978
|
### JSON Schema
|
|
939
979
|
|
|
940
980
|
If you write `.ncurc` config files using json or yaml, you can add the JSON Schema to your IDE settings for completions.
|
|
@@ -960,10 +1000,14 @@ e.g. for VS Code:
|
|
|
960
1000
|
|
|
961
1001
|
## Module/Programmatic Usage
|
|
962
1002
|
|
|
963
|
-
npm-check-updates can be imported as a module
|
|
1003
|
+
`npm-check-updates` can be imported as a module in both ESM and CommonJS environments.
|
|
1004
|
+
|
|
1005
|
+
### ESM (Recommended)
|
|
1006
|
+
|
|
1007
|
+
Use this for modern projects using `"type": "module"` in `package.json` or `.mjs` files.
|
|
964
1008
|
|
|
965
1009
|
```js
|
|
966
|
-
import ncu from 'npm-check-updates'
|
|
1010
|
+
import * as ncu from 'npm-check-updates'
|
|
967
1011
|
|
|
968
1012
|
const upgraded = await ncu.run({
|
|
969
1013
|
// Pass any cli option
|
|
@@ -977,6 +1021,24 @@ const upgraded = await ncu.run({
|
|
|
977
1021
|
console.log(upgraded) // { "mypackage": "^2.0.0", ... }
|
|
978
1022
|
```
|
|
979
1023
|
|
|
1024
|
+
### CommonJS
|
|
1025
|
+
|
|
1026
|
+
Use this for legacy projects using `"type": "commonjs"` or scripts using the `.cjs` extension.
|
|
1027
|
+
|
|
1028
|
+
```js
|
|
1029
|
+
const ncu = require('npm-check-updates')
|
|
1030
|
+
|
|
1031
|
+
// Since ncu.run() is an async function
|
|
1032
|
+
ncu
|
|
1033
|
+
.run({
|
|
1034
|
+
packageFile: './package.json',
|
|
1035
|
+
upgrade: true,
|
|
1036
|
+
})
|
|
1037
|
+
.then(upgraded => {
|
|
1038
|
+
console.log(upgraded)
|
|
1039
|
+
})
|
|
1040
|
+
```
|
|
1041
|
+
|
|
980
1042
|
## Contributing
|
|
981
1043
|
|
|
982
1044
|
Contributions are happily accepted. I respond to all PR's and can offer guidance on where to make changes. For contributing tips see [CONTRIBUTING.md](https://github.com/raineorshine/npm-check-updates/blob/main/.github/CONTRIBUTING.md).
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { createRequire as N } from "node:module";
|
|
2
|
+
var T = Object.create, v = Object.defineProperty, R = Object.getOwnPropertyDescriptor, q = Object.getOwnPropertyNames, A = Object.getPrototypeOf, h = Object.prototype.hasOwnProperty, D = (e, t) => () => (e && (t = e(e = 0)), t), F = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports), L = (e, t) => {
|
|
3
|
+
let r = {};
|
|
4
|
+
for (var s in e)
|
|
5
|
+
v(r, s, {
|
|
6
|
+
get: e[s],
|
|
7
|
+
enumerable: !0
|
|
8
|
+
});
|
|
9
|
+
return t || v(r, Symbol.toStringTag, { value: "Module" }), r;
|
|
10
|
+
}, M = (e, t, r, s) => {
|
|
11
|
+
if (t && typeof t == "object" || typeof t == "function")
|
|
12
|
+
for (var a = q(t), l = 0, w = a.length, o; l < w; l++)
|
|
13
|
+
o = a[l], !h.call(e, o) && o !== r && v(e, o, {
|
|
14
|
+
get: ((c) => t[c]).bind(null, o),
|
|
15
|
+
enumerable: !(s = R(t, o)) || s.enumerable
|
|
16
|
+
});
|
|
17
|
+
return e;
|
|
18
|
+
}, J = (e, t, r) => (r = e != null ? T(A(e)) : {}, M(t || !e || !e.__esModule ? v(r, "default", {
|
|
19
|
+
value: e,
|
|
20
|
+
enumerable: !0
|
|
21
|
+
}) : r, e)), V = (e) => h.call(e, "module.exports") ? e["module.exports"] : M(v({}, "__esModule", { value: !0 }), e), Y = /* @__PURE__ */ N(import.meta.url), z = /* @__PURE__ */ L({
|
|
22
|
+
default: () => $,
|
|
23
|
+
pMapSkip: () => y
|
|
24
|
+
});
|
|
25
|
+
async function $(e, t, { concurrency: r = Number.POSITIVE_INFINITY, stopOnError: s = !0, signal: a } = {}) {
|
|
26
|
+
return new Promise((l, w) => {
|
|
27
|
+
if (e[Symbol.iterator] === void 0 && e[Symbol.asyncIterator] === void 0) throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof e})`);
|
|
28
|
+
if (typeof t != "function") throw new TypeError("Mapper function is required");
|
|
29
|
+
if (!(Number.isSafeInteger(r) && r >= 1 || r === Number.POSITIVE_INFINITY)) throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${r}\` (${typeof r})`);
|
|
30
|
+
const o = [], c = [], I = /* @__PURE__ */ new Map();
|
|
31
|
+
let x = !1, f = !1, m = !1, b = 0, g = 0;
|
|
32
|
+
const E = e[Symbol.iterator] === void 0 ? e[Symbol.asyncIterator]() : e[Symbol.iterator](), S = () => {
|
|
33
|
+
u(a.reason);
|
|
34
|
+
}, O = () => {
|
|
35
|
+
a?.removeEventListener("abort", S);
|
|
36
|
+
}, P = (n) => {
|
|
37
|
+
l(n), O();
|
|
38
|
+
}, u = (n) => {
|
|
39
|
+
x = !0, f = !0, w(n), O();
|
|
40
|
+
};
|
|
41
|
+
a && (a.aborted && u(a.reason), a.addEventListener("abort", S, { once: !0 }));
|
|
42
|
+
const d = async () => {
|
|
43
|
+
if (f) return;
|
|
44
|
+
const n = await E.next(), _ = g;
|
|
45
|
+
if (g++, n.done) {
|
|
46
|
+
if (m = !0, b === 0 && !f) {
|
|
47
|
+
if (!s && c.length > 0) {
|
|
48
|
+
u(new AggregateError(c));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (f = !0, I.size === 0) {
|
|
52
|
+
P(o);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const i = [];
|
|
56
|
+
for (const [p, j] of o.entries())
|
|
57
|
+
I.get(p) !== y && i.push(j);
|
|
58
|
+
P(i);
|
|
59
|
+
}
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
b++, (async () => {
|
|
63
|
+
try {
|
|
64
|
+
const i = await n.value;
|
|
65
|
+
if (f) return;
|
|
66
|
+
const p = await t(i, _);
|
|
67
|
+
p === y && I.set(_, p), o[_] = p, b--, await d();
|
|
68
|
+
} catch (i) {
|
|
69
|
+
if (s) u(i);
|
|
70
|
+
else {
|
|
71
|
+
c.push(i), b--;
|
|
72
|
+
try {
|
|
73
|
+
await d();
|
|
74
|
+
} catch (p) {
|
|
75
|
+
u(p);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
})();
|
|
80
|
+
};
|
|
81
|
+
(async () => {
|
|
82
|
+
for (let n = 0; n < r; n++) {
|
|
83
|
+
try {
|
|
84
|
+
await d();
|
|
85
|
+
} catch (_) {
|
|
86
|
+
u(_);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (m || x) break;
|
|
90
|
+
}
|
|
91
|
+
})();
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
var y, k = D((() => {
|
|
95
|
+
y = /* @__PURE__ */ Symbol("skip");
|
|
96
|
+
}));
|
|
97
|
+
export {
|
|
98
|
+
D as a,
|
|
99
|
+
V as c,
|
|
100
|
+
F as i,
|
|
101
|
+
J as l,
|
|
102
|
+
$ as n,
|
|
103
|
+
L as o,
|
|
104
|
+
z as r,
|
|
105
|
+
Y as s,
|
|
106
|
+
k as t
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
//# sourceMappingURL=p-map-DaKUJ_MH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-map-DaKUJ_MH.js","names":[],"sources":["../../node_modules/p-map/index.js"],"sourcesContent":["export default async function pMap(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tstopOnError = true,\n\t\tsignal,\n\t} = {},\n) {\n\treturn new Promise((resolve_, reject_) => {\n\t\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t\t}\n\n\t\tif (typeof mapper !== 'function') {\n\t\t\tthrow new TypeError('Mapper function is required');\n\t\t}\n\n\t\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t\t}\n\n\t\tconst result = [];\n\t\tconst errors = [];\n\t\tconst skippedIndexesMap = new Map();\n\t\tlet isRejected = false;\n\t\tlet isResolved = false;\n\t\tlet isIterableDone = false;\n\t\tlet resolvingCount = 0;\n\t\tlet currentIndex = 0;\n\t\tconst iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n\t\tconst signalListener = () => {\n\t\t\treject(signal.reason);\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener('abort', signalListener);\n\t\t};\n\n\t\tconst resolve = value => {\n\t\t\tresolve_(value);\n\t\t\tcleanup();\n\t\t};\n\n\t\tconst reject = reason => {\n\t\t\tisRejected = true;\n\t\t\tisResolved = true;\n\t\t\treject_(reason);\n\t\t\tcleanup();\n\t\t};\n\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(signal.reason);\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', signalListener, {once: true});\n\t\t}\n\n\t\tconst next = async () => {\n\t\t\tif (isResolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextItem = await iterator.next();\n\n\t\t\tconst index = currentIndex;\n\t\t\tcurrentIndex++;\n\n\t\t\t// Note: `iterator.next()` can be called many times in parallel.\n\t\t\t// This can cause multiple calls to this `next()` function to\n\t\t\t// receive a `nextItem` with `done === true`.\n\t\t\t// The shutdown logic that rejects/resolves must be protected\n\t\t\t// so it runs only one time as the `skippedIndex` logic is\n\t\t\t// non-idempotent.\n\t\t\tif (nextItem.done) {\n\t\t\t\tisIterableDone = true;\n\n\t\t\t\tif (resolvingCount === 0 && !isResolved) {\n\t\t\t\t\tif (!stopOnError && errors.length > 0) {\n\t\t\t\t\t\treject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tisResolved = true;\n\n\t\t\t\t\tif (skippedIndexesMap.size === 0) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pureResult = [];\n\n\t\t\t\t\t// Support multiple `pMapSkip`'s.\n\t\t\t\t\tfor (const [index, value] of result.entries()) {\n\t\t\t\t\t\tif (skippedIndexesMap.get(index) === pMapSkip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpureResult.push(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(pureResult);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolvingCount++;\n\n\t\t\t// Intentionally detached\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst element = await nextItem.value;\n\n\t\t\t\t\tif (isResolved) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = await mapper(element, index);\n\n\t\t\t\t\t// Use Map to stage the index of the element.\n\t\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\t\tskippedIndexesMap.set(index, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index] = value;\n\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (stopOnError) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors.push(error);\n\t\t\t\t\t\tresolvingCount--;\n\n\t\t\t\t\t\t// In that case we can't really continue regardless of `stopOnError` state\n\t\t\t\t\t\t// since an iterable is likely to continue throwing after it throws once.\n\t\t\t\t\t\t// If we continue calling `next()` indefinitely we will likely end up\n\t\t\t\t\t\t// in an infinite loop of failed iteration.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait next();\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\n\t\t// Create the concurrent runners in a detached (non-awaited)\n\t\t// promise. We need this so we can await the `next()` calls\n\t\t// to stop creating runners before hitting the concurrency limit\n\t\t// if the iterable has already been marked as done.\n\t\t// NOTE: We *must* do this for async iterators otherwise we'll spin up\n\t\t// infinite `next()` calls by default and never start the event loop.\n\t\t(async () => {\n\t\t\tfor (let index = 0; index < concurrency; index++) {\n\t\t\t\ttry {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (isIterableDone || isRejected) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t});\n}\n\nexport function pMapIterable(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tbackpressure = concurrency,\n\t} = {},\n) {\n\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t}\n\n\tif (typeof mapper !== 'function') {\n\t\tthrow new TypeError('Mapper function is required');\n\t}\n\n\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t}\n\n\tif (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`backpressure\\` to be an integer from \\`concurrency\\` (${concurrency}) and up or \\`Infinity\\`, got \\`${backpressure}\\` (${typeof backpressure})`);\n\t}\n\n\treturn {\n\t\tasync * [Symbol.asyncIterator]() {\n\t\t\tconst iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n\t\t\tconst promises = [];\n\t\t\tlet pendingPromisesCount = 0;\n\t\t\tlet isDone = false;\n\t\t\tlet index = 0;\n\n\t\t\tfunction trySpawn() {\n\t\t\t\tif (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpendingPromisesCount++;\n\n\t\t\t\tconst promise = (async () => {\n\t\t\t\t\tconst {done, value} = await iterator.next();\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\treturn {done: true};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Spawn if still below concurrency and backpressure limit\n\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst returnValue = await mapper(await value, index++);\n\n\t\t\t\t\t\tpendingPromisesCount--;\n\n\t\t\t\t\t\tif (returnValue === pMapSkip) {\n\t\t\t\t\t\t\tconst index = promises.indexOf(promise);\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tpromises.splice(index, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Spawn if still below backpressure limit and just dropped below concurrency limit\n\t\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\t\treturn {done: false, value: returnValue};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\tisDone = true;\n\t\t\t\t\t\treturn {error};\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\tpromises.push(promise);\n\t\t\t}\n\n\t\t\ttrySpawn();\n\n\t\t\twhile (promises.length > 0) {\n\t\t\t\tconst {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop\n\n\t\t\t\tpromises.shift();\n\n\t\t\t\tif (error) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (done) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Spawn if just dropped below backpressure limit and below the concurrency limit\n\t\t\t\ttrySpawn();\n\n\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield value;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport const pMapSkip = Symbol('skip');\n"],"x_google_ignoreList":[0],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,eAA8B,EAC7B,GACA,GACA,EACC,aAAA,IAAc,OAAO,mBACrB,aAAA,IAAc,IACd,QAAA,EAAA,IACG,CAAA,GACH;AACD,SAAO,IAAI,QAAA,CAAS,GAAU,MAAY;AACzC,QAAI,EAAS,OAAO,QAAA,MAAc,UAAa,EAAS,OAAO,aAAA,MAAmB,OACjF,OAAM,IAAI,UAAU,8EAA8E,OAAO,CAAA,GAAS;AAGnH,QAAI,OAAO,KAAW,WACrB,OAAM,IAAI,UAAU,6BAAA;AAGrB,QAAI,EAAG,OAAO,cAAc,CAAA,KAAgB,KAAe,KAAM,MAAgB,OAAO,mBACvF,OAAM,IAAI,UAAU,kFAAkF,CAAA,OAAkB,OAAO,CAAA,GAAY;AAG5I,UAAM,IAAS,CAAA,GACT,IAAS,CAAA,GACT,IAAoB,oBAAI,IAAA;AAC9B,QAAI,IAAa,IACb,IAAa,IACb,IAAiB,IACjB,IAAiB,GACjB,IAAe;AACnB,UAAM,IAAW,EAAS,OAAO,QAAA,MAAc,SAAY,EAAS,OAAO,aAAA,EAAA,IAAmB,EAAS,OAAO,QAAA,EAAA,GAExG,IAAA,MAAuB;AAC5B,MAAA,EAAO,EAAO,MAAA;AAAA,OAGT,IAAA,MAAgB;AACrB,MAAA,GAAQ,oBAAoB,SAAS,CAAA;AAAA,OAGhC,IAAA,CAAU,MAAS;AACxB,MAAA,EAAS,CAAA,GACT,EAAA;AAAA,OAGK,IAAA,CAAS,MAAU;AACxB,MAAA,IAAa,IACb,IAAa,IACb,EAAQ,CAAA,GACR,EAAA;AAAA;AAGD,IAAI,MACC,EAAO,WACV,EAAO,EAAO,MAAA,GAGf,EAAO,iBAAiB,SAAS,GAAgB,EAAC,MAAM,GAAA,CAAK;AAG9D,UAAM,IAAO,YAAY;AACxB,UAAI,EACH;AAGD,YAAM,IAAW,MAAM,EAAS,KAAA,GAE1B,IAAQ;AASd,UARA,KAQI,EAAS,MAAM;AAGlB,YAFA,IAAiB,IAEb,MAAmB,KAAK,CAAC,GAAY;AACxC,cAAI,CAAC,KAAe,EAAO,SAAS,GAAG;AACtC,YAAA,EAAO,IAAI,eAAe,CAAA,CAAO;AACjC;AAAA;AAKD,cAFA,IAAa,IAET,EAAkB,SAAS,GAAG;AACjC,YAAA,EAAQ,CAAA;AACR;AAAA;AAGD,gBAAM,IAAa,CAAA;AAGnB,qBAAW,CAAC,GAAO,CAAA,KAAU,EAAO,QAAA;AACnC,YAAI,EAAkB,IAAI,CAAA,MAAW,KAIrC,EAAW,KAAK,CAAA;AAGjB,UAAA,EAAQ,CAAA;AAAA;AAGT;AAAA;AAGD,MAAA,MAGC,YAAY;AACZ,YAAI;AACH,gBAAM,IAAU,MAAM,EAAS;AAE/B,cAAI,EACH;AAGD,gBAAM,IAAQ,MAAM,EAAO,GAAS,CAAA;AAGpC,UAAI,MAAU,KACb,EAAkB,IAAI,GAAO,CAAA,GAG9B,EAAO,CAAA,IAAS,GAEhB,KACA,MAAM,EAAA;AAAA,iBACE,GAAO;AACf,cAAI,EACH,CAAA,EAAO,CAAA;AAAA,eACD;AACN,YAAA,EAAO,KAAK,CAAA,GACZ;AAMA,gBAAI;AACH,oBAAM,EAAA;AAAA,qBACE,GAAO;AACf,cAAA,EAAO,CAAA;AAAA;;;;;AAaZ,KAAC,YAAY;AACZ,eAAS,IAAQ,GAAG,IAAQ,GAAa,KAAS;AACjD,YAAI;AAEH,gBAAM,EAAA;AAAA,iBACE,GAAO;AACf,UAAA,EAAO,CAAA;AACP;AAAA;AAGD,YAAI,KAAkB,EACrB;AAAA;;;;;AAiHQ,EAAA,IAAW,uBAAO,MAAA"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var J=Object.create,b=Object.defineProperty,C=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyNames,L=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty,M=(e,t)=>()=>(e&&(t=e(e=0)),t),R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),h=(e,t)=>{let r={};for(var u in e)b(r,u,{get:e[u],enumerable:!0});return t||b(r,Symbol.toStringTag,{value:"Module"}),r},E=(e,t,r,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(var o=D(t),c=0,m=o.length,n;c<m;c++)n=o[c],!j.call(e,n)&&n!==r&&b(e,n,{get:(l=>t[l]).bind(null,n),enumerable:!(u=C(t,n))||u.enumerable});return e},$=(e,t,r)=>(r=e!=null?J(L(e)):{},E(t||!e||!e.__esModule?b(r,"default",{value:e,enumerable:!0}):r,e)),F=e=>j.call(e,"module.exports")?e["module.exports"]:E(b({},"__esModule",{value:!0}),e),V=h({default:()=>N,pMapSkip:()=>y});async function N(e,t,{concurrency:r=Number.POSITIVE_INFINITY,stopOnError:u=!0,signal:o}={}){return new Promise((c,m)=>{if(e[Symbol.iterator]===void 0&&e[Symbol.asyncIterator]===void 0)throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof e})`);if(typeof t!="function")throw new TypeError("Mapper function is required");if(!(Number.isSafeInteger(r)&&r>=1||r===Number.POSITIVE_INFINITY))throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${r}\` (${typeof r})`);const n=[],l=[],d=new Map;let O=!1,f=!1,P=!1,v=0,w=0;const T=e[Symbol.iterator]===void 0?e[Symbol.asyncIterator]():e[Symbol.iterator](),I=()=>{s(o.reason)},x=()=>{o?.removeEventListener("abort",I)},S=a=>{c(a),x()},s=a=>{O=!0,f=!0,m(a),x()};o&&(o.aborted&&s(o.reason),o.addEventListener("abort",I,{once:!0}));const g=async()=>{if(f)return;const a=await T.next(),_=w;if(w++,a.done){if(P=!0,v===0&&!f){if(!u&&l.length>0){s(new AggregateError(l));return}if(f=!0,d.size===0){S(n);return}const i=[];for(const[p,A]of n.entries())d.get(p)!==y&&i.push(A);S(i)}return}v++,(async()=>{try{const i=await a.value;if(f)return;const p=await t(i,_);p===y&&d.set(_,p),n[_]=p,v--,await g()}catch(i){if(u)s(i);else{l.push(i),v--;try{await g()}catch(p){s(p)}}}})()};(async()=>{for(let a=0;a<r;a++){try{await g()}catch(_){s(_);break}if(P||O)break}})()})}var y,Y=M((()=>{y=Symbol("skip")}));Object.defineProperty(exports,"__commonJSMin",{enumerable:!0,get:function(){return R}});Object.defineProperty(exports,"__esmMin",{enumerable:!0,get:function(){return M}});Object.defineProperty(exports,"__exportAll",{enumerable:!0,get:function(){return h}});Object.defineProperty(exports,"__toCommonJS",{enumerable:!0,get:function(){return F}});Object.defineProperty(exports,"__toESM",{enumerable:!0,get:function(){return $}});Object.defineProperty(exports,"init_p_map",{enumerable:!0,get:function(){return Y}});Object.defineProperty(exports,"pMap",{enumerable:!0,get:function(){return N}});Object.defineProperty(exports,"p_map_exports",{enumerable:!0,get:function(){return V}});
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=p-map-iLLJQmmj.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p-map-iLLJQmmj.cjs","names":[],"sources":["../../node_modules/p-map/index.js"],"sourcesContent":["export default async function pMap(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tstopOnError = true,\n\t\tsignal,\n\t} = {},\n) {\n\treturn new Promise((resolve_, reject_) => {\n\t\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t\t}\n\n\t\tif (typeof mapper !== 'function') {\n\t\t\tthrow new TypeError('Mapper function is required');\n\t\t}\n\n\t\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t\t}\n\n\t\tconst result = [];\n\t\tconst errors = [];\n\t\tconst skippedIndexesMap = new Map();\n\t\tlet isRejected = false;\n\t\tlet isResolved = false;\n\t\tlet isIterableDone = false;\n\t\tlet resolvingCount = 0;\n\t\tlet currentIndex = 0;\n\t\tconst iterator = iterable[Symbol.iterator] === undefined ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\n\t\tconst signalListener = () => {\n\t\t\treject(signal.reason);\n\t\t};\n\n\t\tconst cleanup = () => {\n\t\t\tsignal?.removeEventListener('abort', signalListener);\n\t\t};\n\n\t\tconst resolve = value => {\n\t\t\tresolve_(value);\n\t\t\tcleanup();\n\t\t};\n\n\t\tconst reject = reason => {\n\t\t\tisRejected = true;\n\t\t\tisResolved = true;\n\t\t\treject_(reason);\n\t\t\tcleanup();\n\t\t};\n\n\t\tif (signal) {\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(signal.reason);\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', signalListener, {once: true});\n\t\t}\n\n\t\tconst next = async () => {\n\t\t\tif (isResolved) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst nextItem = await iterator.next();\n\n\t\t\tconst index = currentIndex;\n\t\t\tcurrentIndex++;\n\n\t\t\t// Note: `iterator.next()` can be called many times in parallel.\n\t\t\t// This can cause multiple calls to this `next()` function to\n\t\t\t// receive a `nextItem` with `done === true`.\n\t\t\t// The shutdown logic that rejects/resolves must be protected\n\t\t\t// so it runs only one time as the `skippedIndex` logic is\n\t\t\t// non-idempotent.\n\t\t\tif (nextItem.done) {\n\t\t\t\tisIterableDone = true;\n\n\t\t\t\tif (resolvingCount === 0 && !isResolved) {\n\t\t\t\t\tif (!stopOnError && errors.length > 0) {\n\t\t\t\t\t\treject(new AggregateError(errors)); // eslint-disable-line unicorn/error-message\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tisResolved = true;\n\n\t\t\t\t\tif (skippedIndexesMap.size === 0) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pureResult = [];\n\n\t\t\t\t\t// Support multiple `pMapSkip`'s.\n\t\t\t\t\tfor (const [index, value] of result.entries()) {\n\t\t\t\t\t\tif (skippedIndexesMap.get(index) === pMapSkip) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpureResult.push(value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve(pureResult);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresolvingCount++;\n\n\t\t\t// Intentionally detached\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst element = await nextItem.value;\n\n\t\t\t\t\tif (isResolved) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst value = await mapper(element, index);\n\n\t\t\t\t\t// Use Map to stage the index of the element.\n\t\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\t\tskippedIndexesMap.set(index, value);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult[index] = value;\n\n\t\t\t\t\tresolvingCount--;\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (stopOnError) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrors.push(error);\n\t\t\t\t\t\tresolvingCount--;\n\n\t\t\t\t\t\t// In that case we can't really continue regardless of `stopOnError` state\n\t\t\t\t\t\t// since an iterable is likely to continue throwing after it throws once.\n\t\t\t\t\t\t// If we continue calling `next()` indefinitely we will likely end up\n\t\t\t\t\t\t// in an infinite loop of failed iteration.\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait next();\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})();\n\t\t};\n\n\t\t// Create the concurrent runners in a detached (non-awaited)\n\t\t// promise. We need this so we can await the `next()` calls\n\t\t// to stop creating runners before hitting the concurrency limit\n\t\t// if the iterable has already been marked as done.\n\t\t// NOTE: We *must* do this for async iterators otherwise we'll spin up\n\t\t// infinite `next()` calls by default and never start the event loop.\n\t\t(async () => {\n\t\t\tfor (let index = 0; index < concurrency; index++) {\n\t\t\t\ttry {\n\t\t\t\t\t// eslint-disable-next-line no-await-in-loop\n\t\t\t\t\tawait next();\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (isIterableDone || isRejected) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t});\n}\n\nexport function pMapIterable(\n\titerable,\n\tmapper,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tbackpressure = concurrency,\n\t} = {},\n) {\n\tif (iterable[Symbol.iterator] === undefined && iterable[Symbol.asyncIterator] === undefined) {\n\t\tthrow new TypeError(`Expected \\`input\\` to be either an \\`Iterable\\` or \\`AsyncIterable\\`, got (${typeof iterable})`);\n\t}\n\n\tif (typeof mapper !== 'function') {\n\t\tthrow new TypeError('Mapper function is required');\n\t}\n\n\tif (!((Number.isSafeInteger(concurrency) && concurrency >= 1) || concurrency === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`concurrency\\` to be an integer from 1 and up or \\`Infinity\\`, got \\`${concurrency}\\` (${typeof concurrency})`);\n\t}\n\n\tif (!((Number.isSafeInteger(backpressure) && backpressure >= concurrency) || backpressure === Number.POSITIVE_INFINITY)) {\n\t\tthrow new TypeError(`Expected \\`backpressure\\` to be an integer from \\`concurrency\\` (${concurrency}) and up or \\`Infinity\\`, got \\`${backpressure}\\` (${typeof backpressure})`);\n\t}\n\n\treturn {\n\t\tasync * [Symbol.asyncIterator]() {\n\t\t\tconst iterator = iterable[Symbol.asyncIterator] === undefined ? iterable[Symbol.iterator]() : iterable[Symbol.asyncIterator]();\n\n\t\t\tconst promises = [];\n\t\t\tlet pendingPromisesCount = 0;\n\t\t\tlet isDone = false;\n\t\t\tlet index = 0;\n\n\t\t\tfunction trySpawn() {\n\t\t\t\tif (isDone || !(pendingPromisesCount < concurrency && promises.length < backpressure)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpendingPromisesCount++;\n\n\t\t\t\tconst promise = (async () => {\n\t\t\t\t\tconst {done, value} = await iterator.next();\n\n\t\t\t\t\tif (done) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\treturn {done: true};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Spawn if still below concurrency and backpressure limit\n\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst returnValue = await mapper(await value, index++);\n\n\t\t\t\t\t\tpendingPromisesCount--;\n\n\t\t\t\t\t\tif (returnValue === pMapSkip) {\n\t\t\t\t\t\t\tconst index = promises.indexOf(promise);\n\n\t\t\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t\t\tpromises.splice(index, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Spawn if still below backpressure limit and just dropped below concurrency limit\n\t\t\t\t\t\ttrySpawn();\n\n\t\t\t\t\t\treturn {done: false, value: returnValue};\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpendingPromisesCount--;\n\t\t\t\t\t\tisDone = true;\n\t\t\t\t\t\treturn {error};\n\t\t\t\t\t}\n\t\t\t\t})();\n\n\t\t\t\tpromises.push(promise);\n\t\t\t}\n\n\t\t\ttrySpawn();\n\n\t\t\twhile (promises.length > 0) {\n\t\t\t\tconst {error, done, value} = await promises[0]; // eslint-disable-line no-await-in-loop\n\n\t\t\t\tpromises.shift();\n\n\t\t\t\tif (error) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\tif (done) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Spawn if just dropped below backpressure limit and below the concurrency limit\n\t\t\t\ttrySpawn();\n\n\t\t\t\tif (value === pMapSkip) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tyield value;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport const pMapSkip = Symbol('skip');\n"],"x_google_ignoreList":[0],"mappings":"0yBAAA,eAA8B,EAC7B,EACA,EACA,CACC,YAAA,EAAc,OAAO,kBACrB,YAAA,EAAc,GACd,OAAA,CAAA,EACG,CAAA,EACH,CACD,OAAO,IAAI,QAAA,CAAS,EAAU,IAAY,CACzC,GAAI,EAAS,OAAO,QAAA,IAAc,QAAa,EAAS,OAAO,aAAA,IAAmB,OACjF,MAAM,IAAI,UAAU,8EAA8E,OAAO,CAAA,GAAS,EAGnH,GAAI,OAAO,GAAW,WACrB,MAAM,IAAI,UAAU,6BAAA,EAGrB,GAAI,EAAG,OAAO,cAAc,CAAA,GAAgB,GAAe,GAAM,IAAgB,OAAO,mBACvF,MAAM,IAAI,UAAU,kFAAkF,CAAA,OAAkB,OAAO,CAAA,GAAY,EAG5I,MAAM,EAAS,CAAA,EACT,EAAS,CAAA,EACT,EAAoB,IAAI,IAC9B,IAAI,EAAa,GACb,EAAa,GACb,EAAiB,GACjB,EAAiB,EACjB,EAAe,EACnB,MAAM,EAAW,EAAS,OAAO,QAAA,IAAc,OAAY,EAAS,OAAO,aAAA,EAAA,EAAmB,EAAS,OAAO,QAAA,EAAA,EAExG,EAAA,IAAuB,CAC5B,EAAO,EAAO,MAAA,GAGT,EAAA,IAAgB,CACrB,GAAQ,oBAAoB,QAAS,CAAA,GAGhC,EAAU,GAAS,CACxB,EAAS,CAAA,EACT,EAAA,GAGK,EAAS,GAAU,CACxB,EAAa,GACb,EAAa,GACb,EAAQ,CAAA,EACR,EAAA,GAGG,IACC,EAAO,SACV,EAAO,EAAO,MAAA,EAGf,EAAO,iBAAiB,QAAS,EAAgB,CAAC,KAAM,EAAA,CAAK,GAG9D,MAAM,EAAO,SAAY,CACxB,GAAI,EACH,OAGD,MAAM,EAAW,MAAM,EAAS,KAAA,EAE1B,EAAQ,EASd,GARA,IAQI,EAAS,KAAM,CAGlB,GAFA,EAAiB,GAEb,IAAmB,GAAK,CAAC,EAAY,CACxC,GAAI,CAAC,GAAe,EAAO,OAAS,EAAG,CACtC,EAAO,IAAI,eAAe,CAAA,CAAO,EACjC,OAKD,GAFA,EAAa,GAET,EAAkB,OAAS,EAAG,CACjC,EAAQ,CAAA,EACR,OAGD,MAAM,EAAa,CAAA,EAGnB,SAAW,CAAC,EAAO,CAAA,IAAU,EAAO,QAAA,EAC/B,EAAkB,IAAI,CAAA,IAAW,GAIrC,EAAW,KAAK,CAAA,EAGjB,EAAQ,CAAA,EAGT,OAGD,KAGC,SAAY,CACZ,GAAI,CACH,MAAM,EAAU,MAAM,EAAS,MAE/B,GAAI,EACH,OAGD,MAAM,EAAQ,MAAM,EAAO,EAAS,CAAA,EAGhC,IAAU,GACb,EAAkB,IAAI,EAAO,CAAA,EAG9B,EAAO,CAAA,EAAS,EAEhB,IACA,MAAM,EAAA,QACE,EAAO,CACf,GAAI,EACH,EAAO,CAAA,MACD,CACN,EAAO,KAAK,CAAA,EACZ,IAMA,GAAI,CACH,MAAM,EAAA,QACE,EAAO,CACf,EAAO,CAAA,WAaX,SAAY,CACZ,QAAS,EAAQ,EAAG,EAAQ,EAAa,IAAS,CACjD,GAAI,CAEH,MAAM,EAAA,QACE,EAAO,CACf,EAAO,CAAA,EACP,MAGD,GAAI,GAAkB,EACrB,6BAiHQ,EAAW,OAAO,MAAA"}
|