@microwiseai/snapshot 0.3.71 → 0.4.0
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/commands/doctor.js.map +1 -1
- package/dist/commands/install.d.ts +9 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +210 -17
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/list.d.ts +15 -0
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +21 -39
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +22 -0
- package/dist/commands/publish.js.map +1 -1
- package/dist/index.js +37 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +15 -10
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/transitive-resolver.js.map +1 -1
- package/dist/lib/types.d.ts +1 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib/version-validator.d.ts +28 -0
- package/dist/lib/version-validator.d.ts.map +1 -0
- package/dist/lib/version-validator.js +105 -0
- package/dist/lib/version-validator.js.map +1 -0
- package/dist/lib.js.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts +86 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.d.ts.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js +171 -5
- package/node_modules/@microwiseai/snapshot-dedup/dist/dedup.js.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.d.ts.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.js +4 -2
- package/node_modules/@microwiseai/snapshot-dedup/dist/index.js.map +1 -1
- package/node_modules/@microwiseai/snapshot-dedup/package.json +8 -2
- package/package.json +9 -4
- package/dist/lib/access-sync.test.d.ts +0 -2
- package/dist/lib/access-sync.test.d.ts.map +0 -1
- package/dist/lib/access-sync.test.js +0 -112
- package/dist/lib/access-sync.test.js.map +0 -1
- package/dist/lib/auth-flow.test.d.ts +0 -2
- package/dist/lib/auth-flow.test.d.ts.map +0 -1
- package/dist/lib/auth-flow.test.js +0 -265
- package/dist/lib/auth-flow.test.js.map +0 -1
- package/dist/lib/config.test.d.ts +0 -2
- package/dist/lib/config.test.d.ts.map +0 -1
- package/dist/lib/config.test.js +0 -151
- package/dist/lib/config.test.js.map +0 -1
- package/dist/lib/gitlab.test.d.ts +0 -2
- package/dist/lib/gitlab.test.d.ts.map +0 -1
- package/dist/lib/gitlab.test.js +0 -63
- package/dist/lib/gitlab.test.js.map +0 -1
- package/dist/lib/registry.d.ts +0 -3
- package/dist/lib/registry.d.ts.map +0 -1
- package/dist/lib/registry.js +0 -53
- package/dist/lib/registry.js.map +0 -1
- package/dist/lib/transitive-resolver.test.d.ts +0 -2
- package/dist/lib/transitive-resolver.test.d.ts.map +0 -1
- package/dist/lib/transitive-resolver.test.js +0 -279
- package/dist/lib/transitive-resolver.test.js.map +0 -1
|
@@ -8,12 +8,20 @@
|
|
|
8
8
|
* Format: { "packages": { "@ist/sesh@0.3.33": { snapshot, installedAt } } }
|
|
9
9
|
*/
|
|
10
10
|
export interface InstalledPackageEntry {
|
|
11
|
-
/** Which snapshot installed this package */
|
|
11
|
+
/** Which snapshot FIRST installed this package (kept for backward compat) */
|
|
12
12
|
snapshot: string;
|
|
13
13
|
/** ISO timestamp */
|
|
14
14
|
installedAt: string;
|
|
15
15
|
/** Package version */
|
|
16
16
|
version: string;
|
|
17
|
+
/**
|
|
18
|
+
* All snapshot names that reference (require) this package.
|
|
19
|
+
* Used by replace-mode (ADR 001) to decide whether a package is safe to
|
|
20
|
+
* remove: a package is only removed when NO other installed snapshot still
|
|
21
|
+
* references it. Optional on disk for backward compatibility — older history
|
|
22
|
+
* files are backfilled to `[snapshot]` on load (see loadInstallHistory).
|
|
23
|
+
*/
|
|
24
|
+
referencedBy?: string[];
|
|
17
25
|
}
|
|
18
26
|
export interface InstallHistory {
|
|
19
27
|
/** Map of "name@version" -> metadata */
|
|
@@ -54,6 +62,12 @@ export declare function getHistoryFilePath(): string;
|
|
|
54
62
|
* Load install history from disk
|
|
55
63
|
*/
|
|
56
64
|
export declare function loadInstallHistory(historyPath?: string): InstallHistory;
|
|
65
|
+
/**
|
|
66
|
+
* Ensure every history entry has a `referencedBy` array (migration/backfill).
|
|
67
|
+
* Missing/invalid → `[snapshot]` (or `[]` if snapshot also missing).
|
|
68
|
+
* Mutates the passed history in place.
|
|
69
|
+
*/
|
|
70
|
+
export declare function backfillReferencedBy(history: InstallHistory): InstallHistory;
|
|
57
71
|
/**
|
|
58
72
|
* Save install history to disk
|
|
59
73
|
*/
|
|
@@ -62,6 +76,19 @@ export declare function saveInstallHistory(history: InstallHistory, historyPath?
|
|
|
62
76
|
* Record successfully installed packages into history
|
|
63
77
|
*/
|
|
64
78
|
export declare function recordInstalledPackages(packages: Record<string, string>, snapshotName: string, historyPath?: string): void;
|
|
79
|
+
/**
|
|
80
|
+
* Record that a snapshot *references* a set of packages, without (re)installing
|
|
81
|
+
* them. Used for dedup-skipped packages: even when a package was already
|
|
82
|
+
* installed by another snapshot and is skipped, the referencing snapshot must
|
|
83
|
+
* still be recorded in referencedBy so replace-mode won't later remove a
|
|
84
|
+
* package that this snapshot depends on.
|
|
85
|
+
*
|
|
86
|
+
* Only touches packages that already exist in history (skipped ⇒ present).
|
|
87
|
+
* Non-existent keys are ignored (no phantom entries).
|
|
88
|
+
*/
|
|
89
|
+
export declare function recordReferences(packages: Record<string, string>, snapshotName: string, historyPath?: string): void;
|
|
90
|
+
/** Record references from a list of specs (e.g. ["@ist/sesh@0.3.33"]). */
|
|
91
|
+
export declare function recordReferencesFromSpecs(specs: string[], snapshotName: string, historyPath?: string): void;
|
|
65
92
|
/**
|
|
66
93
|
* Record a list of installed package specs (e.g., ["@ist/sesh@0.3.33"])
|
|
67
94
|
*/
|
|
@@ -105,4 +132,62 @@ export declare function getPackagesBySnapshot(snapshotName: string, historyPath?
|
|
|
105
132
|
* Get total count of installed packages
|
|
106
133
|
*/
|
|
107
134
|
export declare function getInstalledCount(historyPath?: string): number;
|
|
135
|
+
/** Snapshot names that reference (require) a given package@version. */
|
|
136
|
+
export declare function getReferencedBy(name: string, version: string, historyPath?: string): string[];
|
|
137
|
+
export interface ReplaceRemovalItem {
|
|
138
|
+
name: string;
|
|
139
|
+
version: string;
|
|
140
|
+
}
|
|
141
|
+
export interface ReplaceSharedItem {
|
|
142
|
+
name: string;
|
|
143
|
+
version: string;
|
|
144
|
+
/** Other snapshots that still reference this package (why it is kept). */
|
|
145
|
+
remainingRefs: string[];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* A plan describing how to converge the system onto a snapshot's new version.
|
|
149
|
+
*
|
|
150
|
+
* - `remove`: packages from the previous version that are no longer in the new
|
|
151
|
+
* version AND are referenced by no other snapshot → safe to uninstall.
|
|
152
|
+
* - `keepShared`: packages no longer in the new version but STILL referenced by
|
|
153
|
+
* another installed snapshot → must NOT be uninstalled (would break it); this
|
|
154
|
+
* snapshot is simply dropped from their referencedBy.
|
|
155
|
+
* - `stale`: same package name present in the new version but at a different
|
|
156
|
+
* version → the old-version history entry is superseded (a global install
|
|
157
|
+
* already replaced the files); history-only cleanup, no uninstall.
|
|
158
|
+
*/
|
|
159
|
+
export interface ReplacePlan {
|
|
160
|
+
remove: ReplaceRemovalItem[];
|
|
161
|
+
keepShared: ReplaceSharedItem[];
|
|
162
|
+
stale: ReplaceRemovalItem[];
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Compute the replace plan for installing a new version of `snapshotName`.
|
|
166
|
+
*
|
|
167
|
+
* @param snapshotName - the snapshot whose version is being replaced
|
|
168
|
+
* @param newSet - the new version's full package set (name -> version),
|
|
169
|
+
* including the extends chain (e.g. from collectAllPackages)
|
|
170
|
+
*
|
|
171
|
+
* Ordering note: history keys are `name@version`, so recording the new version
|
|
172
|
+
* (e.g. `a@2`) never overwrites the previous entry (`a@1`) — both coexist. This
|
|
173
|
+
* function therefore works correctly whether called before OR after recording,
|
|
174
|
+
* and the install flow calls it AFTER recordInstalledSpecs/recordReferences.
|
|
175
|
+
* That order is in fact preferable: referencedBy for shared packages is
|
|
176
|
+
* up to date, the new current-version entries are classified as "keep", and
|
|
177
|
+
* superseded old-version entries are detected as `stale`. The plan is computed
|
|
178
|
+
* by iterating referencedBy (not getPackagesBySnapshot).
|
|
179
|
+
*/
|
|
180
|
+
export declare function computeReplacePlan(snapshotName: string, newSet: Record<string, string>, historyPath?: string): ReplacePlan;
|
|
181
|
+
/**
|
|
182
|
+
* Apply the history side of a replace plan.
|
|
183
|
+
*
|
|
184
|
+
* @param removed - items whose uninstall SUCCEEDED (their history key is deleted)
|
|
185
|
+
* @param keepShared - items kept installed; `snapshotName` is dropped from refs
|
|
186
|
+
* @param stale - superseded old-version items; `snapshotName` dropped from refs
|
|
187
|
+
*
|
|
188
|
+
* For keepShared/stale entries, if dropping `snapshotName` leaves an empty
|
|
189
|
+
* referencedBy the history key is deleted too. Uninstall failures should be
|
|
190
|
+
* omitted from `removed` so their entries are preserved for a later retry.
|
|
191
|
+
*/
|
|
192
|
+
export declare function applyReplaceHistory(snapshotName: string, removed: ReplaceRemovalItem[], keepShared: ReplaceSharedItem[], stale: ReplaceRemovalItem[], historyPath?: string): void;
|
|
108
193
|
//# sourceMappingURL=dedup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,WAAW,qBAAqB;IACpC,
|
|
1
|
+
{"version":3,"file":"dedup.d.ts","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,12 @@ export function loadInstallHistory(historyPath) {
|
|
|
37
37
|
if (!data.packages || typeof data.packages !== 'object') {
|
|
38
38
|
return { packages: {}, updatedAt: new Date().toISOString() };
|
|
39
39
|
}
|
|
40
|
+
// Backward-compat migration: ensure every entry has a referencedBy set.
|
|
41
|
+
// Older history files (pre replace-mode / ADR 001) only stored `snapshot`
|
|
42
|
+
// (the first installer). Backfill referencedBy = [snapshot] so the safety
|
|
43
|
+
// check has data to work with. This runs in-memory on every load; it is
|
|
44
|
+
// persisted the next time saveInstallHistory() is called.
|
|
45
|
+
backfillReferencedBy(data);
|
|
40
46
|
return data;
|
|
41
47
|
}
|
|
42
48
|
catch {
|
|
@@ -44,6 +50,19 @@ export function loadInstallHistory(historyPath) {
|
|
|
44
50
|
return { packages: {}, updatedAt: new Date().toISOString() };
|
|
45
51
|
}
|
|
46
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Ensure every history entry has a `referencedBy` array (migration/backfill).
|
|
55
|
+
* Missing/invalid → `[snapshot]` (or `[]` if snapshot also missing).
|
|
56
|
+
* Mutates the passed history in place.
|
|
57
|
+
*/
|
|
58
|
+
export function backfillReferencedBy(history) {
|
|
59
|
+
for (const entry of Object.values(history.packages)) {
|
|
60
|
+
if (!Array.isArray(entry.referencedBy)) {
|
|
61
|
+
entry.referencedBy = entry.snapshot ? [entry.snapshot] : [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return history;
|
|
65
|
+
}
|
|
47
66
|
/**
|
|
48
67
|
* Save install history to disk
|
|
49
68
|
*/
|
|
@@ -64,14 +83,64 @@ export function recordInstalledPackages(packages, snapshotName, historyPath) {
|
|
|
64
83
|
const now = new Date().toISOString();
|
|
65
84
|
for (const [name, version] of Object.entries(packages)) {
|
|
66
85
|
const key = `${name}@${version}`;
|
|
67
|
-
history.packages[key]
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
86
|
+
const existing = history.packages[key];
|
|
87
|
+
if (existing) {
|
|
88
|
+
// Package already tracked: preserve the first-installer metadata
|
|
89
|
+
// (snapshot / installedAt) and just union this snapshot into referencedBy.
|
|
90
|
+
const refs = new Set(existing.referencedBy ?? (existing.snapshot ? [existing.snapshot] : []));
|
|
91
|
+
refs.add(snapshotName);
|
|
92
|
+
existing.referencedBy = Array.from(refs);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
history.packages[key] = {
|
|
96
|
+
snapshot: snapshotName,
|
|
97
|
+
installedAt: now,
|
|
98
|
+
version,
|
|
99
|
+
referencedBy: [snapshotName],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
72
102
|
}
|
|
73
103
|
saveInstallHistory(history, historyPath);
|
|
74
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Record that a snapshot *references* a set of packages, without (re)installing
|
|
107
|
+
* them. Used for dedup-skipped packages: even when a package was already
|
|
108
|
+
* installed by another snapshot and is skipped, the referencing snapshot must
|
|
109
|
+
* still be recorded in referencedBy so replace-mode won't later remove a
|
|
110
|
+
* package that this snapshot depends on.
|
|
111
|
+
*
|
|
112
|
+
* Only touches packages that already exist in history (skipped ⇒ present).
|
|
113
|
+
* Non-existent keys are ignored (no phantom entries).
|
|
114
|
+
*/
|
|
115
|
+
export function recordReferences(packages, snapshotName, historyPath) {
|
|
116
|
+
const history = loadInstallHistory(historyPath);
|
|
117
|
+
let changed = false;
|
|
118
|
+
for (const [name, version] of Object.entries(packages)) {
|
|
119
|
+
const key = `${name}@${version}`;
|
|
120
|
+
const existing = history.packages[key];
|
|
121
|
+
if (!existing)
|
|
122
|
+
continue;
|
|
123
|
+
const refs = new Set(existing.referencedBy ?? (existing.snapshot ? [existing.snapshot] : []));
|
|
124
|
+
if (!refs.has(snapshotName)) {
|
|
125
|
+
refs.add(snapshotName);
|
|
126
|
+
existing.referencedBy = Array.from(refs);
|
|
127
|
+
changed = true;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (changed)
|
|
131
|
+
saveInstallHistory(history, historyPath);
|
|
132
|
+
}
|
|
133
|
+
/** Record references from a list of specs (e.g. ["@ist/sesh@0.3.33"]). */
|
|
134
|
+
export function recordReferencesFromSpecs(specs, snapshotName, historyPath) {
|
|
135
|
+
const packages = {};
|
|
136
|
+
for (const spec of specs) {
|
|
137
|
+
const atIdx = spec.lastIndexOf('@');
|
|
138
|
+
if (atIdx > 0) {
|
|
139
|
+
packages[spec.substring(0, atIdx)] = spec.substring(atIdx + 1);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
recordReferences(packages, snapshotName, historyPath);
|
|
143
|
+
}
|
|
75
144
|
/**
|
|
76
145
|
* Record a list of installed package specs (e.g., ["@ist/sesh@0.3.33"])
|
|
77
146
|
*/
|
|
@@ -193,4 +262,101 @@ export function getInstalledCount(historyPath) {
|
|
|
193
262
|
const history = loadInstallHistory(historyPath);
|
|
194
263
|
return Object.keys(history.packages).length;
|
|
195
264
|
}
|
|
265
|
+
/** Split a "name@version" history key into its package name. */
|
|
266
|
+
function keyToName(key) {
|
|
267
|
+
const atIdx = key.lastIndexOf('@');
|
|
268
|
+
return atIdx > 0 ? key.substring(0, atIdx) : key;
|
|
269
|
+
}
|
|
270
|
+
/** Snapshot names that reference (require) a given package@version. */
|
|
271
|
+
export function getReferencedBy(name, version, historyPath) {
|
|
272
|
+
const history = loadInstallHistory(historyPath);
|
|
273
|
+
const entry = history.packages[`${name}@${version}`];
|
|
274
|
+
if (!entry)
|
|
275
|
+
return [];
|
|
276
|
+
return entry.referencedBy ?? (entry.snapshot ? [entry.snapshot] : []);
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Compute the replace plan for installing a new version of `snapshotName`.
|
|
280
|
+
*
|
|
281
|
+
* @param snapshotName - the snapshot whose version is being replaced
|
|
282
|
+
* @param newSet - the new version's full package set (name -> version),
|
|
283
|
+
* including the extends chain (e.g. from collectAllPackages)
|
|
284
|
+
*
|
|
285
|
+
* Ordering note: history keys are `name@version`, so recording the new version
|
|
286
|
+
* (e.g. `a@2`) never overwrites the previous entry (`a@1`) — both coexist. This
|
|
287
|
+
* function therefore works correctly whether called before OR after recording,
|
|
288
|
+
* and the install flow calls it AFTER recordInstalledSpecs/recordReferences.
|
|
289
|
+
* That order is in fact preferable: referencedBy for shared packages is
|
|
290
|
+
* up to date, the new current-version entries are classified as "keep", and
|
|
291
|
+
* superseded old-version entries are detected as `stale`. The plan is computed
|
|
292
|
+
* by iterating referencedBy (not getPackagesBySnapshot).
|
|
293
|
+
*/
|
|
294
|
+
export function computeReplacePlan(snapshotName, newSet, historyPath) {
|
|
295
|
+
const history = loadInstallHistory(historyPath); // backfilled → referencedBy present
|
|
296
|
+
const plan = { remove: [], keepShared: [], stale: [] };
|
|
297
|
+
for (const [key, entry] of Object.entries(history.packages)) {
|
|
298
|
+
const refs = new Set(entry.referencedBy ?? (entry.snapshot ? [entry.snapshot] : []));
|
|
299
|
+
if (!refs.has(snapshotName))
|
|
300
|
+
continue; // not part of this snapshot's set → untouched
|
|
301
|
+
const name = keyToName(key);
|
|
302
|
+
const version = entry.version;
|
|
303
|
+
if (name in newSet) {
|
|
304
|
+
if (newSet[name] === version) {
|
|
305
|
+
continue; // still current in the new version → keep as-is
|
|
306
|
+
}
|
|
307
|
+
// Same package, different version → old entry superseded by the new install.
|
|
308
|
+
plan.stale.push({ name, version });
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
// Package name is gone from the new version → removal candidate.
|
|
312
|
+
const remaining = new Set(refs);
|
|
313
|
+
remaining.delete(snapshotName);
|
|
314
|
+
if (remaining.size === 0) {
|
|
315
|
+
plan.remove.push({ name, version }); // nobody else references it → safe to remove
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
// Still referenced by another snapshot → keep installed (safety guard).
|
|
319
|
+
plan.keepShared.push({ name, version, remainingRefs: Array.from(remaining) });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return plan;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Apply the history side of a replace plan.
|
|
326
|
+
*
|
|
327
|
+
* @param removed - items whose uninstall SUCCEEDED (their history key is deleted)
|
|
328
|
+
* @param keepShared - items kept installed; `snapshotName` is dropped from refs
|
|
329
|
+
* @param stale - superseded old-version items; `snapshotName` dropped from refs
|
|
330
|
+
*
|
|
331
|
+
* For keepShared/stale entries, if dropping `snapshotName` leaves an empty
|
|
332
|
+
* referencedBy the history key is deleted too. Uninstall failures should be
|
|
333
|
+
* omitted from `removed` so their entries are preserved for a later retry.
|
|
334
|
+
*/
|
|
335
|
+
export function applyReplaceHistory(snapshotName, removed, keepShared, stale, historyPath) {
|
|
336
|
+
const history = loadInstallHistory(historyPath);
|
|
337
|
+
// Hard-delete successfully uninstalled packages.
|
|
338
|
+
for (const item of removed) {
|
|
339
|
+
delete history.packages[`${item.name}@${item.version}`];
|
|
340
|
+
}
|
|
341
|
+
// Drop this snapshot from the refs of kept/superseded packages.
|
|
342
|
+
const dropRef = (name, version) => {
|
|
343
|
+
const key = `${name}@${version}`;
|
|
344
|
+
const entry = history.packages[key];
|
|
345
|
+
if (!entry)
|
|
346
|
+
return;
|
|
347
|
+
const refs = new Set(entry.referencedBy ?? (entry.snapshot ? [entry.snapshot] : []));
|
|
348
|
+
refs.delete(snapshotName);
|
|
349
|
+
if (refs.size === 0) {
|
|
350
|
+
delete history.packages[key];
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
entry.referencedBy = Array.from(refs);
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
for (const item of keepShared)
|
|
357
|
+
dropRef(item.name, item.version);
|
|
358
|
+
for (const item of stale)
|
|
359
|
+
dropRef(item.name, item.version);
|
|
360
|
+
saveInstallHistory(history, historyPath);
|
|
361
|
+
}
|
|
196
362
|
//# sourceMappingURL=dedup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dedup.js","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dedup.js","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAyD5B,+DAA+D;AAC/D,0BAA0B;AAC1B,+DAA+D;AAE/D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAoB;IACrD,MAAM,QAAQ,GAAG,WAAW,IAAI,YAAY,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAEnD,qBAAqB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/D,CAAC;QAED,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,wEAAwE;QACxE,0DAA0D;QAC1D,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;QAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAuB,EAAE,WAAoB;IAC9E,MAAM,QAAQ,GAAG,WAAW,IAAI,YAAY,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgC,EAChC,YAAoB,EACpB,WAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,QAAQ,EAAE,CAAC;YACb,iEAAiE;YACjE,2EAA2E;YAC3E,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvB,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG;gBACtB,QAAQ,EAAE,YAAY;gBACtB,WAAW,EAAE,GAAG;gBAChB,OAAO;gBACP,YAAY,EAAE,CAAC,YAAY,CAAC;aAC7B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgC,EAChC,YAAoB,EACpB,WAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACvB,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QAAE,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,yBAAyB,CACvC,KAAe,EACf,YAAoB,EACpB,WAAoB;IAEpB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAe,EACf,YAAoB,EACpB,WAAoB;IAEpB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAC/D,CAAC;AAED,+DAA+D;AAC/D,cAAc;AACd,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,OAAe,EACf,OAAwB;IAExB,MAAM,CAAC,GAAG,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACjC,OAAO,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC;AAC3B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACnB,QAAgC,EAChC,OAAwB;IAExB,MAAM,CAAC,GAAG,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAC1C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,OAAO;gBACP,WAAW,EAAE,QAAQ,CAAC,QAAQ;gBAC9B,WAAW,EAAE,QAAQ,CAAC,WAAW;aAClC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgC,EAChC,OAAwB;IAExB,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;IAEpD,MAAM,MAAM,GAAgB;QAC1B,cAAc;QACd,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM;QACpD,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoD,EACpD,OAAwB;IAKxB,MAAM,CAAC,GAAG,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAC1C,MAAM,YAAY,GAA2C,EAAE,CAAC;IAChE,MAAM,YAAY,GAAqB,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,YAAY,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QACxC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AACxC,CAAC;AAED,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAE/D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAoB;IACtD,MAAM,QAAQ,GAAG,WAAW,IAAI,YAAY,CAAC;IAC7C,MAAM,YAAY,GAAmB;QACnC,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,kBAAkB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,WAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAoB;IACpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACnD,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAAe,EACf,WAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,CAAC;AAoCD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAoB,EACpB,MAA8B,EAC9B,WAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,oCAAoC;IACrF,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAEpE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,SAAS,CAAC,8CAA8C;QAErF,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE9B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC7B,SAAS,CAAC,gDAAgD;YAC5D,CAAC;YACD,6EAA6E;YAC7E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QAED,iEAAiE;QACjE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/B,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,6CAA6C;QACpF,CAAC;aAAM,CAAC;YACN,wEAAwE;YACxE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAAoB,EACpB,OAA6B,EAC7B,UAA+B,EAC/B,KAA2B,EAC3B,WAAoB;IAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAEhD,iDAAiD;IACjD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,gEAAgE;IAChE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAQ,EAAE;QACtD,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAE3D,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -17,5 +17,5 @@
|
|
|
17
17
|
* // After successful install, record them
|
|
18
18
|
* recordInstalledPackages(result.toInstall, '@ist/full');
|
|
19
19
|
*/
|
|
20
|
-
export { dedup, dedupWithReport, dedupInstallBlock, isAlreadyInstalled, loadInstallHistory, saveInstallHistory, recordInstalledPackages, recordInstalledSpecs, clearInstallHistory, getPackagesBySnapshot, getInstalledCount, getHistoryFilePath, type InstalledPackageEntry, type InstallHistory, type DedupResult, type DedupReport, type SkippedPackage, } from './dedup.js';
|
|
20
|
+
export { dedup, dedupWithReport, dedupInstallBlock, isAlreadyInstalled, loadInstallHistory, saveInstallHistory, recordInstalledPackages, recordInstalledSpecs, recordReferences, recordReferencesFromSpecs, clearInstallHistory, backfillReferencedBy, getPackagesBySnapshot, getInstalledCount, getHistoryFilePath, getReferencedBy, computeReplacePlan, applyReplaceHistory, type InstalledPackageEntry, type InstallHistory, type DedupResult, type DedupReport, type SkippedPackage, type ReplacePlan, type ReplaceRemovalItem, type ReplaceSharedItem, } from './dedup.js';
|
|
21
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAEL,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAGlB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAEL,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAGlB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EAGpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAGf,kBAAkB,EAClB,mBAAmB,EAGnB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -21,7 +21,9 @@ export {
|
|
|
21
21
|
// Core dedup functions
|
|
22
22
|
dedup, dedupWithReport, dedupInstallBlock, isAlreadyInstalled,
|
|
23
23
|
// History management
|
|
24
|
-
loadInstallHistory, saveInstallHistory, recordInstalledPackages, recordInstalledSpecs, clearInstallHistory,
|
|
24
|
+
loadInstallHistory, saveInstallHistory, recordInstalledPackages, recordInstalledSpecs, recordReferences, recordReferencesFromSpecs, clearInstallHistory, backfillReferencedBy,
|
|
25
25
|
// Utility functions
|
|
26
|
-
getPackagesBySnapshot, getInstalledCount, getHistoryFilePath,
|
|
26
|
+
getPackagesBySnapshot, getInstalledCount, getHistoryFilePath, getReferencedBy,
|
|
27
|
+
// Replace mode (ADR 001)
|
|
28
|
+
computeReplacePlan, applyReplaceHistory, } from './dedup.js';
|
|
27
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO;AACL,uBAAuB;AACvB,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB;AAElB,qBAAqB;AACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO;AACL,uBAAuB;AACvB,KAAK,EACL,eAAe,EACf,iBAAiB,EACjB,kBAAkB;AAElB,qBAAqB;AACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB;AAEpB,oBAAoB;AACpB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe;AAEf,yBAAyB;AACzB,kBAAkB,EAClB,mBAAmB,GAWpB,MAAM,YAAY,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microwiseai/snapshot-dedup",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Deduplication logic for Snapshot CLI - prevents reinstalling already-installed packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -12,10 +12,13 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"scripts": {
|
|
15
|
-
"
|
|
15
|
+
"prebuild": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
16
|
+
"build": "tsc -p tsconfig.build.json",
|
|
16
17
|
"dev": "tsc --watch",
|
|
18
|
+
"typecheck": "tsc --noEmit",
|
|
17
19
|
"test": "vitest",
|
|
18
20
|
"test:run": "vitest run",
|
|
21
|
+
"lint": "eslint src",
|
|
19
22
|
"prepublishOnly": "npm run build"
|
|
20
23
|
},
|
|
21
24
|
"files": [
|
|
@@ -32,6 +35,9 @@
|
|
|
32
35
|
"dependencies": {},
|
|
33
36
|
"devDependencies": {
|
|
34
37
|
"@types/node": "^20.11.0",
|
|
38
|
+
"@typescript-eslint/eslint-plugin": "^8.57.0",
|
|
39
|
+
"@typescript-eslint/parser": "^8.57.0",
|
|
40
|
+
"eslint": "^10.0.3",
|
|
35
41
|
"typescript": "^5.7.3",
|
|
36
42
|
"vitest": "^4.0.18"
|
|
37
43
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@microwiseai/snapshot",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "CLI for installing IST Snapshot packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/lib.js",
|
|
@@ -19,8 +19,10 @@
|
|
|
19
19
|
"snapshot": "./dist/index.js"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"
|
|
22
|
+
"prebuild": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
23
|
+
"build": "tsc -p tsconfig.build.json",
|
|
23
24
|
"dev": "tsc --watch",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
24
26
|
"test": "vitest",
|
|
25
27
|
"test:run": "vitest run",
|
|
26
28
|
"lint": "eslint src",
|
|
@@ -43,7 +45,7 @@
|
|
|
43
45
|
"@microwiseai/import-telemetry": "^0.1.0",
|
|
44
46
|
"@microwiseai/license": "^0.1.4",
|
|
45
47
|
"@microwiseai/skit": "^0.1.19",
|
|
46
|
-
"@microwiseai/snapshot-dedup": "
|
|
48
|
+
"@microwiseai/snapshot-dedup": "0.2.0",
|
|
47
49
|
"@microwiseai/snapshot-parallel": "^0.1.0",
|
|
48
50
|
"chalk": "^5.3.0",
|
|
49
51
|
"commander": "^12.1.0",
|
|
@@ -67,5 +69,8 @@
|
|
|
67
69
|
"@microwiseai/skit",
|
|
68
70
|
"@microwiseai/snapshot-dedup",
|
|
69
71
|
"@microwiseai/snapshot-parallel"
|
|
70
|
-
]
|
|
72
|
+
],
|
|
73
|
+
"glpkg": {
|
|
74
|
+
"group": "microwiseai"
|
|
75
|
+
}
|
|
71
76
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access-sync.test.d.ts","sourceRoot":"","sources":["../../src/lib/access-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
-
import { syncPackageAccess } from './access-sync.js';
|
|
3
|
-
import { LICENSE_API_URL } from './config.js';
|
|
4
|
-
/**
|
|
5
|
-
* Unit tests for access-sync.
|
|
6
|
-
*
|
|
7
|
-
* `fetch` is fully mocked — no real license-api write calls are made.
|
|
8
|
-
* Transitive resolution is disabled so the only network surface is the
|
|
9
|
-
* idempotent upsert (POST /admin/package-access/with-deps).
|
|
10
|
-
*/
|
|
11
|
-
const UPSERT_URL = `${LICENSE_API_URL}/admin/package-access/with-deps`;
|
|
12
|
-
function makeFetchMock() {
|
|
13
|
-
return vi.fn(async () => ({
|
|
14
|
-
ok: true,
|
|
15
|
-
json: async () => ({}),
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
/** Extract parsed bodies of every upsert call recorded by the fetch mock. */
|
|
19
|
-
function upsertBodies(fetchMock) {
|
|
20
|
-
return fetchMock.mock.calls
|
|
21
|
-
.filter((call) => call[0] === UPSERT_URL)
|
|
22
|
-
.map((call) => JSON.parse(call[1].body));
|
|
23
|
-
}
|
|
24
|
-
describe('syncPackageAccess - snapshot own package registration', () => {
|
|
25
|
-
let originalFetch;
|
|
26
|
-
beforeEach(() => {
|
|
27
|
-
originalFetch = globalThis.fetch;
|
|
28
|
-
process.env.LICENSE_API_ADMIN_KEY = 'test-admin-key';
|
|
29
|
-
vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
30
|
-
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
31
|
-
});
|
|
32
|
-
afterEach(() => {
|
|
33
|
-
globalThis.fetch = originalFetch;
|
|
34
|
-
delete process.env.LICENSE_API_ADMIN_KEY;
|
|
35
|
-
vi.restoreAllMocks();
|
|
36
|
-
});
|
|
37
|
-
it("registers the snapshot's own package with its declared access level", async () => {
|
|
38
|
-
const fetchMock = makeFetchMock();
|
|
39
|
-
globalThis.fetch = fetchMock;
|
|
40
|
-
const snapshot = {
|
|
41
|
-
name: '@ist/testing',
|
|
42
|
-
version: '0.1.0',
|
|
43
|
-
access: 'authenticated',
|
|
44
|
-
install: {
|
|
45
|
-
'gitlab-install': {
|
|
46
|
-
'@ist/member-a': '1.0.0',
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
const result = await syncPackageAccess(snapshot, { includeTransitive: false });
|
|
51
|
-
const bodies = upsertBodies(fetchMock);
|
|
52
|
-
const self = bodies.find((b) => b.scope === '@ist' && b.packageName === 'testing');
|
|
53
|
-
expect(self).toBeDefined();
|
|
54
|
-
expect(self.accessLevel).toBe('authenticated');
|
|
55
|
-
// Snapshot's own package has no parent.
|
|
56
|
-
expect(self.parentPackage).toBeUndefined();
|
|
57
|
-
// Still uses the idempotent with-deps upsert with empty dependencies.
|
|
58
|
-
expect(self.dependencies).toEqual([]);
|
|
59
|
-
// Member package is registered too and points to the snapshot as parent.
|
|
60
|
-
const member = bodies.find((b) => b.packageName === 'member-a');
|
|
61
|
-
expect(member).toBeDefined();
|
|
62
|
-
expect(member.parentPackage).toBe('@ist/testing');
|
|
63
|
-
expect(result.registered).toContain('@ist/testing');
|
|
64
|
-
});
|
|
65
|
-
it('maps public access for the snapshot own package', async () => {
|
|
66
|
-
const fetchMock = makeFetchMock();
|
|
67
|
-
globalThis.fetch = fetchMock;
|
|
68
|
-
const snapshot = {
|
|
69
|
-
name: '@ist/free',
|
|
70
|
-
version: '1.0.0',
|
|
71
|
-
access: 'public',
|
|
72
|
-
install: {},
|
|
73
|
-
};
|
|
74
|
-
await syncPackageAccess(snapshot, { includeTransitive: false });
|
|
75
|
-
const self = upsertBodies(fetchMock).find((b) => b.packageName === 'free');
|
|
76
|
-
expect(self).toBeDefined();
|
|
77
|
-
expect(self.accessLevel).toBe('public');
|
|
78
|
-
});
|
|
79
|
-
it('maps licensed access and propagates productId for the snapshot own package', async () => {
|
|
80
|
-
const fetchMock = makeFetchMock();
|
|
81
|
-
globalThis.fetch = fetchMock;
|
|
82
|
-
const snapshot = {
|
|
83
|
-
name: '@ist/pro',
|
|
84
|
-
version: '1.0.0',
|
|
85
|
-
access: { type: 'licensed', productId: 'prod_123' },
|
|
86
|
-
install: {},
|
|
87
|
-
};
|
|
88
|
-
await syncPackageAccess(snapshot, { includeTransitive: false });
|
|
89
|
-
const self = upsertBodies(fetchMock).find((b) => b.packageName === 'pro');
|
|
90
|
-
expect(self).toBeDefined();
|
|
91
|
-
expect(self.accessLevel).toBe('licensed');
|
|
92
|
-
expect(self.requiredProductIds).toBe('prod_123');
|
|
93
|
-
});
|
|
94
|
-
it('does not duplicate when the snapshot package also appears as a member', async () => {
|
|
95
|
-
const fetchMock = makeFetchMock();
|
|
96
|
-
globalThis.fetch = fetchMock;
|
|
97
|
-
const snapshot = {
|
|
98
|
-
name: '@ist/testing',
|
|
99
|
-
version: '0.1.0',
|
|
100
|
-
access: 'authenticated',
|
|
101
|
-
install: {
|
|
102
|
-
'gitlab-install': {
|
|
103
|
-
'@ist/testing': '0.1.0',
|
|
104
|
-
},
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
await syncPackageAccess(snapshot, { includeTransitive: false });
|
|
108
|
-
const selfHits = upsertBodies(fetchMock).filter((b) => b.scope === '@ist' && b.packageName === 'testing');
|
|
109
|
-
expect(selfHits).toHaveLength(1);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
//# sourceMappingURL=access-sync.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"access-sync.test.js","sourceRoot":"","sources":["../../src/lib/access-sync.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;;;GAMG;AAEH,MAAM,UAAU,GAAG,GAAG,eAAe,iCAAiC,CAAC;AAEvE,SAAS,aAAa;IACpB,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACxB,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACvB,CAAC,CAA4B,CAAC;AACjC,CAAC;AAED,6EAA6E;AAC7E,SAAS,YAAY,CAAC,SAAmC;IACvD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK;SACxB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;SACxC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAc,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE,IAAI,aAA2B,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,gBAAgB,CAAC;QACrD,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtD,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACzC,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,QAAQ,GAAa;YACzB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE;gBACP,gBAAgB,EAAE;oBAChB,eAAe,EAAE,OAAO;iBACzB;aACF;SACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QAE/E,MAAM,MAAM,GAAG,YAAY,CAAC,SAAgB,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC;QAEnF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/C,wCAAwC;QACxC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,sEAAsE;QACtE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEtC,yEAAyE;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,QAAQ,GAAa;YACzB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,YAAY,CAAC,SAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC;QAClF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,QAAQ,GAAa;YACzB,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;YACnD,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,MAAM,IAAI,GAAG,YAAY,CAAC,SAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;QAClC,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;QAE7B,MAAM,QAAQ,GAAa;YACzB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE;gBACP,gBAAgB,EAAE;oBAChB,cAAc,EAAE,OAAO;iBACxB;aACF;SACF,CAAC;QAEF,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;QAEhE,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAgB,CAAC,CAAC,MAAM,CACpD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CACzD,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-flow.test.d.ts","sourceRoot":"","sources":["../../src/lib/auth-flow.test.ts"],"names":[],"mappings":""}
|