@vltpkg/graph 1.0.0-rc.1 → 1.0.0-rc.11
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/actual/load.d.ts.map +1 -0
- package/dist/{esm/actual → actual}/load.js +35 -14
- package/dist/actual/load.js.map +1 -0
- package/dist/{esm/browser.d.ts → browser.d.ts} +1 -1
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js.map +1 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js.map +1 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/{esm/diff.d.ts → diff.d.ts} +2 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js.map +1 -0
- package/dist/{esm/edge.d.ts → edge.d.ts} +1 -0
- package/dist/edge.d.ts.map +1 -0
- package/dist/{esm/edge.js → edge.js} +4 -0
- package/dist/edge.js.map +1 -0
- package/dist/fixup-added-names.d.ts +16 -0
- package/dist/fixup-added-names.d.ts.map +1 -0
- package/dist/fixup-added-names.js +31 -0
- package/dist/fixup-added-names.js.map +1 -0
- package/dist/{esm/graph.d.ts → graph.d.ts} +18 -4
- package/dist/graph.d.ts.map +1 -0
- package/dist/{esm/graph.js → graph.js} +63 -40
- package/dist/graph.js.map +1 -0
- package/dist/{esm/ideal → ideal}/append-nodes.d.ts +2 -1
- package/dist/ideal/append-nodes.d.ts.map +1 -0
- package/dist/ideal/append-nodes.js +395 -0
- package/dist/ideal/append-nodes.js.map +1 -0
- package/dist/{esm/ideal → ideal}/build-ideal-from-starting-graph.d.ts +4 -4
- package/dist/ideal/build-ideal-from-starting-graph.d.ts.map +1 -0
- package/dist/ideal/build-ideal-from-starting-graph.js +70 -0
- package/dist/ideal/build-ideal-from-starting-graph.js.map +1 -0
- package/dist/ideal/build.d.ts.map +1 -0
- package/dist/{esm/ideal → ideal}/build.js +29 -2
- package/dist/ideal/build.js.map +1 -0
- package/dist/{esm/ideal → ideal}/get-importer-specs.d.ts +9 -2
- package/dist/ideal/get-importer-specs.d.ts.map +1 -0
- package/dist/{esm/ideal → ideal}/get-importer-specs.js +80 -5
- package/dist/ideal/get-importer-specs.js.map +1 -0
- package/dist/ideal/get-ordered-dependencies.d.ts +10 -0
- package/dist/ideal/get-ordered-dependencies.d.ts.map +1 -0
- package/dist/ideal/get-ordered-dependencies.js +42 -0
- package/dist/ideal/get-ordered-dependencies.js.map +1 -0
- package/dist/ideal/peers.d.ts +76 -0
- package/dist/ideal/peers.d.ts.map +1 -0
- package/dist/ideal/peers.js +340 -0
- package/dist/ideal/peers.js.map +1 -0
- package/dist/ideal/refresh-ideal-graph.d.ts +48 -0
- package/dist/ideal/refresh-ideal-graph.d.ts.map +1 -0
- package/dist/ideal/refresh-ideal-graph.js +79 -0
- package/dist/ideal/refresh-ideal-graph.js.map +1 -0
- package/dist/ideal/remove-satisfied-specs.d.ts.map +1 -0
- package/dist/ideal/remove-satisfied-specs.js.map +1 -0
- package/dist/ideal/types.d.ts +112 -0
- package/dist/ideal/types.d.ts.map +1 -0
- package/dist/ideal/types.js.map +1 -0
- package/dist/{esm/index.d.ts → index.d.ts} +2 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/{esm/index.js → index.js} +1 -0
- package/dist/index.js.map +1 -0
- package/dist/{esm/install.d.ts → install.d.ts} +3 -2
- package/dist/install.d.ts.map +1 -0
- package/dist/{esm/install.js → install.js} +30 -6
- package/dist/install.js.map +1 -0
- package/dist/lockfile/load-edges.d.ts.map +1 -0
- package/dist/{esm/lockfile → lockfile}/load-edges.js +4 -3
- package/dist/lockfile/load-edges.js.map +1 -0
- package/dist/{esm/lockfile → lockfile}/load-nodes.d.ts +1 -1
- package/dist/lockfile/load-nodes.d.ts.map +1 -0
- package/dist/{esm/lockfile → lockfile}/load-nodes.js +16 -4
- package/dist/lockfile/load-nodes.js.map +1 -0
- package/dist/{esm/lockfile → lockfile}/load.d.ts +2 -2
- package/dist/lockfile/load.d.ts.map +1 -0
- package/dist/{esm/lockfile → lockfile}/load.js +6 -29
- package/dist/lockfile/load.js.map +1 -0
- package/dist/{esm/lockfile → lockfile}/save.d.ts +5 -1
- package/dist/lockfile/save.d.ts.map +1 -0
- package/dist/{esm/lockfile → lockfile}/save.js +23 -9
- package/dist/lockfile/save.js.map +1 -0
- package/dist/lockfile/types.d.ts.map +1 -0
- package/dist/lockfile/types.js.map +1 -0
- package/dist/modifiers.d.ts.map +1 -0
- package/dist/modifiers.js.map +1 -0
- package/dist/{esm/node.d.ts → node.d.ts} +14 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/{esm/node.js → node.js} +21 -0
- package/dist/node.js.map +1 -0
- package/dist/non-empty-list.d.ts.map +1 -0
- package/dist/non-empty-list.js.map +1 -0
- package/dist/reify/add-edge.d.ts.map +1 -0
- package/dist/reify/add-edge.js.map +1 -0
- package/dist/{esm/reify → reify}/add-edges.d.ts +1 -1
- package/dist/reify/add-edges.d.ts.map +1 -0
- package/dist/{esm/reify → reify}/add-edges.js +2 -1
- package/dist/reify/add-edges.js.map +1 -0
- package/dist/reify/add-nodes.d.ts.map +1 -0
- package/dist/reify/add-nodes.js.map +1 -0
- package/dist/reify/bin-chmod.d.ts.map +1 -0
- package/dist/reify/bin-chmod.js.map +1 -0
- package/dist/reify/build.d.ts.map +1 -0
- package/dist/{esm/reify → reify}/build.js +1 -1
- package/dist/reify/build.js.map +1 -0
- package/dist/reify/calculate-save-value.d.ts.map +1 -0
- package/dist/reify/calculate-save-value.js.map +1 -0
- package/dist/reify/check-needed-build.d.ts.map +1 -0
- package/dist/reify/check-needed-build.js.map +1 -0
- package/dist/reify/delete-edge.d.ts.map +1 -0
- package/dist/reify/delete-edge.js.map +1 -0
- package/dist/reify/delete-edges.d.ts.map +1 -0
- package/dist/reify/delete-edges.js.map +1 -0
- package/dist/reify/delete-nodes.d.ts.map +1 -0
- package/dist/reify/delete-nodes.js.map +1 -0
- package/dist/reify/extract-node.d.ts.map +1 -0
- package/dist/{esm/reify → reify}/extract-node.js +10 -2
- package/dist/reify/extract-node.js.map +1 -0
- package/dist/reify/index.d.ts.map +1 -0
- package/dist/{esm/reify → reify}/index.js +1 -1
- package/dist/reify/index.js.map +1 -0
- package/dist/reify/internal-hoist.d.ts.map +1 -0
- package/dist/reify/internal-hoist.js.map +1 -0
- package/dist/reify/optional-fail.d.ts.map +1 -0
- package/dist/reify/optional-fail.js.map +1 -0
- package/dist/reify/rollback.d.ts.map +1 -0
- package/dist/reify/rollback.js.map +1 -0
- package/dist/{esm/reify → reify}/update-importers-package-json.d.ts +1 -1
- package/dist/reify/update-importers-package-json.d.ts.map +1 -0
- package/dist/{esm/reify → reify}/update-importers-package-json.js +19 -16
- package/dist/reify/update-importers-package-json.js.map +1 -0
- package/dist/remove-optional-subgraph.d.ts.map +1 -0
- package/dist/remove-optional-subgraph.js.map +1 -0
- package/dist/resolve-save-type.d.ts.map +1 -0
- package/dist/resolve-save-type.js.map +1 -0
- package/dist/stringify-node.d.ts.map +1 -0
- package/dist/{esm/stringify-node.js → stringify-node.js} +10 -1
- package/dist/stringify-node.js.map +1 -0
- package/dist/transfer-data/load.d.ts.map +1 -0
- package/dist/transfer-data/load.js.map +1 -0
- package/dist/uninstall.d.ts.map +1 -0
- package/dist/{esm/uninstall.js → uninstall.js} +10 -0
- package/dist/uninstall.js.map +1 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/{esm/update.js → update.js} +10 -0
- package/dist/update.js.map +1 -0
- package/dist/virtual-root.d.ts.map +1 -0
- package/dist/virtual-root.js.map +1 -0
- package/dist/visualization/human-readable-output.d.ts.map +1 -0
- package/dist/{esm/visualization → visualization}/human-readable-output.js +7 -2
- package/dist/visualization/human-readable-output.js.map +1 -0
- package/dist/{esm/visualization → visualization}/json-output.d.ts +2 -1
- package/dist/visualization/json-output.d.ts.map +1 -0
- package/dist/{esm/visualization → visualization}/json-output.js +2 -2
- package/dist/visualization/json-output.js.map +1 -0
- package/dist/visualization/mermaid-output.d.ts.map +1 -0
- package/dist/{esm/visualization → visualization}/mermaid-output.js +57 -16
- package/dist/visualization/mermaid-output.js.map +1 -0
- package/dist/visualization/object-like-output.d.ts.map +1 -0
- package/dist/visualization/object-like-output.js.map +1 -0
- package/package.json +34 -50
- 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/graph.d.ts.map +0 -1
- package/dist/esm/graph.js.map +0 -1
- package/dist/esm/ideal/add-nodes.d.ts +0 -34
- package/dist/esm/ideal/add-nodes.d.ts.map +0 -1
- package/dist/esm/ideal/add-nodes.js +0 -39
- package/dist/esm/ideal/add-nodes.js.map +0 -1
- package/dist/esm/ideal/append-nodes.d.ts.map +0 -1
- package/dist/esm/ideal/append-nodes.js +0 -288
- 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 +0 -55
- 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/remove-nodes.d.ts +0 -7
- package/dist/esm/ideal/remove-nodes.d.ts.map +0 -1
- package/dist/esm/ideal/remove-nodes.js +0 -19
- package/dist/esm/ideal/remove-nodes.js.map +0 -1
- package/dist/esm/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 +0 -35
- package/dist/esm/ideal/types.d.ts.map +0 -1
- 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.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.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
- /package/dist/{esm/actual → actual}/load.d.ts +0 -0
- /package/dist/{esm/browser.js → browser.js} +0 -0
- /package/dist/{esm/build.d.ts → build.d.ts} +0 -0
- /package/dist/{esm/build.js → build.js} +0 -0
- /package/dist/{esm/dependencies.d.ts → dependencies.d.ts} +0 -0
- /package/dist/{esm/dependencies.js → dependencies.js} +0 -0
- /package/dist/{esm/diff.js → diff.js} +0 -0
- /package/dist/{esm/ideal → ideal}/build.d.ts +0 -0
- /package/dist/{esm/ideal → ideal}/remove-satisfied-specs.d.ts +0 -0
- /package/dist/{esm/ideal → ideal}/remove-satisfied-specs.js +0 -0
- /package/dist/{esm/ideal → ideal}/types.js +0 -0
- /package/dist/{esm/lockfile → lockfile}/load-edges.d.ts +0 -0
- /package/dist/{esm/lockfile → lockfile}/types.d.ts +0 -0
- /package/dist/{esm/lockfile → lockfile}/types.js +0 -0
- /package/dist/{esm/modifiers.d.ts → modifiers.d.ts} +0 -0
- /package/dist/{esm/modifiers.js → modifiers.js} +0 -0
- /package/dist/{esm/non-empty-list.d.ts → non-empty-list.d.ts} +0 -0
- /package/dist/{esm/non-empty-list.js → non-empty-list.js} +0 -0
- /package/dist/{esm/reify → reify}/add-edge.d.ts +0 -0
- /package/dist/{esm/reify → reify}/add-edge.js +0 -0
- /package/dist/{esm/reify → reify}/add-nodes.d.ts +0 -0
- /package/dist/{esm/reify → reify}/add-nodes.js +0 -0
- /package/dist/{esm/reify → reify}/bin-chmod.d.ts +0 -0
- /package/dist/{esm/reify → reify}/bin-chmod.js +0 -0
- /package/dist/{esm/reify → reify}/build.d.ts +0 -0
- /package/dist/{esm/reify → reify}/calculate-save-value.d.ts +0 -0
- /package/dist/{esm/reify → reify}/calculate-save-value.js +0 -0
- /package/dist/{esm/reify → reify}/check-needed-build.d.ts +0 -0
- /package/dist/{esm/reify → reify}/check-needed-build.js +0 -0
- /package/dist/{esm/reify → reify}/delete-edge.d.ts +0 -0
- /package/dist/{esm/reify → reify}/delete-edge.js +0 -0
- /package/dist/{esm/reify → reify}/delete-edges.d.ts +0 -0
- /package/dist/{esm/reify → reify}/delete-edges.js +0 -0
- /package/dist/{esm/reify → reify}/delete-nodes.d.ts +0 -0
- /package/dist/{esm/reify → reify}/delete-nodes.js +0 -0
- /package/dist/{esm/reify → reify}/extract-node.d.ts +0 -0
- /package/dist/{esm/reify → reify}/index.d.ts +0 -0
- /package/dist/{esm/reify → reify}/internal-hoist.d.ts +0 -0
- /package/dist/{esm/reify → reify}/internal-hoist.js +0 -0
- /package/dist/{esm/reify → reify}/optional-fail.d.ts +0 -0
- /package/dist/{esm/reify → reify}/optional-fail.js +0 -0
- /package/dist/{esm/reify → reify}/rollback.d.ts +0 -0
- /package/dist/{esm/reify → reify}/rollback.js +0 -0
- /package/dist/{esm/remove-optional-subgraph.d.ts → remove-optional-subgraph.d.ts} +0 -0
- /package/dist/{esm/remove-optional-subgraph.js → remove-optional-subgraph.js} +0 -0
- /package/dist/{esm/resolve-save-type.d.ts → resolve-save-type.d.ts} +0 -0
- /package/dist/{esm/resolve-save-type.js → resolve-save-type.js} +0 -0
- /package/dist/{esm/stringify-node.d.ts → stringify-node.d.ts} +0 -0
- /package/dist/{esm/transfer-data → transfer-data}/load.d.ts +0 -0
- /package/dist/{esm/transfer-data → transfer-data}/load.js +0 -0
- /package/dist/{esm/uninstall.d.ts → uninstall.d.ts} +0 -0
- /package/dist/{esm/update.d.ts → update.d.ts} +0 -0
- /package/dist/{esm/virtual-root.d.ts → virtual-root.d.ts} +0 -0
- /package/dist/{esm/virtual-root.js → virtual-root.js} +0 -0
- /package/dist/{esm/visualization → visualization}/human-readable-output.d.ts +0 -0
- /package/dist/{esm/visualization → visualization}/mermaid-output.d.ts +0 -0
- /package/dist/{esm/visualization → visualization}/object-like-output.d.ts +0 -0
- /package/dist/{esm/visualization → visualization}/object-like-output.js +0 -0
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import type { AddImportersDependenciesMap, RemoveImportersDependenciesMap } from '../dependencies.ts';
|
|
2
|
-
import type { BuildIdealAddOptions, BuildIdealFromGraphOptions, BuildIdealRemoveOptions } from './types.ts';
|
|
2
|
+
import type { BuildIdealAddOptions, BuildIdealFromGraphOptions, BuildIdealRemoveOptions, TransientAddMap, TransientRemoveMap } from './types.ts';
|
|
3
3
|
import type { SpecOptions } from '@vltpkg/spec';
|
|
4
|
-
|
|
4
|
+
import type { PackageJson } from '@vltpkg/package-json';
|
|
5
|
+
import type { PathScurry } from 'path-scurry';
|
|
6
|
+
export type GetImporterSpecsOptions = BuildIdealAddOptions & BuildIdealFromGraphOptions & BuildIdealRemoveOptions & SpecOptions & {
|
|
7
|
+
scurry: PathScurry;
|
|
8
|
+
packageJson: PackageJson;
|
|
9
|
+
};
|
|
5
10
|
/**
|
|
6
11
|
* Given a {@link Graph} and a list of {@link Dependency}, merges the
|
|
7
12
|
* dependencies info found in the graph importers and returns the add & remove
|
|
@@ -10,5 +15,7 @@ export type GetImporterSpecsOptions = BuildIdealAddOptions & BuildIdealFromGraph
|
|
|
10
15
|
export declare const getImporterSpecs: (options: GetImporterSpecsOptions) => {
|
|
11
16
|
add: AddImportersDependenciesMap;
|
|
12
17
|
remove: RemoveImportersDependenciesMap;
|
|
18
|
+
transientAdd: TransientAddMap;
|
|
19
|
+
transientRemove: TransientRemoveMap;
|
|
13
20
|
};
|
|
14
21
|
//# sourceMappingURL=get-importer-specs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-importer-specs.d.ts","sourceRoot":"","sources":["../../src/ideal/get-importer-specs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAE3B,8BAA8B,EAC/B,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAMnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GACxD,0BAA0B,GAC1B,uBAAuB,GACvB,WAAW,GAAG;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,WAAW,EAAE,WAAW,CAAA;CACzB,CAAA;AAyBH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAClB,uBAAuB;;;;;CAoLjC,CAAA"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { error } from '@vltpkg/error-cause';
|
|
2
1
|
import { longDependencyTypes } from '@vltpkg/types';
|
|
3
2
|
import { shorten, asDependency } from "../dependencies.js";
|
|
4
3
|
import { removeSatisfiedSpecs } from "./remove-satisfied-specs.js";
|
|
@@ -47,23 +46,85 @@ export const getImporterSpecs = (options) => {
|
|
|
47
46
|
const deps = Object.entries(importer.manifest?.[depType] ?? {});
|
|
48
47
|
for (const [depName, depSpec] of deps) {
|
|
49
48
|
const edge = importer.edgesOut.get(depName);
|
|
49
|
+
// skip if the edge exists and already uses the same spec
|
|
50
|
+
if (edge?.to && depSpec === edge.spec.bareSpec)
|
|
51
|
+
continue;
|
|
50
52
|
const dependency = asDependency({
|
|
51
53
|
spec: Spec.parse(depName, depSpec, options),
|
|
52
54
|
type: shorten(depType, depName, importer.manifest),
|
|
53
55
|
});
|
|
54
|
-
|
|
55
|
-
addDeps.set(depName, dependency);
|
|
56
|
-
}
|
|
56
|
+
addDeps.set(depName, dependency);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
addResult.set(importer.id, addDeps);
|
|
60
60
|
removeResult.set(importer.id, removeDeps);
|
|
61
61
|
}
|
|
62
|
+
// Maps to store dependencies targeting non-importer nodes (e.g., nested folders)
|
|
63
|
+
// These will be injected when the target node is placed in the graph
|
|
64
|
+
const transientAdd = new Map();
|
|
65
|
+
const transientRemove = new Map();
|
|
66
|
+
// Traverse all nodes in the graph to find file type dependencies that are directories
|
|
67
|
+
// and populate transientAdd/transientRemove with their manifest dependencies
|
|
68
|
+
// Only process when scurry and packageJson are available
|
|
69
|
+
for (const node of graph.nodes.values()) {
|
|
70
|
+
// Skip importers as they're already handled above and also skip
|
|
71
|
+
// any non-file type dependencies
|
|
72
|
+
if (graph.importers.has(node) || !node.id.startsWith('file'))
|
|
73
|
+
continue;
|
|
74
|
+
// check if this is a file type dependency that is a directory
|
|
75
|
+
const nodePath = options.scurry.cwd.resolve(node.location);
|
|
76
|
+
const stat = nodePath.lstatSync();
|
|
77
|
+
if (stat?.isDirectory()) {
|
|
78
|
+
// load the manifest for this directory (throw if it does not exist)
|
|
79
|
+
const manifest = options.packageJson.read(nodePath.fullpath());
|
|
80
|
+
// should always set the manifest to the read manifest
|
|
81
|
+
node.manifest = manifest;
|
|
82
|
+
// create a map of dependencies from the manifest
|
|
83
|
+
const addDeps = new Map();
|
|
84
|
+
// check for edges not in manifest (should be removed)
|
|
85
|
+
const removeDeps = new Set();
|
|
86
|
+
for (const edge of node.edgesOut.values()) {
|
|
87
|
+
if (!hasDepName(node, edge) &&
|
|
88
|
+
!add.get(node.id)?.has(edge.name)) {
|
|
89
|
+
removeDeps.add(edge.name);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// iterate over manifest dependencies to add them if
|
|
93
|
+
// they're missing from the graph
|
|
94
|
+
for (const depType of longDependencyTypes) {
|
|
95
|
+
const deps = Object.entries(manifest[depType] ?? {});
|
|
96
|
+
for (const [depName, depSpec] of deps) {
|
|
97
|
+
const edge = node.edgesOut.get(depName);
|
|
98
|
+
// skip if the edge exists and already uses the same spec
|
|
99
|
+
if (edge?.to && depSpec === edge.spec.bareSpec)
|
|
100
|
+
continue;
|
|
101
|
+
// add the dependency to the addDeps map
|
|
102
|
+
const dependency = asDependency({
|
|
103
|
+
spec: Spec.parse(depName, depSpec, options),
|
|
104
|
+
type: shorten(depType, depName, manifest),
|
|
105
|
+
});
|
|
106
|
+
addDeps.set(depName, dependency);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// store in transientAdd if there are any dependencies
|
|
110
|
+
if (addDeps.size > 0) {
|
|
111
|
+
transientAdd.set(node.id, addDeps);
|
|
112
|
+
}
|
|
113
|
+
// store in transientRemove if there are any to remove
|
|
114
|
+
if (removeDeps.size > 0) {
|
|
115
|
+
transientRemove.set(node.id, removeDeps);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
62
119
|
// merges any provided specs to add to the current found results
|
|
63
120
|
for (const [id, addDeps] of add.entries()) {
|
|
64
121
|
const deps = addResult.get(id);
|
|
65
122
|
if (!deps) {
|
|
66
|
-
|
|
123
|
+
// Not an importer - only store file-type deps for later injection
|
|
124
|
+
if (id.startsWith('file')) {
|
|
125
|
+
transientAdd.set(id, addDeps);
|
|
126
|
+
}
|
|
127
|
+
continue;
|
|
67
128
|
}
|
|
68
129
|
for (const [name, dep] of addDeps.entries()) {
|
|
69
130
|
deps.set(name, dep);
|
|
@@ -78,6 +139,18 @@ export const getImporterSpecs = (options) => {
|
|
|
78
139
|
importerRemoveItem.add(depName);
|
|
79
140
|
}
|
|
80
141
|
}
|
|
142
|
+
else if (key.startsWith('file')) {
|
|
143
|
+
// Not an importer - only store file-type deps in transientRemove
|
|
144
|
+
const existing = transientRemove.get(key);
|
|
145
|
+
if (existing) {
|
|
146
|
+
for (const depName of removeSet) {
|
|
147
|
+
existing.add(depName);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
transientRemove.set(key, new Set(removeSet));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
81
154
|
}
|
|
82
155
|
// Removes any references to an importer that no longer has specs
|
|
83
156
|
for (const [key, removeItem] of removeResult) {
|
|
@@ -101,6 +174,8 @@ export const getImporterSpecs = (options) => {
|
|
|
101
174
|
return {
|
|
102
175
|
add: addResult,
|
|
103
176
|
remove: removeResult,
|
|
177
|
+
transientAdd,
|
|
178
|
+
transientRemove,
|
|
104
179
|
};
|
|
105
180
|
};
|
|
106
181
|
//# sourceMappingURL=get-importer-specs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-importer-specs.js","sourceRoot":"","sources":["../../src/ideal/get-importer-specs.ts"],"names":[],"mappings":"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","sourcesContent":["import { longDependencyTypes } from '@vltpkg/types'\nimport { shorten, asDependency } from '../dependencies.ts'\nimport type {\n AddImportersDependenciesMap,\n Dependency,\n RemoveImportersDependenciesMap,\n} from '../dependencies.ts'\nimport { removeSatisfiedSpecs } from './remove-satisfied-specs.ts'\nimport type {\n BuildIdealAddOptions,\n BuildIdealFromGraphOptions,\n BuildIdealRemoveOptions,\n TransientAddMap,\n TransientRemoveMap,\n} from './types.ts'\nimport type { Edge } from '../edge.ts'\nimport type { Node } from '../node.ts'\nimport type { Graph } from '../graph.ts'\nimport type { DepID } from '@vltpkg/dep-id'\nimport { Spec } from '@vltpkg/spec'\nimport type { SpecOptions } from '@vltpkg/spec'\nimport type { PackageJson } from '@vltpkg/package-json'\nimport type { PathScurry } from 'path-scurry'\n\nexport type GetImporterSpecsOptions = BuildIdealAddOptions &\n BuildIdealFromGraphOptions &\n BuildIdealRemoveOptions &\n SpecOptions & {\n scurry: PathScurry\n packageJson: PackageJson\n }\n\nconst hasDepName = (importer: Node, edge: Edge): boolean => {\n for (const depType of longDependencyTypes) {\n const listedDeps = importer.manifest?.[depType]\n if (listedDeps && Object.hasOwn(listedDeps, edge.name))\n return true\n }\n return false\n}\n\nclass AddImportersDependenciesMapImpl\n extends Map\n implements AddImportersDependenciesMap\n{\n modifiedDependencies = false\n}\n\nclass RemoveImportersDependenciesMapImpl\n extends Map\n implements RemoveImportersDependenciesMap\n{\n modifiedDependencies = false\n}\n\n/**\n * Given a {@link Graph} and a list of {@link Dependency}, merges the\n * dependencies info found in the graph importers and returns the add & remove\n * results as a Map in which keys are {@link DepID} of each importer node.\n */\nexport const getImporterSpecs = (\n options: GetImporterSpecsOptions,\n) => {\n const { add, graph, remove } = options\n const addResult: AddImportersDependenciesMap =\n new AddImportersDependenciesMapImpl()\n const removeResult: RemoveImportersDependenciesMap =\n new RemoveImportersDependenciesMapImpl()\n\n // traverse the list of importers in the starting graph\n for (const importer of graph.importers) {\n // uses a Map keying to the spec.name in order to easily make sure there's\n // only a single dependency entry for a given dependency for each importer\n const addDeps = new Map<string, Dependency>()\n const removeDeps = new Set<string>()\n // if an edge from the graph is not listed in the manifest,\n // add that edge to the list of dependencies to be removed\n for (const edge of importer.edgesOut.values()) {\n if (\n !hasDepName(importer, edge) &&\n !add.get(importer.id)?.has(edge.name)\n ) {\n removeDeps.add(edge.name)\n removeResult.modifiedDependencies = true\n }\n }\n // if a dependency is listed in the manifest but not in the graph,\n // add that dependency to the list of dependencies to be added\n for (const depType of longDependencyTypes) {\n const deps = Object.entries(importer.manifest?.[depType] ?? {})\n for (const [depName, depSpec] of deps) {\n const edge = importer.edgesOut.get(depName)\n\n // skip if the edge exists and already uses the same spec\n if (edge?.to && depSpec === edge.spec.bareSpec) continue\n\n const dependency = asDependency({\n spec: Spec.parse(depName, depSpec, options),\n type: shorten(depType, depName, importer.manifest),\n })\n addDeps.set(depName, dependency)\n }\n }\n addResult.set(importer.id, addDeps)\n removeResult.set(importer.id, removeDeps)\n }\n\n // Maps to store dependencies targeting non-importer nodes (e.g., nested folders)\n // These will be injected when the target node is placed in the graph\n const transientAdd = new Map() as TransientAddMap\n const transientRemove = new Map() as TransientRemoveMap\n\n // Traverse all nodes in the graph to find file type dependencies that are directories\n // and populate transientAdd/transientRemove with their manifest dependencies\n // Only process when scurry and packageJson are available\n for (const node of graph.nodes.values()) {\n // Skip importers as they're already handled above and also skip\n // any non-file type dependencies\n if (graph.importers.has(node) || !node.id.startsWith('file'))\n continue\n\n // check if this is a file type dependency that is a directory\n const nodePath = options.scurry.cwd.resolve(node.location)\n const stat = nodePath.lstatSync()\n\n if (stat?.isDirectory()) {\n // load the manifest for this directory (throw if it does not exist)\n const manifest = options.packageJson.read(nodePath.fullpath())\n\n // should always set the manifest to the read manifest\n node.manifest = manifest\n\n // create a map of dependencies from the manifest\n const addDeps = new Map<string, Dependency>()\n\n // check for edges not in manifest (should be removed)\n const removeDeps = new Set<string>()\n for (const edge of node.edgesOut.values()) {\n if (\n !hasDepName(node, edge) &&\n !add.get(node.id)?.has(edge.name)\n ) {\n removeDeps.add(edge.name)\n }\n }\n\n // iterate over manifest dependencies to add them if\n // they're missing from the graph\n for (const depType of longDependencyTypes) {\n const deps = Object.entries(manifest[depType] ?? {})\n for (const [depName, depSpec] of deps) {\n const edge = node.edgesOut.get(depName)\n\n // skip if the edge exists and already uses the same spec\n if (edge?.to && depSpec === edge.spec.bareSpec) continue\n\n // add the dependency to the addDeps map\n const dependency = asDependency({\n spec: Spec.parse(depName, depSpec, options),\n type: shorten(depType, depName, manifest),\n })\n addDeps.set(depName, dependency)\n }\n }\n\n // store in transientAdd if there are any dependencies\n if (addDeps.size > 0) {\n transientAdd.set(node.id, addDeps)\n }\n\n // store in transientRemove if there are any to remove\n if (removeDeps.size > 0) {\n transientRemove.set(node.id, removeDeps)\n }\n }\n }\n\n // merges any provided specs to add to the current found results\n for (const [id, addDeps] of add.entries()) {\n const deps = addResult.get(id)\n if (!deps) {\n // Not an importer - only store file-type deps for later injection\n if (id.startsWith('file')) {\n transientAdd.set(id, addDeps)\n }\n continue\n }\n for (const [name, dep] of addDeps.entries()) {\n deps.set(name, dep)\n }\n }\n\n // Merges results from user-provided `remove` option with any remove\n // results found from comparing the manifest with the loaded graph\n for (const [key, removeSet] of remove) {\n const importerRemoveItem = removeResult.get(key)\n if (importerRemoveItem) {\n for (const depName of removeSet) {\n importerRemoveItem.add(depName)\n }\n } else if (key.startsWith('file')) {\n // Not an importer - only store file-type deps in transientRemove\n const existing = transientRemove.get(key)\n if (existing) {\n for (const depName of removeSet) {\n existing.add(depName)\n }\n } else {\n transientRemove.set(key, new Set(removeSet))\n }\n }\n }\n\n // Removes any references to an importer that no longer has specs\n for (const [key, removeItem] of removeResult) {\n if (removeItem.size === 0) {\n removeResult.delete(key)\n }\n }\n\n // removes already satisfied dependencies from the dependencies list\n removeSatisfiedSpecs({\n add: addResult,\n graph,\n })\n\n // set the modifiedDependencies flag if any\n // of the importers have modified dependencies\n for (const addDeps of addResult.values()) {\n if (addDeps.size > 0) {\n addResult.modifiedDependencies = true\n break\n }\n }\n\n return {\n add: addResult,\n remove: removeResult,\n transientAdd,\n transientRemove,\n }\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Node } from '../node.ts';
|
|
2
|
+
import type { Dependency } from '../dependencies.ts';
|
|
3
|
+
import type { BuildIdealAddOptions, BuildIdealRemoveOptions } from './types.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Computes the ordered list of dependencies for an given node,
|
|
6
|
+
* taking into account additions and removals.
|
|
7
|
+
*/
|
|
8
|
+
export declare const getNodeOrderedDependencies: (fromNode: Node, options?: BuildIdealAddOptions & BuildIdealRemoveOptions) => Dependency[];
|
|
9
|
+
export declare const getOrderedDependencies: (deps: Dependency[]) => Dependency[];
|
|
10
|
+
//# sourceMappingURL=get-ordered-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-ordered-dependencies.d.ts","sourceRoot":"","sources":["../../src/ideal/get-ordered-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAEnB;;;GAGG;AACH,eAAO,MAAM,0BAA0B,aAC3B,IAAI,YACJ,oBAAoB,GAAG,uBAAuB,KACvD,UAAU,EAyBZ,CAAA;AAED,eAAO,MAAM,sBAAsB,SAC3B,UAAU,EAAE,KACjB,UAAU,EAiBZ,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes the ordered list of dependencies for an given node,
|
|
3
|
+
* taking into account additions and removals.
|
|
4
|
+
*/
|
|
5
|
+
export const getNodeOrderedDependencies = (fromNode, options) => {
|
|
6
|
+
// using a map here instead of an array helps us get simpler
|
|
7
|
+
// deduplication while iterating through all the items at hand:
|
|
8
|
+
// existing dependencies in the graph, dependencies to be added, etc.
|
|
9
|
+
const deps = new Map();
|
|
10
|
+
for (const [name, { spec, type }] of fromNode.edgesOut.entries()) {
|
|
11
|
+
deps.set(name, { spec, type });
|
|
12
|
+
}
|
|
13
|
+
// next iterate through the list of dependencies to be added
|
|
14
|
+
const addedDeps = options?.add.get(fromNode.id);
|
|
15
|
+
if (addedDeps) {
|
|
16
|
+
for (const [name, { spec, type }] of addedDeps.entries()) {
|
|
17
|
+
deps.set(name, { spec, type });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
// finally iterate through the list of dependencies to be removed
|
|
21
|
+
const removedDeps = options?.remove.get(fromNode.id);
|
|
22
|
+
if (removedDeps) {
|
|
23
|
+
for (const name of removedDeps) {
|
|
24
|
+
deps.delete(name);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// now turn the map into a sorted array
|
|
28
|
+
return getOrderedDependencies([...deps.values()]);
|
|
29
|
+
};
|
|
30
|
+
export const getOrderedDependencies = (deps) => {
|
|
31
|
+
const orderedDeps = [...deps].sort(({ spec: aSpec, type: aType }, { spec: bSpec, type: bType }) => {
|
|
32
|
+
const aIsPeer = aType === 'peer' || aType === 'peerOptional' ? 1 : 0;
|
|
33
|
+
const bIsPeer = bType === 'peer' || bType === 'peerOptional' ? 1 : 0;
|
|
34
|
+
// regular dependencies first, peer dependencies last
|
|
35
|
+
if (aIsPeer !== bIsPeer) {
|
|
36
|
+
return aIsPeer - bIsPeer;
|
|
37
|
+
}
|
|
38
|
+
return aSpec.name.localeCompare(bSpec.name, 'en');
|
|
39
|
+
});
|
|
40
|
+
return orderedDeps;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=get-ordered-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-ordered-dependencies.js","sourceRoot":"","sources":["../../src/ideal/get-ordered-dependencies.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,QAAc,EACd,OAAwD,EAC1C,EAAE;IAChB,4DAA4D;IAC5D,+DAA+D;IAC/D,qEAAqE;IACrE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAA;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC;IACD,4DAA4D;IAC5D,MAAM,SAAS,GAAG,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/C,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAChC,CAAC;IACH,CAAC;IACD,iEAAiE;IACjE,MAAM,WAAW,GAAG,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACpD,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,OAAO,sBAAsB,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAkB,EACJ,EAAE;IAChB,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAChC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7D,MAAM,OAAO,GACX,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtD,MAAM,OAAO,GACX,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEtD,qDAAqD;QACrD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,OAAO,GAAG,OAAO,CAAA;QAC1B,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC,CACF,CAAA;IACD,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA","sourcesContent":["import type { Node } from '../node.ts'\nimport type { Dependency } from '../dependencies.ts'\nimport type {\n BuildIdealAddOptions,\n BuildIdealRemoveOptions,\n} from './types.ts'\n\n/**\n * Computes the ordered list of dependencies for an given node,\n * taking into account additions and removals.\n */\nexport const getNodeOrderedDependencies = (\n fromNode: Node,\n options?: BuildIdealAddOptions & BuildIdealRemoveOptions,\n): Dependency[] => {\n // using a map here instead of an array helps us get simpler\n // deduplication while iterating through all the items at hand:\n // existing dependencies in the graph, dependencies to be added, etc.\n const deps = new Map<string, Dependency>()\n for (const [name, { spec, type }] of fromNode.edgesOut.entries()) {\n deps.set(name, { spec, type })\n }\n // next iterate through the list of dependencies to be added\n const addedDeps = options?.add.get(fromNode.id)\n if (addedDeps) {\n for (const [name, { spec, type }] of addedDeps.entries()) {\n deps.set(name, { spec, type })\n }\n }\n // finally iterate through the list of dependencies to be removed\n const removedDeps = options?.remove.get(fromNode.id)\n if (removedDeps) {\n for (const name of removedDeps) {\n deps.delete(name)\n }\n }\n\n // now turn the map into a sorted array\n return getOrderedDependencies([...deps.values()])\n}\n\nexport const getOrderedDependencies = (\n deps: Dependency[],\n): Dependency[] => {\n const orderedDeps = [...deps].sort(\n ({ spec: aSpec, type: aType }, { spec: bSpec, type: bType }) => {\n const aIsPeer =\n aType === 'peer' || aType === 'peerOptional' ? 1 : 0\n const bIsPeer =\n bType === 'peer' || bType === 'peerOptional' ? 1 : 0\n\n // regular dependencies first, peer dependencies last\n if (aIsPeer !== bIsPeer) {\n return aIsPeer - bIsPeer\n }\n\n return aSpec.name.localeCompare(bSpec.name, 'en')\n },\n )\n return orderedDeps\n}\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { PeerContext, PeerContextEntry, PeerContextEntryInput, ProcessPlacementResult } from './types.ts';
|
|
2
|
+
import type { Spec, SpecOptions } from '@vltpkg/spec';
|
|
3
|
+
import type { DependencySaveType, Manifest } from '@vltpkg/types';
|
|
4
|
+
import type { Monorepo } from '@vltpkg/workspaces';
|
|
5
|
+
import type { Dependency } from '../dependencies.ts';
|
|
6
|
+
import type { Graph } from '../graph.ts';
|
|
7
|
+
import type { Node } from '../node.ts';
|
|
8
|
+
/**
|
|
9
|
+
* Retrieve a unique hash value for a given peer context set.
|
|
10
|
+
*/
|
|
11
|
+
export declare const retrievePeerContextHash: (peerContext: PeerContext | undefined) => string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if a given spec is compatible with the specs already
|
|
14
|
+
* assigned to a peer context entry.
|
|
15
|
+
*
|
|
16
|
+
* Returns true if compatible, false otherwise.
|
|
17
|
+
*/
|
|
18
|
+
export declare const incompatibleSpecs: (spec: Spec, entry: PeerContextEntry) => boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Sort peer context entry inputs for deterministic processing.
|
|
21
|
+
* Orders: non-peer dependencies first, then peer dependencies, alphabetically by name.
|
|
22
|
+
*/
|
|
23
|
+
export declare const getOrderedPeerContextEntries: (entries: PeerContextEntryInput[]) => PeerContextEntryInput[];
|
|
24
|
+
export declare const checkEntriesToPeerContext: (peerContext: PeerContext, entries: PeerContextEntryInput[]) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Add or update dependencies in a given peer context making sure to check
|
|
27
|
+
* for compatibility with existing dependencies already resolved by a given
|
|
28
|
+
* peer context set. Extra info such as a target or dependent nodes is
|
|
29
|
+
* optional.
|
|
30
|
+
*
|
|
31
|
+
* Returns true if forking is needed, false otherwise.
|
|
32
|
+
*/
|
|
33
|
+
export declare const addEntriesToPeerContext: (peerContext: PeerContext, entries: PeerContextEntryInput[], fromNode: Node, monorepo?: Monorepo) => boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Create and returns a forked copy of a given peer context set.
|
|
36
|
+
*/
|
|
37
|
+
export declare const forkPeerContext: (graph: Graph, peerContext: PeerContext, entries: PeerContextEntryInput[]) => PeerContext;
|
|
38
|
+
/**
|
|
39
|
+
* Starts the peer dependency placement process
|
|
40
|
+
* for a given node being processed and placed.
|
|
41
|
+
*/
|
|
42
|
+
export declare const startPeerPlacement: (peerContext: PeerContext, manifest: Manifest, fromNode: Node, options: SpecOptions) => {
|
|
43
|
+
peerSetHash: string | undefined;
|
|
44
|
+
queuedEntries: PeerContextEntryInput[];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Ends the peer dependency placement process, returning the functions that
|
|
48
|
+
* are going to be used to update the peer context set, forking when needed
|
|
49
|
+
* and resolving peer dependencies if possible.
|
|
50
|
+
*/
|
|
51
|
+
export declare const endPeerPlacement: (peerContext: PeerContext, nextDeps: Dependency[], nextPeerDeps: Map<string, Dependency> & {
|
|
52
|
+
id?: number;
|
|
53
|
+
}, graph: Graph, spec: Spec, fromNode: Node, node: Node, type: DependencySaveType, queuedEntries: PeerContextEntryInput[]) => {
|
|
54
|
+
/**
|
|
55
|
+
* Add the new entries to the current peer context set.
|
|
56
|
+
*/
|
|
57
|
+
putEntries: () => {
|
|
58
|
+
dependent: Node;
|
|
59
|
+
spec: import("@vltpkg/spec/browser").Spec;
|
|
60
|
+
type: DependencySaveType;
|
|
61
|
+
}[] | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Try to resolve peer dependencies using already seen target
|
|
64
|
+
* values from the current peer context set.
|
|
65
|
+
*/
|
|
66
|
+
resolvePeerDeps: () => void;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Given an array of processed results for the current level dependencies
|
|
70
|
+
* being placed in the currently building ideal graph, traverse its direct
|
|
71
|
+
* dependencies and track peer dependencies in their appropriate peer context
|
|
72
|
+
* sets, forking as needed and resolving peer dependencies using suitable
|
|
73
|
+
* nodes already present in the graph if possible.
|
|
74
|
+
*/
|
|
75
|
+
export declare const postPlacementPeerCheck: (graph: Graph, sortedLevelResults: ProcessPlacementResult[]) => void;
|
|
76
|
+
//# sourceMappingURL=peers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peers.d.ts","sourceRoot":"","sources":["../../src/ideal/peers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,eAAO,MAAM,uBAAuB,gBACrB,WAAW,GAAG,SAAS,KACnC,MAAM,GAAG,SAKX,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,SACtB,IAAI,SACH,gBAAgB,KACtB,OAkBF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,YAC9B,qBAAqB,EAAE,KAC/B,qBAAqB,EAUpB,CAAA;AAQJ,eAAO,MAAM,yBAAyB,gBACvB,WAAW,WACf,qBAAqB,EAAE,KAC/B,OAgBF,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,gBACrB,WAAW,WACf,qBAAqB,EAAE,YACtB,IAAI,aACH,QAAQ,KAClB,OAsEF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,UACnB,KAAK,eACC,WAAW,WACf,qBAAqB,EAAE,KAC/B,WAqCF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gBAChB,WAAW,YACd,QAAQ,YACR,IAAI,WACL,WAAW;;;CA4CrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gBACd,WAAW,YACd,UAAU,EAAE,gBACR,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,SAChD,KAAK,QACN,IAAI,YACA,IAAI,QACR,IAAI,QACJ,kBAAkB,iBACT,qBAAqB,EAAE;IAEtC;;OAEG;;;;;;IA2CH;;;OAGG;;CAsCH,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,UAC1B,KAAK,sBACQ,sBAAsB,EAAE,SAiE7C,CAAA"}
|