@copilotkit/web-inspector 2.0.0-rc.1 → 2.0.0-rc.11
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/dist/index.cjs +23 -101
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -18
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +0 -18
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +24 -102
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +829 -116
- package/dist/index.umd.js.map +1 -1
- package/dist/lib/hud-config.cjs +4 -4
- package/dist/lib/hud-config.cjs.map +1 -1
- package/dist/lib/hud-config.mjs +3 -3
- package/dist/lib/hud-config.mjs.map +1 -1
- package/dist/lib/icons.cjs +408 -0
- package/dist/lib/icons.cjs.map +1 -0
- package/dist/lib/icons.mjs +407 -0
- package/dist/lib/icons.mjs.map +1 -0
- package/dist/lib/json-block.cjs +0 -1
- package/dist/lib/json-block.mjs +1 -1
- package/dist/lib/markdown.cjs +170 -0
- package/dist/lib/markdown.cjs.map +1 -0
- package/dist/lib/markdown.mjs +170 -0
- package/dist/lib/markdown.mjs.map +1 -0
- package/dist/lib/notifications.cjs +4 -4
- package/dist/lib/notifications.cjs.map +1 -1
- package/dist/lib/notifications.mjs +4 -4
- package/dist/lib/notifications.mjs.map +1 -1
- package/dist/lib/semver.cjs +224 -0
- package/dist/lib/semver.cjs.map +1 -0
- package/dist/lib/semver.mjs +221 -0
- package/dist/lib/semver.mjs.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/styles/generated.cjs +1 -1
- package/dist/styles/generated.cjs.map +1 -1
- package/dist/styles/generated.mjs +1 -1
- package/dist/styles/generated.mjs.map +1 -1
- package/package.json +6 -7
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/lib/semver.ts
|
|
3
|
+
const MAX_LENGTH = 256;
|
|
4
|
+
const IDENTIFIER = "(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)";
|
|
5
|
+
const PRERELEASE = `(?:-(${IDENTIFIER}(?:\\.${IDENTIFIER})*))?`;
|
|
6
|
+
const BUILD = "(?:\\+[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*)?";
|
|
7
|
+
const NUMBER = "(0|[1-9]\\d*)";
|
|
8
|
+
const FULL_VERSION = new RegExp(`^v?${NUMBER}\\.${NUMBER}\\.${NUMBER}${PRERELEASE}${BUILD}$`);
|
|
9
|
+
const PART = "(0|[1-9]\\d*|x|X|\\*)";
|
|
10
|
+
const PARTIAL_VERSION = new RegExp(`^v?${PART}(?:\\.${PART}(?:\\.${PART}${PRERELEASE}${BUILD})?)?$`);
|
|
11
|
+
const COMPARATOR = /^(<=|>=|<|>|=|~>|~|\^)?(.*)$/;
|
|
12
|
+
function parseIdentifiers(value) {
|
|
13
|
+
if (!value) return [];
|
|
14
|
+
return value.split(".").map((id) => /^\d+$/.test(id) ? Number(id) : id);
|
|
15
|
+
}
|
|
16
|
+
function parseVersion(value) {
|
|
17
|
+
const trimmed = value.trim();
|
|
18
|
+
if (trimmed.length > MAX_LENGTH) return null;
|
|
19
|
+
const match = FULL_VERSION.exec(trimmed);
|
|
20
|
+
if (!match) return null;
|
|
21
|
+
const major = Number(match[1]);
|
|
22
|
+
const minor = Number(match[2]);
|
|
23
|
+
const patch = Number(match[3]);
|
|
24
|
+
if (![
|
|
25
|
+
major,
|
|
26
|
+
minor,
|
|
27
|
+
patch
|
|
28
|
+
].every(Number.isSafeInteger)) return null;
|
|
29
|
+
return {
|
|
30
|
+
major,
|
|
31
|
+
minor,
|
|
32
|
+
patch,
|
|
33
|
+
prerelease: parseIdentifiers(match[4])
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function compareIdentifiers(a, b) {
|
|
37
|
+
if (typeof a === "number" && typeof b === "number") return a - b;
|
|
38
|
+
if (typeof a === "number") return -1;
|
|
39
|
+
if (typeof b === "number") return 1;
|
|
40
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
41
|
+
}
|
|
42
|
+
function compare(a, b) {
|
|
43
|
+
const core = a.major - b.major || a.minor - b.minor || a.patch - b.patch;
|
|
44
|
+
if (core) return core;
|
|
45
|
+
if (!a.prerelease.length || !b.prerelease.length) return b.prerelease.length - a.prerelease.length;
|
|
46
|
+
for (let i = 0; i < Math.max(a.prerelease.length, b.prerelease.length); i++) {
|
|
47
|
+
const left = a.prerelease[i];
|
|
48
|
+
const right = b.prerelease[i];
|
|
49
|
+
if (left === void 0) return -1;
|
|
50
|
+
if (right === void 0) return 1;
|
|
51
|
+
const result = compareIdentifiers(left, right);
|
|
52
|
+
if (result) return result;
|
|
53
|
+
}
|
|
54
|
+
return 0;
|
|
55
|
+
}
|
|
56
|
+
/** The lowest version of a release line: `1.2.3-0` sorts before every `1.2.3-*`. */
|
|
57
|
+
function floor(major, minor, patch) {
|
|
58
|
+
return {
|
|
59
|
+
major,
|
|
60
|
+
minor,
|
|
61
|
+
patch,
|
|
62
|
+
prerelease: [0]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function at(major, minor, patch) {
|
|
66
|
+
return {
|
|
67
|
+
major,
|
|
68
|
+
minor,
|
|
69
|
+
patch,
|
|
70
|
+
prerelease: []
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const NOTHING = [{
|
|
74
|
+
operator: "<",
|
|
75
|
+
version: floor(0, 0, 0)
|
|
76
|
+
}];
|
|
77
|
+
/** Desugar one comparator, such as `^1.2` or `>=1.70.1`, into plain bounds. */
|
|
78
|
+
function parseComparator(value) {
|
|
79
|
+
const [, rawOperator = "", rest = ""] = COMPARATOR.exec(value) ?? [];
|
|
80
|
+
const match = PARTIAL_VERSION.exec(rest);
|
|
81
|
+
if (!match) return null;
|
|
82
|
+
const isWild = (part) => part === void 0 || part === "x" || part === "X" || part === "*";
|
|
83
|
+
const [majorPart, minorPart, patchPart] = match.slice(1, 4);
|
|
84
|
+
const major = isWild(majorPart) ? null : Number(majorPart);
|
|
85
|
+
const minor = major === null || isWild(minorPart) ? null : Number(minorPart);
|
|
86
|
+
const patch = minor === null || isWild(patchPart) ? null : Number(patchPart);
|
|
87
|
+
const prerelease = patch === null ? [] : parseIdentifiers(match[4]);
|
|
88
|
+
const operator = rawOperator === "~>" ? "~" : rawOperator;
|
|
89
|
+
if (operator === "~" || operator === "^") {
|
|
90
|
+
if (major === null) return [];
|
|
91
|
+
const lower = {
|
|
92
|
+
operator: ">=",
|
|
93
|
+
version: {
|
|
94
|
+
major,
|
|
95
|
+
minor: minor ?? 0,
|
|
96
|
+
patch: patch ?? 0,
|
|
97
|
+
prerelease
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
let upper;
|
|
101
|
+
if (operator === "~" || minor === null) upper = minor === null || operator === "^" ? floor(major + 1, 0, 0) : floor(major, minor + 1, 0);
|
|
102
|
+
else if (major > 0) upper = floor(major + 1, 0, 0);
|
|
103
|
+
else if (minor > 0 || patch === null) upper = floor(0, minor + 1, 0);
|
|
104
|
+
else upper = floor(0, 0, patch + 1);
|
|
105
|
+
return [lower, {
|
|
106
|
+
operator: "<",
|
|
107
|
+
version: upper
|
|
108
|
+
}];
|
|
109
|
+
}
|
|
110
|
+
if (major === null) return operator === "<" || operator === ">" ? NOTHING : [];
|
|
111
|
+
if (patch !== null) return [{
|
|
112
|
+
operator: operator || "=",
|
|
113
|
+
version: {
|
|
114
|
+
major,
|
|
115
|
+
minor,
|
|
116
|
+
patch,
|
|
117
|
+
prerelease
|
|
118
|
+
}
|
|
119
|
+
}];
|
|
120
|
+
const lower = at(major, minor ?? 0, 0);
|
|
121
|
+
const next = minor === null ? floor(major + 1, 0, 0) : floor(major, minor + 1, 0);
|
|
122
|
+
switch (operator) {
|
|
123
|
+
case ">": return [{
|
|
124
|
+
operator: ">=",
|
|
125
|
+
version: {
|
|
126
|
+
...next,
|
|
127
|
+
prerelease: []
|
|
128
|
+
}
|
|
129
|
+
}];
|
|
130
|
+
case ">=": return [{
|
|
131
|
+
operator: ">=",
|
|
132
|
+
version: lower
|
|
133
|
+
}];
|
|
134
|
+
case "<": return [{
|
|
135
|
+
operator: "<",
|
|
136
|
+
version: floor(major, minor ?? 0, 0)
|
|
137
|
+
}];
|
|
138
|
+
case "<=": return [{
|
|
139
|
+
operator: "<",
|
|
140
|
+
version: next
|
|
141
|
+
}];
|
|
142
|
+
default: return [{
|
|
143
|
+
operator: ">=",
|
|
144
|
+
version: lower
|
|
145
|
+
}, {
|
|
146
|
+
operator: "<",
|
|
147
|
+
version: next
|
|
148
|
+
}];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** Desugar `1.2 - 2.3.4` into `>=1.2.0 <=2.3.4`. */
|
|
152
|
+
function parseHyphen(from, to) {
|
|
153
|
+
const lower = parseComparator(">=" + from);
|
|
154
|
+
const upper = PARTIAL_VERSION.exec(to);
|
|
155
|
+
if (!lower || !upper) return null;
|
|
156
|
+
const full = parseComparator("=" + to);
|
|
157
|
+
if (full?.length === 1 && full[0]) return [...lower, {
|
|
158
|
+
operator: "<=",
|
|
159
|
+
version: full[0].version
|
|
160
|
+
}];
|
|
161
|
+
return [...lower, ...parseComparator("<=" + to) ?? []];
|
|
162
|
+
}
|
|
163
|
+
function parseRange(range) {
|
|
164
|
+
if (range.length > MAX_LENGTH) return null;
|
|
165
|
+
const sets = [];
|
|
166
|
+
for (const raw of range.split("||")) {
|
|
167
|
+
const set = raw.trim().replace(/(<=|>=|<|>|=|~>|~|\^)\s+/g, "$1");
|
|
168
|
+
const hyphen = /^(\S+)\s+-\s+(\S+)$/.exec(set);
|
|
169
|
+
if (hyphen) {
|
|
170
|
+
const comparators = parseHyphen(hyphen[1] ?? "", hyphen[2] ?? "");
|
|
171
|
+
if (!comparators) return null;
|
|
172
|
+
sets.push(comparators);
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
const comparators = [];
|
|
176
|
+
for (const part of set.split(/\s+/).filter(Boolean)) {
|
|
177
|
+
const parsed = parseComparator(part);
|
|
178
|
+
if (!parsed) return null;
|
|
179
|
+
comparators.push(...parsed);
|
|
180
|
+
}
|
|
181
|
+
sets.push(comparators);
|
|
182
|
+
}
|
|
183
|
+
return sets;
|
|
184
|
+
}
|
|
185
|
+
function test(version, { operator, version: bound }) {
|
|
186
|
+
const result = compare(version, bound);
|
|
187
|
+
switch (operator) {
|
|
188
|
+
case "<": return result < 0;
|
|
189
|
+
case "<=": return result <= 0;
|
|
190
|
+
case ">": return result > 0;
|
|
191
|
+
case ">=": return result >= 0;
|
|
192
|
+
default: return result === 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function sameLine(a, b) {
|
|
196
|
+
return a.major === b.major && a.minor === b.minor && a.patch === b.patch;
|
|
197
|
+
}
|
|
198
|
+
function satisfiesSet(version, set) {
|
|
199
|
+
if (!set.every((comparator) => test(version, comparator))) return false;
|
|
200
|
+
if (!version.prerelease.length) return true;
|
|
201
|
+
return set.some(({ version: bound }) => bound.prerelease.length > 0 && sameLine(bound, version));
|
|
202
|
+
}
|
|
203
|
+
/** Whether `value` is a stable version, such as `1.70.2`, and not `1.70.2-beta.1`. */
|
|
204
|
+
function isStableVersion(value) {
|
|
205
|
+
const version = parseVersion(value);
|
|
206
|
+
return version !== null && version.prerelease.length === 0;
|
|
207
|
+
}
|
|
208
|
+
/** Whether `range` is a valid npm range, such as `>=1.70.1 <1.71.0` or `^1.73.0`. */
|
|
209
|
+
function isValidRange(range) {
|
|
210
|
+
return parseRange(range) !== null;
|
|
211
|
+
}
|
|
212
|
+
/** Whether `version` is in `range`, with the same result as `semver.satisfies`. */
|
|
213
|
+
function satisfies(version, range) {
|
|
214
|
+
const parsed = parseVersion(version);
|
|
215
|
+
const sets = parseRange(range);
|
|
216
|
+
if (!parsed || !sets) return false;
|
|
217
|
+
return sets.some((set) => satisfiesSet(parsed, set));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
//#endregion
|
|
221
|
+
exports.isStableVersion = isStableVersion;
|
|
222
|
+
exports.isValidRange = isValidRange;
|
|
223
|
+
exports.satisfies = satisfies;
|
|
224
|
+
//# sourceMappingURL=semver.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.cjs","names":[],"sources":["../../src/lib/semver.ts"],"sourcesContent":["/**\n * The part of npm's semver that the notification and HUD feeds use: version\n * validation and range matching. It follows node-semver's rules for the npm\n * range syntax (comparators, `^`, `~`, x-ranges, hyphen ranges and `||`), so a\n * feed rule matches the same SDK versions here as it does in `semver`.\n */\n\ninterface Version {\n major: number;\n minor: number;\n patch: number;\n prerelease: Array<string | number>;\n}\n\ntype Operator = \"<\" | \"<=\" | \">\" | \">=\" | \"=\";\ninterface Comparator {\n operator: Operator;\n version: Version;\n}\n\nconst MAX_LENGTH = 256;\nconst IDENTIFIER = \"(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)\";\nconst PRERELEASE = `(?:-(${IDENTIFIER}(?:\\\\.${IDENTIFIER})*))?`;\nconst BUILD = \"(?:\\\\+[0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*)?\";\nconst NUMBER = \"(0|[1-9]\\\\d*)\";\nconst FULL_VERSION = new RegExp(\n `^v?${NUMBER}\\\\.${NUMBER}\\\\.${NUMBER}${PRERELEASE}${BUILD}$`,\n);\nconst PART = \"(0|[1-9]\\\\d*|x|X|\\\\*)\";\nconst PARTIAL_VERSION = new RegExp(\n `^v?${PART}(?:\\\\.${PART}(?:\\\\.${PART}${PRERELEASE}${BUILD})?)?$`,\n);\nconst COMPARATOR = /^(<=|>=|<|>|=|~>|~|\\^)?(.*)$/;\n\nfunction parseIdentifiers(value: string | undefined): Array<string | number> {\n if (!value) return [];\n return value.split(\".\").map((id) => (/^\\d+$/.test(id) ? Number(id) : id));\n}\n\nfunction parseVersion(value: string): Version | null {\n const trimmed = value.trim();\n if (trimmed.length > MAX_LENGTH) return null;\n const match = FULL_VERSION.exec(trimmed);\n if (!match) return null;\n const major = Number(match[1]);\n const minor = Number(match[2]);\n const patch = Number(match[3]);\n if (![major, minor, patch].every(Number.isSafeInteger)) return null;\n return { major, minor, patch, prerelease: parseIdentifiers(match[4]) };\n}\n\nfunction compareIdentifiers(a: string | number, b: string | number): number {\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n if (typeof a === \"number\") return -1;\n if (typeof b === \"number\") return 1;\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction compare(a: Version, b: Version): number {\n const core = a.major - b.major || a.minor - b.minor || a.patch - b.patch;\n if (core) return core;\n if (!a.prerelease.length || !b.prerelease.length)\n return b.prerelease.length - a.prerelease.length;\n for (let i = 0; i < Math.max(a.prerelease.length, b.prerelease.length); i++) {\n const left = a.prerelease[i];\n const right = b.prerelease[i];\n if (left === undefined) return -1;\n if (right === undefined) return 1;\n const result = compareIdentifiers(left, right);\n if (result) return result;\n }\n return 0;\n}\n\n/** The lowest version of a release line: `1.2.3-0` sorts before every `1.2.3-*`. */\nfunction floor(major: number, minor: number, patch: number): Version {\n return { major, minor, patch, prerelease: [0] };\n}\n\nfunction at(major: number, minor: number, patch: number): Version {\n return { major, minor, patch, prerelease: [] };\n}\n\nconst NOTHING: Comparator[] = [{ operator: \"<\", version: floor(0, 0, 0) }];\n\n/** Desugar one comparator, such as `^1.2` or `>=1.70.1`, into plain bounds. */\nfunction parseComparator(value: string): Comparator[] | null {\n const [, rawOperator = \"\", rest = \"\"] = COMPARATOR.exec(value) ?? [];\n const match = PARTIAL_VERSION.exec(rest);\n if (!match) return null;\n const isWild = (part: string | undefined) =>\n part === undefined || part === \"x\" || part === \"X\" || part === \"*\";\n const [majorPart, minorPart, patchPart] = match.slice(1, 4);\n const major = isWild(majorPart) ? null : Number(majorPart);\n const minor = major === null || isWild(minorPart) ? null : Number(minorPart);\n const patch = minor === null || isWild(patchPart) ? null : Number(patchPart);\n const prerelease = patch === null ? [] : parseIdentifiers(match[4]);\n const operator = rawOperator === \"~>\" ? \"~\" : rawOperator;\n\n if (operator === \"~\" || operator === \"^\") {\n if (major === null) return [];\n const lower: Comparator = {\n operator: \">=\",\n version: { major, minor: minor ?? 0, patch: patch ?? 0, prerelease },\n };\n let upper: Version;\n if (operator === \"~\" || minor === null) {\n upper =\n minor === null || operator === \"^\"\n ? floor(major + 1, 0, 0)\n : floor(major, minor + 1, 0);\n } else if (major > 0) upper = floor(major + 1, 0, 0);\n else if (minor > 0 || patch === null) upper = floor(0, minor + 1, 0);\n else upper = floor(0, 0, patch + 1);\n return [lower, { operator: \"<\", version: upper }];\n }\n\n if (major === null) {\n return operator === \"<\" || operator === \">\" ? NOTHING : [];\n }\n if (patch !== null) {\n return [\n {\n operator: (operator || \"=\") as Operator,\n version: { major, minor: minor!, patch, prerelease },\n },\n ];\n }\n\n // A partial version: `1` is 1.x.x and `1.2` is 1.2.x.\n const lower = at(major, minor ?? 0, 0);\n const next =\n minor === null ? floor(major + 1, 0, 0) : floor(major, minor + 1, 0);\n switch (operator) {\n case \">\":\n return [{ operator: \">=\", version: { ...next, prerelease: [] } }];\n case \">=\":\n return [{ operator: \">=\", version: lower }];\n case \"<\":\n return [{ operator: \"<\", version: floor(major, minor ?? 0, 0) }];\n case \"<=\":\n return [{ operator: \"<\", version: next }];\n default:\n return [\n { operator: \">=\", version: lower },\n { operator: \"<\", version: next },\n ];\n }\n}\n\n/** Desugar `1.2 - 2.3.4` into `>=1.2.0 <=2.3.4`. */\nfunction parseHyphen(from: string, to: string): Comparator[] | null {\n const lower = parseComparator(\">=\" + from);\n const upper = PARTIAL_VERSION.exec(to);\n if (!lower || !upper) return null;\n const full = parseComparator(\"=\" + to);\n if (full?.length === 1 && full[0])\n return [...lower, { operator: \"<=\", version: full[0].version }];\n return [...lower, ...(parseComparator(\"<=\" + to) ?? [])];\n}\n\nfunction parseRange(range: string): Comparator[][] | null {\n if (range.length > MAX_LENGTH) return null;\n const sets: Comparator[][] = [];\n for (const raw of range.split(\"||\")) {\n const set = raw.trim().replace(/(<=|>=|<|>|=|~>|~|\\^)\\s+/g, \"$1\");\n const hyphen = /^(\\S+)\\s+-\\s+(\\S+)$/.exec(set);\n if (hyphen) {\n const comparators = parseHyphen(hyphen[1] ?? \"\", hyphen[2] ?? \"\");\n if (!comparators) return null;\n sets.push(comparators);\n continue;\n }\n const comparators: Comparator[] = [];\n for (const part of set.split(/\\s+/).filter(Boolean)) {\n const parsed = parseComparator(part);\n if (!parsed) return null;\n comparators.push(...parsed);\n }\n sets.push(comparators);\n }\n return sets;\n}\n\nfunction test(version: Version, { operator, version: bound }: Comparator) {\n const result = compare(version, bound);\n switch (operator) {\n case \"<\":\n return result < 0;\n case \"<=\":\n return result <= 0;\n case \">\":\n return result > 0;\n case \">=\":\n return result >= 0;\n default:\n return result === 0;\n }\n}\n\nfunction sameLine(a: Version, b: Version): boolean {\n return a.major === b.major && a.minor === b.minor && a.patch === b.patch;\n}\n\nfunction satisfiesSet(version: Version, set: Comparator[]): boolean {\n if (!set.every((comparator) => test(version, comparator))) return false;\n // A prerelease only matches a range that names a prerelease of its line.\n if (!version.prerelease.length) return true;\n return set.some(\n ({ version: bound }) =>\n bound.prerelease.length > 0 && sameLine(bound, version),\n );\n}\n\n/** Whether `value` is a stable version, such as `1.70.2`, and not `1.70.2-beta.1`. */\nexport function isStableVersion(value: string): boolean {\n const version = parseVersion(value);\n return version !== null && version.prerelease.length === 0;\n}\n\n/** Whether `range` is a valid npm range, such as `>=1.70.1 <1.71.0` or `^1.73.0`. */\nexport function isValidRange(range: string): boolean {\n return parseRange(range) !== null;\n}\n\n/** Whether `version` is in `range`, with the same result as `semver.satisfies`. */\nexport function satisfies(version: string, range: string): boolean {\n const parsed = parseVersion(version);\n const sets = parseRange(range);\n if (!parsed || !sets) return false;\n return sets.some((set) => satisfiesSet(parsed, set));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
//#region src/lib/semver.ts
|
|
2
|
+
const MAX_LENGTH = 256;
|
|
3
|
+
const IDENTIFIER = "(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)";
|
|
4
|
+
const PRERELEASE = `(?:-(${IDENTIFIER}(?:\\.${IDENTIFIER})*))?`;
|
|
5
|
+
const BUILD = "(?:\\+[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*)?";
|
|
6
|
+
const NUMBER = "(0|[1-9]\\d*)";
|
|
7
|
+
const FULL_VERSION = new RegExp(`^v?${NUMBER}\\.${NUMBER}\\.${NUMBER}${PRERELEASE}${BUILD}$`);
|
|
8
|
+
const PART = "(0|[1-9]\\d*|x|X|\\*)";
|
|
9
|
+
const PARTIAL_VERSION = new RegExp(`^v?${PART}(?:\\.${PART}(?:\\.${PART}${PRERELEASE}${BUILD})?)?$`);
|
|
10
|
+
const COMPARATOR = /^(<=|>=|<|>|=|~>|~|\^)?(.*)$/;
|
|
11
|
+
function parseIdentifiers(value) {
|
|
12
|
+
if (!value) return [];
|
|
13
|
+
return value.split(".").map((id) => /^\d+$/.test(id) ? Number(id) : id);
|
|
14
|
+
}
|
|
15
|
+
function parseVersion(value) {
|
|
16
|
+
const trimmed = value.trim();
|
|
17
|
+
if (trimmed.length > MAX_LENGTH) return null;
|
|
18
|
+
const match = FULL_VERSION.exec(trimmed);
|
|
19
|
+
if (!match) return null;
|
|
20
|
+
const major = Number(match[1]);
|
|
21
|
+
const minor = Number(match[2]);
|
|
22
|
+
const patch = Number(match[3]);
|
|
23
|
+
if (![
|
|
24
|
+
major,
|
|
25
|
+
minor,
|
|
26
|
+
patch
|
|
27
|
+
].every(Number.isSafeInteger)) return null;
|
|
28
|
+
return {
|
|
29
|
+
major,
|
|
30
|
+
minor,
|
|
31
|
+
patch,
|
|
32
|
+
prerelease: parseIdentifiers(match[4])
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function compareIdentifiers(a, b) {
|
|
36
|
+
if (typeof a === "number" && typeof b === "number") return a - b;
|
|
37
|
+
if (typeof a === "number") return -1;
|
|
38
|
+
if (typeof b === "number") return 1;
|
|
39
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
40
|
+
}
|
|
41
|
+
function compare(a, b) {
|
|
42
|
+
const core = a.major - b.major || a.minor - b.minor || a.patch - b.patch;
|
|
43
|
+
if (core) return core;
|
|
44
|
+
if (!a.prerelease.length || !b.prerelease.length) return b.prerelease.length - a.prerelease.length;
|
|
45
|
+
for (let i = 0; i < Math.max(a.prerelease.length, b.prerelease.length); i++) {
|
|
46
|
+
const left = a.prerelease[i];
|
|
47
|
+
const right = b.prerelease[i];
|
|
48
|
+
if (left === void 0) return -1;
|
|
49
|
+
if (right === void 0) return 1;
|
|
50
|
+
const result = compareIdentifiers(left, right);
|
|
51
|
+
if (result) return result;
|
|
52
|
+
}
|
|
53
|
+
return 0;
|
|
54
|
+
}
|
|
55
|
+
/** The lowest version of a release line: `1.2.3-0` sorts before every `1.2.3-*`. */
|
|
56
|
+
function floor(major, minor, patch) {
|
|
57
|
+
return {
|
|
58
|
+
major,
|
|
59
|
+
minor,
|
|
60
|
+
patch,
|
|
61
|
+
prerelease: [0]
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function at(major, minor, patch) {
|
|
65
|
+
return {
|
|
66
|
+
major,
|
|
67
|
+
minor,
|
|
68
|
+
patch,
|
|
69
|
+
prerelease: []
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const NOTHING = [{
|
|
73
|
+
operator: "<",
|
|
74
|
+
version: floor(0, 0, 0)
|
|
75
|
+
}];
|
|
76
|
+
/** Desugar one comparator, such as `^1.2` or `>=1.70.1`, into plain bounds. */
|
|
77
|
+
function parseComparator(value) {
|
|
78
|
+
const [, rawOperator = "", rest = ""] = COMPARATOR.exec(value) ?? [];
|
|
79
|
+
const match = PARTIAL_VERSION.exec(rest);
|
|
80
|
+
if (!match) return null;
|
|
81
|
+
const isWild = (part) => part === void 0 || part === "x" || part === "X" || part === "*";
|
|
82
|
+
const [majorPart, minorPart, patchPart] = match.slice(1, 4);
|
|
83
|
+
const major = isWild(majorPart) ? null : Number(majorPart);
|
|
84
|
+
const minor = major === null || isWild(minorPart) ? null : Number(minorPart);
|
|
85
|
+
const patch = minor === null || isWild(patchPart) ? null : Number(patchPart);
|
|
86
|
+
const prerelease = patch === null ? [] : parseIdentifiers(match[4]);
|
|
87
|
+
const operator = rawOperator === "~>" ? "~" : rawOperator;
|
|
88
|
+
if (operator === "~" || operator === "^") {
|
|
89
|
+
if (major === null) return [];
|
|
90
|
+
const lower = {
|
|
91
|
+
operator: ">=",
|
|
92
|
+
version: {
|
|
93
|
+
major,
|
|
94
|
+
minor: minor ?? 0,
|
|
95
|
+
patch: patch ?? 0,
|
|
96
|
+
prerelease
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
let upper;
|
|
100
|
+
if (operator === "~" || minor === null) upper = minor === null || operator === "^" ? floor(major + 1, 0, 0) : floor(major, minor + 1, 0);
|
|
101
|
+
else if (major > 0) upper = floor(major + 1, 0, 0);
|
|
102
|
+
else if (minor > 0 || patch === null) upper = floor(0, minor + 1, 0);
|
|
103
|
+
else upper = floor(0, 0, patch + 1);
|
|
104
|
+
return [lower, {
|
|
105
|
+
operator: "<",
|
|
106
|
+
version: upper
|
|
107
|
+
}];
|
|
108
|
+
}
|
|
109
|
+
if (major === null) return operator === "<" || operator === ">" ? NOTHING : [];
|
|
110
|
+
if (patch !== null) return [{
|
|
111
|
+
operator: operator || "=",
|
|
112
|
+
version: {
|
|
113
|
+
major,
|
|
114
|
+
minor,
|
|
115
|
+
patch,
|
|
116
|
+
prerelease
|
|
117
|
+
}
|
|
118
|
+
}];
|
|
119
|
+
const lower = at(major, minor ?? 0, 0);
|
|
120
|
+
const next = minor === null ? floor(major + 1, 0, 0) : floor(major, minor + 1, 0);
|
|
121
|
+
switch (operator) {
|
|
122
|
+
case ">": return [{
|
|
123
|
+
operator: ">=",
|
|
124
|
+
version: {
|
|
125
|
+
...next,
|
|
126
|
+
prerelease: []
|
|
127
|
+
}
|
|
128
|
+
}];
|
|
129
|
+
case ">=": return [{
|
|
130
|
+
operator: ">=",
|
|
131
|
+
version: lower
|
|
132
|
+
}];
|
|
133
|
+
case "<": return [{
|
|
134
|
+
operator: "<",
|
|
135
|
+
version: floor(major, minor ?? 0, 0)
|
|
136
|
+
}];
|
|
137
|
+
case "<=": return [{
|
|
138
|
+
operator: "<",
|
|
139
|
+
version: next
|
|
140
|
+
}];
|
|
141
|
+
default: return [{
|
|
142
|
+
operator: ">=",
|
|
143
|
+
version: lower
|
|
144
|
+
}, {
|
|
145
|
+
operator: "<",
|
|
146
|
+
version: next
|
|
147
|
+
}];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** Desugar `1.2 - 2.3.4` into `>=1.2.0 <=2.3.4`. */
|
|
151
|
+
function parseHyphen(from, to) {
|
|
152
|
+
const lower = parseComparator(">=" + from);
|
|
153
|
+
const upper = PARTIAL_VERSION.exec(to);
|
|
154
|
+
if (!lower || !upper) return null;
|
|
155
|
+
const full = parseComparator("=" + to);
|
|
156
|
+
if (full?.length === 1 && full[0]) return [...lower, {
|
|
157
|
+
operator: "<=",
|
|
158
|
+
version: full[0].version
|
|
159
|
+
}];
|
|
160
|
+
return [...lower, ...parseComparator("<=" + to) ?? []];
|
|
161
|
+
}
|
|
162
|
+
function parseRange(range) {
|
|
163
|
+
if (range.length > MAX_LENGTH) return null;
|
|
164
|
+
const sets = [];
|
|
165
|
+
for (const raw of range.split("||")) {
|
|
166
|
+
const set = raw.trim().replace(/(<=|>=|<|>|=|~>|~|\^)\s+/g, "$1");
|
|
167
|
+
const hyphen = /^(\S+)\s+-\s+(\S+)$/.exec(set);
|
|
168
|
+
if (hyphen) {
|
|
169
|
+
const comparators = parseHyphen(hyphen[1] ?? "", hyphen[2] ?? "");
|
|
170
|
+
if (!comparators) return null;
|
|
171
|
+
sets.push(comparators);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
const comparators = [];
|
|
175
|
+
for (const part of set.split(/\s+/).filter(Boolean)) {
|
|
176
|
+
const parsed = parseComparator(part);
|
|
177
|
+
if (!parsed) return null;
|
|
178
|
+
comparators.push(...parsed);
|
|
179
|
+
}
|
|
180
|
+
sets.push(comparators);
|
|
181
|
+
}
|
|
182
|
+
return sets;
|
|
183
|
+
}
|
|
184
|
+
function test(version, { operator, version: bound }) {
|
|
185
|
+
const result = compare(version, bound);
|
|
186
|
+
switch (operator) {
|
|
187
|
+
case "<": return result < 0;
|
|
188
|
+
case "<=": return result <= 0;
|
|
189
|
+
case ">": return result > 0;
|
|
190
|
+
case ">=": return result >= 0;
|
|
191
|
+
default: return result === 0;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function sameLine(a, b) {
|
|
195
|
+
return a.major === b.major && a.minor === b.minor && a.patch === b.patch;
|
|
196
|
+
}
|
|
197
|
+
function satisfiesSet(version, set) {
|
|
198
|
+
if (!set.every((comparator) => test(version, comparator))) return false;
|
|
199
|
+
if (!version.prerelease.length) return true;
|
|
200
|
+
return set.some(({ version: bound }) => bound.prerelease.length > 0 && sameLine(bound, version));
|
|
201
|
+
}
|
|
202
|
+
/** Whether `value` is a stable version, such as `1.70.2`, and not `1.70.2-beta.1`. */
|
|
203
|
+
function isStableVersion(value) {
|
|
204
|
+
const version = parseVersion(value);
|
|
205
|
+
return version !== null && version.prerelease.length === 0;
|
|
206
|
+
}
|
|
207
|
+
/** Whether `range` is a valid npm range, such as `>=1.70.1 <1.71.0` or `^1.73.0`. */
|
|
208
|
+
function isValidRange(range) {
|
|
209
|
+
return parseRange(range) !== null;
|
|
210
|
+
}
|
|
211
|
+
/** Whether `version` is in `range`, with the same result as `semver.satisfies`. */
|
|
212
|
+
function satisfies(version, range) {
|
|
213
|
+
const parsed = parseVersion(version);
|
|
214
|
+
const sets = parseRange(range);
|
|
215
|
+
if (!parsed || !sets) return false;
|
|
216
|
+
return sets.some((set) => satisfiesSet(parsed, set));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
//#endregion
|
|
220
|
+
export { isStableVersion, isValidRange, satisfies };
|
|
221
|
+
//# sourceMappingURL=semver.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semver.mjs","names":[],"sources":["../../src/lib/semver.ts"],"sourcesContent":["/**\n * The part of npm's semver that the notification and HUD feeds use: version\n * validation and range matching. It follows node-semver's rules for the npm\n * range syntax (comparators, `^`, `~`, x-ranges, hyphen ranges and `||`), so a\n * feed rule matches the same SDK versions here as it does in `semver`.\n */\n\ninterface Version {\n major: number;\n minor: number;\n patch: number;\n prerelease: Array<string | number>;\n}\n\ntype Operator = \"<\" | \"<=\" | \">\" | \">=\" | \"=\";\ninterface Comparator {\n operator: Operator;\n version: Version;\n}\n\nconst MAX_LENGTH = 256;\nconst IDENTIFIER = \"(?:0|[1-9]\\\\d*|\\\\d*[a-zA-Z-][0-9a-zA-Z-]*)\";\nconst PRERELEASE = `(?:-(${IDENTIFIER}(?:\\\\.${IDENTIFIER})*))?`;\nconst BUILD = \"(?:\\\\+[0-9a-zA-Z-]+(?:\\\\.[0-9a-zA-Z-]+)*)?\";\nconst NUMBER = \"(0|[1-9]\\\\d*)\";\nconst FULL_VERSION = new RegExp(\n `^v?${NUMBER}\\\\.${NUMBER}\\\\.${NUMBER}${PRERELEASE}${BUILD}$`,\n);\nconst PART = \"(0|[1-9]\\\\d*|x|X|\\\\*)\";\nconst PARTIAL_VERSION = new RegExp(\n `^v?${PART}(?:\\\\.${PART}(?:\\\\.${PART}${PRERELEASE}${BUILD})?)?$`,\n);\nconst COMPARATOR = /^(<=|>=|<|>|=|~>|~|\\^)?(.*)$/;\n\nfunction parseIdentifiers(value: string | undefined): Array<string | number> {\n if (!value) return [];\n return value.split(\".\").map((id) => (/^\\d+$/.test(id) ? Number(id) : id));\n}\n\nfunction parseVersion(value: string): Version | null {\n const trimmed = value.trim();\n if (trimmed.length > MAX_LENGTH) return null;\n const match = FULL_VERSION.exec(trimmed);\n if (!match) return null;\n const major = Number(match[1]);\n const minor = Number(match[2]);\n const patch = Number(match[3]);\n if (![major, minor, patch].every(Number.isSafeInteger)) return null;\n return { major, minor, patch, prerelease: parseIdentifiers(match[4]) };\n}\n\nfunction compareIdentifiers(a: string | number, b: string | number): number {\n if (typeof a === \"number\" && typeof b === \"number\") return a - b;\n if (typeof a === \"number\") return -1;\n if (typeof b === \"number\") return 1;\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction compare(a: Version, b: Version): number {\n const core = a.major - b.major || a.minor - b.minor || a.patch - b.patch;\n if (core) return core;\n if (!a.prerelease.length || !b.prerelease.length)\n return b.prerelease.length - a.prerelease.length;\n for (let i = 0; i < Math.max(a.prerelease.length, b.prerelease.length); i++) {\n const left = a.prerelease[i];\n const right = b.prerelease[i];\n if (left === undefined) return -1;\n if (right === undefined) return 1;\n const result = compareIdentifiers(left, right);\n if (result) return result;\n }\n return 0;\n}\n\n/** The lowest version of a release line: `1.2.3-0` sorts before every `1.2.3-*`. */\nfunction floor(major: number, minor: number, patch: number): Version {\n return { major, minor, patch, prerelease: [0] };\n}\n\nfunction at(major: number, minor: number, patch: number): Version {\n return { major, minor, patch, prerelease: [] };\n}\n\nconst NOTHING: Comparator[] = [{ operator: \"<\", version: floor(0, 0, 0) }];\n\n/** Desugar one comparator, such as `^1.2` or `>=1.70.1`, into plain bounds. */\nfunction parseComparator(value: string): Comparator[] | null {\n const [, rawOperator = \"\", rest = \"\"] = COMPARATOR.exec(value) ?? [];\n const match = PARTIAL_VERSION.exec(rest);\n if (!match) return null;\n const isWild = (part: string | undefined) =>\n part === undefined || part === \"x\" || part === \"X\" || part === \"*\";\n const [majorPart, minorPart, patchPart] = match.slice(1, 4);\n const major = isWild(majorPart) ? null : Number(majorPart);\n const minor = major === null || isWild(minorPart) ? null : Number(minorPart);\n const patch = minor === null || isWild(patchPart) ? null : Number(patchPart);\n const prerelease = patch === null ? [] : parseIdentifiers(match[4]);\n const operator = rawOperator === \"~>\" ? \"~\" : rawOperator;\n\n if (operator === \"~\" || operator === \"^\") {\n if (major === null) return [];\n const lower: Comparator = {\n operator: \">=\",\n version: { major, minor: minor ?? 0, patch: patch ?? 0, prerelease },\n };\n let upper: Version;\n if (operator === \"~\" || minor === null) {\n upper =\n minor === null || operator === \"^\"\n ? floor(major + 1, 0, 0)\n : floor(major, minor + 1, 0);\n } else if (major > 0) upper = floor(major + 1, 0, 0);\n else if (minor > 0 || patch === null) upper = floor(0, minor + 1, 0);\n else upper = floor(0, 0, patch + 1);\n return [lower, { operator: \"<\", version: upper }];\n }\n\n if (major === null) {\n return operator === \"<\" || operator === \">\" ? NOTHING : [];\n }\n if (patch !== null) {\n return [\n {\n operator: (operator || \"=\") as Operator,\n version: { major, minor: minor!, patch, prerelease },\n },\n ];\n }\n\n // A partial version: `1` is 1.x.x and `1.2` is 1.2.x.\n const lower = at(major, minor ?? 0, 0);\n const next =\n minor === null ? floor(major + 1, 0, 0) : floor(major, minor + 1, 0);\n switch (operator) {\n case \">\":\n return [{ operator: \">=\", version: { ...next, prerelease: [] } }];\n case \">=\":\n return [{ operator: \">=\", version: lower }];\n case \"<\":\n return [{ operator: \"<\", version: floor(major, minor ?? 0, 0) }];\n case \"<=\":\n return [{ operator: \"<\", version: next }];\n default:\n return [\n { operator: \">=\", version: lower },\n { operator: \"<\", version: next },\n ];\n }\n}\n\n/** Desugar `1.2 - 2.3.4` into `>=1.2.0 <=2.3.4`. */\nfunction parseHyphen(from: string, to: string): Comparator[] | null {\n const lower = parseComparator(\">=\" + from);\n const upper = PARTIAL_VERSION.exec(to);\n if (!lower || !upper) return null;\n const full = parseComparator(\"=\" + to);\n if (full?.length === 1 && full[0])\n return [...lower, { operator: \"<=\", version: full[0].version }];\n return [...lower, ...(parseComparator(\"<=\" + to) ?? [])];\n}\n\nfunction parseRange(range: string): Comparator[][] | null {\n if (range.length > MAX_LENGTH) return null;\n const sets: Comparator[][] = [];\n for (const raw of range.split(\"||\")) {\n const set = raw.trim().replace(/(<=|>=|<|>|=|~>|~|\\^)\\s+/g, \"$1\");\n const hyphen = /^(\\S+)\\s+-\\s+(\\S+)$/.exec(set);\n if (hyphen) {\n const comparators = parseHyphen(hyphen[1] ?? \"\", hyphen[2] ?? \"\");\n if (!comparators) return null;\n sets.push(comparators);\n continue;\n }\n const comparators: Comparator[] = [];\n for (const part of set.split(/\\s+/).filter(Boolean)) {\n const parsed = parseComparator(part);\n if (!parsed) return null;\n comparators.push(...parsed);\n }\n sets.push(comparators);\n }\n return sets;\n}\n\nfunction test(version: Version, { operator, version: bound }: Comparator) {\n const result = compare(version, bound);\n switch (operator) {\n case \"<\":\n return result < 0;\n case \"<=\":\n return result <= 0;\n case \">\":\n return result > 0;\n case \">=\":\n return result >= 0;\n default:\n return result === 0;\n }\n}\n\nfunction sameLine(a: Version, b: Version): boolean {\n return a.major === b.major && a.minor === b.minor && a.patch === b.patch;\n}\n\nfunction satisfiesSet(version: Version, set: Comparator[]): boolean {\n if (!set.every((comparator) => test(version, comparator))) return false;\n // A prerelease only matches a range that names a prerelease of its line.\n if (!version.prerelease.length) return true;\n return set.some(\n ({ version: bound }) =>\n bound.prerelease.length > 0 && sameLine(bound, version),\n );\n}\n\n/** Whether `value` is a stable version, such as `1.70.2`, and not `1.70.2-beta.1`. */\nexport function isStableVersion(value: string): boolean {\n const version = parseVersion(value);\n return version !== null && version.prerelease.length === 0;\n}\n\n/** Whether `range` is a valid npm range, such as `>=1.70.1 <1.71.0` or `^1.73.0`. */\nexport function isValidRange(range: string): boolean {\n return parseRange(range) !== null;\n}\n\n/** Whether `version` is in `range`, with the same result as `semver.satisfies`. */\nexport function satisfies(version: string, range: string): boolean {\n const parsed = parseVersion(version);\n const sets = parseRange(range);\n if (!parsed || !sets) return false;\n return sets.some((set) => satisfiesSet(parsed, set));\n}\n"],"mappings":";AAoBA,MAAM,aAAa;AACnB,MAAM,aAAa;AACnB,MAAM,aAAa,QAAQ,WAAW,QAAQ,WAAW;AACzD,MAAM,QAAQ;AACd,MAAM,SAAS;AACf,MAAM,eAAe,IAAI,OACvB,MAAM,OAAO,KAAK,OAAO,KAAK,SAAS,aAAa,MAAM,GAC3D;AACD,MAAM,OAAO;AACb,MAAM,kBAAkB,IAAI,OAC1B,MAAM,KAAK,QAAQ,KAAK,QAAQ,OAAO,aAAa,MAAM,OAC3D;AACD,MAAM,aAAa;AAEnB,SAAS,iBAAiB,OAAmD;AAC3E,KAAI,CAAC,MAAO,QAAO,EAAE;AACrB,QAAO,MAAM,MAAM,IAAI,CAAC,KAAK,OAAQ,QAAQ,KAAK,GAAG,GAAG,OAAO,GAAG,GAAG,GAAI;;AAG3E,SAAS,aAAa,OAA+B;CACnD,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,QAAQ,SAAS,WAAY,QAAO;CACxC,MAAM,QAAQ,aAAa,KAAK,QAAQ;AACxC,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,QAAQ,OAAO,MAAM,GAAG;CAC9B,MAAM,QAAQ,OAAO,MAAM,GAAG;CAC9B,MAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,KAAI,CAAC;EAAC;EAAO;EAAO;EAAM,CAAC,MAAM,OAAO,cAAc,CAAE,QAAO;AAC/D,QAAO;EAAE;EAAO;EAAO;EAAO,YAAY,iBAAiB,MAAM,GAAG;EAAE;;AAGxE,SAAS,mBAAmB,GAAoB,GAA4B;AAC1E,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,SAAU,QAAO,IAAI;AAC/D,KAAI,OAAO,MAAM,SAAU,QAAO;AAClC,KAAI,OAAO,MAAM,SAAU,QAAO;AAClC,QAAO,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;;AAGlC,SAAS,QAAQ,GAAY,GAAoB;CAC/C,MAAM,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;AACnE,KAAI,KAAM,QAAO;AACjB,KAAI,CAAC,EAAE,WAAW,UAAU,CAAC,EAAE,WAAW,OACxC,QAAO,EAAE,WAAW,SAAS,EAAE,WAAW;AAC5C,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE,WAAW,QAAQ,EAAE,WAAW,OAAO,EAAE,KAAK;EAC3E,MAAM,OAAO,EAAE,WAAW;EAC1B,MAAM,QAAQ,EAAE,WAAW;AAC3B,MAAI,SAAS,OAAW,QAAO;AAC/B,MAAI,UAAU,OAAW,QAAO;EAChC,MAAM,SAAS,mBAAmB,MAAM,MAAM;AAC9C,MAAI,OAAQ,QAAO;;AAErB,QAAO;;;AAIT,SAAS,MAAM,OAAe,OAAe,OAAwB;AACnE,QAAO;EAAE;EAAO;EAAO;EAAO,YAAY,CAAC,EAAE;EAAE;;AAGjD,SAAS,GAAG,OAAe,OAAe,OAAwB;AAChE,QAAO;EAAE;EAAO;EAAO;EAAO,YAAY,EAAE;EAAE;;AAGhD,MAAM,UAAwB,CAAC;CAAE,UAAU;CAAK,SAAS,MAAM,GAAG,GAAG,EAAE;CAAE,CAAC;;AAG1E,SAAS,gBAAgB,OAAoC;CAC3D,MAAM,GAAG,cAAc,IAAI,OAAO,MAAM,WAAW,KAAK,MAAM,IAAI,EAAE;CACpE,MAAM,QAAQ,gBAAgB,KAAK,KAAK;AACxC,KAAI,CAAC,MAAO,QAAO;CACnB,MAAM,UAAU,SACd,SAAS,UAAa,SAAS,OAAO,SAAS,OAAO,SAAS;CACjE,MAAM,CAAC,WAAW,WAAW,aAAa,MAAM,MAAM,GAAG,EAAE;CAC3D,MAAM,QAAQ,OAAO,UAAU,GAAG,OAAO,OAAO,UAAU;CAC1D,MAAM,QAAQ,UAAU,QAAQ,OAAO,UAAU,GAAG,OAAO,OAAO,UAAU;CAC5E,MAAM,QAAQ,UAAU,QAAQ,OAAO,UAAU,GAAG,OAAO,OAAO,UAAU;CAC5E,MAAM,aAAa,UAAU,OAAO,EAAE,GAAG,iBAAiB,MAAM,GAAG;CACnE,MAAM,WAAW,gBAAgB,OAAO,MAAM;AAE9C,KAAI,aAAa,OAAO,aAAa,KAAK;AACxC,MAAI,UAAU,KAAM,QAAO,EAAE;EAC7B,MAAM,QAAoB;GACxB,UAAU;GACV,SAAS;IAAE;IAAO,OAAO,SAAS;IAAG,OAAO,SAAS;IAAG;IAAY;GACrE;EACD,IAAI;AACJ,MAAI,aAAa,OAAO,UAAU,KAChC,SACE,UAAU,QAAQ,aAAa,MAC3B,MAAM,QAAQ,GAAG,GAAG,EAAE,GACtB,MAAM,OAAO,QAAQ,GAAG,EAAE;WACvB,QAAQ,EAAG,SAAQ,MAAM,QAAQ,GAAG,GAAG,EAAE;WAC3C,QAAQ,KAAK,UAAU,KAAM,SAAQ,MAAM,GAAG,QAAQ,GAAG,EAAE;MAC/D,SAAQ,MAAM,GAAG,GAAG,QAAQ,EAAE;AACnC,SAAO,CAAC,OAAO;GAAE,UAAU;GAAK,SAAS;GAAO,CAAC;;AAGnD,KAAI,UAAU,KACZ,QAAO,aAAa,OAAO,aAAa,MAAM,UAAU,EAAE;AAE5D,KAAI,UAAU,KACZ,QAAO,CACL;EACE,UAAW,YAAY;EACvB,SAAS;GAAE;GAAc;GAAQ;GAAO;GAAY;EACrD,CACF;CAIH,MAAM,QAAQ,GAAG,OAAO,SAAS,GAAG,EAAE;CACtC,MAAM,OACJ,UAAU,OAAO,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,MAAM,OAAO,QAAQ,GAAG,EAAE;AACtE,SAAQ,UAAR;EACE,KAAK,IACH,QAAO,CAAC;GAAE,UAAU;GAAM,SAAS;IAAE,GAAG;IAAM,YAAY,EAAE;IAAE;GAAE,CAAC;EACnE,KAAK,KACH,QAAO,CAAC;GAAE,UAAU;GAAM,SAAS;GAAO,CAAC;EAC7C,KAAK,IACH,QAAO,CAAC;GAAE,UAAU;GAAK,SAAS,MAAM,OAAO,SAAS,GAAG,EAAE;GAAE,CAAC;EAClE,KAAK,KACH,QAAO,CAAC;GAAE,UAAU;GAAK,SAAS;GAAM,CAAC;EAC3C,QACE,QAAO,CACL;GAAE,UAAU;GAAM,SAAS;GAAO,EAClC;GAAE,UAAU;GAAK,SAAS;GAAM,CACjC;;;;AAKP,SAAS,YAAY,MAAc,IAAiC;CAClE,MAAM,QAAQ,gBAAgB,OAAO,KAAK;CAC1C,MAAM,QAAQ,gBAAgB,KAAK,GAAG;AACtC,KAAI,CAAC,SAAS,CAAC,MAAO,QAAO;CAC7B,MAAM,OAAO,gBAAgB,MAAM,GAAG;AACtC,KAAI,MAAM,WAAW,KAAK,KAAK,GAC7B,QAAO,CAAC,GAAG,OAAO;EAAE,UAAU;EAAM,SAAS,KAAK,GAAG;EAAS,CAAC;AACjE,QAAO,CAAC,GAAG,OAAO,GAAI,gBAAgB,OAAO,GAAG,IAAI,EAAE,CAAE;;AAG1D,SAAS,WAAW,OAAsC;AACxD,KAAI,MAAM,SAAS,WAAY,QAAO;CACtC,MAAM,OAAuB,EAAE;AAC/B,MAAK,MAAM,OAAO,MAAM,MAAM,KAAK,EAAE;EACnC,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,6BAA6B,KAAK;EACjE,MAAM,SAAS,sBAAsB,KAAK,IAAI;AAC9C,MAAI,QAAQ;GACV,MAAM,cAAc,YAAY,OAAO,MAAM,IAAI,OAAO,MAAM,GAAG;AACjE,OAAI,CAAC,YAAa,QAAO;AACzB,QAAK,KAAK,YAAY;AACtB;;EAEF,MAAM,cAA4B,EAAE;AACpC,OAAK,MAAM,QAAQ,IAAI,MAAM,MAAM,CAAC,OAAO,QAAQ,EAAE;GACnD,MAAM,SAAS,gBAAgB,KAAK;AACpC,OAAI,CAAC,OAAQ,QAAO;AACpB,eAAY,KAAK,GAAG,OAAO;;AAE7B,OAAK,KAAK,YAAY;;AAExB,QAAO;;AAGT,SAAS,KAAK,SAAkB,EAAE,UAAU,SAAS,SAAqB;CACxE,MAAM,SAAS,QAAQ,SAAS,MAAM;AACtC,SAAQ,UAAR;EACE,KAAK,IACH,QAAO,SAAS;EAClB,KAAK,KACH,QAAO,UAAU;EACnB,KAAK,IACH,QAAO,SAAS;EAClB,KAAK,KACH,QAAO,UAAU;EACnB,QACE,QAAO,WAAW;;;AAIxB,SAAS,SAAS,GAAY,GAAqB;AACjD,QAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;;AAGrE,SAAS,aAAa,SAAkB,KAA4B;AAClE,KAAI,CAAC,IAAI,OAAO,eAAe,KAAK,SAAS,WAAW,CAAC,CAAE,QAAO;AAElE,KAAI,CAAC,QAAQ,WAAW,OAAQ,QAAO;AACvC,QAAO,IAAI,MACR,EAAE,SAAS,YACV,MAAM,WAAW,SAAS,KAAK,SAAS,OAAO,QAAQ,CAC1D;;;AAIH,SAAgB,gBAAgB,OAAwB;CACtD,MAAM,UAAU,aAAa,MAAM;AACnC,QAAO,YAAY,QAAQ,QAAQ,WAAW,WAAW;;;AAI3D,SAAgB,aAAa,OAAwB;AACnD,QAAO,WAAW,MAAM,KAAK;;;AAI/B,SAAgB,UAAU,SAAiB,OAAwB;CACjE,MAAM,SAAS,aAAa,QAAQ;CACpC,MAAM,OAAO,WAAW,MAAM;AAC9B,KAAI,CAAC,UAAU,CAAC,KAAM,QAAO;AAC7B,QAAO,KAAK,MAAM,QAAQ,aAAa,QAAQ,IAAI,CAAC"}
|
package/dist/package.cjs
CHANGED
package/dist/package.mjs
CHANGED