@vltpkg/graph 0.0.0-9 → 1.0.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -1
- package/dist/esm/actual/load.d.ts +49 -3
- package/dist/esm/actual/load.d.ts.map +1 -1
- package/dist/esm/actual/load.js +146 -74
- package/dist/esm/actual/load.js.map +1 -1
- package/dist/esm/browser.d.ts +8 -4
- package/dist/esm/browser.d.ts.map +1 -1
- package/dist/esm/browser.js +6 -2
- package/dist/esm/browser.js.map +1 -1
- package/dist/esm/build.d.ts +29 -0
- package/dist/esm/build.d.ts.map +1 -0
- package/dist/esm/build.js +79 -0
- package/dist/esm/build.js.map +1 -0
- package/dist/esm/dependencies.d.ts +10 -3
- package/dist/esm/dependencies.d.ts.map +1 -1
- package/dist/esm/dependencies.js +63 -0
- package/dist/esm/dependencies.js.map +1 -1
- package/dist/esm/diff.d.ts +69 -0
- package/dist/esm/diff.d.ts.map +1 -1
- package/dist/esm/diff.js +25 -0
- package/dist/esm/diff.js.map +1 -1
- package/dist/esm/edge.d.ts +8 -2
- package/dist/esm/edge.d.ts.map +1 -1
- package/dist/esm/edge.js +12 -0
- package/dist/esm/edge.js.map +1 -1
- package/dist/esm/fixup-added-names.d.ts +16 -0
- package/dist/esm/fixup-added-names.d.ts.map +1 -0
- package/dist/esm/fixup-added-names.js +31 -0
- package/dist/esm/fixup-added-names.js.map +1 -0
- package/dist/esm/graph.d.ts +34 -10
- package/dist/esm/graph.d.ts.map +1 -1
- package/dist/esm/graph.js +150 -24
- package/dist/esm/graph.js.map +1 -1
- package/dist/esm/ideal/append-nodes.d.ts +12 -1
- package/dist/esm/ideal/append-nodes.d.ts.map +1 -1
- package/dist/esm/ideal/append-nodes.js +303 -53
- package/dist/esm/ideal/append-nodes.js.map +1 -1
- package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts +4 -4
- package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts.map +1 -1
- package/dist/esm/ideal/build-ideal-from-starting-graph.js +35 -16
- package/dist/esm/ideal/build-ideal-from-starting-graph.js.map +1 -1
- package/dist/esm/ideal/build.d.ts +9 -0
- package/dist/esm/ideal/build.d.ts.map +1 -1
- package/dist/esm/ideal/build.js +31 -1
- package/dist/esm/ideal/build.js.map +1 -1
- package/dist/esm/ideal/get-importer-specs.d.ts +11 -3
- package/dist/esm/ideal/get-importer-specs.d.ts.map +1 -1
- package/dist/esm/ideal/get-importer-specs.js +86 -9
- package/dist/esm/ideal/get-importer-specs.js.map +1 -1
- package/dist/esm/ideal/get-ordered-dependencies.d.ts +10 -0
- package/dist/esm/ideal/get-ordered-dependencies.d.ts.map +1 -0
- package/dist/esm/ideal/get-ordered-dependencies.js +42 -0
- package/dist/esm/ideal/get-ordered-dependencies.js.map +1 -0
- package/dist/esm/ideal/peers.d.ts +71 -0
- package/dist/esm/ideal/peers.d.ts.map +1 -0
- package/dist/esm/ideal/peers.js +318 -0
- package/dist/esm/ideal/peers.js.map +1 -0
- package/dist/esm/ideal/refresh-ideal-graph.d.ts +48 -0
- package/dist/esm/ideal/refresh-ideal-graph.d.ts.map +1 -0
- package/dist/esm/ideal/refresh-ideal-graph.js +79 -0
- package/dist/esm/ideal/refresh-ideal-graph.js.map +1 -0
- package/dist/esm/ideal/types.d.ts +78 -1
- package/dist/esm/ideal/types.d.ts.map +1 -1
- package/dist/esm/ideal/types.js.map +1 -1
- package/dist/esm/index.d.ts +9 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install.d.ts +10 -4
- package/dist/esm/install.d.ts.map +1 -1
- package/dist/esm/install.js +191 -20
- package/dist/esm/install.js.map +1 -1
- package/dist/esm/lockfile/load-edges.d.ts +8 -1
- package/dist/esm/lockfile/load-edges.d.ts.map +1 -1
- package/dist/esm/lockfile/load-edges.js +80 -15
- package/dist/esm/lockfile/load-edges.js.map +1 -1
- package/dist/esm/lockfile/load-nodes.d.ts +3 -2
- package/dist/esm/lockfile/load-nodes.d.ts.map +1 -1
- package/dist/esm/lockfile/load-nodes.js +85 -13
- package/dist/esm/lockfile/load-nodes.js.map +1 -1
- package/dist/esm/lockfile/load.d.ts +18 -5
- package/dist/esm/lockfile/load.d.ts.map +1 -1
- package/dist/esm/lockfile/load.js +28 -20
- package/dist/esm/lockfile/load.js.map +1 -1
- package/dist/esm/lockfile/save.d.ts +16 -3
- package/dist/esm/lockfile/save.d.ts.map +1 -1
- package/dist/esm/lockfile/save.js +64 -17
- package/dist/esm/lockfile/save.js.map +1 -1
- package/dist/esm/lockfile/types.d.ts +34 -4
- package/dist/esm/lockfile/types.d.ts.map +1 -1
- package/dist/esm/lockfile/types.js +31 -0
- package/dist/esm/lockfile/types.js.map +1 -1
- package/dist/esm/modifiers.d.ts +189 -0
- package/dist/esm/modifiers.d.ts.map +1 -0
- package/dist/esm/modifiers.js +330 -0
- package/dist/esm/modifiers.js.map +1 -0
- package/dist/esm/node.d.ts +91 -6
- package/dist/esm/node.d.ts.map +1 -1
- package/dist/esm/node.js +119 -5
- package/dist/esm/node.js.map +1 -1
- package/dist/esm/reify/add-edge.d.ts +1 -2
- package/dist/esm/reify/add-edge.d.ts.map +1 -1
- package/dist/esm/reify/add-edge.js +29 -18
- package/dist/esm/reify/add-edge.js.map +1 -1
- package/dist/esm/reify/add-edges.d.ts +1 -2
- package/dist/esm/reify/add-edges.d.ts.map +1 -1
- package/dist/esm/reify/add-edges.js +3 -3
- package/dist/esm/reify/add-edges.js.map +1 -1
- package/dist/esm/reify/add-nodes.d.ts.map +1 -1
- package/dist/esm/reify/add-nodes.js +4 -27
- package/dist/esm/reify/add-nodes.js.map +1 -1
- package/dist/esm/reify/bin-chmod.d.ts +11 -0
- package/dist/esm/reify/bin-chmod.d.ts.map +1 -0
- package/dist/esm/reify/bin-chmod.js +39 -0
- package/dist/esm/reify/bin-chmod.js.map +1 -0
- package/dist/esm/reify/build.d.ts +10 -1
- package/dist/esm/reify/build.d.ts.map +1 -1
- package/dist/esm/reify/build.js +36 -23
- package/dist/esm/reify/build.js.map +1 -1
- package/dist/esm/reify/calculate-save-value.d.ts +3 -0
- package/dist/esm/reify/calculate-save-value.d.ts.map +1 -0
- package/dist/esm/reify/calculate-save-value.js +45 -0
- package/dist/esm/reify/calculate-save-value.js.map +1 -0
- package/dist/esm/reify/check-needed-build.d.ts +25 -0
- package/dist/esm/reify/check-needed-build.d.ts.map +1 -0
- package/dist/esm/reify/check-needed-build.js +50 -0
- package/dist/esm/reify/check-needed-build.js.map +1 -0
- package/dist/esm/reify/delete-edge.d.ts.map +1 -1
- package/dist/esm/reify/delete-edge.js +3 -4
- package/dist/esm/reify/delete-edge.js.map +1 -1
- package/dist/esm/reify/extract-node.d.ts +24 -0
- package/dist/esm/reify/extract-node.d.ts.map +1 -0
- package/dist/esm/reify/extract-node.js +84 -0
- package/dist/esm/reify/extract-node.js.map +1 -0
- package/dist/esm/reify/index.d.ts +18 -1
- package/dist/esm/reify/index.d.ts.map +1 -1
- package/dist/esm/reify/index.js +85 -15
- package/dist/esm/reify/index.js.map +1 -1
- package/dist/esm/reify/internal-hoist.d.ts +9 -0
- package/dist/esm/reify/internal-hoist.d.ts.map +1 -0
- package/dist/esm/reify/internal-hoist.js +134 -0
- package/dist/esm/reify/internal-hoist.js.map +1 -0
- package/dist/esm/reify/update-importers-package-json.d.ts +1 -1
- package/dist/esm/reify/update-importers-package-json.d.ts.map +1 -1
- package/dist/esm/reify/update-importers-package-json.js +33 -24
- package/dist/esm/reify/update-importers-package-json.js.map +1 -1
- package/dist/esm/remove-optional-subgraph.js +1 -1
- package/dist/esm/remove-optional-subgraph.js.map +1 -1
- package/dist/esm/resolve-save-type.d.ts +1 -2
- package/dist/esm/resolve-save-type.d.ts.map +1 -1
- package/dist/esm/resolve-save-type.js.map +1 -1
- package/dist/esm/stringify-node.d.ts +1 -1
- package/dist/esm/stringify-node.d.ts.map +1 -1
- package/dist/esm/stringify-node.js +10 -1
- package/dist/esm/stringify-node.js.map +1 -1
- package/dist/esm/transfer-data/load.d.ts +44 -0
- package/dist/esm/transfer-data/load.d.ts.map +1 -0
- package/dist/esm/transfer-data/load.js +176 -0
- package/dist/esm/transfer-data/load.js.map +1 -0
- package/dist/esm/uninstall.d.ts +5 -4
- package/dist/esm/uninstall.d.ts.map +1 -1
- package/dist/esm/uninstall.js +61 -19
- package/dist/esm/uninstall.js.map +1 -1
- package/dist/esm/update.d.ts +13 -0
- package/dist/esm/update.d.ts.map +1 -0
- package/dist/esm/update.js +73 -0
- package/dist/esm/update.js.map +1 -0
- package/dist/esm/virtual-root.d.ts +16 -0
- package/dist/esm/virtual-root.d.ts.map +1 -0
- package/dist/esm/virtual-root.js +79 -0
- package/dist/esm/virtual-root.js.map +1 -0
- package/dist/esm/visualization/human-readable-output.d.ts +4 -5
- package/dist/esm/visualization/human-readable-output.d.ts.map +1 -1
- package/dist/esm/visualization/human-readable-output.js +47 -19
- package/dist/esm/visualization/human-readable-output.js.map +1 -1
- package/dist/esm/visualization/json-output.d.ts +7 -2
- package/dist/esm/visualization/json-output.d.ts.map +1 -1
- package/dist/esm/visualization/json-output.js +35 -12
- package/dist/esm/visualization/json-output.js.map +1 -1
- package/dist/esm/visualization/mermaid-output.d.ts +7 -1
- package/dist/esm/visualization/mermaid-output.d.ts.map +1 -1
- package/dist/esm/visualization/mermaid-output.js +110 -14
- package/dist/esm/visualization/mermaid-output.js.map +1 -1
- package/dist/esm/visualization/object-like-output.d.ts +1 -1
- package/dist/esm/visualization/object-like-output.d.ts.map +1 -1
- package/dist/esm/visualization/object-like-output.js.map +1 -1
- package/package.json +35 -29
- package/dist/esm/ideal/add-nodes.d.ts +0 -19
- package/dist/esm/ideal/add-nodes.d.ts.map +0 -1
- package/dist/esm/ideal/add-nodes.js +0 -32
- package/dist/esm/ideal/add-nodes.js.map +0 -1
- package/dist/esm/ideal/remove-nodes.d.ts +0 -7
- package/dist/esm/ideal/remove-nodes.d.ts.map +0 -1
- package/dist/esm/ideal/remove-nodes.js +0 -19
- package/dist/esm/ideal/remove-nodes.js.map +0 -1
- package/dist/esm/reify/bin-paths.d.ts +0 -4
- package/dist/esm/reify/bin-paths.d.ts.map +0 -1
- package/dist/esm/reify/bin-paths.js +0 -23
- package/dist/esm/reify/bin-paths.js.map +0 -1
- package/dist/esm/types.d.ts +0 -42
- package/dist/esm/types.d.ts.map +0 -1
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { splitDepID } from '@vltpkg/dep-id/browser';
|
|
2
|
+
import { defaultRegistryName } from '@vltpkg/spec/browser';
|
|
2
3
|
export const stringifyNode = (node) => {
|
|
3
4
|
if (!node)
|
|
4
5
|
return '';
|
|
5
6
|
const version = node.version ? `@${node.version}` : '';
|
|
6
7
|
const [type, ref, nameVersion] = splitDepID(node.id);
|
|
7
8
|
if (type === 'registry') {
|
|
8
|
-
|
|
9
|
+
let prefix = `${defaultRegistryName}:`;
|
|
10
|
+
if (ref) {
|
|
11
|
+
if (/^https?:\/\//.test(ref)) {
|
|
12
|
+
prefix = `registry:${ref}#`;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
prefix = `${ref}:`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
9
18
|
return `${prefix}${nameVersion}`;
|
|
10
19
|
}
|
|
11
20
|
else if (type === 'workspace') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stringify-node.js","sourceRoot":"","sources":["../../src/stringify-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"stringify-node.js","sourceRoot":"","sources":["../../src/stringify-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAG1D,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAe,EAAE,EAAE;IAC/C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACtD,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEpD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,IAAI,MAAM,GAAG,GAAG,mBAAmB,GAAG,CAAA;QACtC,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,GAAG,YAAY,GAAG,GAAG,CAAA;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,GAAG,GAAG,CAAA;YACpB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,MAAM,GAAG,WAAW,EAAE,CAAA;IAClC,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,aAAa,IAAI,CAAC,IAAI,EAAE,CAAA;IACjC,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAA;IAC5B,CAAC;SAAM,CAAC;QACN,iEAAiE;QACjE,yEAAyE;QACzE,MAAM,WAAW,GACf,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACxD,OAAO,GAAG,IAAI,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;IACxC,CAAC;AACH,CAAC,CAAA","sourcesContent":["import { splitDepID } from '@vltpkg/dep-id/browser'\nimport { defaultRegistryName } from '@vltpkg/spec/browser'\nimport type { NodeLike } from '@vltpkg/types'\n\nexport const stringifyNode = (node?: NodeLike) => {\n if (!node) return ''\n const version = node.version ? `@${node.version}` : ''\n const [type, ref, nameVersion] = splitDepID(node.id)\n\n if (type === 'registry') {\n let prefix = `${defaultRegistryName}:`\n if (ref) {\n if (/^https?:\\/\\//.test(ref)) {\n prefix = `registry:${ref}#`\n } else {\n prefix = `${ref}:`\n }\n }\n return `${prefix}${nameVersion}`\n } else if (type === 'workspace') {\n return `workspace:${node.name}`\n } else if (type === 'file' && node.mainImporter) {\n return `root:${node.name}`\n } else {\n // node.name getter will return the id if the package has no name\n // property so here we check for that in order to return `type(ref)` only\n const nameVersion =\n node.name !== node.id ? `:${node.name}${version}` : ''\n return `${type}(${ref})${nameVersion}`\n }\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { SecurityArchive } from '@vltpkg/security-archive/browser';
|
|
2
|
+
import type { GraphLike, NormalizedManifest } from '@vltpkg/types';
|
|
3
|
+
import type { LockfileData } from '../lockfile/types.ts';
|
|
4
|
+
import type { SpecOptionsFilled } from '@vltpkg/spec/browser';
|
|
5
|
+
/**
|
|
6
|
+
* The returned object when loading a graph from a transfer data structure,
|
|
7
|
+
* including the graph itself, the spec options used to create it, and
|
|
8
|
+
* the security archive (if any).
|
|
9
|
+
*/
|
|
10
|
+
export type LoadResult = {
|
|
11
|
+
graph: GraphLike;
|
|
12
|
+
specOptions: SpecOptionsFilled;
|
|
13
|
+
securityArchive: SecurityArchive | undefined;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A data structure defining a complete graph to be transfered, including
|
|
17
|
+
* extra information to the lockfile such as project info and importers.
|
|
18
|
+
*/
|
|
19
|
+
export type TransferData = {
|
|
20
|
+
importers: {
|
|
21
|
+
importer: boolean;
|
|
22
|
+
mainImporter: boolean;
|
|
23
|
+
id: string;
|
|
24
|
+
name: string;
|
|
25
|
+
version: string;
|
|
26
|
+
location: string;
|
|
27
|
+
manifest: NormalizedManifest;
|
|
28
|
+
projectRoot?: string;
|
|
29
|
+
integrity?: string;
|
|
30
|
+
resolved?: string;
|
|
31
|
+
dev?: boolean;
|
|
32
|
+
optional?: boolean;
|
|
33
|
+
}[];
|
|
34
|
+
lockfile: LockfileData;
|
|
35
|
+
projectInfo: {
|
|
36
|
+
root: string;
|
|
37
|
+
homedirRelativeRoot: string;
|
|
38
|
+
tools?: string[];
|
|
39
|
+
vltInstalled?: boolean;
|
|
40
|
+
};
|
|
41
|
+
securityArchive?: any;
|
|
42
|
+
};
|
|
43
|
+
export declare const load: (transfered: TransferData) => LoadResult;
|
|
44
|
+
//# sourceMappingURL=load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/transfer-data/load.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAWlE,OAAO,KAAK,EAEV,SAAS,EAGT,kBAAkB,EACnB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,KAAK,EAAQ,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AA8CnE;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,EAAE,iBAAiB,CAAA;IAC9B,eAAe,EAAE,eAAe,GAAG,SAAS,CAAA;CAC7C,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE;QACT,QAAQ,EAAE,OAAO,CAAA;QACjB,YAAY,EAAE,OAAO,CAAA;QACrB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,kBAAkB,CAAA;QAC5B,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;KACnB,EAAE,CAAA;IACH,QAAQ,EAAE,YAAY,CAAA;IACtB,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,mBAAmB,EAAE,MAAM,CAAA;QAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;QAChB,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,CAAA;IACD,eAAe,CAAC,EAAE,GAAG,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,IAAI,eAAgB,YAAY,KAAG,UAsK/C,CAAA"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { error } from '@vltpkg/error-cause';
|
|
2
|
+
import { SecurityArchive } from '@vltpkg/security-archive/browser';
|
|
3
|
+
import { defaultGitHostArchives, defaultGitHosts, defaultRegistries, defaultRegistry, defaultScopeRegistries, } from '@vltpkg/spec/browser';
|
|
4
|
+
import { stringifyNode } from "../stringify-node.js";
|
|
5
|
+
import { loadEdges } from "../lockfile/load-edges.js";
|
|
6
|
+
import { loadNodes } from "../lockfile/load-nodes.js";
|
|
7
|
+
const loadSpecOptions = (lockfile) => {
|
|
8
|
+
const { catalog = {}, catalogs = {}, registries, registry, 'git-hosts': gitHosts, 'git-host-archives': gitHostArchives, 'scope-registries': scopeRegistries, 'jsr-registries': jsrRegistries, } = lockfile.options;
|
|
9
|
+
return {
|
|
10
|
+
catalog,
|
|
11
|
+
catalogs,
|
|
12
|
+
registries: { ...defaultRegistries, ...registries },
|
|
13
|
+
registry: registry || defaultRegistry,
|
|
14
|
+
'jsr-registries': { ...jsrRegistries },
|
|
15
|
+
'git-hosts': { ...defaultGitHosts, ...gitHosts },
|
|
16
|
+
'git-host-archives': {
|
|
17
|
+
...defaultGitHostArchives,
|
|
18
|
+
...gitHostArchives,
|
|
19
|
+
},
|
|
20
|
+
'scope-registries': {
|
|
21
|
+
...defaultScopeRegistries,
|
|
22
|
+
...scopeRegistries,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export const load = (transfered) => {
|
|
27
|
+
const [mainImporter] = transfered.importers;
|
|
28
|
+
const maybeGraph = {
|
|
29
|
+
importers: new Set(),
|
|
30
|
+
edges: new Set(),
|
|
31
|
+
nodes: new Map(),
|
|
32
|
+
nodesByName: new Map(),
|
|
33
|
+
projectRoot: transfered.projectInfo.root,
|
|
34
|
+
addEdge(type, spec, from, to) {
|
|
35
|
+
const existing = from.edgesOut.get(spec.name);
|
|
36
|
+
if (existing) {
|
|
37
|
+
const edge = existing;
|
|
38
|
+
if (edge.type === type &&
|
|
39
|
+
edge.spec.bareSpec === spec.bareSpec) {
|
|
40
|
+
if (to && to !== edge.to) {
|
|
41
|
+
edge.to = to;
|
|
42
|
+
edge.to.edgesIn.add(edge);
|
|
43
|
+
}
|
|
44
|
+
return edge;
|
|
45
|
+
}
|
|
46
|
+
this.edges.delete(edge);
|
|
47
|
+
}
|
|
48
|
+
const edge = {
|
|
49
|
+
from,
|
|
50
|
+
name: spec.name,
|
|
51
|
+
spec,
|
|
52
|
+
to,
|
|
53
|
+
type,
|
|
54
|
+
};
|
|
55
|
+
from.edgesOut.set(spec.name, edge);
|
|
56
|
+
to?.edgesIn.add(edge);
|
|
57
|
+
this.edges.add(edge);
|
|
58
|
+
return edge;
|
|
59
|
+
},
|
|
60
|
+
addNode(id, manifest) {
|
|
61
|
+
const graph = this;
|
|
62
|
+
if (!id)
|
|
63
|
+
throw error('id is required', { manifest });
|
|
64
|
+
if (!manifest)
|
|
65
|
+
throw error('manifest is required');
|
|
66
|
+
const node = {
|
|
67
|
+
id,
|
|
68
|
+
name: manifest.name,
|
|
69
|
+
version: manifest.version,
|
|
70
|
+
manifest,
|
|
71
|
+
edgesIn: new Set(),
|
|
72
|
+
edgesOut: new Map(),
|
|
73
|
+
workspaces: undefined,
|
|
74
|
+
graph,
|
|
75
|
+
importer: false,
|
|
76
|
+
mainImporter: false,
|
|
77
|
+
projectRoot: graph.projectRoot,
|
|
78
|
+
dev: false,
|
|
79
|
+
optional: false,
|
|
80
|
+
options: transfered.lockfile.options,
|
|
81
|
+
confused: false,
|
|
82
|
+
setResolved() { },
|
|
83
|
+
setConfusedManifest(fixed, confused) {
|
|
84
|
+
this.manifest = fixed;
|
|
85
|
+
this.rawManifest = confused;
|
|
86
|
+
this.confused = true;
|
|
87
|
+
},
|
|
88
|
+
maybeSetConfusedManifest() { },
|
|
89
|
+
toJSON() {
|
|
90
|
+
return {
|
|
91
|
+
id: this.id,
|
|
92
|
+
name: this.name,
|
|
93
|
+
version: this.version,
|
|
94
|
+
location: this.location,
|
|
95
|
+
importer: this.importer,
|
|
96
|
+
manifest: this.manifest,
|
|
97
|
+
projectRoot: this.projectRoot,
|
|
98
|
+
integrity: this.integrity,
|
|
99
|
+
resolved: this.resolved,
|
|
100
|
+
dev: this.dev,
|
|
101
|
+
optional: this.optional,
|
|
102
|
+
confused: this.confused,
|
|
103
|
+
...(this.confused ?
|
|
104
|
+
{ rawManifest: this.rawManifest }
|
|
105
|
+
: undefined),
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
toString() {
|
|
109
|
+
return stringifyNode(this);
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
this.nodes.set(node.id, node);
|
|
113
|
+
if (node.name) {
|
|
114
|
+
const allNodesWithThisName = this.nodesByName.get(node.name) ?? new Set();
|
|
115
|
+
allNodesWithThisName.add(node);
|
|
116
|
+
this.nodesByName.set(node.name, allNodesWithThisName);
|
|
117
|
+
}
|
|
118
|
+
return node;
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
// configure importer nodes
|
|
122
|
+
for (const importer of transfered.importers) {
|
|
123
|
+
const id = importer.id;
|
|
124
|
+
const graph = maybeGraph;
|
|
125
|
+
const node = graph.addNode(id, importer.manifest);
|
|
126
|
+
node.importer = true;
|
|
127
|
+
node.mainImporter = importer.id === mainImporter?.id;
|
|
128
|
+
node.location = importer.location;
|
|
129
|
+
node.integrity = importer.integrity;
|
|
130
|
+
node.resolved = importer.resolved;
|
|
131
|
+
/* c8 ignore next 2 */
|
|
132
|
+
node.dev = importer.dev ?? false;
|
|
133
|
+
node.optional = importer.optional ?? false;
|
|
134
|
+
node.confused = false;
|
|
135
|
+
node.toJSON = () => ({
|
|
136
|
+
id: node.id,
|
|
137
|
+
name: node.name,
|
|
138
|
+
version: node.version,
|
|
139
|
+
location: node.location,
|
|
140
|
+
importer: node.importer,
|
|
141
|
+
manifest: node.manifest,
|
|
142
|
+
projectRoot: node.projectRoot,
|
|
143
|
+
integrity: node.integrity,
|
|
144
|
+
resolved: node.resolved,
|
|
145
|
+
dev: node.dev,
|
|
146
|
+
optional: node.optional,
|
|
147
|
+
confused: node.confused,
|
|
148
|
+
});
|
|
149
|
+
node.toString = () => stringifyNode(node);
|
|
150
|
+
// should set the main importer in the first iteration
|
|
151
|
+
graph.mainImporter ??= node;
|
|
152
|
+
graph.importers.add(node);
|
|
153
|
+
}
|
|
154
|
+
// populate nodes and edges from loaded data
|
|
155
|
+
const graph = maybeGraph;
|
|
156
|
+
const specOptions = loadSpecOptions(transfered.lockfile);
|
|
157
|
+
loadNodes(graph, transfered.lockfile.nodes, specOptions, graph);
|
|
158
|
+
loadEdges(graph, transfered.lockfile.edges, specOptions);
|
|
159
|
+
const securityArchive = SecurityArchive.load(transfered.securityArchive);
|
|
160
|
+
// validates that all nodes have a security archive entry
|
|
161
|
+
if (securityArchive) {
|
|
162
|
+
securityArchive.ok = true;
|
|
163
|
+
for (const node of graph.nodes.values()) {
|
|
164
|
+
if (!securityArchive.has(node.id)) {
|
|
165
|
+
securityArchive.ok = false;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
graph,
|
|
172
|
+
specOptions,
|
|
173
|
+
securityArchive,
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/transfer-data/load.ts"],"names":[],"mappings":"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","sourcesContent":["import { error } from '@vltpkg/error-cause'\nimport { SecurityArchive } from '@vltpkg/security-archive/browser'\nimport {\n defaultGitHostArchives,\n defaultGitHosts,\n defaultRegistries,\n defaultRegistry,\n defaultScopeRegistries,\n} from '@vltpkg/spec/browser'\nimport { stringifyNode } from '../stringify-node.ts'\nimport { loadEdges } from '../lockfile/load-edges.ts'\nimport { loadNodes } from '../lockfile/load-nodes.ts'\nimport type {\n EdgeLike,\n GraphLike,\n NodeLike,\n DependencyTypeShort,\n NormalizedManifest,\n} from '@vltpkg/types'\nimport type { LockfileData } from '../lockfile/types.ts'\nimport type { DepID } from '@vltpkg/dep-id/browser'\nimport type { Spec, SpecOptionsFilled } from '@vltpkg/spec/browser'\n\nconst loadSpecOptions = (\n lockfile: LockfileData,\n): SpecOptionsFilled => {\n const {\n catalog = {},\n catalogs = {},\n registries,\n registry,\n 'git-hosts': gitHosts,\n 'git-host-archives': gitHostArchives,\n 'scope-registries': scopeRegistries,\n 'jsr-registries': jsrRegistries,\n } = lockfile.options\n return {\n catalog,\n catalogs,\n registries: { ...defaultRegistries, ...registries },\n registry: registry || defaultRegistry,\n 'jsr-registries': { ...jsrRegistries },\n 'git-hosts': { ...defaultGitHosts, ...gitHosts },\n 'git-host-archives': {\n ...defaultGitHostArchives,\n ...gitHostArchives,\n },\n 'scope-registries': {\n ...defaultScopeRegistries,\n ...scopeRegistries,\n },\n }\n}\n\ntype MaybeGraphLike = Pick<\n GraphLike,\n | 'importers'\n | 'edges'\n | 'nodes'\n | 'nodesByName'\n | 'projectRoot'\n | 'addEdge'\n | 'addNode'\n> & {\n mainImporter?: NodeLike\n}\n\n/**\n * The returned object when loading a graph from a transfer data structure,\n * including the graph itself, the spec options used to create it, and\n * the security archive (if any).\n */\nexport type LoadResult = {\n graph: GraphLike\n specOptions: SpecOptionsFilled\n securityArchive: SecurityArchive | undefined\n}\n\n/**\n * A data structure defining a complete graph to be transfered, including\n * extra information to the lockfile such as project info and importers.\n */\nexport type TransferData = {\n importers: {\n importer: boolean\n mainImporter: boolean\n id: string\n name: string\n version: string\n location: string\n manifest: NormalizedManifest\n projectRoot?: string\n integrity?: string\n resolved?: string\n dev?: boolean\n optional?: boolean\n }[]\n lockfile: LockfileData\n projectInfo: {\n root: string\n homedirRelativeRoot: string\n tools?: string[]\n vltInstalled?: boolean\n }\n securityArchive?: any\n}\n\nexport const load = (transfered: TransferData): LoadResult => {\n const [mainImporter] = transfered.importers\n const maybeGraph: MaybeGraphLike = {\n importers: new Set<NodeLike>(),\n edges: new Set<EdgeLike>(),\n nodes: new Map<DepID, NodeLike>(),\n nodesByName: new Map<string, Set<NodeLike>>(),\n projectRoot: transfered.projectInfo.root,\n addEdge(\n type: DependencyTypeShort,\n spec: Spec,\n from: NodeLike,\n to?: NodeLike,\n ) {\n const existing = from.edgesOut.get(spec.name)\n if (existing) {\n const edge = existing\n if (\n edge.type === type &&\n edge.spec.bareSpec === spec.bareSpec\n ) {\n if (to && to !== edge.to) {\n edge.to = to\n edge.to.edgesIn.add(edge)\n }\n return edge\n }\n this.edges.delete(edge)\n }\n const edge: EdgeLike = {\n from,\n name: spec.name,\n spec,\n to,\n type,\n }\n from.edgesOut.set(spec.name, edge)\n to?.edgesIn.add(edge)\n this.edges.add(edge)\n return edge\n },\n addNode(id?: DepID, manifest?: NormalizedManifest) {\n const graph = this as GraphLike\n if (!id) throw error('id is required', { manifest })\n if (!manifest) throw error('manifest is required')\n const node: NodeLike = {\n id,\n name: manifest.name,\n version: manifest.version,\n manifest,\n edgesIn: new Set(),\n edgesOut: new Map(),\n workspaces: undefined,\n graph,\n importer: false,\n mainImporter: false,\n projectRoot: graph.projectRoot,\n dev: false,\n optional: false,\n options: transfered.lockfile.options,\n confused: false,\n setResolved() {},\n setConfusedManifest(\n fixed: NormalizedManifest,\n confused?: NormalizedManifest,\n ) {\n this.manifest = fixed\n this.rawManifest = confused\n this.confused = true\n },\n maybeSetConfusedManifest() {},\n toJSON() {\n return {\n id: this.id,\n name: this.name,\n version: this.version,\n location: this.location,\n importer: this.importer,\n manifest: this.manifest,\n projectRoot: this.projectRoot,\n integrity: this.integrity,\n resolved: this.resolved,\n dev: this.dev,\n optional: this.optional,\n confused: this.confused,\n ...(this.confused ?\n { rawManifest: this.rawManifest }\n : undefined),\n }\n },\n toString() {\n return stringifyNode(this)\n },\n }\n this.nodes.set(node.id, node)\n if (node.name) {\n const allNodesWithThisName =\n this.nodesByName.get(node.name) ?? new Set()\n allNodesWithThisName.add(node)\n this.nodesByName.set(node.name, allNodesWithThisName)\n }\n return node\n },\n }\n\n // configure importer nodes\n for (const importer of transfered.importers) {\n const id = importer.id as DepID\n const graph = maybeGraph\n const node: NodeLike = graph.addNode(id, importer.manifest)\n node.importer = true\n node.mainImporter = importer.id === mainImporter?.id\n node.location = importer.location\n node.integrity = importer.integrity\n node.resolved = importer.resolved\n /* c8 ignore next 2 */\n node.dev = importer.dev ?? false\n node.optional = importer.optional ?? false\n node.confused = false\n node.toJSON = () => ({\n id: node.id,\n name: node.name,\n version: node.version,\n location: node.location,\n importer: node.importer,\n manifest: node.manifest,\n projectRoot: node.projectRoot,\n integrity: node.integrity,\n resolved: node.resolved,\n dev: node.dev,\n optional: node.optional,\n confused: node.confused,\n })\n node.toString = () => stringifyNode(node)\n // should set the main importer in the first iteration\n graph.mainImporter ??= node\n graph.importers.add(node)\n }\n\n // populate nodes and edges from loaded data\n const graph = maybeGraph as GraphLike\n const specOptions = loadSpecOptions(transfered.lockfile)\n\n loadNodes(graph, transfered.lockfile.nodes, specOptions, graph)\n loadEdges(graph, transfered.lockfile.edges, specOptions)\n\n const securityArchive = SecurityArchive.load(\n transfered.securityArchive,\n )\n\n // validates that all nodes have a security archive entry\n if (securityArchive) {\n securityArchive.ok = true\n for (const node of graph.nodes.values()) {\n if (!securityArchive.has(node.id)) {\n securityArchive.ok = false\n break\n }\n }\n }\n\n return {\n graph,\n specOptions,\n securityArchive,\n }\n}\n"]}
|
package/dist/esm/uninstall.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { PackageInfoClient } from '@vltpkg/package-info';
|
|
2
|
-
import type { PackageJson } from '@vltpkg/package-json';
|
|
3
2
|
import type { LoadOptions } from './actual/load.ts';
|
|
4
3
|
import type { RemoveImportersDependenciesMap } from './dependencies.ts';
|
|
5
4
|
export type UninstallOptions = LoadOptions & {
|
|
6
|
-
projectRoot: string;
|
|
7
|
-
packageJson: PackageJson;
|
|
8
5
|
packageInfo: PackageInfoClient;
|
|
6
|
+
allowScripts: string;
|
|
9
7
|
};
|
|
10
8
|
export declare const uninstall: (options: UninstallOptions, remove?: RemoveImportersDependenciesMap) => Promise<{
|
|
11
9
|
graph: import("./graph.ts").Graph;
|
|
12
|
-
diff:
|
|
10
|
+
diff: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
graph: import("./graph.ts").Graph;
|
|
13
|
+
diff: import("./reify/index.ts").ReifyResult;
|
|
13
14
|
}>;
|
|
14
15
|
//# sourceMappingURL=uninstall.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;AAUvE,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG;IAC3C,WAAW,EAAE,iBAAiB,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,SAAS,YACX,gBAAgB,WAChB,8BAA8B;;;;;;EA+DxC,CAAA"}
|
package/dist/esm/uninstall.js
CHANGED
|
@@ -1,26 +1,68 @@
|
|
|
1
1
|
import { load as actualLoad } from "./actual/load.js";
|
|
2
|
+
import { GraphModifier } from "./modifiers.js";
|
|
2
3
|
import { build as idealBuild } from "./ideal/build.js";
|
|
3
4
|
import { reify } from "./reify/index.js";
|
|
5
|
+
import { lockfile } from "./index.js";
|
|
6
|
+
import { updatePackageJson } from "./reify/update-importers-package-json.js";
|
|
7
|
+
import { RollbackRemove } from '@vltpkg/rollback-remove';
|
|
8
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
9
|
+
import { resolve } from 'node:path';
|
|
4
10
|
export const uninstall = async (options, remove) => {
|
|
5
11
|
const mainManifest = options.packageJson.read(options.projectRoot);
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
const modifiers = GraphModifier.maybeLoad(options);
|
|
13
|
+
const remover = new RollbackRemove();
|
|
14
|
+
try {
|
|
15
|
+
const graph = await idealBuild({
|
|
16
|
+
...options,
|
|
17
|
+
remove,
|
|
18
|
+
mainManifest,
|
|
19
|
+
loadManifests: true,
|
|
20
|
+
remover,
|
|
21
|
+
});
|
|
22
|
+
const act = actualLoad({
|
|
23
|
+
...options,
|
|
24
|
+
mainManifest,
|
|
25
|
+
loadManifests: true,
|
|
26
|
+
});
|
|
27
|
+
// If lockfileOnly is enabled, skip reify and only save the lockfile
|
|
28
|
+
if (options.lockfileOnly) {
|
|
29
|
+
// Save only the main lockfile, skip all filesystem operations
|
|
30
|
+
lockfile.save({ graph, modifiers });
|
|
31
|
+
const saveImportersPackageJson =
|
|
32
|
+
/* c8 ignore next */
|
|
33
|
+
remove?.modifiedDependencies ?
|
|
34
|
+
updatePackageJson({
|
|
35
|
+
...options,
|
|
36
|
+
remove,
|
|
37
|
+
graph,
|
|
38
|
+
})
|
|
39
|
+
: undefined;
|
|
40
|
+
saveImportersPackageJson?.();
|
|
41
|
+
return { graph, diff: undefined };
|
|
42
|
+
}
|
|
43
|
+
const diff = await reify({
|
|
44
|
+
...options,
|
|
45
|
+
remove,
|
|
46
|
+
actual: act,
|
|
47
|
+
graph,
|
|
48
|
+
loadManifests: true,
|
|
49
|
+
remover,
|
|
50
|
+
});
|
|
51
|
+
return { graph, diff };
|
|
52
|
+
/* c8 ignore start */
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
await remover.rollback().catch(() => { });
|
|
56
|
+
// Remove hidden lockfile on failure
|
|
57
|
+
try {
|
|
58
|
+
const hiddenLockfile = resolve(options.projectRoot, 'node_modules/.vlt-lock.json');
|
|
59
|
+
if (existsSync(hiddenLockfile)) {
|
|
60
|
+
rmSync(hiddenLockfile, { force: true });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch { }
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
/* c8 ignore stop */
|
|
25
67
|
};
|
|
26
68
|
//# sourceMappingURL=uninstall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/uninstall.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/uninstall.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAC5B,OAAyB,EACzB,MAAuC,EACvC,EAAE;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAClE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IAEpC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC;YAC7B,GAAG,OAAO;YACV,MAAM;YACN,YAAY;YACZ,aAAa,EAAE,IAAI;YACnB,OAAO;SACR,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,UAAU,CAAC;YACrB,GAAG,OAAO;YACV,YAAY;YACZ,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QAEF,oEAAoE;QACpE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,8DAA8D;YAC9D,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;YACnC,MAAM,wBAAwB;YAC5B,oBAAoB;YACpB,MAAM,EAAE,oBAAoB,CAAC,CAAC;gBAC5B,iBAAiB,CAAC;oBAChB,GAAG,OAAO;oBACV,MAAM;oBACN,KAAK;iBACN,CAAC;gBACJ,CAAC,CAAC,SAAS,CAAA;YACb,wBAAwB,EAAE,EAAE,CAAA;YAC5B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACnC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC;YACvB,GAAG,OAAO;YACV,MAAM;YACN,MAAM,EAAE,GAAG;YACX,KAAK;YACL,aAAa,EAAE,IAAI;YACnB,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QACtB,qBAAqB;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACxC,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,OAAO,CAC5B,OAAO,CAAC,WAAW,EACnB,6BAA6B,CAC9B,CAAA;YACD,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,GAAG,CAAA;IACX,CAAC;IACD,oBAAoB;AACtB,CAAC,CAAA","sourcesContent":["import type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { LoadOptions } from './actual/load.ts'\nimport { load as actualLoad } from './actual/load.ts'\nimport type { RemoveImportersDependenciesMap } from './dependencies.ts'\nimport { GraphModifier } from './modifiers.ts'\nimport { build as idealBuild } from './ideal/build.ts'\nimport { reify } from './reify/index.ts'\nimport { lockfile } from './index.ts'\nimport { updatePackageJson } from './reify/update-importers-package-json.ts'\nimport { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { existsSync, rmSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nexport type UninstallOptions = LoadOptions & {\n packageInfo: PackageInfoClient\n allowScripts: string\n}\n\nexport const uninstall = async (\n options: UninstallOptions,\n remove?: RemoveImportersDependenciesMap,\n) => {\n const mainManifest = options.packageJson.read(options.projectRoot)\n const modifiers = GraphModifier.maybeLoad(options)\n const remover = new RollbackRemove()\n\n try {\n const graph = await idealBuild({\n ...options,\n remove,\n mainManifest,\n loadManifests: true,\n remover,\n })\n const act = actualLoad({\n ...options,\n mainManifest,\n loadManifests: true,\n })\n\n // If lockfileOnly is enabled, skip reify and only save the lockfile\n if (options.lockfileOnly) {\n // Save only the main lockfile, skip all filesystem operations\n lockfile.save({ graph, modifiers })\n const saveImportersPackageJson =\n /* c8 ignore next */\n remove?.modifiedDependencies ?\n updatePackageJson({\n ...options,\n remove,\n graph,\n })\n : undefined\n saveImportersPackageJson?.()\n return { graph, diff: undefined }\n }\n\n const diff = await reify({\n ...options,\n remove,\n actual: act,\n graph,\n loadManifests: true,\n remover,\n })\n\n return { graph, diff }\n /* c8 ignore start */\n } catch (err) {\n await remover.rollback().catch(() => {})\n // Remove hidden lockfile on failure\n try {\n const hiddenLockfile = resolve(\n options.projectRoot,\n 'node_modules/.vlt-lock.json',\n )\n if (existsSync(hiddenLockfile)) {\n rmSync(hiddenLockfile, { force: true })\n }\n } catch {}\n throw err\n }\n /* c8 ignore stop */\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PackageInfoClient } from '@vltpkg/package-info';
|
|
2
|
+
import type { LoadOptions } from './actual/load.ts';
|
|
3
|
+
import { Graph } from './graph.ts';
|
|
4
|
+
export type UpdateOptions = LoadOptions & {
|
|
5
|
+
packageInfo: PackageInfoClient;
|
|
6
|
+
allowScripts: string;
|
|
7
|
+
};
|
|
8
|
+
export declare const update: (options: UpdateOptions) => Promise<{
|
|
9
|
+
buildQueue: import("@vltpkg/dep-id").DepID[] | undefined;
|
|
10
|
+
graph: Graph;
|
|
11
|
+
diff: import("./diff.ts").Diff;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAMlC,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG;IACxC,WAAW,EAAE,iBAAiB,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,MAAM,YAAmB,aAAa;;;;EAgElD,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { load as actualLoad } from "./actual/load.js";
|
|
2
|
+
import { buildIdealFromStartingGraph } from "./ideal/build-ideal-from-starting-graph.js";
|
|
3
|
+
import { reify } from "./reify/index.js";
|
|
4
|
+
import { GraphModifier } from "./modifiers.js";
|
|
5
|
+
import { init } from '@vltpkg/init';
|
|
6
|
+
import { asError } from '@vltpkg/types';
|
|
7
|
+
import { Graph } from "./graph.js";
|
|
8
|
+
import { graphStep } from '@vltpkg/output';
|
|
9
|
+
import { RollbackRemove } from '@vltpkg/rollback-remove';
|
|
10
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
11
|
+
import { resolve } from 'node:path';
|
|
12
|
+
export const update = async (options) => {
|
|
13
|
+
let mainManifest = undefined;
|
|
14
|
+
try {
|
|
15
|
+
mainManifest = options.packageJson.read(options.projectRoot);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
if (asError(err).message === 'Could not read package.json file') {
|
|
19
|
+
await init({ cwd: options.projectRoot });
|
|
20
|
+
mainManifest = options.packageJson.read(options.projectRoot, {
|
|
21
|
+
reload: true,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
throw err;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const modifiers = GraphModifier.maybeLoad(options);
|
|
29
|
+
const remover = new RollbackRemove();
|
|
30
|
+
try {
|
|
31
|
+
const done = graphStep('build');
|
|
32
|
+
const graph = await buildIdealFromStartingGraph({
|
|
33
|
+
...options,
|
|
34
|
+
add: Object.assign(new Map(), { modifiedDependencies: false }),
|
|
35
|
+
remove: Object.assign(new Map(), {
|
|
36
|
+
modifiedDependencies: false,
|
|
37
|
+
}),
|
|
38
|
+
graph: new Graph({ ...options, mainManifest }),
|
|
39
|
+
modifiers,
|
|
40
|
+
remover,
|
|
41
|
+
});
|
|
42
|
+
done();
|
|
43
|
+
const act = actualLoad({
|
|
44
|
+
...options,
|
|
45
|
+
mainManifest,
|
|
46
|
+
loadManifests: true,
|
|
47
|
+
});
|
|
48
|
+
const { buildQueue, diff } = await reify({
|
|
49
|
+
...options,
|
|
50
|
+
actual: act,
|
|
51
|
+
graph,
|
|
52
|
+
loadManifests: true,
|
|
53
|
+
modifiers,
|
|
54
|
+
remover,
|
|
55
|
+
});
|
|
56
|
+
return { buildQueue, graph, diff };
|
|
57
|
+
/* c8 ignore start */
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
await remover.rollback().catch(() => { });
|
|
61
|
+
// Remove hidden lockfile on failure
|
|
62
|
+
try {
|
|
63
|
+
const hiddenLockfile = resolve(options.projectRoot, 'node_modules/.vlt-lock.json');
|
|
64
|
+
if (existsSync(hiddenLockfile)) {
|
|
65
|
+
rmSync(hiddenLockfile, { force: true });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch { }
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
/* c8 ignore stop */
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAA;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAIvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,OAAsB,EAAE,EAAE;IACrD,IAAI,YAAY,GAAmC,SAAS,CAAA;IAC5D,IAAI,CAAC;QACH,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,kCAAkC,EAAE,CAAC;YAChE,MAAM,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;YACxC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBAC3D,MAAM,EAAE,IAAI;aACb,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IAEpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,KAAK,GAAG,MAAM,2BAA2B,CAAC;YAC9C,GAAG,OAAO;YACV,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;YAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE;gBAC/B,oBAAoB,EAAE,KAAK;aAC5B,CAAC;YACF,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAC;YAC9C,SAAS;YACT,OAAO;SACR,CAAC,CAAA;QACF,IAAI,EAAE,CAAA;QAEN,MAAM,GAAG,GAAG,UAAU,CAAC;YACrB,GAAG,OAAO;YACV,YAAY;YACZ,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;QAEF,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC;YACvC,GAAG,OAAO;YACV,MAAM,EAAE,GAAG;YACX,KAAK;YACL,aAAa,EAAE,IAAI;YACnB,SAAS;YACT,OAAO;SACR,CAAC,CAAA;QAEF,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QAClC,qBAAqB;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACxC,oCAAoC;QACpC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,OAAO,CAC5B,OAAO,CAAC,WAAW,EACnB,6BAA6B,CAC9B,CAAA;YACD,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,GAAG,CAAA;IACX,CAAC;IACD,oBAAoB;AACtB,CAAC,CAAA","sourcesContent":["import { load as actualLoad } from './actual/load.ts'\nimport { buildIdealFromStartingGraph } from './ideal/build-ideal-from-starting-graph.ts'\nimport { reify } from './reify/index.ts'\nimport { GraphModifier } from './modifiers.ts'\nimport { init } from '@vltpkg/init'\nimport { asError } from '@vltpkg/types'\nimport type { NormalizedManifest } from '@vltpkg/types'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { LoadOptions } from './actual/load.ts'\nimport { Graph } from './graph.ts'\nimport { graphStep } from '@vltpkg/output'\nimport { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { existsSync, rmSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nexport type UpdateOptions = LoadOptions & {\n packageInfo: PackageInfoClient\n allowScripts: string\n}\n\nexport const update = async (options: UpdateOptions) => {\n let mainManifest: NormalizedManifest | undefined = undefined\n try {\n mainManifest = options.packageJson.read(options.projectRoot)\n } catch (err) {\n if (asError(err).message === 'Could not read package.json file') {\n await init({ cwd: options.projectRoot })\n mainManifest = options.packageJson.read(options.projectRoot, {\n reload: true,\n })\n } else {\n throw err\n }\n }\n\n const modifiers = GraphModifier.maybeLoad(options)\n const remover = new RollbackRemove()\n\n try {\n const done = graphStep('build')\n const graph = await buildIdealFromStartingGraph({\n ...options,\n add: Object.assign(new Map(), { modifiedDependencies: false }),\n remove: Object.assign(new Map(), {\n modifiedDependencies: false,\n }),\n graph: new Graph({ ...options, mainManifest }),\n modifiers,\n remover,\n })\n done()\n\n const act = actualLoad({\n ...options,\n mainManifest,\n loadManifests: true,\n })\n\n const { buildQueue, diff } = await reify({\n ...options,\n actual: act,\n graph,\n loadManifests: true,\n modifiers,\n remover,\n })\n\n return { buildQueue, graph, diff }\n /* c8 ignore start */\n } catch (err) {\n await remover.rollback().catch(() => {})\n // Remove hidden lockfile on failure\n try {\n const hiddenLockfile = resolve(\n options.projectRoot,\n 'node_modules/.vlt-lock.json',\n )\n if (existsSync(hiddenLockfile)) {\n rmSync(hiddenLockfile, { force: true })\n }\n } catch {}\n throw err\n }\n /* c8 ignore stop */\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SpecOptions } from '@vltpkg/spec/browser';
|
|
2
|
+
import type { NodeLike } from '@vltpkg/types';
|
|
3
|
+
/**
|
|
4
|
+
* An unique DepID to identify the virtual root node.
|
|
5
|
+
*/
|
|
6
|
+
export declare const VIRTUAL_ROOT_ID: import("@vltpkg/dep-id/browser").DepID;
|
|
7
|
+
/**
|
|
8
|
+
* A virtual root used to aggregate multiple importers into a single graph.
|
|
9
|
+
*
|
|
10
|
+
* This is meant to be used with visual tools that want a single root node
|
|
11
|
+
* starting point to represent the graph.
|
|
12
|
+
*
|
|
13
|
+
* Returns undefined if a virtual root is not needed.
|
|
14
|
+
*/
|
|
15
|
+
export declare const createVirtualRoot: (name: string | undefined, options: SpecOptions, mainImporters: NodeLike[]) => NodeLike | undefined;
|
|
16
|
+
//# sourceMappingURL=virtual-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-root.d.ts","sourceRoot":"","sources":["../../src/virtual-root.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAY,QAAQ,EAAa,MAAM,eAAe,CAAA;AAElE;;GAEG;AACH,eAAO,MAAM,eAAe,wCAG1B,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,sCAEnB,WAAW,iBACL,QAAQ,EAAE,KACxB,QAAQ,GAAG,SA8Db,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Spec } from '@vltpkg/spec/browser';
|
|
2
|
+
import { joinDepIDTuple } from '@vltpkg/dep-id/browser';
|
|
3
|
+
/**
|
|
4
|
+
* An unique DepID to identify the virtual root node.
|
|
5
|
+
*/
|
|
6
|
+
export const VIRTUAL_ROOT_ID = joinDepIDTuple([
|
|
7
|
+
'file',
|
|
8
|
+
'__virtual%root__',
|
|
9
|
+
]);
|
|
10
|
+
/**
|
|
11
|
+
* A virtual root used to aggregate multiple importers into a single graph.
|
|
12
|
+
*
|
|
13
|
+
* This is meant to be used with visual tools that want a single root node
|
|
14
|
+
* starting point to represent the graph.
|
|
15
|
+
*
|
|
16
|
+
* Returns undefined if a virtual root is not needed.
|
|
17
|
+
*/
|
|
18
|
+
export const createVirtualRoot = (name = 'virtual-root', options, mainImporters) => {
|
|
19
|
+
const res = {
|
|
20
|
+
id: VIRTUAL_ROOT_ID,
|
|
21
|
+
name,
|
|
22
|
+
version: '1.0.0',
|
|
23
|
+
manifest: {
|
|
24
|
+
name,
|
|
25
|
+
version: '1.0.0',
|
|
26
|
+
},
|
|
27
|
+
edgesIn: new Set(),
|
|
28
|
+
edgesOut: new Map([]),
|
|
29
|
+
confused: false,
|
|
30
|
+
importer: true,
|
|
31
|
+
mainImporter: true,
|
|
32
|
+
location: '.',
|
|
33
|
+
graph: { importers: new Set() },
|
|
34
|
+
projectRoot: '',
|
|
35
|
+
dev: false,
|
|
36
|
+
optional: false,
|
|
37
|
+
options,
|
|
38
|
+
setConfusedManifest() { },
|
|
39
|
+
setResolved() { },
|
|
40
|
+
maybeSetConfusedManifest() { },
|
|
41
|
+
workspaces: undefined,
|
|
42
|
+
toJSON() {
|
|
43
|
+
return {
|
|
44
|
+
id: this.id,
|
|
45
|
+
name: this.name,
|
|
46
|
+
version: this.version,
|
|
47
|
+
location: this.location,
|
|
48
|
+
importer: this.importer,
|
|
49
|
+
manifest: this.manifest,
|
|
50
|
+
projectRoot: this.projectRoot,
|
|
51
|
+
integrity: this.integrity,
|
|
52
|
+
resolved: this.resolved,
|
|
53
|
+
dev: this.dev,
|
|
54
|
+
optional: this.optional,
|
|
55
|
+
confused: false,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
// @ts-expect-error
|
|
60
|
+
res[Symbol.toStringTag] = '@vltpkg/graph.Node';
|
|
61
|
+
// link all mainImporters to the virtual root
|
|
62
|
+
for (const importer of mainImporters) {
|
|
63
|
+
const name = importer.name || '(unknown)';
|
|
64
|
+
if (importer.mainImporter) {
|
|
65
|
+
const spec = Spec.parse(name, 'file:.', options);
|
|
66
|
+
const edge = {
|
|
67
|
+
name: spec.name,
|
|
68
|
+
from: res,
|
|
69
|
+
to: importer,
|
|
70
|
+
spec,
|
|
71
|
+
type: 'prod',
|
|
72
|
+
};
|
|
73
|
+
res.edgesOut.set(name, edge);
|
|
74
|
+
importer.edgesIn.add(edge);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return res;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=virtual-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-root.js","sourceRoot":"","sources":["../../src/virtual-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAIvD;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC;IAC5C,MAAM;IACN,kBAAkB;CACnB,CAAC,CAAA;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAI,GAAG,cAAc,EACrB,OAAoB,EACpB,aAAyB,EACH,EAAE;IACxB,MAAM,GAAG,GAAG;QACV,EAAE,EAAE,eAAe;QACnB,IAAI;QACJ,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE;YACR,IAAI;YACJ,OAAO,EAAE,OAAO;SACjB;QACD,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,QAAQ,EAAE,IAAI,GAAG,CAAmB,EAAE,CAAC;QACvC,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAe;QAC5C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,KAAK;QACf,OAAO;QACP,mBAAmB,KAAI,CAAC;QACxB,WAAW,KAAI,CAAC;QAChB,wBAAwB,KAAI,CAAC;QAC7B,UAAU,EAAE,SAAS;QACrB,MAAM;YACJ,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,KAAK;aAChB,CAAA;QACH,CAAC;KACiB,CAAA;IAEpB,mBAAmB;IACnB,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,oBAAoB,CAAA;IAE9C,6CAA6C;IAC7C,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAA;QACzC,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;YAChD,MAAM,IAAI,GAAG;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,GAAG;gBACT,EAAE,EAAE,QAAQ;gBACZ,IAAI;gBACJ,IAAI,EAAE,MAAM;aACM,CAAA;YACpB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YAC5B,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA","sourcesContent":["import { Spec } from '@vltpkg/spec/browser'\nimport { joinDepIDTuple } from '@vltpkg/dep-id/browser'\nimport type { SpecOptions } from '@vltpkg/spec/browser'\nimport type { EdgeLike, NodeLike, GraphLike } from '@vltpkg/types'\n\n/**\n * An unique DepID to identify the virtual root node.\n */\nexport const VIRTUAL_ROOT_ID = joinDepIDTuple([\n 'file',\n '__virtual%root__',\n])\n\n/**\n * A virtual root used to aggregate multiple importers into a single graph.\n *\n * This is meant to be used with visual tools that want a single root node\n * starting point to represent the graph.\n *\n * Returns undefined if a virtual root is not needed.\n */\nexport const createVirtualRoot = (\n name = 'virtual-root',\n options: SpecOptions,\n mainImporters: NodeLike[],\n): NodeLike | undefined => {\n const res = {\n id: VIRTUAL_ROOT_ID,\n name,\n version: '1.0.0',\n manifest: {\n name,\n version: '1.0.0',\n },\n edgesIn: new Set(),\n edgesOut: new Map<string, EdgeLike>([]),\n confused: false,\n importer: true,\n mainImporter: true,\n location: '.',\n graph: { importers: new Set() } as GraphLike,\n projectRoot: '',\n dev: false,\n optional: false,\n options,\n setConfusedManifest() {},\n setResolved() {},\n maybeSetConfusedManifest() {},\n workspaces: undefined,\n toJSON() {\n return {\n id: this.id,\n name: this.name,\n version: this.version,\n location: this.location,\n importer: this.importer,\n manifest: this.manifest,\n projectRoot: this.projectRoot,\n integrity: this.integrity,\n resolved: this.resolved,\n dev: this.dev,\n optional: this.optional,\n confused: false,\n }\n },\n } satisfies NodeLike\n\n // @ts-expect-error\n res[Symbol.toStringTag] = '@vltpkg/graph.Node'\n\n // link all mainImporters to the virtual root\n for (const importer of mainImporters) {\n const name = importer.name || '(unknown)'\n if (importer.mainImporter) {\n const spec = Spec.parse(name, 'file:.', options)\n const edge = {\n name: spec.name,\n from: res,\n to: importer,\n spec,\n type: 'prod',\n } satisfies EdgeLike\n res.edgesOut.set(name, edge)\n importer.edgesIn.add(edge)\n }\n }\n return res\n}\n"]}
|