@workflow/builders 5.0.0-beta.44 → 5.0.0-beta.47

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.
@@ -0,0 +1,35 @@
1
+ import type { WorkflowManifest } from './apply-swc-transform.js';
2
+ /**
3
+ * Location (and identity fingerprint) of a manifest entry that produced a
4
+ * workflow/step ID during a build. Shared by the duplicate-ID checks in
5
+ * `swc-esbuild-plugin.ts` (esbuild bundling path) and `base-builder.ts`
6
+ * (source registration path).
7
+ */
8
+ export type ManifestEntryLocation = {
9
+ filePath: string;
10
+ name: string;
11
+ /**
12
+ * Fingerprint (SHA-256) of the source file contents that produced this
13
+ * entry. Used to recognize equivalent duplicate copies of the same module
14
+ * (see `assertUniqueManifestIds`). `undefined` when the caller cannot
15
+ * provide the source contents, which disables deduplication and preserves
16
+ * the collision error.
17
+ */
18
+ contentHash?: string;
19
+ };
20
+ /**
21
+ * Hash source file contents for manifest-entry equivalence comparison.
22
+ */
23
+ export declare function hashManifestSource(source: string): string;
24
+ /**
25
+ * Merge one file's transform manifest into the build-wide manifest, failing
26
+ * the build on genuine duplicate step/workflow IDs while deduplicating
27
+ * equivalent copies of the same module (e.g. pnpm peer-dependency variants
28
+ * of one package version).
29
+ *
30
+ * @param contentHash - Fingerprint of the source file that produced
31
+ * `incoming` (see {@link hashManifestSource}). Callers merge one file's
32
+ * manifest at a time, so a single hash covers every incoming entry.
33
+ */
34
+ export declare function mergeWorkflowManifest(target: WorkflowManifest, incoming: WorkflowManifest, stepIds: Map<string, ManifestEntryLocation>, workflowIds: Map<string, ManifestEntryLocation>, contentHash?: string): void;
35
+ //# sourceMappingURL=manifest-ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-ids.d.ts","sourceRoot":"","sources":["../src/manifest-ids.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD;AA6DD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC3C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC/C,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAmBN"}
@@ -0,0 +1,69 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { WorkflowBuildError } from '@workflow/errors';
3
+ /**
4
+ * Hash source file contents for manifest-entry equivalence comparison.
5
+ */
6
+ export function hashManifestSource(source) {
7
+ return createHash('sha256').update(source).digest('hex');
8
+ }
9
+ function formatIdLocation(location) {
10
+ return `${location.filePath}#${location.name}`;
11
+ }
12
+ function assertUniqueManifestIds(entriesByFile, ids, getId, label, contentHash) {
13
+ for (const [filePath, entries] of Object.entries(entriesByFile || {})) {
14
+ for (const [name, data] of Object.entries(entries)) {
15
+ const id = getId(data);
16
+ const existing = ids.get(id);
17
+ const current = { filePath, name, contentHash };
18
+ if (existing &&
19
+ (existing.filePath !== current.filePath ||
20
+ existing.name !== current.name)) {
21
+ // Two *different* files generated the same ID. If both files have
22
+ // identical contents and the ID belongs to the same symbol, they are
23
+ // duplicate copies of the same logical module rather than a genuine
24
+ // collision. The main producer of such copies is pnpm, which
25
+ // materializes one package version once per peer-dependency
26
+ // resolution (node_modules/.pnpm/pkg@1.0.0_peer-a@.../ and
27
+ // .../pkg@1.0.0_peer-b@.../ hard-link the same store files), while
28
+ // the canonical ID intentionally describes the logical module
29
+ // (`name/subpath@version`) and ignores installation topology.
30
+ // Registering equivalent definitions is harmless — they run the same
31
+ // code under the same ID — so keep the first one and continue.
32
+ if (existing.name === current.name &&
33
+ existing.contentHash !== undefined &&
34
+ existing.contentHash === current.contentHash) {
35
+ continue;
36
+ }
37
+ const idName = label === 'step' ? 'workflow step ID' : 'workflow ID';
38
+ const functionName = `${label} function`;
39
+ const capitalizedLabel = label === 'step' ? 'Step' : 'Workflow';
40
+ throw new WorkflowBuildError(`Duplicate ${idName} "${id}" generated for ${formatIdLocation(existing)} and ${formatIdLocation(current)}.`, {
41
+ hint: `${capitalizedLabel} IDs must be unique across a build. ` +
42
+ `If you own one of the colliding files, rename the ${functionName} or export ` +
43
+ `the package file through a unique package subpath. If the collision is in a ` +
44
+ `transitive dependency you don't control, file an issue with the upstream ` +
45
+ `package or pin to a non-colliding version.`,
46
+ });
47
+ }
48
+ ids.set(id, current);
49
+ }
50
+ }
51
+ }
52
+ /**
53
+ * Merge one file's transform manifest into the build-wide manifest, failing
54
+ * the build on genuine duplicate step/workflow IDs while deduplicating
55
+ * equivalent copies of the same module (e.g. pnpm peer-dependency variants
56
+ * of one package version).
57
+ *
58
+ * @param contentHash - Fingerprint of the source file that produced
59
+ * `incoming` (see {@link hashManifestSource}). Callers merge one file's
60
+ * manifest at a time, so a single hash covers every incoming entry.
61
+ */
62
+ export function mergeWorkflowManifest(target, incoming, stepIds, workflowIds, contentHash) {
63
+ assertUniqueManifestIds(incoming.steps, stepIds, (data) => data.stepId, 'step', contentHash);
64
+ assertUniqueManifestIds(incoming.workflows, workflowIds, (data) => data.workflowId, 'workflow', contentHash);
65
+ target.workflows = Object.assign(target.workflows || {}, incoming.workflows);
66
+ target.steps = Object.assign(target.steps || {}, incoming.steps);
67
+ target.classes = Object.assign(target.classes || {}, incoming.classes);
68
+ }
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QtaWRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21hbmlmZXN0LWlkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBc0J0RDs7R0FFRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFjO0lBQy9DLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsUUFBK0I7SUFDdkQsT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2pELENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM5QixhQUFpRSxFQUNqRSxHQUF1QyxFQUN2QyxLQUFnQyxFQUNoQyxLQUEwQixFQUMxQixXQUErQjtJQUUvQixLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RSxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNoRCxJQUNFLFFBQVE7Z0JBQ1IsQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRO29CQUNyQyxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDakMsQ0FBQztnQkFDRCxrRUFBa0U7Z0JBQ2xFLHFFQUFxRTtnQkFDckUsb0VBQW9FO2dCQUNwRSw2REFBNkQ7Z0JBQzdELDREQUE0RDtnQkFDNUQsMkRBQTJEO2dCQUMzRCxtRUFBbUU7Z0JBQ25FLDhEQUE4RDtnQkFDOUQsOERBQThEO2dCQUM5RCxxRUFBcUU7Z0JBQ3JFLCtEQUErRDtnQkFDL0QsSUFDRSxRQUFRLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJO29CQUM5QixRQUFRLENBQUMsV0FBVyxLQUFLLFNBQVM7b0JBQ2xDLFFBQVEsQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFDNUMsQ0FBQztvQkFDRCxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztnQkFDckUsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLLFdBQVcsQ0FBQztnQkFDekMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztnQkFDaEUsTUFBTSxJQUFJLGtCQUFrQixDQUMxQixhQUFhLE1BQU0sS0FBSyxFQUFFLG1CQUFtQixnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUMzRztvQkFDRSxJQUFJLEVBQ0YsR0FBRyxnQkFBZ0Isc0NBQXNDO3dCQUN6RCxxREFBcUQsWUFBWSxhQUFhO3dCQUM5RSw4RUFBOEU7d0JBQzlFLDJFQUEyRTt3QkFDM0UsNENBQTRDO2lCQUMvQyxDQUNGLENBQUM7WUFDSixDQUFDO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxNQUF3QixFQUN4QixRQUEwQixFQUMxQixPQUEyQyxFQUMzQyxXQUErQyxFQUMvQyxXQUFvQjtJQUVwQix1QkFBdUIsQ0FDckIsUUFBUSxDQUFDLEtBQUssRUFDZCxPQUFPLEVBQ1AsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQ3JCLE1BQU0sRUFDTixXQUFXLENBQ1osQ0FBQztJQUNGLHVCQUF1QixDQUNyQixRQUFRLENBQUMsU0FBUyxFQUNsQixXQUFXLEVBQ1gsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQ3pCLFVBQVUsRUFDVixXQUFXLENBQ1osQ0FBQztJQUVGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0UsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuaW1wb3J0IHsgV29ya2Zsb3dCdWlsZEVycm9yIH0gZnJvbSAnQHdvcmtmbG93L2Vycm9ycyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtmbG93TWFuaWZlc3QgfSBmcm9tICcuL2FwcGx5LXN3Yy10cmFuc2Zvcm0uanMnO1xuXG4vKipcbiAqIExvY2F0aW9uIChhbmQgaWRlbnRpdHkgZmluZ2VycHJpbnQpIG9mIGEgbWFuaWZlc3QgZW50cnkgdGhhdCBwcm9kdWNlZCBhXG4gKiB3b3JrZmxvdy9zdGVwIElEIGR1cmluZyBhIGJ1aWxkLiBTaGFyZWQgYnkgdGhlIGR1cGxpY2F0ZS1JRCBjaGVja3MgaW5cbiAqIGBzd2MtZXNidWlsZC1wbHVnaW4udHNgIChlc2J1aWxkIGJ1bmRsaW5nIHBhdGgpIGFuZCBgYmFzZS1idWlsZGVyLnRzYFxuICogKHNvdXJjZSByZWdpc3RyYXRpb24gcGF0aCkuXG4gKi9cbmV4cG9ydCB0eXBlIE1hbmlmZXN0RW50cnlMb2NhdGlvbiA9IHtcbiAgZmlsZVBhdGg6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogRmluZ2VycHJpbnQgKFNIQS0yNTYpIG9mIHRoZSBzb3VyY2UgZmlsZSBjb250ZW50cyB0aGF0IHByb2R1Y2VkIHRoaXNcbiAgICogZW50cnkuIFVzZWQgdG8gcmVjb2duaXplIGVxdWl2YWxlbnQgZHVwbGljYXRlIGNvcGllcyBvZiB0aGUgc2FtZSBtb2R1bGVcbiAgICogKHNlZSBgYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHNgKS4gYHVuZGVmaW5lZGAgd2hlbiB0aGUgY2FsbGVyIGNhbm5vdFxuICAgKiBwcm92aWRlIHRoZSBzb3VyY2UgY29udGVudHMsIHdoaWNoIGRpc2FibGVzIGRlZHVwbGljYXRpb24gYW5kIHByZXNlcnZlc1xuICAgKiB0aGUgY29sbGlzaW9uIGVycm9yLlxuICAgKi9cbiAgY29udGVudEhhc2g/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEhhc2ggc291cmNlIGZpbGUgY29udGVudHMgZm9yIG1hbmlmZXN0LWVudHJ5IGVxdWl2YWxlbmNlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoTWFuaWZlc3RTb3VyY2Uoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHNvdXJjZSkuZGlnZXN0KCdoZXgnKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SWRMb2NhdGlvbihsb2NhdGlvbjogTWFuaWZlc3RFbnRyeUxvY2F0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2xvY2F0aW9uLmZpbGVQYXRofSMke2xvY2F0aW9uLm5hbWV9YDtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHM8VEVudHJ5PihcbiAgZW50cmllc0J5RmlsZTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgVEVudHJ5Pj4gfCB1bmRlZmluZWQsXG4gIGlkczogTWFwPHN0cmluZywgTWFuaWZlc3RFbnRyeUxvY2F0aW9uPixcbiAgZ2V0SWQ6IChlbnRyeTogVEVudHJ5KSA9PiBzdHJpbmcsXG4gIGxhYmVsOiAnc3RlcCcgfCAnd29ya2Zsb3cnLFxuICBjb250ZW50SGFzaDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXNCeUZpbGUgfHwge30pKSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgZGF0YV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cmllcykpIHtcbiAgICAgIGNvbnN0IGlkID0gZ2V0SWQoZGF0YSk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGlkcy5nZXQoaWQpO1xuICAgICAgY29uc3QgY3VycmVudCA9IHsgZmlsZVBhdGgsIG5hbWUsIGNvbnRlbnRIYXNoIH07XG4gICAgICBpZiAoXG4gICAgICAgIGV4aXN0aW5nICYmXG4gICAgICAgIChleGlzdGluZy5maWxlUGF0aCAhPT0gY3VycmVudC5maWxlUGF0aCB8fFxuICAgICAgICAgIGV4aXN0aW5nLm5hbWUgIT09IGN1cnJlbnQubmFtZSlcbiAgICAgICkge1xuICAgICAgICAvLyBUd28gKmRpZmZlcmVudCogZmlsZXMgZ2VuZXJhdGVkIHRoZSBzYW1lIElELiBJZiBib3RoIGZpbGVzIGhhdmVcbiAgICAgICAgLy8gaWRlbnRpY2FsIGNvbnRlbnRzIGFuZCB0aGUgSUQgYmVsb25ncyB0byB0aGUgc2FtZSBzeW1ib2wsIHRoZXkgYXJlXG4gICAgICAgIC8vIGR1cGxpY2F0ZSBjb3BpZXMgb2YgdGhlIHNhbWUgbG9naWNhbCBtb2R1bGUgcmF0aGVyIHRoYW4gYSBnZW51aW5lXG4gICAgICAgIC8vIGNvbGxpc2lvbi4gVGhlIG1haW4gcHJvZHVjZXIgb2Ygc3VjaCBjb3BpZXMgaXMgcG5wbSwgd2hpY2hcbiAgICAgICAgLy8gbWF0ZXJpYWxpemVzIG9uZSBwYWNrYWdlIHZlcnNpb24gb25jZSBwZXIgcGVlci1kZXBlbmRlbmN5XG4gICAgICAgIC8vIHJlc29sdXRpb24gKG5vZGVfbW9kdWxlcy8ucG5wbS9wa2dAMS4wLjBfcGVlci1hQC4uLi8gYW5kXG4gICAgICAgIC8vIC4uLi9wa2dAMS4wLjBfcGVlci1iQC4uLi8gaGFyZC1saW5rIHRoZSBzYW1lIHN0b3JlIGZpbGVzKSwgd2hpbGVcbiAgICAgICAgLy8gdGhlIGNhbm9uaWNhbCBJRCBpbnRlbnRpb25hbGx5IGRlc2NyaWJlcyB0aGUgbG9naWNhbCBtb2R1bGVcbiAgICAgICAgLy8gKGBuYW1lL3N1YnBhdGhAdmVyc2lvbmApIGFuZCBpZ25vcmVzIGluc3RhbGxhdGlvbiB0b3BvbG9neS5cbiAgICAgICAgLy8gUmVnaXN0ZXJpbmcgZXF1aXZhbGVudCBkZWZpbml0aW9ucyBpcyBoYXJtbGVzcyDigJQgdGhleSBydW4gdGhlIHNhbWVcbiAgICAgICAgLy8gY29kZSB1bmRlciB0aGUgc2FtZSBJRCDigJQgc28ga2VlcCB0aGUgZmlyc3Qgb25lIGFuZCBjb250aW51ZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nLm5hbWUgPT09IGN1cnJlbnQubmFtZSAmJlxuICAgICAgICAgIGV4aXN0aW5nLmNvbnRlbnRIYXNoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBleGlzdGluZy5jb250ZW50SGFzaCA9PT0gY3VycmVudC5jb250ZW50SGFzaFxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZE5hbWUgPSBsYWJlbCA9PT0gJ3N0ZXAnID8gJ3dvcmtmbG93IHN0ZXAgSUQnIDogJ3dvcmtmbG93IElEJztcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7bGFiZWx9IGZ1bmN0aW9uYDtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRMYWJlbCA9IGxhYmVsID09PSAnc3RlcCcgPyAnU3RlcCcgOiAnV29ya2Zsb3cnO1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dCdWlsZEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgJHtpZE5hbWV9IFwiJHtpZH1cIiBnZW5lcmF0ZWQgZm9yICR7Zm9ybWF0SWRMb2NhdGlvbihleGlzdGluZyl9IGFuZCAke2Zvcm1hdElkTG9jYXRpb24oY3VycmVudCl9LmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGludDpcbiAgICAgICAgICAgICAgYCR7Y2FwaXRhbGl6ZWRMYWJlbH0gSURzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyBhIGJ1aWxkLiBgICtcbiAgICAgICAgICAgICAgYElmIHlvdSBvd24gb25lIG9mIHRoZSBjb2xsaWRpbmcgZmlsZXMsIHJlbmFtZSB0aGUgJHtmdW5jdGlvbk5hbWV9IG9yIGV4cG9ydCBgICtcbiAgICAgICAgICAgICAgYHRoZSBwYWNrYWdlIGZpbGUgdGhyb3VnaCBhIHVuaXF1ZSBwYWNrYWdlIHN1YnBhdGguIElmIHRoZSBjb2xsaXNpb24gaXMgaW4gYSBgICtcbiAgICAgICAgICAgICAgYHRyYW5zaXRpdmUgZGVwZW5kZW5jeSB5b3UgZG9uJ3QgY29udHJvbCwgZmlsZSBhbiBpc3N1ZSB3aXRoIHRoZSB1cHN0cmVhbSBgICtcbiAgICAgICAgICAgICAgYHBhY2thZ2Ugb3IgcGluIHRvIGEgbm9uLWNvbGxpZGluZyB2ZXJzaW9uLmAsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWRzLnNldChpZCwgY3VycmVudCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTWVyZ2Ugb25lIGZpbGUncyB0cmFuc2Zvcm0gbWFuaWZlc3QgaW50byB0aGUgYnVpbGQtd2lkZSBtYW5pZmVzdCwgZmFpbGluZ1xuICogdGhlIGJ1aWxkIG9uIGdlbnVpbmUgZHVwbGljYXRlIHN0ZXAvd29ya2Zsb3cgSURzIHdoaWxlIGRlZHVwbGljYXRpbmdcbiAqIGVxdWl2YWxlbnQgY29waWVzIG9mIHRoZSBzYW1lIG1vZHVsZSAoZS5nLiBwbnBtIHBlZXItZGVwZW5kZW5jeSB2YXJpYW50c1xuICogb2Ygb25lIHBhY2thZ2UgdmVyc2lvbikuXG4gKlxuICogQHBhcmFtIGNvbnRlbnRIYXNoIC0gRmluZ2VycHJpbnQgb2YgdGhlIHNvdXJjZSBmaWxlIHRoYXQgcHJvZHVjZWRcbiAqIGBpbmNvbWluZ2AgKHNlZSB7QGxpbmsgaGFzaE1hbmlmZXN0U291cmNlfSkuIENhbGxlcnMgbWVyZ2Ugb25lIGZpbGUnc1xuICogbWFuaWZlc3QgYXQgYSB0aW1lLCBzbyBhIHNpbmdsZSBoYXNoIGNvdmVycyBldmVyeSBpbmNvbWluZyBlbnRyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgdGFyZ2V0OiBXb3JrZmxvd01hbmlmZXN0LFxuICBpbmNvbWluZzogV29ya2Zsb3dNYW5pZmVzdCxcbiAgc3RlcElkczogTWFwPHN0cmluZywgTWFuaWZlc3RFbnRyeUxvY2F0aW9uPixcbiAgd29ya2Zsb3dJZHM6IE1hcDxzdHJpbmcsIE1hbmlmZXN0RW50cnlMb2NhdGlvbj4sXG4gIGNvbnRlbnRIYXNoPzogc3RyaW5nXG4pOiB2b2lkIHtcbiAgYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHMoXG4gICAgaW5jb21pbmcuc3RlcHMsXG4gICAgc3RlcElkcyxcbiAgICAoZGF0YSkgPT4gZGF0YS5zdGVwSWQsXG4gICAgJ3N0ZXAnLFxuICAgIGNvbnRlbnRIYXNoXG4gICk7XG4gIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICAgIGluY29taW5nLndvcmtmbG93cyxcbiAgICB3b3JrZmxvd0lkcyxcbiAgICAoZGF0YSkgPT4gZGF0YS53b3JrZmxvd0lkLFxuICAgICd3b3JrZmxvdycsXG4gICAgY29udGVudEhhc2hcbiAgKTtcblxuICB0YXJnZXQud29ya2Zsb3dzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQud29ya2Zsb3dzIHx8IHt9LCBpbmNvbWluZy53b3JrZmxvd3MpO1xuICB0YXJnZXQuc3RlcHMgPSBPYmplY3QuYXNzaWduKHRhcmdldC5zdGVwcyB8fCB7fSwgaW5jb21pbmcuc3RlcHMpO1xuICB0YXJnZXQuY2xhc3NlcyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LmNsYXNzZXMgfHwge30sIGluY29taW5nLmNsYXNzZXMpO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manifest-ids.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-ids.test.d.ts","sourceRoot":"","sources":["../src/manifest-ids.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { hashManifestSource, mergeWorkflowManifest, } from './manifest-ids.js';
3
+ function createMaps() {
4
+ return {
5
+ stepIds: new Map(),
6
+ workflowIds: new Map(),
7
+ };
8
+ }
9
+ function stepManifest(filePath, name, stepId) {
10
+ return {
11
+ steps: {
12
+ [filePath]: {
13
+ [name]: { stepId },
14
+ },
15
+ },
16
+ };
17
+ }
18
+ function workflowManifest(filePath, name, workflowId) {
19
+ return {
20
+ workflows: {
21
+ [filePath]: {
22
+ [name]: { workflowId },
23
+ },
24
+ },
25
+ };
26
+ }
27
+ const PEER_A_FILE = 'node_modules/.pnpm/pkg@1.0.0_peer-a@1.0.0/node_modules/pkg/dist/steps.js';
28
+ const PEER_B_FILE = 'node_modules/.pnpm/pkg@1.0.0_peer-b@2.0.0/node_modules/pkg/dist/steps.js';
29
+ const STEP_ID = 'step//pkg/steps@1.0.0//doWork';
30
+ const WORKFLOW_ID = 'workflow//pkg/steps@1.0.0//orchestrate';
31
+ describe('mergeWorkflowManifest duplicate ID handling', () => {
32
+ it('throws when two different files emit the same step ID with different contents', () => {
33
+ const { stepIds, workflowIds } = createMaps();
34
+ const target = {};
35
+ mergeWorkflowManifest(target, stepManifest(PEER_A_FILE, 'doWork', STEP_ID), stepIds, workflowIds, hashManifestSource('export const doWork = 1;'));
36
+ expect(() => mergeWorkflowManifest(target, stepManifest(PEER_B_FILE, 'doWork', STEP_ID), stepIds, workflowIds, hashManifestSource('export const doWork = 2;'))).toThrow(/Duplicate workflow step ID/);
37
+ });
38
+ it('deduplicates identical copies of the same module emitting the same step ID', () => {
39
+ const { stepIds, workflowIds } = createMaps();
40
+ const target = {};
41
+ const contentHash = hashManifestSource('export const doWork = 1;');
42
+ mergeWorkflowManifest(target, stepManifest(PEER_A_FILE, 'doWork', STEP_ID), stepIds, workflowIds, contentHash);
43
+ mergeWorkflowManifest(target, stepManifest(PEER_B_FILE, 'doWork', STEP_ID), stepIds, workflowIds, contentHash);
44
+ // The first registration wins in the ID map...
45
+ expect(stepIds.get(STEP_ID)?.filePath).toBe(PEER_A_FILE);
46
+ // ...but both file entries stay in the manifest (both copies register
47
+ // the same ID at runtime, which is harmless for identical code).
48
+ expect(Object.keys(target.steps ?? {})).toEqual([PEER_A_FILE, PEER_B_FILE]);
49
+ });
50
+ it('deduplicates identical copies emitting the same workflow ID', () => {
51
+ const { stepIds, workflowIds } = createMaps();
52
+ const target = {};
53
+ const contentHash = hashManifestSource('export const orchestrate = 1;');
54
+ mergeWorkflowManifest(target, workflowManifest(PEER_A_FILE, 'orchestrate', WORKFLOW_ID), stepIds, workflowIds, contentHash);
55
+ expect(() => mergeWorkflowManifest(target, workflowManifest(PEER_B_FILE, 'orchestrate', WORKFLOW_ID), stepIds, workflowIds, contentHash)).not.toThrow();
56
+ expect(workflowIds.get(WORKFLOW_ID)?.filePath).toBe(PEER_A_FILE);
57
+ });
58
+ it('throws when the same workflow ID comes from different contents', () => {
59
+ const { stepIds, workflowIds } = createMaps();
60
+ const target = {};
61
+ mergeWorkflowManifest(target, workflowManifest(PEER_A_FILE, 'orchestrate', WORKFLOW_ID), stepIds, workflowIds, hashManifestSource('a'));
62
+ expect(() => mergeWorkflowManifest(target, workflowManifest(PEER_B_FILE, 'orchestrate', WORKFLOW_ID), stepIds, workflowIds, hashManifestSource('b'))).toThrow(/Duplicate workflow ID/);
63
+ });
64
+ it('throws when content hashes are unavailable, even for equal names', () => {
65
+ const { stepIds, workflowIds } = createMaps();
66
+ const target = {};
67
+ mergeWorkflowManifest(target, stepManifest(PEER_A_FILE, 'doWork', STEP_ID), stepIds, workflowIds);
68
+ expect(() => mergeWorkflowManifest(target, stepManifest(PEER_B_FILE, 'doWork', STEP_ID), stepIds, workflowIds)).toThrow(/Duplicate workflow step ID/);
69
+ });
70
+ it('throws when identical contents map the same ID to different symbol names', () => {
71
+ const { stepIds, workflowIds } = createMaps();
72
+ const target = {};
73
+ const contentHash = hashManifestSource('shared');
74
+ mergeWorkflowManifest(target, stepManifest(PEER_A_FILE, 'doWork', STEP_ID), stepIds, workflowIds, contentHash);
75
+ expect(() => mergeWorkflowManifest(target, stepManifest(PEER_B_FILE, 'doOtherWork', STEP_ID), stepIds, workflowIds, contentHash)).toThrow(/Duplicate workflow step ID/);
76
+ });
77
+ it('allows re-merging the same file without error', () => {
78
+ const { stepIds, workflowIds } = createMaps();
79
+ const target = {};
80
+ const manifest = stepManifest(PEER_A_FILE, 'doWork', STEP_ID);
81
+ const contentHash = hashManifestSource('export const doWork = 1;');
82
+ mergeWorkflowManifest(target, manifest, stepIds, workflowIds, contentHash);
83
+ expect(() => mergeWorkflowManifest(target, manifest, stepIds, workflowIds, contentHash)).not.toThrow();
84
+ });
85
+ });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QtaWRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFuaWZlc3QtaWRzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlDLE9BQU8sRUFDTCxrQkFBa0IsRUFFbEIscUJBQXFCLEdBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsU0FBUyxVQUFVO0lBQ2pCLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQWlDO1FBQ2pELFdBQVcsRUFBRSxJQUFJLEdBQUcsRUFBaUM7S0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBRSxNQUFjO0lBQ2xFLE9BQU87UUFDTCxLQUFLLEVBQUU7WUFDTCxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNWLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUU7YUFDbkI7U0FDRjtLQUN5QixDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsSUFBWSxFQUFFLFVBQWtCO0lBQzFFLE9BQU87UUFDTCxTQUFTLEVBQUU7WUFDVCxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNWLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUU7YUFDdkI7U0FDRjtLQUN5QixDQUFDO0FBQy9CLENBQUM7QUFFRCxNQUFNLFdBQVcsR0FDZiwwRUFBMEUsQ0FBQztBQUM3RSxNQUFNLFdBQVcsR0FDZiwwRUFBMEUsQ0FBQztBQUM3RSxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQztBQUNoRCxNQUFNLFdBQVcsR0FBRyx3Q0FBd0MsQ0FBQztBQUU3RCxRQUFRLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO0lBQzNELEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxHQUFH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RWpELHFCQUFxQixDQUNuQixNQUFNLEVBQ04sWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQzVDLE9BQU8sRUFDUCxXQUFXLEVBQ1gsV0FBVyxDQUNaLENBQUM7UUFDRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YscUJBQXFCLENBQ25CLE1BQU0sRUFDTixZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsRUFDakQsT0FBTyxFQUNQLFdBQVcsRUFDWCxXQUFXLENBQ1osQ0FDRixDQUFDLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFxQixFQUFFLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUVuRSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0UsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FDM0UsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB0eXBlIHsgV29ya2Zsb3dNYW5pZmVzdCB9IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5pbXBvcnQge1xuICBoYXNoTWFuaWZlc3RTb3VyY2UsXG4gIHR5cGUgTWFuaWZlc3RFbnRyeUxvY2F0aW9uLFxuICBtZXJnZVdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJy4vbWFuaWZlc3QtaWRzLmpzJztcblxuZnVuY3Rpb24gY3JlYXRlTWFwcygpIHtcbiAgcmV0dXJuIHtcbiAgICBzdGVwSWRzOiBuZXcgTWFwPHN0cmluZywgTWFuaWZlc3RFbnRyeUxvY2F0aW9uPigpLFxuICAgIHdvcmtmbG93SWRzOiBuZXcgTWFwPHN0cmluZywgTWFuaWZlc3RFbnRyeUxvY2F0aW9uPigpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdGVwTWFuaWZlc3QoZmlsZVBhdGg6IHN0cmluZywgbmFtZTogc3RyaW5nLCBzdGVwSWQ6IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIHN0ZXBzOiB7XG4gICAgICBbZmlsZVBhdGhdOiB7XG4gICAgICAgIFtuYW1lXTogeyBzdGVwSWQgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSBzYXRpc2ZpZXMgV29ya2Zsb3dNYW5pZmVzdDtcbn1cblxuZnVuY3Rpb24gd29ya2Zsb3dNYW5pZmVzdChmaWxlUGF0aDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHdvcmtmbG93SWQ6IHN0cmluZykge1xuICByZXR1cm4ge1xuICAgIHdvcmtmbG93czoge1xuICAgICAgW2ZpbGVQYXRoXToge1xuICAgICAgICBbbmFtZV06IHsgd29ya2Zsb3dJZCB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9IHNhdGlzZmllcyBXb3JrZmxvd01hbmlmZXN0O1xufVxuXG5jb25zdCBQRUVSX0FfRklMRSA9XG4gICdub2RlX21vZHVsZXMvLnBucG0vcGtnQDEuMC4wX3BlZXItYUAxLjAuMC9ub2RlX21vZHVsZXMvcGtnL2Rpc3Qvc3RlcHMuanMnO1xuY29uc3QgUEVFUl9CX0ZJTEUgPVxuICAnbm9kZV9tb2R1bGVzLy5wbnBtL3BrZ0AxLjAuMF9wZWVyLWJAMi4wLjAvbm9kZV9tb2R1bGVzL3BrZy9kaXN0L3N0ZXBzLmpzJztcbmNvbnN0IFNURVBfSUQgPSAnc3RlcC8vcGtnL3N0ZXBzQDEuMC4wLy9kb1dvcmsnO1xuY29uc3QgV09SS0ZMT1dfSUQgPSAnd29ya2Zsb3cvL3BrZy9zdGVwc0AxLjAuMC8vb3JjaGVzdHJhdGUnO1xuXG5kZXNjcmliZSgnbWVyZ2VXb3JrZmxvd01hbmlmZXN0IGR1cGxpY2F0ZSBJRCBoYW5kbGluZycsICgpID0+IHtcbiAgaXQoJ3Rocm93cyB3aGVuIHR3byBkaWZmZXJlbnQgZmlsZXMgZW1pdCB0aGUgc2FtZSBzdGVwIElEIHdpdGggZGlmZmVyZW50IGNvbnRlbnRzJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RlcElkcywgd29ya2Zsb3dJZHMgfSA9IGNyZWF0ZU1hcHMoKTtcbiAgICBjb25zdCB0YXJnZXQ6IFdvcmtmbG93TWFuaWZlc3QgPSB7fTtcblxuICAgIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgICAgIHRhcmdldCxcbiAgICAgIHN0ZXBNYW5pZmVzdChQRUVSX0FfRklMRSwgJ2RvV29yaycsIFNURVBfSUQpLFxuICAgICAgc3RlcElkcyxcbiAgICAgIHdvcmtmbG93SWRzLFxuICAgICAgaGFzaE1hbmlmZXN0U291cmNlKCdleHBvcnQgY29uc3QgZG9Xb3JrID0gMTsnKVxuICAgICk7XG5cbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBzdGVwTWFuaWZlc3QoUEVFUl9CX0ZJTEUsICdkb1dvcmsnLCBTVEVQX0lEKSxcbiAgICAgICAgc3RlcElkcyxcbiAgICAgICAgd29ya2Zsb3dJZHMsXG4gICAgICAgIGhhc2hNYW5pZmVzdFNvdXJjZSgnZXhwb3J0IGNvbnN0IGRvV29yayA9IDI7JylcbiAgICAgIClcbiAgICApLnRvVGhyb3coL0R1cGxpY2F0ZSB3b3JrZmxvdyBzdGVwIElELyk7XG4gIH0pO1xuXG4gIGl0KCdkZWR1cGxpY2F0ZXMgaWRlbnRpY2FsIGNvcGllcyBvZiB0aGUgc2FtZSBtb2R1bGUgZW1pdHRpbmcgdGhlIHNhbWUgc3RlcCBJRCcsICgpID0+IHtcbiAgICBjb25zdCB7IHN0ZXBJZHMsIHdvcmtmbG93SWRzIH0gPSBjcmVhdGVNYXBzKCk7XG4gICAgY29uc3QgdGFyZ2V0OiBXb3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgY29uc3QgY29udGVudEhhc2ggPSBoYXNoTWFuaWZlc3RTb3VyY2UoJ2V4cG9ydCBjb25zdCBkb1dvcmsgPSAxOycpO1xuXG4gICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgc3RlcE1hbmlmZXN0KFBFRVJfQV9GSUxFLCAnZG9Xb3JrJywgU1RFUF9JRCksXG4gICAgICBzdGVwSWRzLFxuICAgICAgd29ya2Zsb3dJZHMsXG4gICAgICBjb250ZW50SGFzaFxuICAgICk7XG4gICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgc3RlcE1hbmlmZXN0KFBFRVJfQl9GSUxFLCAnZG9Xb3JrJywgU1RFUF9JRCksXG4gICAgICBzdGVwSWRzLFxuICAgICAgd29ya2Zsb3dJZHMsXG4gICAgICBjb250ZW50SGFzaFxuICAgICk7XG5cbiAgICAvLyBUaGUgZmlyc3QgcmVnaXN0cmF0aW9uIHdpbnMgaW4gdGhlIElEIG1hcC4uLlxuICAgIGV4cGVjdChzdGVwSWRzLmdldChTVEVQX0lEKT8uZmlsZVBhdGgpLnRvQmUoUEVFUl9BX0ZJTEUpO1xuICAgIC8vIC4uLmJ1dCBib3RoIGZpbGUgZW50cmllcyBzdGF5IGluIHRoZSBtYW5pZmVzdCAoYm90aCBjb3BpZXMgcmVnaXN0ZXJcbiAgICAvLyB0aGUgc2FtZSBJRCBhdCBydW50aW1lLCB3aGljaCBpcyBoYXJtbGVzcyBmb3IgaWRlbnRpY2FsIGNvZGUpLlxuICAgIGV4cGVjdChPYmplY3Qua2V5cyh0YXJnZXQuc3RlcHMgPz8ge30pKS50b0VxdWFsKFtQRUVSX0FfRklMRSwgUEVFUl9CX0ZJTEVdKTtcbiAgfSk7XG5cbiAgaXQoJ2RlZHVwbGljYXRlcyBpZGVudGljYWwgY29waWVzIGVtaXR0aW5nIHRoZSBzYW1lIHdvcmtmbG93IElEJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RlcElkcywgd29ya2Zsb3dJZHMgfSA9IGNyZWF0ZU1hcHMoKTtcbiAgICBjb25zdCB0YXJnZXQ6IFdvcmtmbG93TWFuaWZlc3QgPSB7fTtcbiAgICBjb25zdCBjb250ZW50SGFzaCA9IGhhc2hNYW5pZmVzdFNvdXJjZSgnZXhwb3J0IGNvbnN0IG9yY2hlc3RyYXRlID0gMTsnKTtcblxuICAgIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgICAgIHRhcmdldCxcbiAgICAgIHdvcmtmbG93TWFuaWZlc3QoUEVFUl9BX0ZJTEUsICdvcmNoZXN0cmF0ZScsIFdPUktGTE9XX0lEKSxcbiAgICAgIHN0ZXBJZHMsXG4gICAgICB3b3JrZmxvd0lkcyxcbiAgICAgIGNvbnRlbnRIYXNoXG4gICAgKTtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICB3b3JrZmxvd01hbmlmZXN0KFBFRVJfQl9GSUxFLCAnb3JjaGVzdHJhdGUnLCBXT1JLRkxPV19JRCksXG4gICAgICAgIHN0ZXBJZHMsXG4gICAgICAgIHdvcmtmbG93SWRzLFxuICAgICAgICBjb250ZW50SGFzaFxuICAgICAgKVxuICAgICkubm90LnRvVGhyb3coKTtcbiAgICBleHBlY3Qod29ya2Zsb3dJZHMuZ2V0KFdPUktGTE9XX0lEKT8uZmlsZVBhdGgpLnRvQmUoUEVFUl9BX0ZJTEUpO1xuICB9KTtcblxuICBpdCgndGhyb3dzIHdoZW4gdGhlIHNhbWUgd29ya2Zsb3cgSUQgY29tZXMgZnJvbSBkaWZmZXJlbnQgY29udGVudHMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGVwSWRzLCB3b3JrZmxvd0lkcyB9ID0gY3JlYXRlTWFwcygpO1xuICAgIGNvbnN0IHRhcmdldDogV29ya2Zsb3dNYW5pZmVzdCA9IHt9O1xuXG4gICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgd29ya2Zsb3dNYW5pZmVzdChQRUVSX0FfRklMRSwgJ29yY2hlc3RyYXRlJywgV09SS0ZMT1dfSUQpLFxuICAgICAgc3RlcElkcyxcbiAgICAgIHdvcmtmbG93SWRzLFxuICAgICAgaGFzaE1hbmlmZXN0U291cmNlKCdhJylcbiAgICApO1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHdvcmtmbG93TWFuaWZlc3QoUEVFUl9CX0ZJTEUsICdvcmNoZXN0cmF0ZScsIFdPUktGTE9XX0lEKSxcbiAgICAgICAgc3RlcElkcyxcbiAgICAgICAgd29ya2Zsb3dJZHMsXG4gICAgICAgIGhhc2hNYW5pZmVzdFNvdXJjZSgnYicpXG4gICAgICApXG4gICAgKS50b1Rocm93KC9EdXBsaWNhdGUgd29ya2Zsb3cgSUQvKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGNvbnRlbnQgaGFzaGVzIGFyZSB1bmF2YWlsYWJsZSwgZXZlbiBmb3IgZXF1YWwgbmFtZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGVwSWRzLCB3b3JrZmxvd0lkcyB9ID0gY3JlYXRlTWFwcygpO1xuICAgIGNvbnN0IHRhcmdldDogV29ya2Zsb3dNYW5pZmVzdCA9IHt9O1xuXG4gICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgc3RlcE1hbmlmZXN0KFBFRVJfQV9GSUxFLCAnZG9Xb3JrJywgU1RFUF9JRCksXG4gICAgICBzdGVwSWRzLFxuICAgICAgd29ya2Zsb3dJZHNcbiAgICApO1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHN0ZXBNYW5pZmVzdChQRUVSX0JfRklMRSwgJ2RvV29yaycsIFNURVBfSUQpLFxuICAgICAgICBzdGVwSWRzLFxuICAgICAgICB3b3JrZmxvd0lkc1xuICAgICAgKVxuICAgICkudG9UaHJvdygvRHVwbGljYXRlIHdvcmtmbG93IHN0ZXAgSUQvKTtcbiAgfSk7XG5cbiAgaXQoJ3Rocm93cyB3aGVuIGlkZW50aWNhbCBjb250ZW50cyBtYXAgdGhlIHNhbWUgSUQgdG8gZGlmZmVyZW50IHN5bWJvbCBuYW1lcycsICgpID0+IHtcbiAgICBjb25zdCB7IHN0ZXBJZHMsIHdvcmtmbG93SWRzIH0gPSBjcmVhdGVNYXBzKCk7XG4gICAgY29uc3QgdGFyZ2V0OiBXb3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgY29uc3QgY29udGVudEhhc2ggPSBoYXNoTWFuaWZlc3RTb3VyY2UoJ3NoYXJlZCcpO1xuXG4gICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgdGFyZ2V0LFxuICAgICAgc3RlcE1hbmlmZXN0KFBFRVJfQV9GSUxFLCAnZG9Xb3JrJywgU1RFUF9JRCksXG4gICAgICBzdGVwSWRzLFxuICAgICAgd29ya2Zsb3dJZHMsXG4gICAgICBjb250ZW50SGFzaFxuICAgICk7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBtZXJnZVdvcmtmbG93TWFuaWZlc3QoXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgc3RlcE1hbmlmZXN0KFBFRVJfQl9GSUxFLCAnZG9PdGhlcldvcmsnLCBTVEVQX0lEKSxcbiAgICAgICAgc3RlcElkcyxcbiAgICAgICAgd29ya2Zsb3dJZHMsXG4gICAgICAgIGNvbnRlbnRIYXNoXG4gICAgICApXG4gICAgKS50b1Rocm93KC9EdXBsaWNhdGUgd29ya2Zsb3cgc3RlcCBJRC8pO1xuICB9KTtcblxuICBpdCgnYWxsb3dzIHJlLW1lcmdpbmcgdGhlIHNhbWUgZmlsZSB3aXRob3V0IGVycm9yJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RlcElkcywgd29ya2Zsb3dJZHMgfSA9IGNyZWF0ZU1hcHMoKTtcbiAgICBjb25zdCB0YXJnZXQ6IFdvcmtmbG93TWFuaWZlc3QgPSB7fTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IHN0ZXBNYW5pZmVzdChQRUVSX0FfRklMRSwgJ2RvV29yaycsIFNURVBfSUQpO1xuICAgIGNvbnN0IGNvbnRlbnRIYXNoID0gaGFzaE1hbmlmZXN0U291cmNlKCdleHBvcnQgY29uc3QgZG9Xb3JrID0gMTsnKTtcblxuICAgIG1lcmdlV29ya2Zsb3dNYW5pZmVzdCh0YXJnZXQsIG1hbmlmZXN0LCBzdGVwSWRzLCB3b3JrZmxvd0lkcywgY29udGVudEhhc2gpO1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KHRhcmdldCwgbWFuaWZlc3QsIHN0ZXBJZHMsIHdvcmtmbG93SWRzLCBjb250ZW50SGFzaClcbiAgICApLm5vdC50b1Rocm93KCk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -78,5 +78,65 @@ describe('step source registration', () => {
78
78
  expect(generated).toContain('import "../src/serde.ts";');
79
79
  expect(Object.keys(manifest.classes ?? {})).toContain('src/serde.ts');
80
80
  });
81
+ /**
82
+ * pnpm materializes the same package version once per peer-dependency
83
+ * resolution (e.g. `.pnpm/step-pkg@1.0.0_peer-a@1.0.0/...` and
84
+ * `.pnpm/step-pkg@1.0.0_peer-b@2.0.0/...`), with byte-identical files.
85
+ * Both copies generate the same canonical step ID.
86
+ */
87
+ function writePnpmVirtualInstance(peerSuffix, stepSource) {
88
+ const pkgDir = join(testRoot, 'node_modules', '.pnpm', `step-pkg@1.0.0_${peerSuffix}`, 'node_modules', 'step-pkg');
89
+ writeFile(join(pkgDir, 'package.json'), JSON.stringify({
90
+ name: 'step-pkg',
91
+ version: '1.0.0',
92
+ exports: { '.': './index.js' },
93
+ }));
94
+ const stepFile = join(pkgDir, 'index.js');
95
+ writeFile(stepFile, stepSource);
96
+ return stepFile;
97
+ }
98
+ it('deduplicates identical pnpm peer-variant package copies', async () => {
99
+ const stepSource = `export async function runPackagedStep() {
100
+ 'use step';
101
+ return 1;
102
+ }
103
+ `;
104
+ const copyA = writePnpmVirtualInstance('peer-a@1.0.0', stepSource);
105
+ const copyB = writePnpmVirtualInstance('peer-b@2.0.0', stepSource);
106
+ const outfile = join(testRoot, '.workflow', 'steps.js');
107
+ mkdirSync(dirname(outfile), { recursive: true });
108
+ const discoveredEntries = {
109
+ discoveredSteps: new Set([copyA, copyB]),
110
+ discoveredWorkflows: new Set(),
111
+ discoveredSerdeFiles: new Set(),
112
+ };
113
+ const { manifest } = await createBuilder(testRoot).createSourceStepRegistrations([copyA, copyB], outfile, discoveredEntries);
114
+ // Both copies land in the manifest under the same canonical step ID.
115
+ const stepEntries = Object.values(manifest.steps ?? {});
116
+ expect(stepEntries).toHaveLength(2);
117
+ for (const entries of stepEntries) {
118
+ expect(entries.runPackagedStep.stepId).toBe('step//step-pkg@1.0.0//runPackagedStep');
119
+ }
120
+ });
121
+ it('still rejects pnpm-style package copies whose implementations differ', async () => {
122
+ const copyA = writePnpmVirtualInstance('peer-a@1.0.0', `export async function runPackagedStep() {
123
+ 'use step';
124
+ return 1;
125
+ }
126
+ `);
127
+ const copyB = writePnpmVirtualInstance('peer-b@2.0.0', `export async function runPackagedStep() {
128
+ 'use step';
129
+ return 2;
130
+ }
131
+ `);
132
+ const outfile = join(testRoot, '.workflow', 'steps.js');
133
+ mkdirSync(dirname(outfile), { recursive: true });
134
+ const discoveredEntries = {
135
+ discoveredSteps: new Set([copyA, copyB]),
136
+ discoveredWorkflows: new Set(),
137
+ discoveredSerdeFiles: new Set(),
138
+ };
139
+ await expect(createBuilder(testRoot).createSourceStepRegistrations([copyA, copyB], outfile, discoveredEntries)).rejects.toThrow(/Duplicate workflow step ID/);
140
+ });
81
141
  });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1zb3VyY2UtcmVnaXN0cmF0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcC1zb3VyY2UtcmVnaXN0cmF0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUd4RSxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLO1FBQ1QsUUFBUTtJQUNWLENBQUM7SUFFTSw2QkFBNkIsQ0FDbEMsVUFBb0IsRUFDcEIsT0FBZSxFQUNmLGlCQUFvQztRQUVwQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM1QixVQUFVO1lBQ1YsT0FBTztZQUNQLG1CQUFtQixFQUFFLElBQUk7WUFDekIscUNBQXFDLEVBQUUsS0FBSztZQUM1Qyw2QkFBNkIsRUFBRSxJQUFJO1lBQ25DLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxQyxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7SUFDL0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lB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RSxPQUFPLENBQUMsQ0FBQztRQUVqRCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUN6RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICB3cml0ZUZpbGVTeW5jLFxufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCB7IEJhc2VCdWlsZGVyLCB0eXBlIERpc2NvdmVyZWRFbnRyaWVzIH0gZnJvbSAnLi9iYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFuZGFsb25lQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmNsYXNzIFRlc3RCdWlsZGVyIGV4dGVuZHMgQmFzZUJ1aWxkZXIge1xuICBhc3luYyBidWlsZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBuby1vcFxuICB9XG5cbiAgcHVibGljIGNyZWF0ZVNvdXJjZVN0ZXBSZWdpc3RyYXRpb25zKFxuICAgIGlucHV0RmlsZXM6IHN0cmluZ1tdLFxuICAgIG91dGZpbGU6IHN0cmluZyxcbiAgICBkaXNjb3ZlcmVkRW50cmllczogRGlzY292ZXJlZEVudHJpZXNcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlU3RlcHNCdW5kbGUoe1xuICAgICAgaW5wdXRGaWxlcyxcbiAgICAgIG91dGZpbGUsXG4gICAgICBleHRlcm5hbGl6ZU5vblN0ZXBzOiB0cnVlLFxuICAgICAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llczogZmFsc2UsXG4gICAgICBzb3VyY2VTdGVwUmVnaXN0cmF0aW9uSW1wb3J0czogdHJ1ZSxcbiAgICAgIGRpc2NvdmVyZWRFbnRyaWVzLFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHJlYWxUbXBkaXIgPSByZWFscGF0aFN5bmModG1wZGlyKCkpO1xuXG5mdW5jdGlvbiB3cml0ZUZpbGUocGF0aDogc3RyaW5nLCBjb250ZW50czogc3RyaW5nKTogdm9pZCB7XG4gIG1rZGlyU3luYyhkaXJuYW1lKHBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50cywgJ3V0Zi04Jyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1aWxkZXIod29ya2luZ0Rpcjogc3RyaW5nKTogVGVzdEJ1aWxkZXIge1xuICBjb25zdCBjb25maWc6IFN0YW5kYWxvbmVDb25maWcgPSB7XG4gICAgYnVpbGRUYXJnZXQ6ICdzdGFuZGFsb25lJyxcbiAgICB3b3JraW5nRGlyLFxuICAgIGRpcnM6IFsnLiddLFxuICAgIHN0ZXBzQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnLndvcmtmbG93JywgJ3N0ZXBzLmpzJyksXG4gICAgd29ya2Zsb3dzQnVuZGxlUGF0aDogam9pbih3b3JraW5nRGlyLCAnLndvcmtmbG93JywgJ3dvcmtmbG93cy5qcycpLFxuICAgIHdlYmhvb2tCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICcud29ya2Zsb3cnLCAnd2ViaG9vay5qcycpLFxuICB9O1xuICByZXR1cm4gbmV3IFRlc3RCdWlsZGVyKGNvbmZpZyk7XG59XG5cbmRlc2NyaWJlKCdzdGVwIHNvdXJjZSByZWdpc3RyYXRpb24nLCAoKSA9PiB7XG4gIGxldCB0ZXN0Um9vdDogc3RyaW5nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlc3RSb290ID0gbWtkdGVtcFN5bmMoam9pbihyZWFsVG1wZGlyLCAnd29ya2Zsb3ctc3RlcC1yZWdpc3RyYXRpb24tJykpO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAnd29ya2Zsb3cnLCAncGFja2FnZS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6ICd3b3JrZmxvdycsIHZlcnNpb246ICcxLjAuMCcgfSlcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIGpvaW4odGVzdFJvb3QsICdub2RlX21vZHVsZXMnLCAnd29ya2Zsb3cnLCAnaW50ZXJuYWwnLCAnYnVpbHRpbnMuanMnKSxcbiAgICAgICdleHBvcnQgY29uc3QgX19idWlsdGlucyA9IHRydWU7XFxuJ1xuICAgICk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcm1TeW5jKHRlc3RSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGl0KCdpbXBvcnRzIHNlcmRlLW9ubHkgZmlsZXMgZm9yIHN0ZXAgY29udGV4dCBjbGFzcyByZWdpc3RyYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnlGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdlbnRyeS50cycpO1xuICAgIGNvbnN0IHN0ZXBGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzdGVwLnRzJyk7XG4gICAgY29uc3Qgc2VyZGVGaWxlID0gam9pbih0ZXN0Um9vdCwgJ3NyYycsICdzZXJkZS50cycpO1xuICAgIGNvbnN0IG91dGZpbGUgPSBqb2luKHRlc3RSb290LCAnLndvcmtmbG93JywgJ3N0ZXBzLmpzJyk7XG5cbiAgICBta2RpclN5bmMoZGlybmFtZShvdXRmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlKGVudHJ5RmlsZSwgYGV4cG9ydCB7IHJ1blN0ZXAgfSBmcm9tICcuL3N0ZXAnO1xcbmApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHN0ZXBGaWxlLFxuICAgICAgYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5TdGVwKCkge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gMTtcbn1cbmBcbiAgICApO1xuICAgIHdyaXRlRmlsZShcbiAgICAgIHNlcmRlRmlsZSxcbiAgICAgIGBleHBvcnQgY2xhc3MgVmFsdWUge1xuICBzdGF0aWMgY2xhc3NJZCA9ICdWYWx1ZSc7XG4gIHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctc2VyaWFsaXplJyldKHZhbHVlOiBWYWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBzdGF0aWMgW1N5bWJvbC5mb3IoJ3dvcmtmbG93LWRlc2VyaWFsaXplJyldKHZhbHVlOiBWYWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuYFxuICAgICk7XG5cbiAgICBjb25zdCBkaXNjb3ZlcmVkRW50cmllczogRGlzY292ZXJlZEVudHJpZXMgPSB7XG4gICAgICBkaXNjb3ZlcmVkU3RlcHM6IG5ldyBTZXQoW3N0ZXBGaWxlXSksXG4gICAgICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBuZXcgU2V0KCksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldChbc2VyZGVGaWxlXSksXG4gICAgfTtcblxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIoXG4gICAgICB0ZXN0Um9vdFxuICAgICkuY3JlYXRlU291cmNlU3RlcFJlZ2lzdHJhdGlvbnMoW2VudHJ5RmlsZV0sIG91dGZpbGUsIGRpc2NvdmVyZWRFbnRyaWVzKTtcbiAgICBjb25zdCBnZW5lcmF0ZWQgPSByZWFkRmlsZVN5bmMob3V0ZmlsZSwgJ3V0Zi04Jyk7XG5cbiAgICBleHBlY3QoZ2VuZXJhdGVkKS50b0NvbnRhaW4oJ2ltcG9ydCBcIndvcmtmbG93L2ludGVybmFsL2J1aWx0aW5zXCI7Jyk7XG4gICAgZXhwZWN0KGdlbmVyYXRlZCkudG9Db250YWluKCdpbXBvcnQgXCIuLi9zcmMvc3RlcC50c1wiOycpO1xuICAgIGV4cGVjdChnZW5lcmF0ZWQpLnRvQ29udGFpbignaW1wb3J0IFwiLi4vc3JjL3NlcmRlLnRzXCI7Jyk7XG4gICAgZXhwZWN0KE9iamVjdC5rZXlzKG1hbmlmZXN0LmNsYXNzZXMgPz8ge30pKS50b0NvbnRhaW4oJ3NyYy9zZXJkZS50cycpO1xuICB9KTtcbn0pO1xuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1zb3VyY2UtcmVnaXN0cmF0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcC1zb3VyY2UtcmVnaXN0cmF0aW9uLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sYUFBYSxHQUNkLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBMEIsTUFBTSxtQkFBbUIsQ0FBQztBQUd4RSxNQUFNLFdBQVksU0FBUSxXQUFXO0lBQ25DLEtBQUssQ0FBQyxLQUFLO1FBQ1QsUUFBUTtJQUNWLENBQUM7SUFFTSw2QkFBNkIsQ0FDbEMsVUFBb0IsRUFDcEIsT0FBZSxFQUNmLGlCQUFvQztRQUVwQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUM1QixVQUFVO1lBQ1YsT0FBTztZQUNQLG1CQUFtQixFQUFFLElBQUk7WUFDekIscUNBQXFDLEVBQUUsS0FBSztZQUM1Qyw2QkFBNkIsRUFBRSxJQUFJO1lBQ25DLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUUxQyxTQUFTLFNBQVMsQ0FBQyxJQUFZLEVBQUUsUUFBZ0I7SUFDL0MsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lB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LENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FDcEMsY0FBYyxFQUNkOzs7O0NBSUwsQ0FDSSxDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWpELE1BQU0saUJBQWlCLEdBQXNCO1lBQzNDLGVBQWUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4QyxtQkFBbUIsRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUM5QixvQkFBb0IsRUFBRSxJQUFJLEdBQUcsRUFBRTtTQUNoQyxDQUFDO1FBRUYsTUFBTSxNQUFNLENBQ1YsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDZCQUE2QixDQUNuRCxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDZCxPQUFPLEVBQ1AsaUJBQWlCLENBQ2xCLENBQ0YsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJlYWRGaWxlU3luYyxcbiAgcmVhbHBhdGhTeW5jLFxuICBybVN5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGFmdGVyRWFjaCwgYmVmb3JlRWFjaCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHsgQmFzZUJ1aWxkZXIsIHR5cGUgRGlzY292ZXJlZEVudHJpZXMgfSBmcm9tICcuL2Jhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYWxvbmVDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY2xhc3MgVGVzdEJ1aWxkZXIgZXh0ZW5kcyBCYXNlQnVpbGRlciB7XG4gIGFzeW5jIGJ1aWxkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIG5vLW9wXG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU291cmNlU3RlcFJlZ2lzdHJhdGlvbnMoXG4gICAgaW5wdXRGaWxlczogc3RyaW5nW10sXG4gICAgb3V0ZmlsZTogc3RyaW5nLFxuICAgIGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllc1xuICApIHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTdGVwc0J1bmRsZSh7XG4gICAgICBpbnB1dEZpbGVzLFxuICAgICAgb3V0ZmlsZSxcbiAgICAgIGV4dGVybmFsaXplTm9uU3RlcHM6IHRydWUsXG4gICAgICBidW5kbGVUcmFuc2l0aXZlTG9jYWxTdGVwRGVwZW5kZW5jaWVzOiBmYWxzZSxcbiAgICAgIHNvdXJjZVN0ZXBSZWdpc3RyYXRpb25JbXBvcnRzOiB0cnVlLFxuICAgICAgZGlzY292ZXJlZEVudHJpZXMsXG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgcmVhbFRtcGRpciA9IHJlYWxwYXRoU3luYyh0bXBkaXIoKSk7XG5cbmZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpOiB2b2lkIHtcbiAgbWtkaXJTeW5jKGRpcm5hbWUocGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnRzLCAndXRmLTgnKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVpbGRlcih3b3JraW5nRGlyOiBzdHJpbmcpOiBUZXN0QnVpbGRlciB7XG4gIGNvbnN0IGNvbmZpZzogU3RhbmRhbG9uZUNvbmZpZyA9IHtcbiAgICBidWlsZFRhcmdldDogJ3N0YW5kYWxvbmUnLFxuICAgIHdvcmtpbmdEaXIsXG4gICAgZGlyczogWycuJ10sXG4gICAgc3RlcHNCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICcud29ya2Zsb3cnLCAnc3RlcHMuanMnKSxcbiAgICB3b3JrZmxvd3NCdW5kbGVQYXRoOiBqb2luKHdvcmtpbmdEaXIsICcud29ya2Zsb3cnLCAnd29ya2Zsb3dzLmpzJyksXG4gICAgd2ViaG9va0J1bmRsZVBhdGg6IGpvaW4od29ya2luZ0RpciwgJy53b3JrZmxvdycsICd3ZWJob29rLmpzJyksXG4gIH07XG4gIHJldHVybiBuZXcgVGVzdEJ1aWxkZXIoY29uZmlnKTtcbn1cblxuZGVzY3JpYmUoJ3N0ZXAgc291cmNlIHJlZ2lzdHJhdGlvbicsICgpID0+IHtcbiAgbGV0IHRlc3RSb290OiBzdHJpbmc7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgdGVzdFJvb3QgPSBta2R0ZW1wU3luYyhqb2luKHJlYWxUbXBkaXIsICd3b3JrZmxvdy1zdGVwLXJlZ2lzdHJhdGlvbi0nKSk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICd3b3JrZmxvdycsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogJ3dvcmtmbG93JywgdmVyc2lvbjogJzEuMC4wJyB9KVxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgam9pbih0ZXN0Um9vdCwgJ25vZGVfbW9kdWxlcycsICd3b3JrZmxvdycsICdpbnRlcm5hbCcsICdidWlsdGlucy5qcycpLFxuICAgICAgJ2V4cG9ydCBjb25zdCBfX2J1aWx0aW5zID0gdHJ1ZTtcXG4nXG4gICAgKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBybVN5bmModGVzdFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgaXQoJ2ltcG9ydHMgc2VyZGUtb25seSBmaWxlcyBmb3Igc3RlcCBjb250ZXh0IGNsYXNzIHJlZ2lzdHJhdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlbnRyeUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ2VudHJ5LnRzJyk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3N0ZXAudHMnKTtcbiAgICBjb25zdCBzZXJkZUZpbGUgPSBqb2luKHRlc3RSb290LCAnc3JjJywgJ3NlcmRlLnRzJyk7XG4gICAgY29uc3Qgb3V0ZmlsZSA9IGpvaW4odGVzdFJvb3QsICcud29ya2Zsb3cnLCAnc3RlcHMuanMnKTtcblxuICAgIG1rZGlyU3luYyhkaXJuYW1lKG91dGZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB3cml0ZUZpbGUoZW50cnlGaWxlLCBgZXhwb3J0IHsgcnVuU3RlcCB9IGZyb20gJy4vc3RlcCc7XFxuYCk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc3RlcEZpbGUsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blN0ZXAoKSB7XG4gICd1c2Ugc3RlcCc7XG4gIHJldHVybiAxO1xufVxuYFxuICAgICk7XG4gICAgd3JpdGVGaWxlKFxuICAgICAgc2VyZGVGaWxlLFxuICAgICAgYGV4cG9ydCBjbGFzcyBWYWx1ZSB7XG4gIHN0YXRpYyBjbGFzc0lkID0gJ1ZhbHVlJztcbiAgc3RhdGljIFtTeW1ib2wuZm9yKCd3b3JrZmxvdy1zZXJpYWxpemUnKV0odmFsdWU6IFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHN0YXRpYyBbU3ltYm9sLmZvcignd29ya2Zsb3ctZGVzZXJpYWxpemUnKV0odmFsdWU6IFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5gXG4gICAgKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllcyA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldChbc3RlcEZpbGVdKSxcbiAgICAgIGRpc2NvdmVyZWRXb3JrZmxvd3M6IG5ldyBTZXQoKSxcbiAgICAgIGRpc2NvdmVyZWRTZXJkZUZpbGVzOiBuZXcgU2V0KFtzZXJkZUZpbGVdKSxcbiAgICB9O1xuXG4gICAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYXdhaXQgY3JlYXRlQnVpbGRlcihcbiAgICAgIHRlc3RSb290XG4gICAgKS5jcmVhdGVTb3VyY2VTdGVwUmVnaXN0cmF0aW9ucyhbZW50cnlGaWxlXSwgb3V0ZmlsZSwgZGlzY292ZXJlZEVudHJpZXMpO1xuICAgIGNvbnN0IGdlbmVyYXRlZCA9IHJlYWRGaWxlU3luYyhvdXRmaWxlLCAndXRmLTgnKTtcblxuICAgIGV4cGVjdChnZW5lcmF0ZWQpLnRvQ29udGFpbignaW1wb3J0IFwid29ya2Zsb3cvaW50ZXJuYWwvYnVpbHRpbnNcIjsnKTtcbiAgICBleHBlY3QoZ2VuZXJhdGVkKS50b0NvbnRhaW4oJ2ltcG9ydCBcIi4uL3NyYy9zdGVwLnRzXCI7Jyk7XG4gICAgZXhwZWN0KGdlbmVyYXRlZCkudG9Db250YWluKCdpbXBvcnQgXCIuLi9zcmMvc2VyZGUudHNcIjsnKTtcbiAgICBleHBlY3QoT2JqZWN0LmtleXMobWFuaWZlc3QuY2xhc3NlcyA/PyB7fSkpLnRvQ29udGFpbignc3JjL3NlcmRlLnRzJyk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBwbnBtIG1hdGVyaWFsaXplcyB0aGUgc2FtZSBwYWNrYWdlIHZlcnNpb24gb25jZSBwZXIgcGVlci1kZXBlbmRlbmN5XG4gICAqIHJlc29sdXRpb24gKGUuZy4gYC5wbnBtL3N0ZXAtcGtnQDEuMC4wX3BlZXItYUAxLjAuMC8uLi5gIGFuZFxuICAgKiBgLnBucG0vc3RlcC1wa2dAMS4wLjBfcGVlci1iQDIuMC4wLy4uLmApLCB3aXRoIGJ5dGUtaWRlbnRpY2FsIGZpbGVzLlxuICAgKiBCb3RoIGNvcGllcyBnZW5lcmF0ZSB0aGUgc2FtZSBjYW5vbmljYWwgc3RlcCBJRC5cbiAgICovXG4gIGZ1bmN0aW9uIHdyaXRlUG5wbVZpcnR1YWxJbnN0YW5jZShcbiAgICBwZWVyU3VmZml4OiBzdHJpbmcsXG4gICAgc3RlcFNvdXJjZTogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgcGtnRGlyID0gam9pbihcbiAgICAgIHRlc3RSb290LFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAnLnBucG0nLFxuICAgICAgYHN0ZXAtcGtnQDEuMC4wXyR7cGVlclN1ZmZpeH1gLFxuICAgICAgJ25vZGVfbW9kdWxlcycsXG4gICAgICAnc3RlcC1wa2cnXG4gICAgKTtcbiAgICB3cml0ZUZpbGUoXG4gICAgICBqb2luKHBrZ0RpciwgJ3BhY2thZ2UuanNvbicpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBuYW1lOiAnc3RlcC1wa2cnLFxuICAgICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgICBleHBvcnRzOiB7ICcuJzogJy4vaW5kZXguanMnIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgY29uc3Qgc3RlcEZpbGUgPSBqb2luKHBrZ0RpciwgJ2luZGV4LmpzJyk7XG4gICAgd3JpdGVGaWxlKHN0ZXBGaWxlLCBzdGVwU291cmNlKTtcbiAgICByZXR1cm4gc3RlcEZpbGU7XG4gIH1cblxuICBpdCgnZGVkdXBsaWNhdGVzIGlkZW50aWNhbCBwbnBtIHBlZXItdmFyaWFudCBwYWNrYWdlIGNvcGllcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzdGVwU291cmNlID0gYGV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5QYWNrYWdlZFN0ZXAoKSB7XG4gICd1c2Ugc3RlcCc7XG4gIHJldHVybiAxO1xufVxuYDtcbiAgICBjb25zdCBjb3B5QSA9IHdyaXRlUG5wbVZpcnR1YWxJbnN0YW5jZSgncGVlci1hQDEuMC4wJywgc3RlcFNvdXJjZSk7XG4gICAgY29uc3QgY29weUIgPSB3cml0ZVBucG1WaXJ0dWFsSW5zdGFuY2UoJ3BlZXItYkAyLjAuMCcsIHN0ZXBTb3VyY2UpO1xuICAgIGNvbnN0IG91dGZpbGUgPSBqb2luKHRlc3RSb290LCAnLndvcmtmbG93JywgJ3N0ZXBzLmpzJyk7XG4gICAgbWtkaXJTeW5jKGRpcm5hbWUob3V0ZmlsZSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgZGlzY292ZXJlZEVudHJpZXM6IERpc2NvdmVyZWRFbnRyaWVzID0ge1xuICAgICAgZGlzY292ZXJlZFN0ZXBzOiBuZXcgU2V0KFtjb3B5QSwgY29weUJdKSxcbiAgICAgIGRpc2NvdmVyZWRXb3JrZmxvd3M6IG5ldyBTZXQoKSxcbiAgICAgIGRpc2NvdmVyZWRTZXJkZUZpbGVzOiBuZXcgU2V0KCksXG4gICAgfTtcblxuICAgIGNvbnN0IHsgbWFuaWZlc3QgfSA9IGF3YWl0IGNyZWF0ZUJ1aWxkZXIoXG4gICAgICB0ZXN0Um9vdFxuICAgICkuY3JlYXRlU291cmNlU3RlcFJlZ2lzdHJhdGlvbnMoW2NvcHlBLCBjb3B5Ql0sIG91dGZpbGUsIGRpc2NvdmVyZWRFbnRyaWVzKTtcblxuICAgIC8vIEJvdGggY29waWVzIGxhbmQgaW4gdGhlIG1hbmlmZXN0IHVuZGVyIHRoZSBzYW1lIGNhbm9uaWNhbCBzdGVwIElELlxuICAgIGNvbnN0IHN0ZXBFbnRyaWVzID0gT2JqZWN0LnZhbHVlcyhtYW5pZmVzdC5zdGVwcyA/PyB7fSk7XG4gICAgZXhwZWN0KHN0ZXBFbnRyaWVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgZm9yIChjb25zdCBlbnRyaWVzIG9mIHN0ZXBFbnRyaWVzKSB7XG4gICAgICBleHBlY3QoZW50cmllcy5ydW5QYWNrYWdlZFN0ZXAuc3RlcElkKS50b0JlKFxuICAgICAgICAnc3RlcC8vc3RlcC1wa2dAMS4wLjAvL3J1blBhY2thZ2VkU3RlcCdcbiAgICAgICk7XG4gICAgfVxuICB9KTtcblxuICBpdCgnc3RpbGwgcmVqZWN0cyBwbnBtLXN0eWxlIHBhY2thZ2UgY29waWVzIHdob3NlIGltcGxlbWVudGF0aW9ucyBkaWZmZXInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29weUEgPSB3cml0ZVBucG1WaXJ0dWFsSW5zdGFuY2UoXG4gICAgICAncGVlci1hQDEuMC4wJyxcbiAgICAgIGBleHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuUGFja2FnZWRTdGVwKCkge1xuICAndXNlIHN0ZXAnO1xuICByZXR1cm4gMTtcbn1cbmBcbiAgICApO1xuICAgIGNvbnN0IGNvcHlCID0gd3JpdGVQbnBtVmlydHVhbEluc3RhbmNlKFxuICAgICAgJ3BlZXItYkAyLjAuMCcsXG4gICAgICBgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blBhY2thZ2VkU3RlcCgpIHtcbiAgJ3VzZSBzdGVwJztcbiAgcmV0dXJuIDI7XG59XG5gXG4gICAgKTtcbiAgICBjb25zdCBvdXRmaWxlID0gam9pbih0ZXN0Um9vdCwgJy53b3JrZmxvdycsICdzdGVwcy5qcycpO1xuICAgIG1rZGlyU3luYyhkaXJuYW1lKG91dGZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGRpc2NvdmVyZWRFbnRyaWVzOiBEaXNjb3ZlcmVkRW50cmllcyA9IHtcbiAgICAgIGRpc2NvdmVyZWRTdGVwczogbmV3IFNldChbY29weUEsIGNvcHlCXSksXG4gICAgICBkaXNjb3ZlcmVkV29ya2Zsb3dzOiBuZXcgU2V0KCksXG4gICAgICBkaXNjb3ZlcmVkU2VyZGVGaWxlczogbmV3IFNldCgpLFxuICAgIH07XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBjcmVhdGVCdWlsZGVyKHRlc3RSb290KS5jcmVhdGVTb3VyY2VTdGVwUmVnaXN0cmF0aW9ucyhcbiAgICAgICAgW2NvcHlBLCBjb3B5Ql0sXG4gICAgICAgIG91dGZpbGUsXG4gICAgICAgIGRpc2NvdmVyZWRFbnRyaWVzXG4gICAgICApXG4gICAgKS5yZWplY3RzLnRvVGhyb3coL0R1cGxpY2F0ZSB3b3JrZmxvdyBzdGVwIElELyk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,MAAM,EAAE,uBAAuB,KAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA6XjE"}
1
+ {"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAalC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,CACvC,MAAM,EAAE,uBAAuB,KAC5B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,0BAA0B,CAAC;IAC9C;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AA0CD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAuYjE"}