@vltpkg/graph 1.0.0-rc.9 → 1.0.2
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 +101 -22
- package/dist/{esm/actual → actual}/load.d.ts +8 -1
- package/dist/{esm/actual → actual}/load.js +29 -6
- package/dist/{esm/browser.d.ts → browser.d.ts} +0 -1
- package/dist/{esm/browser.js → browser.js} +0 -1
- package/dist/{esm/build.d.ts → build.d.ts} +0 -1
- package/dist/{esm/build.js → build.js} +0 -1
- package/dist/{esm/dependencies.d.ts → dependencies.d.ts} +0 -1
- package/dist/{esm/dependencies.js → dependencies.js} +3 -2
- package/dist/{esm/diff.d.ts → diff.d.ts} +2 -1
- package/dist/{esm/diff.js → diff.js} +5 -2
- package/dist/{esm/edge.d.ts → edge.d.ts} +0 -1
- package/dist/{esm/edge.js → edge.js} +0 -1
- package/dist/{esm/fixup-added-names.d.ts → fixup-added-names.d.ts} +4 -2
- package/dist/{esm/fixup-added-names.js → fixup-added-names.js} +16 -1
- package/dist/{esm/graph.d.ts → graph.d.ts} +13 -1
- package/dist/{esm/graph.js → graph.js} +49 -12
- package/dist/{esm/ideal → ideal}/append-nodes.d.ts +14 -3
- package/dist/{esm/ideal → ideal}/append-nodes.js +252 -64
- package/dist/{esm/ideal → ideal}/build-ideal-from-starting-graph.d.ts +0 -1
- package/dist/{esm/ideal → ideal}/build-ideal-from-starting-graph.js +0 -1
- package/dist/{esm/ideal → ideal}/build.d.ts +0 -1
- package/dist/{esm/ideal → ideal}/build.js +15 -2
- package/dist/{esm/ideal → ideal}/get-importer-specs.d.ts +0 -1
- package/dist/{esm/ideal → ideal}/get-importer-specs.js +13 -2
- package/dist/ideal/peers.d.ts +160 -0
- package/dist/ideal/peers.js +696 -0
- package/dist/{esm/ideal → ideal}/refresh-ideal-graph.d.ts +0 -5
- package/dist/{esm/ideal → ideal}/refresh-ideal-graph.js +11 -26
- package/dist/{esm/ideal → ideal}/remove-satisfied-specs.d.ts +0 -1
- package/dist/{esm/ideal → ideal}/remove-satisfied-specs.js +8 -1
- package/dist/ideal/sorting.d.ts +45 -0
- package/dist/ideal/sorting.js +70 -0
- package/dist/{esm/ideal → ideal}/types.d.ts +1 -6
- package/dist/ideal/types.js +1 -0
- package/dist/{esm/index.d.ts → index.d.ts} +0 -1
- package/dist/{esm/index.js → index.js} +0 -1
- package/dist/{esm/install.d.ts → install.d.ts} +2 -1
- package/dist/{esm/install.js → install.js} +24 -4
- package/dist/{esm/lockfile → lockfile}/load-edges.d.ts +0 -1
- package/dist/{esm/lockfile → lockfile}/load-edges.js +16 -6
- package/dist/{esm/lockfile → lockfile}/load-nodes.d.ts +0 -1
- package/dist/{esm/lockfile → lockfile}/load-nodes.js +6 -3
- package/dist/{esm/lockfile → lockfile}/load.d.ts +0 -1
- package/dist/lockfile/load.js +171 -0
- package/dist/{esm/lockfile → lockfile}/save.d.ts +1 -2
- package/dist/{esm/lockfile → lockfile}/save.js +17 -11
- package/dist/{esm/lockfile → lockfile}/types.d.ts +7 -1
- package/dist/{esm/lockfile → lockfile}/types.js +6 -1
- package/dist/{esm/modifiers.d.ts → modifiers.d.ts} +0 -1
- package/dist/{esm/modifiers.js → modifiers.js} +0 -1
- package/dist/{esm/node.d.ts → node.d.ts} +2 -1
- package/dist/{esm/node.js → node.js} +5 -1
- package/dist/{esm/non-empty-list.d.ts → non-empty-list.d.ts} +0 -1
- package/dist/{esm/non-empty-list.js → non-empty-list.js} +0 -1
- package/dist/path-security-error.d.ts +5 -0
- package/dist/path-security-error.js +13 -0
- package/dist/{esm/reify → reify}/add-edge.d.ts +0 -1
- package/dist/{esm/reify → reify}/add-edge.js +10 -4
- package/dist/{esm/reify → reify}/add-edges.d.ts +0 -1
- package/dist/{esm/reify → reify}/add-edges.js +0 -1
- package/dist/{esm/reify → reify}/add-nodes.d.ts +0 -1
- package/dist/{esm/reify → reify}/add-nodes.js +0 -1
- package/dist/{esm/reify → reify}/bin-chmod.d.ts +0 -1
- package/dist/{esm/reify → reify}/bin-chmod.js +0 -1
- package/dist/{esm/reify → reify}/build.d.ts +0 -1
- package/dist/{esm/reify → reify}/build.js +12 -4
- package/dist/{esm/reify → reify}/calculate-save-value.d.ts +1 -2
- package/dist/{esm/reify → reify}/calculate-save-value.js +11 -5
- package/dist/{esm/reify → reify}/check-needed-build.d.ts +10 -1
- package/dist/reify/check-needed-build.js +71 -0
- package/dist/{esm/reify → reify}/delete-edge.d.ts +0 -1
- package/dist/{esm/reify → reify}/delete-edge.js +0 -1
- package/dist/{esm/reify → reify}/delete-edges.d.ts +0 -1
- package/dist/{esm/reify → reify}/delete-edges.js +0 -1
- package/dist/{esm/reify → reify}/delete-nodes.d.ts +0 -1
- package/dist/{esm/reify → reify}/delete-nodes.js +0 -1
- package/dist/{esm/reify → reify}/extract-node.d.ts +0 -1
- package/dist/{esm/reify → reify}/extract-node.js +10 -3
- package/dist/{esm/reify → reify}/index.d.ts +3 -1
- package/dist/{esm/reify → reify}/index.js +25 -5
- package/dist/{esm/reify → reify}/internal-hoist.d.ts +0 -1
- package/dist/{esm/reify → reify}/internal-hoist.js +0 -1
- package/dist/{esm/reify → reify}/optional-fail.d.ts +0 -1
- package/dist/{esm/reify → reify}/optional-fail.js +0 -1
- package/dist/{esm/reify → reify}/rollback.d.ts +0 -1
- package/dist/{esm/reify → reify}/rollback.js +0 -1
- package/dist/{esm/reify → reify}/update-importers-package-json.d.ts +11 -2
- package/dist/{esm/reify → reify}/update-importers-package-json.js +4 -5
- package/dist/{esm/remove-optional-subgraph.d.ts → remove-optional-subgraph.d.ts} +0 -1
- package/dist/{esm/remove-optional-subgraph.js → remove-optional-subgraph.js} +0 -1
- package/dist/{esm/resolve-save-type.d.ts → resolve-save-type.d.ts} +0 -1
- package/dist/{esm/resolve-save-type.js → resolve-save-type.js} +0 -1
- package/dist/{esm/stringify-node.d.ts → stringify-node.d.ts} +0 -1
- package/dist/{esm/stringify-node.js → stringify-node.js} +0 -1
- package/dist/{esm/transfer-data → transfer-data}/load.d.ts +0 -1
- package/dist/{esm/transfer-data → transfer-data}/load.js +8 -5
- package/dist/{esm/uninstall.d.ts → uninstall.d.ts} +0 -1
- package/dist/{esm/uninstall.js → uninstall.js} +17 -7
- package/dist/{esm/update.d.ts → update.d.ts} +0 -1
- package/dist/{esm/update.js → update.js} +1 -1
- package/dist/{esm/virtual-root.d.ts → virtual-root.d.ts} +0 -1
- package/dist/{esm/virtual-root.js → virtual-root.js} +0 -1
- package/dist/{esm/visualization → visualization}/human-readable-output.d.ts +0 -1
- package/dist/{esm/visualization → visualization}/human-readable-output.js +0 -1
- package/dist/{esm/visualization → visualization}/json-output.d.ts +0 -1
- package/dist/{esm/visualization → visualization}/json-output.js +0 -1
- package/dist/{esm/visualization → visualization}/mermaid-output.d.ts +2 -2
- package/dist/{esm/visualization → visualization}/mermaid-output.js +27 -21
- package/dist/{esm/visualization → visualization}/object-like-output.d.ts +0 -1
- package/dist/{esm/visualization → visualization}/object-like-output.js +0 -1
- package/package.json +57 -62
- package/dist/esm/actual/load.d.ts.map +0 -1
- package/dist/esm/actual/load.js.map +0 -1
- package/dist/esm/browser.d.ts.map +0 -1
- package/dist/esm/browser.js.map +0 -1
- package/dist/esm/build.d.ts.map +0 -1
- package/dist/esm/build.js.map +0 -1
- package/dist/esm/dependencies.d.ts.map +0 -1
- package/dist/esm/dependencies.js.map +0 -1
- package/dist/esm/diff.d.ts.map +0 -1
- package/dist/esm/diff.js.map +0 -1
- package/dist/esm/edge.d.ts.map +0 -1
- package/dist/esm/edge.js.map +0 -1
- package/dist/esm/fixup-added-names.d.ts.map +0 -1
- package/dist/esm/fixup-added-names.js.map +0 -1
- package/dist/esm/graph.d.ts.map +0 -1
- package/dist/esm/graph.js.map +0 -1
- package/dist/esm/ideal/append-nodes.d.ts.map +0 -1
- package/dist/esm/ideal/append-nodes.js.map +0 -1
- package/dist/esm/ideal/build-ideal-from-starting-graph.d.ts.map +0 -1
- package/dist/esm/ideal/build-ideal-from-starting-graph.js.map +0 -1
- package/dist/esm/ideal/build.d.ts.map +0 -1
- package/dist/esm/ideal/build.js.map +0 -1
- package/dist/esm/ideal/get-importer-specs.d.ts.map +0 -1
- package/dist/esm/ideal/get-importer-specs.js.map +0 -1
- package/dist/esm/ideal/get-ordered-dependencies.d.ts +0 -10
- package/dist/esm/ideal/get-ordered-dependencies.d.ts.map +0 -1
- package/dist/esm/ideal/get-ordered-dependencies.js +0 -42
- package/dist/esm/ideal/get-ordered-dependencies.js.map +0 -1
- package/dist/esm/ideal/peers.d.ts +0 -71
- package/dist/esm/ideal/peers.d.ts.map +0 -1
- package/dist/esm/ideal/peers.js +0 -318
- package/dist/esm/ideal/peers.js.map +0 -1
- package/dist/esm/ideal/refresh-ideal-graph.d.ts.map +0 -1
- package/dist/esm/ideal/refresh-ideal-graph.js.map +0 -1
- package/dist/esm/ideal/remove-satisfied-specs.d.ts.map +0 -1
- package/dist/esm/ideal/remove-satisfied-specs.js.map +0 -1
- package/dist/esm/ideal/types.d.ts.map +0 -1
- package/dist/esm/ideal/types.js +0 -2
- package/dist/esm/ideal/types.js.map +0 -1
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/install.d.ts.map +0 -1
- package/dist/esm/install.js.map +0 -1
- package/dist/esm/lockfile/load-edges.d.ts.map +0 -1
- package/dist/esm/lockfile/load-edges.js.map +0 -1
- package/dist/esm/lockfile/load-nodes.d.ts.map +0 -1
- package/dist/esm/lockfile/load-nodes.js.map +0 -1
- package/dist/esm/lockfile/load.d.ts.map +0 -1
- package/dist/esm/lockfile/load.js +0 -64
- package/dist/esm/lockfile/load.js.map +0 -1
- package/dist/esm/lockfile/save.d.ts.map +0 -1
- package/dist/esm/lockfile/save.js.map +0 -1
- package/dist/esm/lockfile/types.d.ts.map +0 -1
- package/dist/esm/lockfile/types.js.map +0 -1
- package/dist/esm/modifiers.d.ts.map +0 -1
- package/dist/esm/modifiers.js.map +0 -1
- package/dist/esm/node.d.ts.map +0 -1
- package/dist/esm/node.js.map +0 -1
- package/dist/esm/non-empty-list.d.ts.map +0 -1
- package/dist/esm/non-empty-list.js.map +0 -1
- package/dist/esm/package.json +0 -3
- package/dist/esm/reify/add-edge.d.ts.map +0 -1
- package/dist/esm/reify/add-edge.js.map +0 -1
- package/dist/esm/reify/add-edges.d.ts.map +0 -1
- package/dist/esm/reify/add-edges.js.map +0 -1
- package/dist/esm/reify/add-nodes.d.ts.map +0 -1
- package/dist/esm/reify/add-nodes.js.map +0 -1
- package/dist/esm/reify/bin-chmod.d.ts.map +0 -1
- package/dist/esm/reify/bin-chmod.js.map +0 -1
- package/dist/esm/reify/build.d.ts.map +0 -1
- package/dist/esm/reify/build.js.map +0 -1
- package/dist/esm/reify/calculate-save-value.d.ts.map +0 -1
- package/dist/esm/reify/calculate-save-value.js.map +0 -1
- package/dist/esm/reify/check-needed-build.d.ts.map +0 -1
- package/dist/esm/reify/check-needed-build.js +0 -50
- package/dist/esm/reify/check-needed-build.js.map +0 -1
- package/dist/esm/reify/delete-edge.d.ts.map +0 -1
- package/dist/esm/reify/delete-edge.js.map +0 -1
- package/dist/esm/reify/delete-edges.d.ts.map +0 -1
- package/dist/esm/reify/delete-edges.js.map +0 -1
- package/dist/esm/reify/delete-nodes.d.ts.map +0 -1
- package/dist/esm/reify/delete-nodes.js.map +0 -1
- package/dist/esm/reify/extract-node.d.ts.map +0 -1
- package/dist/esm/reify/extract-node.js.map +0 -1
- package/dist/esm/reify/index.d.ts.map +0 -1
- package/dist/esm/reify/index.js.map +0 -1
- package/dist/esm/reify/internal-hoist.d.ts.map +0 -1
- package/dist/esm/reify/internal-hoist.js.map +0 -1
- package/dist/esm/reify/optional-fail.d.ts.map +0 -1
- package/dist/esm/reify/optional-fail.js.map +0 -1
- package/dist/esm/reify/rollback.d.ts.map +0 -1
- package/dist/esm/reify/rollback.js.map +0 -1
- package/dist/esm/reify/update-importers-package-json.d.ts.map +0 -1
- package/dist/esm/reify/update-importers-package-json.js.map +0 -1
- package/dist/esm/remove-optional-subgraph.d.ts.map +0 -1
- package/dist/esm/remove-optional-subgraph.js.map +0 -1
- package/dist/esm/resolve-save-type.d.ts.map +0 -1
- package/dist/esm/resolve-save-type.js.map +0 -1
- package/dist/esm/stringify-node.d.ts.map +0 -1
- package/dist/esm/stringify-node.js.map +0 -1
- package/dist/esm/transfer-data/load.d.ts.map +0 -1
- package/dist/esm/transfer-data/load.js.map +0 -1
- package/dist/esm/uninstall.d.ts.map +0 -1
- package/dist/esm/uninstall.js.map +0 -1
- package/dist/esm/update.d.ts.map +0 -1
- package/dist/esm/update.js.map +0 -1
- package/dist/esm/virtual-root.d.ts.map +0 -1
- package/dist/esm/virtual-root.js.map +0 -1
- package/dist/esm/visualization/human-readable-output.d.ts.map +0 -1
- package/dist/esm/visualization/human-readable-output.js.map +0 -1
- package/dist/esm/visualization/json-output.d.ts.map +0 -1
- package/dist/esm/visualization/json-output.js.map +0 -1
- package/dist/esm/visualization/mermaid-output.d.ts.map +0 -1
- package/dist/esm/visualization/mermaid-output.js.map +0 -1
- package/dist/esm/visualization/object-like-output.d.ts.map +0 -1
- package/dist/esm/visualization/object-like-output.js.map +0 -1
|
@@ -2,4 +2,3 @@ import { RollbackRemove } from '@vltpkg/rollback-remove';
|
|
|
2
2
|
import type { PathScurry } from 'path-scurry';
|
|
3
3
|
import type { Diff } from '../diff.ts';
|
|
4
4
|
export declare const rollback: (remover: RollbackRemove, diff: Diff, scurry: PathScurry) => Promise<void>;
|
|
5
|
-
//# sourceMappingURL=rollback.d.ts.map
|
|
@@ -27,10 +27,19 @@ export type UpdatePackageJsonOptions = {
|
|
|
27
27
|
* instance used to load these `package.json` files previously.
|
|
28
28
|
*/
|
|
29
29
|
packageJson: PackageJson;
|
|
30
|
+
/**
|
|
31
|
+
* When true, save dependencies with exact versions (e.g. `1.2.3`)
|
|
32
|
+
* instead of the default semver range operator (e.g. `^1.2.3`).
|
|
33
|
+
*/
|
|
34
|
+
saveExact?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The prefix to use when saving dependency versions (e.g. `^`, `~`, `>=`, ``).
|
|
37
|
+
* Defaults to `^` if not specified. Ignored when `saveExact` is true.
|
|
38
|
+
*/
|
|
39
|
+
savePrefix?: string;
|
|
30
40
|
};
|
|
31
41
|
/**
|
|
32
42
|
* Updates nodes of a provided {@link Graph} accordingly to the
|
|
33
43
|
* provided add or remove arguments.
|
|
34
44
|
*/
|
|
35
|
-
export declare const updatePackageJson: ({ add, graph, packageJson, remove, }: UpdatePackageJsonOptions) => () => void;
|
|
36
|
-
//# sourceMappingURL=update-importers-package-json.d.ts.map
|
|
45
|
+
export declare const updatePackageJson: ({ add, graph, packageJson, remove, saveExact, savePrefix, }: UpdatePackageJsonOptions) => () => void;
|
|
@@ -10,7 +10,7 @@ const depTypesMap = new Map([
|
|
|
10
10
|
['peerOptional', 'peerDependencies'],
|
|
11
11
|
['optional', 'optionalDependencies'],
|
|
12
12
|
]);
|
|
13
|
-
const addOrRemoveDeps = (nodeId, graph, addOrRemove) => {
|
|
13
|
+
const addOrRemoveDeps = (nodeId, graph, addOrRemove, saveExact, savePrefix) => {
|
|
14
14
|
const node = graph.nodes.get(nodeId);
|
|
15
15
|
if (!node) {
|
|
16
16
|
throw error('Failed to retrieve node', {
|
|
@@ -86,7 +86,7 @@ const addOrRemoveDeps = (nodeId, graph, addOrRemove) => {
|
|
|
86
86
|
// If the manifest does not contain anything, then update it.
|
|
87
87
|
// Only for registry dependencies
|
|
88
88
|
const existing = dependencies[name];
|
|
89
|
-
const saveValue = calculateSaveValue(nodeType, dep.spec, existing, n.version);
|
|
89
|
+
const saveValue = calculateSaveValue(nodeType, dep.spec, existing, n.version, saveExact, savePrefix);
|
|
90
90
|
dependencies[name] = saveValue;
|
|
91
91
|
manifestChanged = manifestChanged || saveValue !== existing;
|
|
92
92
|
}
|
|
@@ -97,7 +97,7 @@ const addOrRemoveDeps = (nodeId, graph, addOrRemove) => {
|
|
|
97
97
|
* Updates nodes of a provided {@link Graph} accordingly to the
|
|
98
98
|
* provided add or remove arguments.
|
|
99
99
|
*/
|
|
100
|
-
export const updatePackageJson = ({ add, graph, packageJson, remove, }) => {
|
|
100
|
+
export const updatePackageJson = ({ add, graph, packageJson, remove, saveExact, savePrefix, }) => {
|
|
101
101
|
const manifestsToUpdate = new Set();
|
|
102
102
|
const operations = new Set([add, remove]);
|
|
103
103
|
for (const operation of operations) {
|
|
@@ -106,7 +106,7 @@ export const updatePackageJson = ({ add, graph, packageJson, remove, }) => {
|
|
|
106
106
|
// that are nested folders from which the user can also add new
|
|
107
107
|
// dependencies to
|
|
108
108
|
for (const nodeId of operation.keys()) {
|
|
109
|
-
const manifest = addOrRemoveDeps(nodeId, graph, operation);
|
|
109
|
+
const manifest = addOrRemoveDeps(nodeId, graph, operation, saveExact, savePrefix);
|
|
110
110
|
if (manifest) {
|
|
111
111
|
manifestsToUpdate.add(manifest);
|
|
112
112
|
}
|
|
@@ -120,4 +120,3 @@ export const updatePackageJson = ({ add, graph, packageJson, remove, }) => {
|
|
|
120
120
|
};
|
|
121
121
|
return commit;
|
|
122
122
|
};
|
|
123
|
-
//# sourceMappingURL=update-importers-package-json.js.map
|
|
@@ -3,4 +3,3 @@ import type { DependencySaveType, DependencyTypeShort, NodeLike } from '@vltpkg/
|
|
|
3
3
|
* Resolve a {@link DependencySaveType} to a {@link DependencyTypeShort}
|
|
4
4
|
*/
|
|
5
5
|
export declare const resolveSaveType: (node: NodeLike, name: string, saveType: DependencySaveType) => DependencyTypeShort;
|
|
6
|
-
//# sourceMappingURL=resolve-save-type.d.ts.map
|
|
@@ -1,23 +1,27 @@
|
|
|
1
1
|
import { error } from '@vltpkg/error-cause';
|
|
2
2
|
import { SecurityArchive } from '@vltpkg/security-archive/browser';
|
|
3
|
-
import { defaultGitHostArchives, defaultGitHosts, defaultRegistries,
|
|
3
|
+
import { defaultGitHostArchives, defaultGitHosts, defaultRegistries, defaultRegistryName, defaultScopeRegistries, } from '@vltpkg/spec/browser';
|
|
4
4
|
import { stringifyNode } from "../stringify-node.js";
|
|
5
5
|
import { loadEdges } from "../lockfile/load-edges.js";
|
|
6
6
|
import { loadNodes } from "../lockfile/load-nodes.js";
|
|
7
7
|
const loadSpecOptions = (lockfile) => {
|
|
8
|
-
const { catalog = {}, catalogs = {}, registries, registry, 'git-hosts': gitHosts, 'git-host-archives': gitHostArchives, '
|
|
8
|
+
const { catalog = {}, catalogs = {}, registries, registry, 'default-registry-alias': defaultRegistryAlias, 'git-hosts': gitHosts, 'git-host-archives': gitHostArchives, 'scoped-registries': scopedRegistriesOption, 'jsr-registries': jsrRegistries, } = lockfile.options;
|
|
9
|
+
// backwards-compat: legacy lockfiles wrote this field as `scope-registries`
|
|
10
|
+
const scopeRegistries = scopedRegistriesOption ??
|
|
11
|
+
lockfile.options['scope-registries'];
|
|
9
12
|
return {
|
|
10
13
|
catalog,
|
|
11
14
|
catalogs,
|
|
12
15
|
registries: { ...defaultRegistries, ...registries },
|
|
13
|
-
registry
|
|
16
|
+
registry,
|
|
17
|
+
'default-registry-alias': defaultRegistryAlias ?? defaultRegistryName,
|
|
14
18
|
'jsr-registries': { ...jsrRegistries },
|
|
15
19
|
'git-hosts': { ...defaultGitHosts, ...gitHosts },
|
|
16
20
|
'git-host-archives': {
|
|
17
21
|
...defaultGitHostArchives,
|
|
18
22
|
...gitHostArchives,
|
|
19
23
|
},
|
|
20
|
-
'
|
|
24
|
+
'scoped-registries': {
|
|
21
25
|
...defaultScopeRegistries,
|
|
22
26
|
...scopeRegistries,
|
|
23
27
|
},
|
|
@@ -173,4 +177,3 @@ export const load = (transfered) => {
|
|
|
173
177
|
securityArchive,
|
|
174
178
|
};
|
|
175
179
|
};
|
|
176
|
-
//# sourceMappingURL=load.js.map
|
|
@@ -12,22 +12,33 @@ export const uninstall = async (options, remove) => {
|
|
|
12
12
|
const modifiers = GraphModifier.maybeLoad(options);
|
|
13
13
|
const remover = new RollbackRemove();
|
|
14
14
|
try {
|
|
15
|
-
|
|
15
|
+
// Load the actual graph before building the ideal graph so that
|
|
16
|
+
// manifest data from installed packages can be used to hydrate
|
|
17
|
+
// nodes loaded from the lockfile. Without this, nodes loaded from
|
|
18
|
+
// vlt-lock.json (which does not store manifests) will be missing
|
|
19
|
+
// manifest data, causing the hidden lockfile save to silently fail
|
|
20
|
+
// due to throwOnMissingManifest and leaving stale entries behind.
|
|
21
|
+
const act = actualLoad({
|
|
16
22
|
...options,
|
|
17
|
-
|
|
23
|
+
modifiers: undefined,
|
|
18
24
|
mainManifest,
|
|
19
25
|
loadManifests: true,
|
|
20
|
-
remover,
|
|
21
26
|
});
|
|
22
|
-
const
|
|
27
|
+
const graph = await idealBuild({
|
|
23
28
|
...options,
|
|
29
|
+
actual: act,
|
|
30
|
+
remove,
|
|
24
31
|
mainManifest,
|
|
25
32
|
loadManifests: true,
|
|
33
|
+
remover,
|
|
26
34
|
});
|
|
27
35
|
// If lockfileOnly is enabled, skip reify and only save the lockfile
|
|
28
36
|
if (options.lockfileOnly) {
|
|
29
|
-
// Save only the main lockfile, skip all filesystem operations
|
|
30
|
-
|
|
37
|
+
// Save only the main lockfile, skip all filesystem operations.
|
|
38
|
+
// Spread `options` so that spec-level config (registry,
|
|
39
|
+
// scoped-registries, git-hosts, catalogs, etc.) round-trips
|
|
40
|
+
// through the lockfile. See vltpkg/vltpkg#1580.
|
|
41
|
+
lockfile.save({ ...options, graph, modifiers });
|
|
31
42
|
const saveImportersPackageJson =
|
|
32
43
|
/* c8 ignore next */
|
|
33
44
|
remove?.modifiedDependencies ?
|
|
@@ -65,4 +76,3 @@ export const uninstall = async (options, remove) => {
|
|
|
65
76
|
}
|
|
66
77
|
/* c8 ignore stop */
|
|
67
78
|
};
|
|
68
|
-
//# sourceMappingURL=uninstall.js.map
|
|
@@ -52,6 +52,7 @@ export const update = async (options) => {
|
|
|
52
52
|
loadManifests: true,
|
|
53
53
|
modifiers,
|
|
54
54
|
remover,
|
|
55
|
+
update: true,
|
|
55
56
|
});
|
|
56
57
|
return { buildQueue, graph, diff };
|
|
57
58
|
/* c8 ignore start */
|
|
@@ -70,4 +71,3 @@ export const update = async (options) => {
|
|
|
70
71
|
}
|
|
71
72
|
/* c8 ignore stop */
|
|
72
73
|
};
|
|
73
|
-
//# sourceMappingURL=update.js.map
|
|
@@ -13,4 +13,3 @@ export declare const VIRTUAL_ROOT_ID: import("@vltpkg/dep-id/browser").DepID;
|
|
|
13
13
|
* Returns undefined if a virtual root is not needed.
|
|
14
14
|
*/
|
|
15
15
|
export declare const createVirtualRoot: (name: string | undefined, options: SpecOptions, mainImporters: NodeLike[]) => NodeLike | undefined;
|
|
16
|
-
//# sourceMappingURL=virtual-root.d.ts.map
|
|
@@ -3,6 +3,7 @@ export type MermaidOutputGraph = {
|
|
|
3
3
|
edges: EdgeLike[];
|
|
4
4
|
importers: Set<NodeLike>;
|
|
5
5
|
nodes: NodeLike[];
|
|
6
|
+
highlightSelection?: boolean;
|
|
6
7
|
};
|
|
7
8
|
/**
|
|
8
9
|
* Generates a short identifier for a given index following the pattern:
|
|
@@ -13,5 +14,4 @@ export declare function generateShortId(index: number): string;
|
|
|
13
14
|
/**
|
|
14
15
|
* Returns a mermaid string representation of the graph.
|
|
15
16
|
*/
|
|
16
|
-
export declare function mermaidOutput(
|
|
17
|
-
//# sourceMappingURL=mermaid-output.d.ts.map
|
|
17
|
+
export declare function mermaidOutput(options: MermaidOutputGraph): string;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Edge } from "../edge.js";
|
|
2
2
|
import { Node } from "../node.js";
|
|
3
3
|
let missingCount = 0;
|
|
4
|
+
const isSelected = (options, edge, node) => (!node || options.nodes.includes(node)) &&
|
|
5
|
+
/* c8 ignore next */ (!edge || options.edges.includes(edge));
|
|
4
6
|
/**
|
|
5
7
|
* Generates a short identifier for a given index following the pattern:
|
|
6
8
|
* 0 -> a, 1 -> b, ..., 25 -> z, 26 -> A, ..., 51 -> Z, 52 -> aa, 53 -> ab, etc.
|
|
@@ -58,29 +60,35 @@ function createDepIdMapping(importers) {
|
|
|
58
60
|
* been labeled. This tracking is shared across multiple importers to prevent duplicate
|
|
59
61
|
* labels in the output.
|
|
60
62
|
*/
|
|
61
|
-
const nodeRef = (node, labeledNodes, depIdMapping) => {
|
|
63
|
+
const nodeRef = (node, labeledNodes, depIdMapping, options) => {
|
|
62
64
|
const shortId = depIdMapping.get(node.id) /* c8 ignore next - should not be possible */ ?? '';
|
|
65
|
+
const selectedClass = (options.highlightSelection &&
|
|
66
|
+
isSelected(options, undefined, node)) ?
|
|
67
|
+
':::a'
|
|
68
|
+
: '';
|
|
63
69
|
if (labeledNodes.has(node.id)) {
|
|
64
|
-
return shortId;
|
|
70
|
+
return shortId + selectedClass;
|
|
65
71
|
}
|
|
66
72
|
labeledNodes.add(node.id);
|
|
67
|
-
return `${shortId}("${String(node).replaceAll('@', '#64;')}")`;
|
|
73
|
+
return `${shortId}("${String(node).replaceAll('@', '#64;')}")${selectedClass}`;
|
|
68
74
|
};
|
|
69
|
-
function parseNode(seenNodes, labeledNodes, includedItems, depIdMapping, node, isImporter = false) {
|
|
75
|
+
function parseNode(seenNodes, labeledNodes, includedItems, depIdMapping, options, node, isImporter = false) {
|
|
70
76
|
if (seenNodes.has(node.id) || !includedItems.get(node)) {
|
|
71
77
|
return '';
|
|
72
78
|
}
|
|
73
79
|
seenNodes.add(node.id);
|
|
74
80
|
// For importers, render the node label first as a standalone line before processing edges,
|
|
75
81
|
// since they appear at the top of the graph. Non-importer nodes are labeled inline as part of edge definitions.
|
|
76
|
-
const nodeLabel = isImporter ?
|
|
82
|
+
const nodeLabel = isImporter ?
|
|
83
|
+
nodeRef(node, labeledNodes, depIdMapping, options)
|
|
84
|
+
: '';
|
|
77
85
|
// Include both regular edges and workspace edges (if any)
|
|
78
86
|
const allEdges = [
|
|
79
87
|
...node.edgesOut.values(),
|
|
80
88
|
...(node.workspaces?.values() ?? []),
|
|
81
89
|
];
|
|
82
90
|
const edges = allEdges
|
|
83
|
-
.map(e => parseEdge(seenNodes, labeledNodes, includedItems, depIdMapping, e))
|
|
91
|
+
.map(e => parseEdge(seenNodes, labeledNodes, includedItems, depIdMapping, options, e))
|
|
84
92
|
.filter(Boolean)
|
|
85
93
|
.join('\n');
|
|
86
94
|
// Only render node standalone for importers, others are rendered as part of edges
|
|
@@ -90,12 +98,12 @@ function parseNode(seenNodes, labeledNodes, includedItems, depIdMapping, node, i
|
|
|
90
98
|
}
|
|
91
99
|
return edges;
|
|
92
100
|
}
|
|
93
|
-
function parseEdge(seenNodes, labeledNodes, includedItems, depIdMapping, edge) {
|
|
101
|
+
function parseEdge(seenNodes, labeledNodes, includedItems, depIdMapping, options, edge) {
|
|
94
102
|
if (!includedItems.get(edge)) {
|
|
95
103
|
return '';
|
|
96
104
|
}
|
|
97
105
|
const edgeType = edge.type === 'prod' ? '' : ` (${edge.type})`;
|
|
98
|
-
const edgeResult = nodeRef(edge.from, labeledNodes, depIdMapping) +
|
|
106
|
+
const edgeResult = nodeRef(edge.from, labeledNodes, depIdMapping, options) +
|
|
99
107
|
` -->|"${String(edge.spec).replaceAll('@', '#64;')}${edgeType}"| `;
|
|
100
108
|
const missingLabel = edge.type.endsWith('ptional') ? 'Missing Optional' : 'Missing';
|
|
101
109
|
if (!edge.to) {
|
|
@@ -103,14 +111,15 @@ function parseEdge(seenNodes, labeledNodes, includedItems, depIdMapping, edge) {
|
|
|
103
111
|
}
|
|
104
112
|
// Label the target node first so that if it's referenced again later in the graph,
|
|
105
113
|
// it will use the short identifier instead of repeating the full label.
|
|
106
|
-
const toRef = nodeRef(edge.to, labeledNodes, depIdMapping);
|
|
107
|
-
const childEdges = parseNode(seenNodes, labeledNodes, includedItems, depIdMapping, edge.to);
|
|
114
|
+
const toRef = nodeRef(edge.to, labeledNodes, depIdMapping, options);
|
|
115
|
+
const childEdges = parseNode(seenNodes, labeledNodes, includedItems, depIdMapping, options, edge.to);
|
|
108
116
|
return edgeResult + toRef + (childEdges ? '\n' + childEdges : '');
|
|
109
117
|
}
|
|
110
118
|
/**
|
|
111
119
|
* Returns a mermaid string representation of the graph.
|
|
112
120
|
*/
|
|
113
|
-
export function mermaidOutput(
|
|
121
|
+
export function mermaidOutput(options) {
|
|
122
|
+
const { edges, importers, nodes, highlightSelection } = options;
|
|
114
123
|
const seen = new Set();
|
|
115
124
|
const includedItems = new Map();
|
|
116
125
|
const traverse = new Set([...importers].map(i => ({ self: i, parent: undefined })));
|
|
@@ -119,10 +128,7 @@ export function mermaidOutput({ edges, importers, nodes, }) {
|
|
|
119
128
|
continue;
|
|
120
129
|
seen.add(item.self);
|
|
121
130
|
if (item.self instanceof Edge) {
|
|
122
|
-
|
|
123
|
-
// so we need to check for workspace spec type to always include them
|
|
124
|
-
if (edges.includes(item.self) ||
|
|
125
|
-
item.self.spec.type === 'workspace') {
|
|
131
|
+
if (edges.includes(item.self)) {
|
|
126
132
|
includedItems.set(item.self, true);
|
|
127
133
|
}
|
|
128
134
|
if (item.self.to) {
|
|
@@ -155,10 +161,10 @@ export function mermaidOutput({ edges, importers, nodes, }) {
|
|
|
155
161
|
const labeledNodes = new Set();
|
|
156
162
|
// Track nodes that have been processed (shared across all importers to avoid duplicates)
|
|
157
163
|
const seenNodes = new Set();
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
164
|
+
const graphOutput = [...importers]
|
|
165
|
+
.map(i => parseNode(seenNodes, labeledNodes, includedItems, depIdMapping, options, i, true))
|
|
166
|
+
.filter(Boolean)
|
|
167
|
+
.join('\n');
|
|
168
|
+
const styleDefinition = highlightSelection ? '\nclassDef a fill:gold,color:#242424' : '';
|
|
169
|
+
return 'flowchart TD\n' + graphOutput + styleDefinition;
|
|
163
170
|
}
|
|
164
|
-
//# sourceMappingURL=mermaid-output.js.map
|
package/package.json
CHANGED
|
@@ -1,99 +1,94 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vltpkg/graph",
|
|
3
3
|
"description": "A library that helps understanding & expressing what happens on an install",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.2",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/vltpkg/vltpkg.git",
|
|
8
8
|
"directory": "src/graph"
|
|
9
9
|
},
|
|
10
|
-
"author":
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"dialects": [
|
|
15
|
-
"esm"
|
|
16
|
-
],
|
|
17
|
-
"exports": {
|
|
18
|
-
"./package.json": "./package.json",
|
|
19
|
-
".": "./src/index.ts",
|
|
20
|
-
"./browser": "./src/browser.ts"
|
|
21
|
-
}
|
|
10
|
+
"author": {
|
|
11
|
+
"name": "vlt technology inc.",
|
|
12
|
+
"email": "support@vlt.sh",
|
|
13
|
+
"url": "http://vlt.sh"
|
|
22
14
|
},
|
|
23
15
|
"dependencies": {
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"@vltpkg/
|
|
28
|
-
"@vltpkg/
|
|
29
|
-
"@vltpkg/
|
|
30
|
-
"@vltpkg/
|
|
31
|
-
"@vltpkg/
|
|
32
|
-
"@vltpkg/
|
|
33
|
-
"@vltpkg/package-
|
|
34
|
-
"@vltpkg/
|
|
35
|
-
"@vltpkg/
|
|
36
|
-
"@vltpkg/
|
|
37
|
-
"@vltpkg/
|
|
38
|
-
"@vltpkg/satisfies": "1.0.
|
|
39
|
-
"@vltpkg/
|
|
40
|
-
"@vltpkg/
|
|
41
|
-
"@vltpkg/
|
|
42
|
-
"@vltpkg/
|
|
43
|
-
"@vltpkg/
|
|
44
|
-
"
|
|
45
|
-
"
|
|
16
|
+
"@vltpkg/cmd-shim": "1.0.2",
|
|
17
|
+
"@vltpkg/dep-id": "1.0.2",
|
|
18
|
+
"@vltpkg/dss-breadcrumb": "1.0.2",
|
|
19
|
+
"@vltpkg/error-cause": "1.0.2",
|
|
20
|
+
"@vltpkg/fast-split": "1.0.2",
|
|
21
|
+
"@vltpkg/graph-run": "1.0.2",
|
|
22
|
+
"@vltpkg/init": "1.0.2",
|
|
23
|
+
"@vltpkg/output": "1.0.2",
|
|
24
|
+
"@vltpkg/package-info": "1.0.2",
|
|
25
|
+
"@vltpkg/package-json": "1.0.2",
|
|
26
|
+
"@vltpkg/pick-manifest": "1.0.2",
|
|
27
|
+
"@vltpkg/query": "1.0.2",
|
|
28
|
+
"@vltpkg/rollback-remove": "1.0.2",
|
|
29
|
+
"@vltpkg/run": "1.0.2",
|
|
30
|
+
"@vltpkg/satisfies": "1.0.2",
|
|
31
|
+
"@vltpkg/security-archive": "1.0.2",
|
|
32
|
+
"@vltpkg/spec": "1.0.2",
|
|
33
|
+
"@vltpkg/types": "1.0.2",
|
|
34
|
+
"@vltpkg/vlt-json": "1.0.2",
|
|
35
|
+
"@vltpkg/workspaces": "1.0.2",
|
|
36
|
+
"path-scurry": "^2.0.1",
|
|
37
|
+
"promise-call-limit": "^3.0.2"
|
|
46
38
|
},
|
|
47
39
|
"devDependencies": {
|
|
48
|
-
"@eslint/js": "^9.
|
|
49
|
-
"@types/node": "^22.
|
|
50
|
-
"eslint": "^9.
|
|
51
|
-
"prettier": "^3.
|
|
52
|
-
"tap": "^21.
|
|
53
|
-
"tar": "^7.
|
|
54
|
-
"tshy": "^3.0.2",
|
|
40
|
+
"@eslint/js": "^9.39.1",
|
|
41
|
+
"@types/node": "^22.19.2",
|
|
42
|
+
"eslint": "^9.39.1",
|
|
43
|
+
"prettier": "^3.7.4",
|
|
44
|
+
"tap": "^21.5.0",
|
|
45
|
+
"tar": "^7.5.2",
|
|
55
46
|
"typedoc": "~0.27.9",
|
|
56
47
|
"typescript": "5.7.3",
|
|
57
|
-
"typescript-eslint": "^8.
|
|
58
|
-
"@vltpkg/vlt-json": "1.0.0-rc.9"
|
|
48
|
+
"typescript-eslint": "^8.49.0"
|
|
59
49
|
},
|
|
60
50
|
"license": "BSD-2-Clause-Patent",
|
|
61
51
|
"engines": {
|
|
62
|
-
"node": ">=22"
|
|
52
|
+
"node": ">=22.22.0"
|
|
53
|
+
},
|
|
54
|
+
"scripts": {
|
|
55
|
+
"format": "prettier --write . --log-level warn --ignore-path ../../.prettierignore --cache",
|
|
56
|
+
"format:check": "prettier --check . --ignore-path ../../.prettierignore --cache",
|
|
57
|
+
"lint": "eslint . --fix",
|
|
58
|
+
"lint:check": "eslint .",
|
|
59
|
+
"prepack": "tsc -p tsconfig.publish.json && ../../scripts/update-dist-exports.ts",
|
|
60
|
+
"snap": "tap",
|
|
61
|
+
"test": "tap",
|
|
62
|
+
"posttest": "tsc --noEmit",
|
|
63
|
+
"typecheck": "tsc --noEmit"
|
|
63
64
|
},
|
|
64
65
|
"tap": {
|
|
65
66
|
"extends": "../../tap-config.yaml"
|
|
66
67
|
},
|
|
67
68
|
"prettier": "../../.prettierrc.js",
|
|
68
|
-
"module": "./dist/
|
|
69
|
+
"module": "./dist/index.js",
|
|
69
70
|
"type": "module",
|
|
70
71
|
"exports": {
|
|
71
72
|
"./package.json": "./package.json",
|
|
72
73
|
".": {
|
|
73
74
|
"import": {
|
|
74
|
-
"
|
|
75
|
-
"default": "./dist/esm/index.js"
|
|
75
|
+
"default": "./dist/index.js"
|
|
76
76
|
}
|
|
77
77
|
},
|
|
78
78
|
"./browser": {
|
|
79
79
|
"import": {
|
|
80
|
-
"
|
|
81
|
-
"default": "./dist/esm/browser.js"
|
|
80
|
+
"default": "./dist/browser.js"
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
83
|
},
|
|
85
84
|
"files": [
|
|
86
85
|
"dist"
|
|
87
86
|
],
|
|
88
|
-
"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
"tshy": "tshy",
|
|
97
|
-
"typecheck": "tsc --noEmit"
|
|
98
|
-
}
|
|
99
|
-
}
|
|
87
|
+
"bugs": [
|
|
88
|
+
{
|
|
89
|
+
"type": "link",
|
|
90
|
+
"url": "https://github.com/vltpkg/vltpkg/issues"
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"homepage": "https://github.com/vltpkg/vltpkg/tree/main/src/graph#readme"
|
|
94
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/actual/load.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAQnC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEnD,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,iBAAiB,CAAA;AAGxB,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IACtC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAA;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;IACxB;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;IAClB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;OAEG;IACH,iCAAiC,CAAC,EAAE,OAAO,CAAA;IAE3C;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,IAAI,CAAA;CACf,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAC9C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,QACzB,OAAO,KACX,GAAG,IAAI,iBAGe,CAAA;AAEzB;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QACzB,OAAO,KACX,iBAKF,CAAA;AAUD;;;GAGG;AACH,eAAO,MAAM,cAAc,SACnB,IAAI,QACJ,IAAI,KACT,KAAK,GAAG,SAGQ,CAAA;AA2SnB;;;;GAIG;AACH,eAAO,MAAM,IAAI,YAAa,WAAW,KAAG,KAsG3C,CAAA"}
|