@vltpkg/graph 0.0.0-30 → 0.0.0-31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/actual/load.d.ts +5 -0
- package/dist/esm/actual/load.d.ts.map +1 -1
- package/dist/esm/actual/load.js +1 -0
- package/dist/esm/actual/load.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/diff.d.ts +62 -0
- package/dist/esm/diff.d.ts.map +1 -1
- package/dist/esm/diff.js +12 -0
- package/dist/esm/diff.js.map +1 -1
- package/dist/esm/edge.d.ts +6 -0
- package/dist/esm/edge.d.ts.map +1 -1
- package/dist/esm/edge.js +8 -0
- package/dist/esm/edge.js.map +1 -1
- package/dist/esm/ideal/add-nodes.d.ts +12 -2
- package/dist/esm/ideal/add-nodes.d.ts.map +1 -1
- package/dist/esm/ideal/add-nodes.js +8 -2
- package/dist/esm/ideal/add-nodes.js.map +1 -1
- package/dist/esm/ideal/append-nodes.d.ts +3 -1
- package/dist/esm/ideal/append-nodes.d.ts.map +1 -1
- package/dist/esm/ideal/append-nodes.js +24 -3
- package/dist/esm/ideal/append-nodes.js.map +1 -1
- package/dist/esm/ideal/build.d.ts +5 -0
- package/dist/esm/ideal/build.d.ts.map +1 -1
- package/dist/esm/ideal/build.js +2 -1
- package/dist/esm/ideal/build.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/install.d.ts +7 -0
- package/dist/esm/install.d.ts.map +1 -1
- package/dist/esm/install.js +26 -2
- package/dist/esm/install.js.map +1 -1
- package/dist/esm/lockfile/load-nodes.d.ts.map +1 -1
- package/dist/esm/lockfile/load-nodes.js +6 -2
- package/dist/esm/lockfile/load-nodes.js.map +1 -1
- package/dist/esm/lockfile/load.d.ts.map +1 -1
- package/dist/esm/lockfile/load.js +3 -1
- package/dist/esm/lockfile/load.js.map +1 -1
- package/dist/esm/lockfile/save.d.ts +6 -2
- package/dist/esm/lockfile/save.d.ts.map +1 -1
- package/dist/esm/lockfile/save.js +16 -5
- package/dist/esm/lockfile/save.js.map +1 -1
- package/dist/esm/lockfile/types.d.ts +17 -1
- 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/node.d.ts +19 -1
- package/dist/esm/node.d.ts.map +1 -1
- package/dist/esm/node.js +17 -0
- package/dist/esm/node.js.map +1 -1
- package/dist/esm/reify/add-nodes.d.ts.map +1 -1
- package/dist/esm/reify/add-nodes.js +4 -29
- package/dist/esm/reify/add-nodes.js.map +1 -1
- 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 +30 -4
- package/dist/esm/reify/build.js.map +1 -1
- 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/extract-node.d.ts +24 -0
- package/dist/esm/reify/extract-node.d.ts.map +1 -0
- package/dist/esm/reify/extract-node.js +76 -0
- package/dist/esm/reify/extract-node.js.map +1 -0
- package/dist/esm/reify/index.d.ts +16 -1
- package/dist/esm/reify/index.d.ts.map +1 -1
- package/dist/esm/reify/index.js +59 -12
- package/dist/esm/reify/index.js.map +1 -1
- package/dist/esm/transfer-data/load.d.ts.map +1 -1
- package/dist/esm/transfer-data/load.js.map +1 -1
- package/dist/esm/uninstall.d.ts +5 -1
- package/dist/esm/uninstall.d.ts.map +1 -1
- package/dist/esm/uninstall.js +51 -19
- package/dist/esm/uninstall.js.map +1 -1
- package/dist/esm/update.d.ts +2 -0
- package/dist/esm/update.d.ts.map +1 -1
- package/dist/esm/update.js +36 -22
- package/dist/esm/update.js.map +1 -1
- package/dist/esm/virtual-root.d.ts.map +1 -1
- package/dist/esm/virtual-root.js +1 -0
- package/dist/esm/virtual-root.js.map +1 -1
- package/package.json +21 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/reify/build.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,kEAAkE;AAClE,oCAAoC;AAGpC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/reify/build.ts"],"names":[],"mappings":"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","sourcesContent":["// walk the graph of added nodes, building and chmoding their bins\n// at the end, we get back to the importers, and run their prepare\n// script as well as install script.\n\nimport type { PackageJson } from '@vltpkg/package-json'\nimport { run } from '@vltpkg/run'\nimport { statSync, existsSync } from 'node:fs'\nimport { chmod } from 'node:fs/promises'\nimport { graphRun } from 'graph-run'\nimport type { PathScurry } from 'path-scurry'\nimport type { DepID } from '@vltpkg/dep-id'\nimport type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\nimport { nonEmptyList } from '../non-empty-list.ts'\nimport { binPaths } from './bin-paths.ts'\nimport { optionalFail } from './optional-fail.ts'\n\n/**\n * Returns an object mapping registries to the names of the packages built.\n */\nexport type BuildResult = {\n success: Node[]\n failure: Node[]\n}\n\nexport const build = async (\n diff: Diff,\n packageJson: PackageJson,\n scurry: PathScurry,\n allowScriptsNodes: Set<DepID>,\n): Promise<BuildResult> => {\n const graph = diff.to\n const nodes = nonEmptyList([...graph.importers])\n const res: BuildResult = { success: [], failure: [] }\n\n // determine if scripts should run - check if node is in allowed set\n const shouldRunScripts = (node: Node): boolean =>\n allowScriptsNodes.has(node.id)\n\n /* c8 ignore next - all graphs have at least one importer */\n if (!nodes) return res\n\n await graphRun<Node, unknown>({\n graph: nodes,\n visit: async (node: Node, signal, path) => {\n // if it's not an importer or an added node, nothing to do.\n // TODO: only build importers if it has changed deps, there's never\n // been a previous build, or it contains something newer than the\n // most recent build.\n // For now, just always build all importers, because we don't\n // track all that other stuff.\n\n if (\n !node.importer &&\n (!diff.nodes.add.has(node) || !shouldRunScripts(node))\n )\n return\n\n try {\n await visit(packageJson, scurry, node, signal, path)\n if (!node.importer) {\n node.buildState = 'built'\n res.success.push(node)\n }\n /* c8 ignore start - windows on CI is missing those tests */\n } catch (err) {\n // Check if this is an optional failure that was handled\n if (node.optional) {\n node.buildState = 'failed'\n res.failure.push(node)\n // Let optionalFail handle the error\n await Promise.reject(err).catch(optionalFail(diff, node))\n } else {\n // Re-throw non-optional failures\n throw err\n }\n }\n /* c8 ignore stop */\n },\n\n getDeps: node => {\n const deps: Node[] = []\n for (const { to } of node.edgesOut.values()) {\n /* c8 ignore next - vanishingly unlikely in practice */\n if (to) deps.push(to)\n }\n return deps\n },\n })\n\n return res\n}\n\nconst visit = async (\n packageJson: PackageJson,\n scurry: PathScurry,\n node: Node,\n signal: AbortSignal,\n _path: Node[],\n): Promise<void> => {\n node.manifest ??= packageJson.read(node.resolvedLocation(scurry))\n const { manifest } = node\n const { scripts = {} } = manifest\n\n const {\n install,\n preinstall,\n postinstall,\n prepare,\n preprepare,\n postprepare,\n } = scripts\n\n // if it has install script, run it\n const runInstall = !!(install || preinstall || postinstall)\n if (runInstall) {\n await run({\n signal,\n arg0: 'install',\n ignoreMissing: true,\n packageJson,\n cwd: node.resolvedLocation(scurry),\n projectRoot: node.projectRoot,\n manifest,\n })\n }\n\n // if it's an importer or git, run prepare\n const prepable =\n node.id.startsWith('git') || node.importer || !node.inVltStore()\n const runPrepare =\n !!(prepare || preprepare || postprepare) && prepable\n\n if (runPrepare) {\n await run({\n signal,\n arg0: 'prepare',\n ignoreMissing: true,\n packageJson,\n cwd: node.resolvedLocation(scurry),\n projectRoot: node.projectRoot,\n manifest,\n })\n }\n\n const chmods: Promise<unknown>[] = []\n for (const bin of Object.values(binPaths(manifest))) {\n const path = scurry.resolve(\n `${node.resolvedLocation(scurry)}/${bin}`,\n )\n // only try to make executable if the file exists\n if (existsSync(path)) {\n chmods.push(makeExecutable(path))\n }\n }\n await Promise.all(chmods)\n}\n\n// 0 is \"not yet set\"\n// This is defined by doing `0o111 | <mode>` so that systems\n// that create files group-writable result in 0o775 instead of 0o755\nlet execMode = 0\nconst makeExecutable = async (path: string) => {\n if (!execMode) {\n execMode = (statSync(path).mode & 0o777) | 0o111\n }\n await chmod(path, execMode)\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Diff } from '../diff.ts';
|
|
2
|
+
import type { Node } from '../node.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Build data containing the queue of DepIDs that need building
|
|
5
|
+
*/
|
|
6
|
+
export type BuildData = {
|
|
7
|
+
needsBuildNodes: Node[];
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Options for checking needed build data
|
|
11
|
+
*/
|
|
12
|
+
export type CheckNeededBuildOptions = {
|
|
13
|
+
/**
|
|
14
|
+
* The diff object containing nodes to process
|
|
15
|
+
*/
|
|
16
|
+
diff: Diff;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Check which nodes need to be built and set buildState accordingly
|
|
20
|
+
* Marks nodes with buildState = 'needed' for those that require
|
|
21
|
+
* install lifecycle scripts as part of `vlt build`
|
|
22
|
+
* @returns {BuildData} The BuildData object containing Node objects that need building
|
|
23
|
+
*/
|
|
24
|
+
export declare const checkNeededBuild: (options: CheckNeededBuildOptions) => BuildData;
|
|
25
|
+
//# sourceMappingURL=check-needed-build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-needed-build.d.ts","sourceRoot":"","sources":["../../../src/reify/check-needed-build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,eAAe,EAAE,IAAI,EAAE,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAuCD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,YAClB,uBAAuB,KAC/B,SAgBF,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a node needs to be built based on the conditions from build.ts:
|
|
3
|
+
* 1. Has install lifecycle scripts (install, preinstall, postinstall)
|
|
4
|
+
* 2. Is an importer or git dependency with prepare scripts (prepare, preprepare, postprepare)
|
|
5
|
+
* 3. Has binary files that need to be linked
|
|
6
|
+
*/
|
|
7
|
+
const nodeNeedsBuild = (node) => {
|
|
8
|
+
// If the node has already been built during reify, no need to build again
|
|
9
|
+
if (node.built)
|
|
10
|
+
return false;
|
|
11
|
+
const { manifest } = node;
|
|
12
|
+
/* c8 ignore next */
|
|
13
|
+
if (!manifest)
|
|
14
|
+
return false;
|
|
15
|
+
const { scripts = {} } = manifest;
|
|
16
|
+
// Check for install lifecycle scripts
|
|
17
|
+
const runInstall = !!(scripts.install ||
|
|
18
|
+
scripts.preinstall ||
|
|
19
|
+
scripts.postinstall);
|
|
20
|
+
if (runInstall)
|
|
21
|
+
return true;
|
|
22
|
+
// Check for prepare scripts on importers or git dependencies
|
|
23
|
+
const prepable = node.id.startsWith('git') || node.importer || !node.inVltStore();
|
|
24
|
+
const runPrepare = !!((scripts.prepare || scripts.preprepare || scripts.postprepare)
|
|
25
|
+
/* c8 ignore next 2 */
|
|
26
|
+
) && prepable;
|
|
27
|
+
if (runPrepare)
|
|
28
|
+
return true;
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Check which nodes need to be built and set buildState accordingly
|
|
33
|
+
* Marks nodes with buildState = 'needed' for those that require
|
|
34
|
+
* install lifecycle scripts as part of `vlt build`
|
|
35
|
+
* @returns {BuildData} The BuildData object containing Node objects that need building
|
|
36
|
+
*/
|
|
37
|
+
export const checkNeededBuild = (options) => {
|
|
38
|
+
const { diff } = options;
|
|
39
|
+
// Filter nodes to only include those that actually need to be built
|
|
40
|
+
const nodesToBuild = [...diff.nodes.add].filter(nodeNeedsBuild);
|
|
41
|
+
// Set buildState = 'needed' on all nodes that require building
|
|
42
|
+
for (const node of nodesToBuild) {
|
|
43
|
+
node.buildState = 'needed';
|
|
44
|
+
}
|
|
45
|
+
const buildData = {
|
|
46
|
+
needsBuildNodes: nodesToBuild,
|
|
47
|
+
};
|
|
48
|
+
return buildData;
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=check-needed-build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-needed-build.js","sourceRoot":"","sources":["../../../src/reify/check-needed-build.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,IAAU,EAAW,EAAE;IAC7C,0EAA0E;IAC1E,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAA;IAE5B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IACzB,oBAAoB;IACpB,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3B,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAA;IAEjC,sCAAsC;IACtC,MAAM,UAAU,GAAG,CAAC,CAAC,CACnB,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,WAAW,CACpB,CAAA;IACD,IAAI,UAAU;QAAE,OAAO,IAAI,CAAA;IAE3B,6DAA6D;IAC7D,MAAM,QAAQ,GACZ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;IAClE,MAAM,UAAU,GACd,CAAC,CAAC,CACA,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAC9D,sBAAsB;KACvB,IAAI,QAAQ,CAAA;IACf,IAAI,UAAU;QAAE,OAAO,IAAI,CAAA;IAE3B,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAgC,EACrB,EAAE;IACb,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAExB,oEAAoE;IACpE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAE/D,+DAA+D;IAC/D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAA;IAC5B,CAAC;IAED,MAAM,SAAS,GAAc;QAC3B,eAAe,EAAE,YAAY;KAC9B,CAAA;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA","sourcesContent":["import type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\n\n/**\n * Build data containing the queue of DepIDs that need building\n */\nexport type BuildData = {\n needsBuildNodes: Node[]\n}\n\n/**\n * Options for checking needed build data\n */\nexport type CheckNeededBuildOptions = {\n /**\n * The diff object containing nodes to process\n */\n diff: Diff\n}\n\n/**\n * Checks if a node needs to be built based on the conditions from build.ts:\n * 1. Has install lifecycle scripts (install, preinstall, postinstall)\n * 2. Is an importer or git dependency with prepare scripts (prepare, preprepare, postprepare)\n * 3. Has binary files that need to be linked\n */\nconst nodeNeedsBuild = (node: Node): boolean => {\n // If the node has already been built during reify, no need to build again\n if (node.built) return false\n\n const { manifest } = node\n /* c8 ignore next */\n if (!manifest) return false\n\n const { scripts = {} } = manifest\n\n // Check for install lifecycle scripts\n const runInstall = !!(\n scripts.install ||\n scripts.preinstall ||\n scripts.postinstall\n )\n if (runInstall) return true\n\n // Check for prepare scripts on importers or git dependencies\n const prepable =\n node.id.startsWith('git') || node.importer || !node.inVltStore()\n const runPrepare =\n !!(\n (scripts.prepare || scripts.preprepare || scripts.postprepare)\n /* c8 ignore next 2 */\n ) && prepable\n if (runPrepare) return true\n\n return false\n}\n\n/**\n * Check which nodes need to be built and set buildState accordingly\n * Marks nodes with buildState = 'needed' for those that require\n * install lifecycle scripts as part of `vlt build`\n * @returns {BuildData} The BuildData object containing Node objects that need building\n */\nexport const checkNeededBuild = (\n options: CheckNeededBuildOptions,\n): BuildData => {\n const { diff } = options\n\n // Filter nodes to only include those that actually need to be built\n const nodesToBuild = [...diff.nodes.add].filter(nodeNeedsBuild)\n\n // Set buildState = 'needed' on all nodes that require building\n for (const node of nodesToBuild) {\n node.buildState = 'needed'\n }\n\n const buildData: BuildData = {\n needsBuildNodes: nodesToBuild,\n }\n\n return buildData\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PackageInfoClient } from '@vltpkg/package-info';
|
|
2
|
+
import type { RollbackRemove } from '@vltpkg/rollback-remove';
|
|
3
|
+
import type { SpecOptions } from '@vltpkg/spec';
|
|
4
|
+
import type { PathScurry } from 'path-scurry';
|
|
5
|
+
import type { Diff } from '../diff.ts';
|
|
6
|
+
import type { Node } from '../node.ts';
|
|
7
|
+
/**
|
|
8
|
+
* Result of the extraction operation.
|
|
9
|
+
* Either the extracted package data or an error if extraction failed.
|
|
10
|
+
*/
|
|
11
|
+
export type ExtractResult = {
|
|
12
|
+
success: true;
|
|
13
|
+
node: Node;
|
|
14
|
+
} | {
|
|
15
|
+
success: false;
|
|
16
|
+
node: Node;
|
|
17
|
+
error: unknown;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Extract a single node to the file system.
|
|
21
|
+
* Returns a promise that resolves when the extraction is complete.
|
|
22
|
+
*/
|
|
23
|
+
export declare const extractNode: (node: Node, scurry: PathScurry, remover: RollbackRemove, options: SpecOptions, packageInfo: PackageInfoClient, diff?: Diff) => Promise<ExtractResult>;
|
|
24
|
+
//# sourceMappingURL=extract-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-node.d.ts","sourceRoot":"","sources":["../../../src/reify/extract-node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAItC;;;GAGG;AACH,MAAM,MAAM,aAAa,GACrB;IACE,OAAO,EAAE,IAAI,CAAA;IACb,IAAI,EAAE,IAAI,CAAA;CACX,GACD;IACE,OAAO,EAAE,KAAK,CAAA;IACd,IAAI,EAAE,IAAI,CAAA;IACV,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAgBL;;;GAGG;AACH,eAAO,MAAM,WAAW,SAChB,IAAI,UACF,UAAU,WACT,cAAc,WACd,WAAW,eACP,iBAAiB,SACvB,IAAI,KACV,OAAO,CAAC,aAAa,CAkEvB,CAAA"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { hydrate } from '@vltpkg/dep-id';
|
|
2
|
+
import { platformCheck } from '@vltpkg/pick-manifest';
|
|
3
|
+
import { optionalFail } from "./optional-fail.js";
|
|
4
|
+
import { removeOptionalSubgraph } from "../remove-optional-subgraph.js";
|
|
5
|
+
/**
|
|
6
|
+
* Returns a function that handles removing
|
|
7
|
+
* a failed optional node from its graph.
|
|
8
|
+
* Returns undefined for non-optional nodes when no diff is provided.
|
|
9
|
+
*/
|
|
10
|
+
const getOptionalFailedNodeRemover = (node, diff) => {
|
|
11
|
+
return (diff ? optionalFail(diff, node)
|
|
12
|
+
: node.isOptional() ?
|
|
13
|
+
() => removeOptionalSubgraph(node.graph, node)
|
|
14
|
+
: undefined);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Extract a single node to the file system.
|
|
18
|
+
* Returns a promise that resolves when the extraction is complete.
|
|
19
|
+
*/
|
|
20
|
+
export const extractNode = async (node, scurry, remover, options, packageInfo, diff) => {
|
|
21
|
+
node.extracted = true;
|
|
22
|
+
const { manifest = {} } = node;
|
|
23
|
+
const target = node.resolvedLocation(scurry);
|
|
24
|
+
const from = scurry.resolve('');
|
|
25
|
+
const spec = hydrate(node.id, node.name, options);
|
|
26
|
+
const removeOptionalFailedNode = getOptionalFailedNodeRemover(node, diff);
|
|
27
|
+
const { integrity, resolved } = node;
|
|
28
|
+
// Use platform data from node if available (from lockfile), otherwise fall back to manifest
|
|
29
|
+
const platformData = node.platform ?? manifest;
|
|
30
|
+
// Check if we should skip this node due to platform incompatibility or deprecation
|
|
31
|
+
if (removeOptionalFailedNode &&
|
|
32
|
+
(manifest.deprecated ||
|
|
33
|
+
!platformCheck(platformData, process.version, process.platform, process.arch))) {
|
|
34
|
+
removeOptionalFailedNode();
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
node,
|
|
38
|
+
error: new Error('Platform check failed or package deprecated'),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
await remover.rm(target);
|
|
43
|
+
if (removeOptionalFailedNode) {
|
|
44
|
+
try {
|
|
45
|
+
await packageInfo.extract(spec, target, {
|
|
46
|
+
from,
|
|
47
|
+
integrity,
|
|
48
|
+
resolved,
|
|
49
|
+
});
|
|
50
|
+
return { success: true, node };
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
removeOptionalFailedNode();
|
|
54
|
+
return { success: false, node, error };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
await packageInfo.extract(spec, target, {
|
|
59
|
+
from,
|
|
60
|
+
integrity,
|
|
61
|
+
resolved,
|
|
62
|
+
});
|
|
63
|
+
return { success: true, node };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
/* c8 ignore start */
|
|
68
|
+
if (removeOptionalFailedNode) {
|
|
69
|
+
removeOptionalFailedNode();
|
|
70
|
+
return { success: false, node, error };
|
|
71
|
+
}
|
|
72
|
+
/* c8 ignore stop */
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=extract-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-node.js","sourceRoot":"","sources":["../../../src/reify/extract-node.ts"],"names":[],"mappings":"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","sourcesContent":["import { hydrate } from '@vltpkg/dep-id'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport { platformCheck } from '@vltpkg/pick-manifest'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport type { PathScurry } from 'path-scurry'\nimport type { Diff } from '../diff.ts'\nimport type { Node } from '../node.ts'\nimport { optionalFail } from './optional-fail.ts'\nimport { removeOptionalSubgraph } from '../remove-optional-subgraph.ts'\n\n/**\n * Result of the extraction operation.\n * Either the extracted package data or an error if extraction failed.\n */\nexport type ExtractResult =\n | {\n success: true\n node: Node\n }\n | {\n success: false\n node: Node\n error: unknown\n }\n\n/**\n * Returns a function that handles removing\n * a failed optional node from its graph.\n * Returns undefined for non-optional nodes when no diff is provided.\n */\nconst getOptionalFailedNodeRemover = (node: Node, diff?: Diff) => {\n return (\n diff ? optionalFail(diff, node)\n : node.isOptional() ?\n () => removeOptionalSubgraph(node.graph, node)\n : undefined\n )\n}\n\n/**\n * Extract a single node to the file system.\n * Returns a promise that resolves when the extraction is complete.\n */\nexport const extractNode = async (\n node: Node,\n scurry: PathScurry,\n remover: RollbackRemove,\n options: SpecOptions,\n packageInfo: PackageInfoClient,\n diff?: Diff,\n): Promise<ExtractResult> => {\n node.extracted = true\n const { manifest = {} } = node\n const target = node.resolvedLocation(scurry)\n const from = scurry.resolve('')\n const spec = hydrate(node.id, node.name, options)\n const removeOptionalFailedNode = getOptionalFailedNodeRemover(\n node,\n diff,\n )\n const { integrity, resolved } = node\n\n // Use platform data from node if available (from lockfile), otherwise fall back to manifest\n const platformData = node.platform ?? manifest\n\n // Check if we should skip this node due to platform incompatibility or deprecation\n if (\n removeOptionalFailedNode &&\n (manifest.deprecated ||\n !platformCheck(\n platformData,\n process.version,\n process.platform,\n process.arch,\n ))\n ) {\n removeOptionalFailedNode()\n return {\n success: false,\n node,\n error: new Error('Platform check failed or package deprecated'),\n }\n }\n\n try {\n await remover.rm(target)\n\n if (removeOptionalFailedNode) {\n try {\n await packageInfo.extract(spec, target, {\n from,\n integrity,\n resolved,\n })\n return { success: true, node }\n } catch (error) {\n removeOptionalFailedNode()\n return { success: false, node, error }\n }\n } else {\n await packageInfo.extract(spec, target, {\n from,\n integrity,\n resolved,\n })\n return { success: true, node }\n }\n } catch (error) {\n /* c8 ignore start */\n if (removeOptionalFailedNode) {\n removeOptionalFailedNode()\n return { success: false, node, error }\n }\n /* c8 ignore stop */\n throw error\n }\n}\n"]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { PackageInfoClient } from '@vltpkg/package-info';
|
|
2
|
+
import type { RollbackRemove } from '@vltpkg/rollback-remove';
|
|
3
|
+
import type { DepID } from '@vltpkg/dep-id';
|
|
2
4
|
import type { LoadOptions } from '../actual/load.ts';
|
|
3
5
|
import type { AddImportersDependenciesMap, RemoveImportersDependenciesMap } from '../dependencies.ts';
|
|
4
6
|
import { Diff } from '../diff.ts';
|
|
@@ -6,14 +8,27 @@ import type { Graph } from '../graph.ts';
|
|
|
6
8
|
import type { GraphModifier } from '../modifiers.ts';
|
|
7
9
|
export type ReifyOptions = LoadOptions & {
|
|
8
10
|
add?: AddImportersDependenciesMap;
|
|
11
|
+
allowScripts: string;
|
|
9
12
|
remove?: RemoveImportersDependenciesMap;
|
|
10
13
|
graph: Graph;
|
|
11
14
|
actual?: Graph;
|
|
12
15
|
packageInfo: PackageInfoClient;
|
|
13
16
|
modifiers?: GraphModifier;
|
|
17
|
+
remover: RollbackRemove;
|
|
18
|
+
};
|
|
19
|
+
export type ReifyResult = {
|
|
20
|
+
/**
|
|
21
|
+
* The diff object that was used to reify the project.
|
|
22
|
+
*/
|
|
23
|
+
diff: Diff;
|
|
24
|
+
/**
|
|
25
|
+
* Optional queue of DepIDs that requires building (running lifecycle scripts
|
|
26
|
+
* and binary linking) after the reification is complete.
|
|
27
|
+
*/
|
|
28
|
+
buildQueue?: DepID[];
|
|
14
29
|
};
|
|
15
30
|
/**
|
|
16
31
|
* Make the current project match the supplied graph.
|
|
17
32
|
*/
|
|
18
|
-
export declare const reify: (options: ReifyOptions) => Promise<
|
|
33
|
+
export declare const reify: (options: ReifyOptions) => Promise<ReifyResult>;
|
|
19
34
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reify/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/reify/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAG7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,EACV,2BAA2B,EAC3B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAyEpD,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG;IACvC,GAAG,CAAC,EAAE,2BAA2B,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,8BAA8B,CAAA;IACvC,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,WAAW,EAAE,iBAAiB,CAAA;IAC9B,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,OAAO,EAAE,cAAc,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB;;OAEG;IACH,IAAI,EAAE,IAAI,CAAA;IACV;;;OAGG;IACH,UAAU,CAAC,EAAE,KAAK,EAAE,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,KAAK,YACP,YAAY,KACpB,OAAO,CAAC,WAAW,CAuCrB,CAAA"}
|
package/dist/esm/reify/index.js
CHANGED
|
@@ -1,27 +1,62 @@
|
|
|
1
1
|
import { graphStep } from '@vltpkg/output';
|
|
2
|
-
import { RollbackRemove } from '@vltpkg/rollback-remove';
|
|
3
2
|
import { availableParallelism } from 'node:os';
|
|
4
3
|
import { callLimit } from 'promise-call-limit';
|
|
5
4
|
import { load as loadActual } from "../actual/load.js";
|
|
6
5
|
import { Diff } from "../diff.js";
|
|
7
|
-
import { lockfile } from "../index.js";
|
|
8
6
|
import { lockfileData, saveData, saveHidden, } from "../lockfile/save.js";
|
|
9
7
|
import { addEdges } from "./add-edges.js";
|
|
10
8
|
import { addNodes } from "./add-nodes.js";
|
|
11
9
|
import { build } from "./build.js";
|
|
12
10
|
import { deleteEdges } from "./delete-edges.js";
|
|
11
|
+
import { checkNeededBuild } from "./check-needed-build.js";
|
|
13
12
|
import { deleteNodes } from "./delete-nodes.js";
|
|
14
13
|
import { internalHoist } from "./internal-hoist.js";
|
|
15
14
|
import { rollback } from "./rollback.js";
|
|
16
15
|
import { updatePackageJson } from "./update-importers-package-json.js";
|
|
17
16
|
import { copyFileSync } from 'node:fs';
|
|
17
|
+
import { Query } from '@vltpkg/query';
|
|
18
|
+
import { SecurityArchive } from '@vltpkg/security-archive';
|
|
18
19
|
const limit = Math.max(availableParallelism() - 1, 1) * 8;
|
|
20
|
+
/**
|
|
21
|
+
* Filter nodes using a DSS query string
|
|
22
|
+
*/
|
|
23
|
+
const filterNodesByQuery = async (graph, allowScriptsQuery) => {
|
|
24
|
+
// shortcut no packages included
|
|
25
|
+
if (allowScriptsQuery === ':not(*)' /* c8 ignore next */ ||
|
|
26
|
+
!allowScriptsQuery) {
|
|
27
|
+
return new Set();
|
|
28
|
+
}
|
|
29
|
+
// shortcut all packages included
|
|
30
|
+
if (allowScriptsQuery === '*') {
|
|
31
|
+
return new Set(graph.nodes.keys());
|
|
32
|
+
}
|
|
33
|
+
/* c8 ignore start */
|
|
34
|
+
const securityArchive = Query.hasSecuritySelectors(allowScriptsQuery) ?
|
|
35
|
+
await SecurityArchive.start({
|
|
36
|
+
nodes: [...graph.nodes.values()],
|
|
37
|
+
})
|
|
38
|
+
: undefined;
|
|
39
|
+
/* c8 ignore stop */
|
|
40
|
+
const edges = graph.edges;
|
|
41
|
+
const nodes = new Set(graph.nodes.values());
|
|
42
|
+
const importers = graph.importers;
|
|
43
|
+
const query = new Query({
|
|
44
|
+
edges,
|
|
45
|
+
nodes,
|
|
46
|
+
importers,
|
|
47
|
+
securityArchive,
|
|
48
|
+
});
|
|
49
|
+
const { nodes: resultNodes } = await query.search(allowScriptsQuery, {
|
|
50
|
+
signal: new AbortController().signal,
|
|
51
|
+
});
|
|
52
|
+
return new Set(resultNodes.map(node => node.id));
|
|
53
|
+
};
|
|
19
54
|
/**
|
|
20
55
|
* Make the current project match the supplied graph.
|
|
21
56
|
*/
|
|
22
57
|
export const reify = async (options) => {
|
|
23
58
|
const done = graphStep('reify');
|
|
24
|
-
const { graph, scurry } = options;
|
|
59
|
+
const { graph, scurry, remover } = options;
|
|
25
60
|
const actual = options.actual ??
|
|
26
61
|
loadActual({
|
|
27
62
|
...options,
|
|
@@ -29,17 +64,18 @@ export const reify = async (options) => {
|
|
|
29
64
|
});
|
|
30
65
|
const diff = new Diff(actual, graph);
|
|
31
66
|
const skipOptionalOnly = !options.add?.modifiedDependencies && diff.optionalOnly;
|
|
67
|
+
const res = { diff };
|
|
32
68
|
if (!diff.hasChanges() || skipOptionalOnly) {
|
|
33
69
|
// nothing to do, so just return the diff
|
|
34
70
|
done();
|
|
35
|
-
return
|
|
71
|
+
return res;
|
|
36
72
|
}
|
|
37
|
-
const remover = new RollbackRemove();
|
|
38
73
|
let success = false;
|
|
39
74
|
try {
|
|
40
|
-
await reify_(options, diff, remover);
|
|
75
|
+
const { buildQueue } = await reify_(options, diff, remover);
|
|
41
76
|
remover.confirm();
|
|
42
77
|
success = true;
|
|
78
|
+
res.buildQueue = buildQueue;
|
|
43
79
|
}
|
|
44
80
|
finally {
|
|
45
81
|
/* c8 ignore start */
|
|
@@ -49,10 +85,11 @@ export const reify = async (options) => {
|
|
|
49
85
|
/* c8 ignore stop */
|
|
50
86
|
}
|
|
51
87
|
done();
|
|
52
|
-
return
|
|
88
|
+
return res;
|
|
53
89
|
};
|
|
54
90
|
const reify_ = async (options, diff, remover) => {
|
|
55
|
-
const
|
|
91
|
+
const res = {};
|
|
92
|
+
const { add, remove, packageInfo, packageJson, scurry, allowScripts, } = options;
|
|
56
93
|
const saveImportersPackageJson =
|
|
57
94
|
/* c8 ignore next */
|
|
58
95
|
add?.modifiedDependencies || remove?.modifiedDependencies ?
|
|
@@ -77,10 +114,18 @@ const reify_ = async (options, diff, remover) => {
|
|
|
77
114
|
if (edgeActions.length)
|
|
78
115
|
await Promise.all(edgeActions);
|
|
79
116
|
await internalHoist(diff.to, options, remover);
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
117
|
+
// looks up all nodes setting buildState = 'needed'
|
|
118
|
+
// on nodes that require building
|
|
119
|
+
checkNeededBuild({ diff });
|
|
120
|
+
// Filter nodes allowed to run scripts if allowScripts query is provided
|
|
121
|
+
const allowScriptsNodes = await filterNodesByQuery(diff.to, allowScripts);
|
|
122
|
+
// run install lifecycle scripts and link any binary files
|
|
123
|
+
await build(diff, packageJson, scurry, allowScriptsNodes);
|
|
124
|
+
// set the buildQueue on the result object containing
|
|
125
|
+
// an array with all the ids of nodes that need building
|
|
126
|
+
res.buildQueue = [...diff.nodes.add]
|
|
127
|
+
.filter(node => node.buildState === 'needed')
|
|
128
|
+
.map(node => node.id);
|
|
84
129
|
// if we had to change the actual graph along the way,
|
|
85
130
|
// make sure we do not leave behind any unreachable nodes
|
|
86
131
|
// TODO: add tests to cover this
|
|
@@ -105,5 +150,7 @@ const reify_ = async (options, diff, remover) => {
|
|
|
105
150
|
if (scurry.lstatSync('vlt.json')) {
|
|
106
151
|
copyFileSync(scurry.resolve('vlt.json'), scurry.resolve('node_modules/.vlt/vlt.json'));
|
|
107
152
|
}
|
|
153
|
+
// returns the result object
|
|
154
|
+
return res;
|
|
108
155
|
};
|
|
109
156
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reify/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { graphStep } from '@vltpkg/output'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { availableParallelism } from 'node:os'\nimport { callLimit } from 'promise-call-limit'\nimport type { LoadOptions } from '../actual/load.ts'\nimport { load as loadActual } from '../actual/load.ts'\nimport type {\n AddImportersDependenciesMap,\n RemoveImportersDependenciesMap,\n} from '../dependencies.ts'\nimport { Diff } from '../diff.ts'\nimport type { Graph } from '../graph.ts'\nimport { lockfile } from '../index.ts'\nimport type { GraphModifier } from '../modifiers.ts'\nimport {\n lockfileData,\n saveData,\n saveHidden,\n} from '../lockfile/save.ts'\nimport { addEdges } from './add-edges.ts'\nimport { addNodes } from './add-nodes.ts'\nimport { build } from './build.ts'\nimport { deleteEdges } from './delete-edges.ts'\nimport { deleteNodes } from './delete-nodes.ts'\nimport { internalHoist } from './internal-hoist.ts'\nimport { rollback } from './rollback.ts'\nimport { updatePackageJson } from './update-importers-package-json.ts'\nimport { copyFileSync } from 'node:fs'\n\nconst limit = Math.max(availableParallelism() - 1, 1) * 8\n\n// - [ ] depid's with peer resolutions\n// - [ ] depid shortening\n\nexport type ReifyOptions = LoadOptions & {\n add?: AddImportersDependenciesMap\n remove?: RemoveImportersDependenciesMap\n graph: Graph\n actual?: Graph\n packageInfo: PackageInfoClient\n modifiers?: GraphModifier\n}\n\n/**\n * Make the current project match the supplied graph.\n */\nexport const reify = async (options: ReifyOptions) => {\n const done = graphStep('reify')\n\n const { graph, scurry } = options\n\n const actual =\n options.actual ??\n loadActual({\n ...options,\n loadManifests: true,\n })\n\n const diff = new Diff(actual, graph)\n const skipOptionalOnly =\n !options.add?.modifiedDependencies && diff.optionalOnly\n if (!diff.hasChanges() || skipOptionalOnly) {\n // nothing to do, so just return the diff\n done()\n return diff\n }\n\n const remover = new RollbackRemove()\n let success = false\n try {\n await reify_(options, diff, remover)\n remover.confirm()\n success = true\n } finally {\n /* c8 ignore start */\n if (!success) {\n await rollback(remover, diff, scurry).catch(() => {})\n }\n /* c8 ignore stop */\n }\n\n done()\n\n return diff\n}\n\nconst reify_ = async (\n options: ReifyOptions,\n diff: Diff,\n remover: RollbackRemove,\n) => {\n const { add, remove, packageInfo, packageJson, scurry } = options\n const saveImportersPackageJson =\n /* c8 ignore next */\n add?.modifiedDependencies || remove?.modifiedDependencies ?\n updatePackageJson({\n add,\n remove,\n graph: options.graph,\n packageJson,\n })\n : undefined\n\n // before anything else happens, grab the ideal tree as it was resolved\n // so that we can store it in the lockfile. We do this here so that\n // any failed/removed optional deps are not reflected in the lockfile\n // data as it is saved.\n const lfData = lockfileData(options)\n const actions: (() => Promise<unknown>)[] = addNodes(\n diff,\n scurry,\n remover,\n options,\n packageInfo,\n ).concat(deleteEdges(diff, scurry, remover))\n\n // need to wait, so that the nodes exist to link to\n if (actions.length) await callLimit(actions, { limit })\n\n // create all node_modules symlinks, and link bins to nm/.bin\n const edgeActions: Promise<unknown>[] = addEdges(\n diff,\n packageJson,\n scurry,\n remover,\n )\n if (edgeActions.length) await Promise.all(edgeActions)\n\n await internalHoist(diff.to, options, remover)\n\n // run lifecycles and chmod bins\n await build(diff, packageJson, scurry)\n\n // save the lockfile\n lockfile.save(options)\n\n // if we had to change the actual graph along the way,\n // make sure we do not leave behind any unreachable nodes\n // TODO: add tests to cover this\n /* c8 ignore start */\n if (diff.hadOptionalFailures) {\n for (const node of options.graph.gc().values()) {\n diff.nodes.add.delete(node)\n diff.nodes.delete.add(node)\n }\n }\n /* c8 ignore stop */\n saveHidden(options)\n\n // delete garbage from the store.\n const rmActions: Promise<unknown>[] = deleteNodes(\n diff,\n remover,\n scurry,\n )\n if (rmActions.length) await Promise.all(rmActions)\n\n // updates package.json files if anything was added / removed\n saveImportersPackageJson?.()\n\n // write the ideal graph data to the lockfile\n saveData(lfData, scurry.resolve('vlt-lock.json'), false)\n\n // update the store config reference if a config file was used\n if (scurry.lstatSync('vlt.json')) {\n copyFileSync(\n scurry.resolve('vlt.json'),\n scurry.resolve('node_modules/.vlt/vlt.json'),\n )\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/reify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAKtD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGjC,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,GACX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAG1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;AAEzD;;GAEG;AACH,MAAM,kBAAkB,GAAG,KAAK,EAC9B,KAAY,EACZ,iBAA0B,EACL,EAAE;IACvB,gCAAgC;IAChC,IACE,iBAAiB,KAAK,SAAS,CAAC,oBAAoB;QACpD,CAAC,iBAAiB,EAClB,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAA;IAClB,CAAC;IACD,iCAAiC;IACjC,IAAI,iBAAiB,KAAK,GAAG,EAAE,CAAC;QAC9B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;IACD,qBAAqB;IACrB,MAAM,eAAe,GACnB,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7C,MAAM,eAAe,CAAC,KAAK,CAAC;YAC1B,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SACjC,CAAC;QACJ,CAAC,CAAC,SAAS,CAAA;IACb,oBAAoB;IAEpB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAW,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;IAEjC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,KAAK;QACL,KAAK;QACL,SAAS;QACT,eAAe;KAChB,CAAC,CAAA;IAEF,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAC/C,iBAAiB,EACjB;QACE,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC,MAAM;KACrC,CACF,CAAA;IAED,OAAO,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA;AA4BD;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EACxB,OAAqB,EACC,EAAE;IACxB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAE/B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAE1C,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,UAAU,CAAC;YACT,GAAG,OAAO;YACV,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;IAEJ,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,MAAM,gBAAgB,GACpB,CAAC,OAAO,CAAC,GAAG,EAAE,oBAAoB,IAAI,IAAI,CAAC,YAAY,CAAA;IACzD,MAAM,GAAG,GAAgB,EAAE,IAAI,EAAE,CAAA;IACjC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAC3C,yCAAyC;QACzC,IAAI,EAAE,CAAA;QACN,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QAC3D,OAAO,CAAC,OAAO,EAAE,CAAA;QACjB,OAAO,GAAG,IAAI,CAAA;QACd,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;IAC7B,CAAC;YAAS,CAAC;QACT,qBAAqB;QACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACvD,CAAC;QACD,oBAAoB;IACtB,CAAC;IAED,IAAI,EAAE,CAAA;IAEN,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,KAAK,EAClB,OAAqB,EACrB,IAAU,EACV,OAAuB,EACa,EAAE;IACtC,MAAM,GAAG,GAA8B,EAAE,CAAA;IACzC,MAAM,EACJ,GAAG,EACH,MAAM,EACN,WAAW,EACX,WAAW,EACX,MAAM,EACN,YAAY,GACb,GAAG,OAAO,CAAA;IACX,MAAM,wBAAwB;IAC5B,oBAAoB;IACpB,GAAG,EAAE,oBAAoB,IAAI,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACzD,iBAAiB,CAAC;YAChB,GAAG;YACH,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW;SACZ,CAAC;QACJ,CAAC,CAAC,SAAS,CAAA;IAEb,uEAAuE;IACvE,mEAAmE;IACnE,qEAAqE;IACrE,uBAAuB;IACvB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,OAAO,GAA+B,QAAQ,CAClD,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,WAAW,CACZ,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE5C,mDAAmD;IACnD,IAAI,OAAO,CAAC,MAAM;QAAE,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;IAEvD,6DAA6D;IAC7D,MAAM,WAAW,GAAuB,QAAQ,CAC9C,IAAI,EACJ,WAAW,EACX,MAAM,EACN,OAAO,CACR,CAAA;IACD,IAAI,WAAW,CAAC,MAAM;QAAE,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAEtD,MAAM,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAE9C,mDAAmD;IACnD,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAE1B,wEAAwE;IACxE,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,CAChD,IAAI,CAAC,EAAE,EACP,YAAY,CACb,CAAA;IAED,0DAA0D;IAC1D,MAAM,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAEzD,qDAAqD;IACrD,wDAAwD;IACxD,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;SACjC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC;SAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEvB,sDAAsD;IACtD,yDAAyD;IACzD,gCAAgC;IAChC,qBAAqB;IACrB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,oBAAoB;IACpB,UAAU,CAAC,OAAO,CAAC,CAAA;IAEnB,iCAAiC;IACjC,MAAM,SAAS,GAAuB,WAAW,CAC/C,IAAI,EACJ,OAAO,EACP,MAAM,CACP,CAAA;IACD,IAAI,SAAS,CAAC,MAAM;QAAE,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAElD,6DAA6D;IAC7D,wBAAwB,EAAE,EAAE,CAAA;IAE5B,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAA;IAExD,8DAA8D;IAC9D,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,YAAY,CACV,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAC1B,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAC7C,CAAA;IACH,CAAC;IAED,4BAA4B;IAC5B,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA","sourcesContent":["import { graphStep } from '@vltpkg/output'\nimport type { PackageInfoClient } from '@vltpkg/package-info'\nimport type { RollbackRemove } from '@vltpkg/rollback-remove'\nimport { availableParallelism } from 'node:os'\nimport { callLimit } from 'promise-call-limit'\nimport type { DepID } from '@vltpkg/dep-id'\nimport type { LoadOptions } from '../actual/load.ts'\nimport { load as loadActual } from '../actual/load.ts'\nimport type {\n AddImportersDependenciesMap,\n RemoveImportersDependenciesMap,\n} from '../dependencies.ts'\nimport { Diff } from '../diff.ts'\nimport type { Graph } from '../graph.ts'\nimport type { GraphModifier } from '../modifiers.ts'\nimport {\n lockfileData,\n saveData,\n saveHidden,\n} from '../lockfile/save.ts'\nimport { addEdges } from './add-edges.ts'\nimport { addNodes } from './add-nodes.ts'\nimport { build } from './build.ts'\nimport { deleteEdges } from './delete-edges.ts'\nimport { checkNeededBuild } from './check-needed-build.ts'\nimport { deleteNodes } from './delete-nodes.ts'\nimport { internalHoist } from './internal-hoist.ts'\nimport { rollback } from './rollback.ts'\nimport { updatePackageJson } from './update-importers-package-json.ts'\nimport { copyFileSync } from 'node:fs'\nimport { Query } from '@vltpkg/query'\nimport { SecurityArchive } from '@vltpkg/security-archive'\nimport type { NodeLike } from '@vltpkg/types'\n\nconst limit = Math.max(availableParallelism() - 1, 1) * 8\n\n/**\n * Filter nodes using a DSS query string\n */\nconst filterNodesByQuery = async (\n graph: Graph,\n allowScriptsQuery?: string,\n): Promise<Set<DepID>> => {\n // shortcut no packages included\n if (\n allowScriptsQuery === ':not(*)' /* c8 ignore next */ ||\n !allowScriptsQuery\n ) {\n return new Set()\n }\n // shortcut all packages included\n if (allowScriptsQuery === '*') {\n return new Set(graph.nodes.keys())\n }\n /* c8 ignore start */\n const securityArchive =\n Query.hasSecuritySelectors(allowScriptsQuery) ?\n await SecurityArchive.start({\n nodes: [...graph.nodes.values()],\n })\n : undefined\n /* c8 ignore stop */\n\n const edges = graph.edges\n const nodes = new Set<NodeLike>(graph.nodes.values())\n const importers = graph.importers\n\n const query = new Query({\n edges,\n nodes,\n importers,\n securityArchive,\n })\n\n const { nodes: resultNodes } = await query.search(\n allowScriptsQuery,\n {\n signal: new AbortController().signal,\n },\n )\n\n return new Set(resultNodes.map(node => node.id))\n}\n\n// - [ ] depid's with peer resolutions\n// - [ ] depid shortening\n\nexport type ReifyOptions = LoadOptions & {\n add?: AddImportersDependenciesMap\n allowScripts: string\n remove?: RemoveImportersDependenciesMap\n graph: Graph\n actual?: Graph\n packageInfo: PackageInfoClient\n modifiers?: GraphModifier\n remover: RollbackRemove\n}\n\nexport type ReifyResult = {\n /**\n * The diff object that was used to reify the project.\n */\n diff: Diff\n /**\n * Optional queue of DepIDs that requires building (running lifecycle scripts\n * and binary linking) after the reification is complete.\n */\n buildQueue?: DepID[]\n}\n\n/**\n * Make the current project match the supplied graph.\n */\nexport const reify = async (\n options: ReifyOptions,\n): Promise<ReifyResult> => {\n const done = graphStep('reify')\n\n const { graph, scurry, remover } = options\n\n const actual =\n options.actual ??\n loadActual({\n ...options,\n loadManifests: true,\n })\n\n const diff = new Diff(actual, graph)\n const skipOptionalOnly =\n !options.add?.modifiedDependencies && diff.optionalOnly\n const res: ReifyResult = { diff }\n if (!diff.hasChanges() || skipOptionalOnly) {\n // nothing to do, so just return the diff\n done()\n return res\n }\n\n let success = false\n try {\n const { buildQueue } = await reify_(options, diff, remover)\n remover.confirm()\n success = true\n res.buildQueue = buildQueue\n } finally {\n /* c8 ignore start */\n if (!success) {\n await rollback(remover, diff, scurry).catch(() => {})\n }\n /* c8 ignore stop */\n }\n\n done()\n\n return res\n}\n\nconst reify_ = async (\n options: ReifyOptions,\n diff: Diff,\n remover: RollbackRemove,\n): Promise<Omit<ReifyResult, 'diff'>> => {\n const res: Omit<ReifyResult, 'diff'> = {}\n const {\n add,\n remove,\n packageInfo,\n packageJson,\n scurry,\n allowScripts,\n } = options\n const saveImportersPackageJson =\n /* c8 ignore next */\n add?.modifiedDependencies || remove?.modifiedDependencies ?\n updatePackageJson({\n add,\n remove,\n graph: options.graph,\n packageJson,\n })\n : undefined\n\n // before anything else happens, grab the ideal tree as it was resolved\n // so that we can store it in the lockfile. We do this here so that\n // any failed/removed optional deps are not reflected in the lockfile\n // data as it is saved.\n const lfData = lockfileData(options)\n const actions: (() => Promise<unknown>)[] = addNodes(\n diff,\n scurry,\n remover,\n options,\n packageInfo,\n ).concat(deleteEdges(diff, scurry, remover))\n\n // need to wait, so that the nodes exist to link to\n if (actions.length) await callLimit(actions, { limit })\n\n // create all node_modules symlinks, and link bins to nm/.bin\n const edgeActions: Promise<unknown>[] = addEdges(\n diff,\n packageJson,\n scurry,\n remover,\n )\n if (edgeActions.length) await Promise.all(edgeActions)\n\n await internalHoist(diff.to, options, remover)\n\n // looks up all nodes setting buildState = 'needed'\n // on nodes that require building\n checkNeededBuild({ diff })\n\n // Filter nodes allowed to run scripts if allowScripts query is provided\n const allowScriptsNodes = await filterNodesByQuery(\n diff.to,\n allowScripts,\n )\n\n // run install lifecycle scripts and link any binary files\n await build(diff, packageJson, scurry, allowScriptsNodes)\n\n // set the buildQueue on the result object containing\n // an array with all the ids of nodes that need building\n res.buildQueue = [...diff.nodes.add]\n .filter(node => node.buildState === 'needed')\n .map(node => node.id)\n\n // if we had to change the actual graph along the way,\n // make sure we do not leave behind any unreachable nodes\n // TODO: add tests to cover this\n /* c8 ignore start */\n if (diff.hadOptionalFailures) {\n for (const node of options.graph.gc().values()) {\n diff.nodes.add.delete(node)\n diff.nodes.delete.add(node)\n }\n }\n /* c8 ignore stop */\n saveHidden(options)\n\n // delete garbage from the store.\n const rmActions: Promise<unknown>[] = deleteNodes(\n diff,\n remover,\n scurry,\n )\n if (rmActions.length) await Promise.all(rmActions)\n\n // updates package.json files if anything was added / removed\n saveImportersPackageJson?.()\n\n // write the ideal graph data to the lockfile\n saveData(lfData, scurry.resolve('vlt-lock.json'), false)\n\n // update the store config reference if a config file was used\n if (scurry.lstatSync('vlt.json')) {\n copyFileSync(\n scurry.resolve('vlt.json'),\n scurry.resolve('node_modules/.vlt/vlt.json'),\n )\n }\n\n // returns the result object\n return res\n}\n"]}
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -1 +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 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"]}
|
|
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
|
@@ -3,9 +3,13 @@ import type { LoadOptions } from './actual/load.ts';
|
|
|
3
3
|
import type { RemoveImportersDependenciesMap } from './dependencies.ts';
|
|
4
4
|
export type UninstallOptions = LoadOptions & {
|
|
5
5
|
packageInfo: PackageInfoClient;
|
|
6
|
+
allowScripts: string;
|
|
6
7
|
};
|
|
7
8
|
export declare const uninstall: (options: UninstallOptions, remove?: RemoveImportersDependenciesMap) => Promise<{
|
|
8
9
|
graph: import("./graph.ts").Graph;
|
|
9
|
-
diff:
|
|
10
|
+
diff: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
graph: import("./graph.ts").Graph;
|
|
13
|
+
diff: import("./reify/index.ts").ReifyResult;
|
|
10
14
|
}>;
|
|
11
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,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAA;
|
|
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;AAQvE,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;;;;;;EAqDxC,CAAA"}
|