@cdxgen/cdxgen 0.0.1 → 13.0.1
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 +921 -87
- package/bin/audit.js +239 -0
- package/bin/cdxgen.js +2335 -0
- package/bin/convert.js +220 -0
- package/bin/evinse.js +353 -0
- package/bin/hbom.js +504 -0
- package/bin/repl.js +2224 -0
- package/bin/sign.js +195 -0
- package/bin/tracebom.js +303 -0
- package/bin/validate.js +268 -0
- package/bin/verify.js +189 -0
- package/data/README.md +307 -0
- package/data/bom-1.4.schema.json +1605 -0
- package/data/bom-1.5.schema.json +3660 -0
- package/data/bom-1.6.schema.json +5511 -0
- package/data/bom-1.7.schema.json +6700 -0
- package/data/cbomosdb-queries.json +68 -0
- package/data/component-tags.json +339 -0
- package/data/container-knowledge-index.json +125 -0
- package/data/cosdb-queries.json +17 -0
- package/data/crypto-oid.json +1998 -0
- package/data/cryptography-defs.json +3793 -0
- package/data/cryptography-defs.schema.json +576 -0
- package/data/cyclonedx-2.0-bundled.schema.json +7182 -0
- package/data/frameworks-list.json +219 -0
- package/data/glibc-stdlib.json +117 -0
- package/data/gtfobins-index.json +6296 -0
- package/data/helpers/init.gradle +71 -0
- package/data/jsf-0.82.schema.json +211 -0
- package/data/known-licenses.json +82 -0
- package/data/lic-mapping.json +338 -0
- package/data/license-aliases.json +6624 -0
- package/data/license-db.json +39059 -0
- package/data/license-deprecations.json +302 -0
- package/data/lolbas-index.json +150 -0
- package/data/predictive-audit-allowlist.json +11 -0
- package/data/pypi-pkg-aliases.json +1199 -0
- package/data/python-stdlib.json +308 -0
- package/data/queries-darwin.json +193 -0
- package/data/queries-win.json +257 -0
- package/data/queries.json +268 -0
- package/data/ruby-known-modules.json +281 -0
- package/data/rules/ai-agent-governance.yaml +323 -0
- package/data/rules/ai-bom.yaml +268 -0
- package/data/rules/ai-oversight.yaml +186 -0
- package/data/rules/ai-provenance.yaml +92 -0
- package/data/rules/asar-archives.yaml +150 -0
- package/data/rules/cbom-security.yaml +165 -0
- package/data/rules/chrome-extensions.yaml +248 -0
- package/data/rules/ci-permissions.yaml +802 -0
- package/data/rules/container-risk.yaml +353 -0
- package/data/rules/dependency-sources.yaml +236 -0
- package/data/rules/golem-go.yaml +229 -0
- package/data/rules/hbom-compliance.yaml +325 -0
- package/data/rules/hbom-performance.yaml +307 -0
- package/data/rules/hbom-security.yaml +248 -0
- package/data/rules/host-topology.yaml +165 -0
- package/data/rules/mcp-servers.yaml +388 -0
- package/data/rules/obom-runtime.yaml +1776 -0
- package/data/rules/package-integrity.yaml +364 -0
- package/data/rules/rootfs-hardening.yaml +179 -0
- package/data/rules/vscode-extensions.yaml +237 -0
- package/data/spdx-export.schema.json +6794 -0
- package/data/spdx-license-list.json +7449 -0
- package/data/spdx-licenses.json +759 -0
- package/data/spdx.schema.json +819 -0
- package/data/templates/README.md +3 -0
- package/data/templates/asvs-4.0.3.cdx.json +2943 -0
- package/data/templates/asvs-5.0.cdx.json +3046 -0
- package/data/templates/bsimm-v13.cdx.json +1008 -0
- package/data/templates/masvs-2.0.0.cdx.json +225 -0
- package/data/templates/nist-ssdf-1.1.cdx.json +828 -0
- package/data/templates/pcissc-secure-slc-1.1.cdx.json +1027 -0
- package/data/templates/scvs-1.0.0.cdx.json +813 -0
- package/data/templates/ssaf-DRAFT-2023-11.cdx.json +127 -0
- package/data/vendor-alias.json +41967 -0
- package/data/wrapdb-releases.json +4227 -0
- package/index.cjs +15 -0
- package/lib/audit/index.js +2800 -0
- package/lib/audit/progress.js +114 -0
- package/lib/audit/reporters.js +937 -0
- package/lib/audit/scoring.js +560 -0
- package/lib/audit/targets.js +798 -0
- package/lib/cli/bomAssembly.js +1882 -0
- package/lib/cli/cliOptions.js +543 -0
- package/lib/cli/index.js +2759 -0
- package/lib/cli/jsBom.js +2087 -0
- package/lib/cli/jvmBom.js +1858 -0
- package/lib/cli/managedBom.js +2083 -0
- package/lib/cli/nativeBom.js +2125 -0
- package/lib/core/activity.js +1087 -0
- package/lib/core/env.js +719 -0
- package/lib/core/fs.js +1058 -0
- package/lib/core/httpClient.js +730 -0
- package/lib/core/logger.js +280 -0
- package/lib/core/parallel.js +323 -0
- package/lib/core/paths.js +70 -0
- package/lib/core/projectConfig.js +122 -0
- package/lib/core/propertySanitizer.js +174 -0
- package/lib/core/spdx.js +5 -0
- package/lib/core/state.js +59 -0
- package/lib/core/text.js +207 -0
- package/lib/core/ui.js +920 -0
- package/lib/core/urls.js +84 -0
- package/lib/ecosystems/asarutils.js +1636 -0
- package/lib/ecosystems/bunutils.js +402 -0
- package/lib/ecosystems/caxa.js +77 -0
- package/lib/ecosystems/chromextutils.js +1174 -0
- package/lib/ecosystems/cmakeResolver.js +587 -0
- package/lib/ecosystems/cppEvidence.js +305 -0
- package/lib/ecosystems/denoutils.js +1094 -0
- package/lib/ecosystems/dotnetutils.js +132 -0
- package/lib/ecosystems/ecosystems.js +2772 -0
- package/lib/ecosystems/golem.js +1807 -0
- package/lib/ecosystems/gradleutils.js +1048 -0
- package/lib/ecosystems/jsEvidence.js +317 -0
- package/lib/ecosystems/npmutils.js +586 -0
- package/lib/ecosystems/parsers-bazel.js +875 -0
- package/lib/ecosystems/parsers-dotnet.js +1430 -0
- package/lib/ecosystems/parsers-gleam.js +302 -0
- package/lib/ecosystems/parsers-go.js +818 -0
- package/lib/ecosystems/parsers-js.js +4222 -0
- package/lib/ecosystems/parsers-jvm.js +948 -0
- package/lib/ecosystems/parsers-misc.js +3191 -0
- package/lib/ecosystems/parsers-python.js +2070 -0
- package/lib/ecosystems/parsers-rust.js +1294 -0
- package/lib/ecosystems/parsers-zig.js +861 -0
- package/lib/ecosystems/pep770.js +341 -0
- package/lib/ecosystems/pylockutils.js +427 -0
- package/lib/ecosystems/pythonutils.js +1281 -0
- package/lib/ecosystems/registryProvenance.js +1003 -0
- package/lib/ecosystems/remote/huggingface.js +1343 -0
- package/lib/ecosystems/rubyutils.js +1629 -0
- package/lib/ecosystems/rusi.js +820 -0
- package/lib/ecosystems/sbtutils.js +972 -0
- package/lib/ecosystems/tea.js +607 -0
- package/lib/ecosystems/utils.js +583 -0
- package/lib/ecosystems/zigResolver.js +410 -0
- package/lib/evinser/db.js +145 -0
- package/lib/evinser/evinser.js +2362 -0
- package/lib/evinser/scalasem.js +65 -0
- package/lib/evinser/swiftsem.js +767 -0
- package/lib/helpers/annotationFormatter.js +84 -0
- package/lib/helpers/bomSigner.js +312 -0
- package/lib/helpers/exportUtils.js +160 -0
- package/lib/helpers/remote/dependency-track.js +117 -0
- package/lib/helpers/versutils.js +202 -0
- package/lib/helpers/vsixutils.js +1069 -0
- package/lib/inventory/agentFormulationParser.js +322 -0
- package/lib/inventory/aiCollector.js +2140 -0
- package/lib/inventory/aiInventory.js +414 -0
- package/lib/inventory/aiModelVariants.js +121 -0
- package/lib/inventory/aiOversightCollector.js +661 -0
- package/lib/inventory/aiProvenanceCollector.js +822 -0
- package/lib/inventory/analyzer.js +6089 -0
- package/lib/inventory/analyzerScope.js +807 -0
- package/lib/inventory/astWorker.js +20 -0
- package/lib/inventory/atomUtils.js +1092 -0
- package/lib/inventory/auditCategories.js +192 -0
- package/lib/inventory/bomUtils.js +369 -0
- package/lib/inventory/cacheCommands.js +182 -0
- package/lib/inventory/cacheDir.js +104 -0
- package/lib/inventory/cbomutils.js +590 -0
- package/lib/inventory/cdxrs.js +434 -0
- package/lib/inventory/ciParsers/azurePipelines.js +295 -0
- package/lib/inventory/ciParsers/circleCi.js +286 -0
- package/lib/inventory/ciParsers/common.js +24 -0
- package/lib/inventory/ciParsers/githubActions.js +2434 -0
- package/lib/inventory/ciParsers/gitlabCi.js +213 -0
- package/lib/inventory/ciParsers/jenkins.js +180 -0
- package/lib/inventory/citations.js +234 -0
- package/lib/inventory/communityAiConfigParser.js +756 -0
- package/lib/inventory/containerRisk.js +204 -0
- package/lib/inventory/cryptoAlgorithmFamily.js +258 -0
- package/lib/inventory/deps.js +807 -0
- package/lib/inventory/depsUtils.js +588 -0
- package/lib/inventory/display.js +2128 -0
- package/lib/inventory/dosai.js +601 -0
- package/lib/inventory/dosaiParsers.js +154 -0
- package/lib/inventory/dynamic.js +145 -0
- package/lib/inventory/envcontext.js +1793 -0
- package/lib/inventory/evidenceUtils.js +774 -0
- package/lib/inventory/fetchBatch.js +779 -0
- package/lib/inventory/fetchRate.js +255 -0
- package/lib/inventory/forgeEnricher.js +300 -0
- package/lib/inventory/formulationParsers.js +422 -0
- package/lib/inventory/gtfobins.js +339 -0
- package/lib/inventory/hbom.js +719 -0
- package/lib/inventory/hbomAnalysis.js +310 -0
- package/lib/inventory/hbomLoader.js +35 -0
- package/lib/inventory/hostTopology.js +835 -0
- package/lib/inventory/inventoryStats.js +100 -0
- package/lib/inventory/jsonLike.js +121 -0
- package/lib/inventory/licenseEnhancer.js +918 -0
- package/lib/inventory/lolbas.js +285 -0
- package/lib/inventory/mcp.js +253 -0
- package/lib/inventory/mcpConfigParser.js +683 -0
- package/lib/inventory/mcpDiscovery.js +112 -0
- package/lib/inventory/mcpPinning.js +209 -0
- package/lib/inventory/osPackageResolver.js +493 -0
- package/lib/inventory/osinfo.js +383 -0
- package/lib/inventory/osqueryTransform.js +274 -0
- package/lib/inventory/plugins.js +466 -0
- package/lib/inventory/protobom.js +231 -0
- package/lib/inventory/protobomLoader.js +43 -0
- package/lib/inventory/provenanceUtils.js +224 -0
- package/lib/inventory/purl.js +749 -0
- package/lib/inventory/rustFormulationParser.js +339 -0
- package/lib/inventory/sbomDocument.js +340 -0
- package/lib/inventory/source.js +1488 -0
- package/lib/inventory/spdx.js +361 -0
- package/lib/inventory/spdxExpression.js +512 -0
- package/lib/inventory/spdxUtils.js +107 -0
- package/lib/inventory/table.js +267 -0
- package/lib/inventory/traceRunner.js +439 -0
- package/lib/inventory/unicodeScan.js +147 -0
- package/lib/managers/binary.js +3459 -0
- package/lib/managers/containerutils.js +125 -0
- package/lib/managers/docker.js +2145 -0
- package/lib/managers/dockerConnection.js +162 -0
- package/lib/managers/oci.js +704 -0
- package/lib/managers/piptree.js +267 -0
- package/lib/parsers/cmakeCache.js +199 -0
- package/lib/parsers/gguf.js +492 -0
- package/lib/parsers/gitAiNotes.js +233 -0
- package/lib/parsers/gitmodules.js +239 -0
- package/lib/parsers/htmlExtract.js +610 -0
- package/lib/parsers/huggingfaceManifest.js +551 -0
- package/lib/parsers/huggingfaceUtils.js +506 -0
- package/lib/parsers/iri.js +618 -0
- package/lib/parsers/npmrc.js +99 -0
- package/lib/parsers/ollama.js +101 -0
- package/lib/parsers/xml.js +841 -0
- package/lib/server/openapi.yaml +433 -0
- package/lib/server/server.js +616 -0
- package/lib/stages/postgen/annotator.js +977 -0
- package/lib/stages/postgen/auditBom.js +468 -0
- package/lib/stages/postgen/postgen.js +1239 -0
- package/lib/stages/postgen/ruleEngine.js +731 -0
- package/lib/stages/postgen/sortBom.js +195 -0
- package/lib/stages/postgen/spdxConverter.js +796 -0
- package/lib/stages/postgen/specVersionCompat.js +703 -0
- package/lib/stages/pregen/envAudit.js +388 -0
- package/lib/stages/pregen/pregen.js +637 -0
- package/lib/third-party/README.md +9 -0
- package/lib/third-party/arborist/CHANGELOG.md +1109 -0
- package/lib/third-party/arborist/LICENSE.md +20 -0
- package/lib/third-party/arborist/README.md +315 -0
- package/lib/third-party/arborist/lib/arborist/index.js +258 -0
- package/lib/third-party/arborist/lib/arborist/load-actual.js +605 -0
- package/lib/third-party/arborist/lib/arborist/load-virtual.js +300 -0
- package/lib/third-party/arborist/lib/bin-links.js +120 -0
- package/lib/third-party/arborist/lib/calc-dep-flags.js +130 -0
- package/lib/third-party/arborist/lib/case-insensitive-map.js +51 -0
- package/lib/third-party/arborist/lib/consistent-resolve.js +42 -0
- package/lib/third-party/arborist/lib/debug.js +50 -0
- package/lib/third-party/arborist/lib/dep-valid.js +190 -0
- package/lib/third-party/arborist/lib/edge.js +417 -0
- package/lib/third-party/arborist/lib/from-path.js +36 -0
- package/lib/third-party/arborist/lib/gather-dep-set.js +43 -0
- package/lib/third-party/arborist/lib/index.js +22 -0
- package/lib/third-party/arborist/lib/inventory.js +138 -0
- package/lib/third-party/arborist/lib/link.js +169 -0
- package/lib/third-party/arborist/lib/node.js +1673 -0
- package/lib/third-party/arborist/lib/npm-extension.js +45 -0
- package/lib/third-party/arborist/lib/override-resolves.js +11 -0
- package/lib/third-party/arborist/lib/override-set.js +319 -0
- package/lib/third-party/arborist/lib/package-extensions.js +289 -0
- package/lib/third-party/arborist/lib/printable.js +210 -0
- package/lib/third-party/arborist/lib/proc-log.js +30 -0
- package/lib/third-party/arborist/lib/realpath.js +100 -0
- package/lib/third-party/arborist/lib/relpath.js +4 -0
- package/lib/third-party/arborist/lib/shrinkwrap.js +1291 -0
- package/lib/third-party/arborist/lib/spec-from-lock.js +34 -0
- package/lib/third-party/arborist/lib/tree-check.js +165 -0
- package/lib/third-party/arborist/lib/validate-npm-package-name.js +107 -0
- package/lib/third-party/arborist/lib/version-from-tgz.js +51 -0
- package/lib/third-party/arborist/lib/yarn-lock.js +397 -0
- package/lib/validator/bomValidator.js +985 -0
- package/lib/validator/complianceEngine.js +241 -0
- package/lib/validator/complianceRules.js +1680 -0
- package/lib/validator/generated/runtime.mjs +17 -0
- package/lib/validator/generated/validate-1.6.mjs +21258 -0
- package/lib/validator/generated/validate-1.7.mjs +24803 -0
- package/lib/validator/generated/validate-2.0.mjs +22931 -0
- package/lib/validator/index.js +246 -0
- package/lib/validator/reporters/annotations.js +142 -0
- package/lib/validator/reporters/console.js +160 -0
- package/lib/validator/reporters/index.js +41 -0
- package/lib/validator/reporters/json.js +37 -0
- package/lib/validator/reporters/sarif.js +184 -0
- package/package.json +209 -26
- package/types/bin/audit.d.ts +3 -0
- package/types/bin/audit.d.ts.map +1 -0
- package/types/bin/cdxgen.d.ts +3 -0
- package/types/bin/cdxgen.d.ts.map +1 -0
- package/types/bin/convert.d.ts +3 -0
- package/types/bin/convert.d.ts.map +1 -0
- package/types/bin/evinse.d.ts +3 -0
- package/types/bin/evinse.d.ts.map +1 -0
- package/types/bin/hbom.d.ts +3 -0
- package/types/bin/hbom.d.ts.map +1 -0
- package/types/bin/repl.d.ts +3 -0
- package/types/bin/repl.d.ts.map +1 -0
- package/types/bin/sign.d.ts +3 -0
- package/types/bin/sign.d.ts.map +1 -0
- package/types/bin/tracebom.d.ts +3 -0
- package/types/bin/tracebom.d.ts.map +1 -0
- package/types/bin/validate.d.ts +14 -0
- package/types/bin/validate.d.ts.map +1 -0
- package/types/bin/verify.d.ts +3 -0
- package/types/bin/verify.d.ts.map +1 -0
- package/types/lib/audit/index.d.ts +153 -0
- package/types/lib/audit/index.d.ts.map +1 -0
- package/types/lib/audit/progress.d.ts +31 -0
- package/types/lib/audit/progress.d.ts.map +1 -0
- package/types/lib/audit/reporters.d.ts +62 -0
- package/types/lib/audit/reporters.d.ts.map +1 -0
- package/types/lib/audit/scoring.d.ts +36 -0
- package/types/lib/audit/scoring.d.ts.map +1 -0
- package/types/lib/audit/targets.d.ts +77 -0
- package/types/lib/audit/targets.d.ts.map +1 -0
- package/types/lib/cli/bomAssembly.d.ts +329 -0
- package/types/lib/cli/bomAssembly.d.ts.map +1 -0
- package/types/lib/cli/cliOptions.d.ts +156 -0
- package/types/lib/cli/cliOptions.d.ts.map +1 -0
- package/types/lib/cli/index.d.ts +107 -0
- package/types/lib/cli/index.d.ts.map +1 -0
- package/types/lib/cli/jsBom.d.ts +94 -0
- package/types/lib/cli/jsBom.d.ts.map +1 -0
- package/types/lib/cli/jvmBom.d.ts +54 -0
- package/types/lib/cli/jvmBom.d.ts.map +1 -0
- package/types/lib/cli/managedBom.d.ts +105 -0
- package/types/lib/cli/managedBom.d.ts.map +1 -0
- package/types/lib/cli/nativeBom.d.ts +143 -0
- package/types/lib/cli/nativeBom.d.ts.map +1 -0
- package/types/lib/core/activity.d.ts +178 -0
- package/types/lib/core/activity.d.ts.map +1 -0
- package/types/lib/core/env.d.ts +192 -0
- package/types/lib/core/env.d.ts.map +1 -0
- package/types/lib/core/fs.d.ts +158 -0
- package/types/lib/core/fs.d.ts.map +1 -0
- package/types/lib/core/httpClient.d.ts +149 -0
- package/types/lib/core/httpClient.d.ts.map +1 -0
- package/types/lib/core/logger.d.ts +50 -0
- package/types/lib/core/logger.d.ts.map +1 -0
- package/types/lib/core/parallel.d.ts +95 -0
- package/types/lib/core/parallel.d.ts.map +1 -0
- package/types/lib/core/paths.d.ts +36 -0
- package/types/lib/core/paths.d.ts.map +1 -0
- package/types/lib/core/projectConfig.d.ts +23 -0
- package/types/lib/core/projectConfig.d.ts.map +1 -0
- package/types/lib/core/propertySanitizer.d.ts +23 -0
- package/types/lib/core/propertySanitizer.d.ts.map +1 -0
- package/types/lib/core/spdx.d.ts +5 -0
- package/types/lib/core/spdx.d.ts.map +1 -0
- package/types/lib/core/state.d.ts +20 -0
- package/types/lib/core/state.d.ts.map +1 -0
- package/types/lib/core/text.d.ts +78 -0
- package/types/lib/core/text.d.ts.map +1 -0
- package/types/lib/core/ui.d.ts +87 -0
- package/types/lib/core/ui.d.ts.map +1 -0
- package/types/lib/core/urls.d.ts +43 -0
- package/types/lib/core/urls.d.ts.map +1 -0
- package/types/lib/ecosystems/asarutils.d.ts +71 -0
- package/types/lib/ecosystems/asarutils.d.ts.map +1 -0
- package/types/lib/ecosystems/bunutils.d.ts +38 -0
- package/types/lib/ecosystems/bunutils.d.ts.map +1 -0
- package/types/lib/ecosystems/caxa.d.ts +8 -0
- package/types/lib/ecosystems/caxa.d.ts.map +1 -0
- package/types/lib/ecosystems/chromextutils.d.ts +97 -0
- package/types/lib/ecosystems/chromextutils.d.ts.map +1 -0
- package/types/lib/ecosystems/cmakeResolver.d.ts +176 -0
- package/types/lib/ecosystems/cmakeResolver.d.ts.map +1 -0
- package/types/lib/ecosystems/cppEvidence.d.ts +35 -0
- package/types/lib/ecosystems/cppEvidence.d.ts.map +1 -0
- package/types/lib/ecosystems/denoutils.d.ts +76 -0
- package/types/lib/ecosystems/denoutils.d.ts.map +1 -0
- package/types/lib/ecosystems/dotnetutils.d.ts +45 -0
- package/types/lib/ecosystems/dotnetutils.d.ts.map +1 -0
- package/types/lib/ecosystems/ecosystems.d.ts +279 -0
- package/types/lib/ecosystems/ecosystems.d.ts.map +1 -0
- package/types/lib/ecosystems/golem.d.ts +60 -0
- package/types/lib/ecosystems/golem.d.ts.map +1 -0
- package/types/lib/ecosystems/gradleutils.d.ts +139 -0
- package/types/lib/ecosystems/gradleutils.d.ts.map +1 -0
- package/types/lib/ecosystems/jsEvidence.d.ts +17 -0
- package/types/lib/ecosystems/jsEvidence.d.ts.map +1 -0
- package/types/lib/ecosystems/npmutils.d.ts +183 -0
- package/types/lib/ecosystems/npmutils.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts +36 -0
- package/types/lib/ecosystems/parsers-bazel.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-dotnet.d.ts +116 -0
- package/types/lib/ecosystems/parsers-dotnet.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-gleam.d.ts +33 -0
- package/types/lib/ecosystems/parsers-gleam.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-go.d.ts +92 -0
- package/types/lib/ecosystems/parsers-go.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-js.d.ts +242 -0
- package/types/lib/ecosystems/parsers-js.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-jvm.d.ts +100 -0
- package/types/lib/ecosystems/parsers-jvm.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-misc.d.ts +450 -0
- package/types/lib/ecosystems/parsers-misc.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-python.d.ts +145 -0
- package/types/lib/ecosystems/parsers-python.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-rust.d.ts +56 -0
- package/types/lib/ecosystems/parsers-rust.d.ts.map +1 -0
- package/types/lib/ecosystems/parsers-zig.d.ts +83 -0
- package/types/lib/ecosystems/parsers-zig.d.ts.map +1 -0
- package/types/lib/ecosystems/pep770.d.ts +38 -0
- package/types/lib/ecosystems/pep770.d.ts.map +1 -0
- package/types/lib/ecosystems/pylockutils.d.ts +68 -0
- package/types/lib/ecosystems/pylockutils.d.ts.map +1 -0
- package/types/lib/ecosystems/pythonutils.d.ts +70 -0
- package/types/lib/ecosystems/pythonutils.d.ts.map +1 -0
- package/types/lib/ecosystems/registryProvenance.d.ts +26 -0
- package/types/lib/ecosystems/registryProvenance.d.ts.map +1 -0
- package/types/lib/ecosystems/remote/huggingface.d.ts +31 -0
- package/types/lib/ecosystems/remote/huggingface.d.ts.map +1 -0
- package/types/lib/ecosystems/rubyutils.d.ts +182 -0
- package/types/lib/ecosystems/rubyutils.d.ts.map +1 -0
- package/types/lib/ecosystems/rusi.d.ts +40 -0
- package/types/lib/ecosystems/rusi.d.ts.map +1 -0
- package/types/lib/ecosystems/sbtutils.d.ts +179 -0
- package/types/lib/ecosystems/sbtutils.d.ts.map +1 -0
- package/types/lib/ecosystems/tea.d.ts +180 -0
- package/types/lib/ecosystems/tea.d.ts.map +1 -0
- package/types/lib/ecosystems/utils.d.ts +41 -0
- package/types/lib/ecosystems/utils.d.ts.map +1 -0
- package/types/lib/ecosystems/zigResolver.d.ts +70 -0
- package/types/lib/ecosystems/zigResolver.d.ts.map +1 -0
- package/types/lib/evinser/db.d.ts +17 -0
- package/types/lib/evinser/db.d.ts.map +1 -0
- package/types/lib/evinser/evinser.d.ts +354 -0
- package/types/lib/evinser/evinser.d.ts.map +1 -0
- package/types/lib/evinser/scalasem.d.ts +15 -0
- package/types/lib/evinser/scalasem.d.ts.map +1 -0
- package/types/lib/evinser/swiftsem.d.ts +103 -0
- package/types/lib/evinser/swiftsem.d.ts.map +1 -0
- package/types/lib/helpers/annotationFormatter.d.ts +23 -0
- package/types/lib/helpers/annotationFormatter.d.ts.map +1 -0
- package/types/lib/helpers/bomSigner.d.ts +28 -0
- package/types/lib/helpers/bomSigner.d.ts.map +1 -0
- package/types/lib/helpers/exportUtils.d.ts +52 -0
- package/types/lib/helpers/exportUtils.d.ts.map +1 -0
- package/types/lib/helpers/remote/dependency-track.d.ts +23 -0
- package/types/lib/helpers/remote/dependency-track.d.ts.map +1 -0
- package/types/lib/helpers/versutils.d.ts +8 -0
- package/types/lib/helpers/versutils.d.ts.map +1 -0
- package/types/lib/helpers/vsixutils.d.ts +130 -0
- package/types/lib/helpers/vsixutils.d.ts.map +1 -0
- package/types/lib/inventory/agentFormulationParser.d.ts +21 -0
- package/types/lib/inventory/agentFormulationParser.d.ts.map +1 -0
- package/types/lib/inventory/aiCollector.d.ts +61 -0
- package/types/lib/inventory/aiCollector.d.ts.map +1 -0
- package/types/lib/inventory/aiInventory.d.ts +103 -0
- package/types/lib/inventory/aiInventory.d.ts.map +1 -0
- package/types/lib/inventory/aiModelVariants.d.ts +31 -0
- package/types/lib/inventory/aiModelVariants.d.ts.map +1 -0
- package/types/lib/inventory/aiOversightCollector.d.ts +28 -0
- package/types/lib/inventory/aiOversightCollector.d.ts.map +1 -0
- package/types/lib/inventory/aiProvenanceCollector.d.ts +13 -0
- package/types/lib/inventory/aiProvenanceCollector.d.ts.map +1 -0
- package/types/lib/inventory/analyzer.d.ts +157 -0
- package/types/lib/inventory/analyzer.d.ts.map +1 -0
- package/types/lib/inventory/analyzerScope.d.ts +106 -0
- package/types/lib/inventory/analyzerScope.d.ts.map +1 -0
- package/types/lib/inventory/astWorker.d.ts +9 -0
- package/types/lib/inventory/astWorker.d.ts.map +1 -0
- package/types/lib/inventory/atomUtils.d.ts +159 -0
- package/types/lib/inventory/atomUtils.d.ts.map +1 -0
- package/types/lib/inventory/auditCategories.d.ts +80 -0
- package/types/lib/inventory/auditCategories.d.ts.map +1 -0
- package/types/lib/inventory/bomUtils.d.ts +145 -0
- package/types/lib/inventory/bomUtils.d.ts.map +1 -0
- package/types/lib/inventory/cacheCommands.d.ts +28 -0
- package/types/lib/inventory/cacheCommands.d.ts.map +1 -0
- package/types/lib/inventory/cacheDir.d.ts +55 -0
- package/types/lib/inventory/cacheDir.d.ts.map +1 -0
- package/types/lib/inventory/cbomutils.d.ts +37 -0
- package/types/lib/inventory/cbomutils.d.ts.map +1 -0
- package/types/lib/inventory/cdxrs.d.ts +90 -0
- package/types/lib/inventory/cdxrs.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/azurePipelines.d.ts +27 -0
- package/types/lib/inventory/ciParsers/azurePipelines.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/circleCi.d.ts +27 -0
- package/types/lib/inventory/ciParsers/circleCi.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/common.d.ts +11 -0
- package/types/lib/inventory/ciParsers/common.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/githubActions.d.ts +38 -0
- package/types/lib/inventory/ciParsers/githubActions.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/gitlabCi.d.ts +26 -0
- package/types/lib/inventory/ciParsers/gitlabCi.d.ts.map +1 -0
- package/types/lib/inventory/ciParsers/jenkins.d.ts +26 -0
- package/types/lib/inventory/ciParsers/jenkins.d.ts.map +1 -0
- package/types/lib/inventory/citations.d.ts +90 -0
- package/types/lib/inventory/citations.d.ts.map +1 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts +14 -0
- package/types/lib/inventory/communityAiConfigParser.d.ts.map +1 -0
- package/types/lib/inventory/containerRisk.d.ts +20 -0
- package/types/lib/inventory/containerRisk.d.ts.map +1 -0
- package/types/lib/inventory/cryptoAlgorithmFamily.d.ts +37 -0
- package/types/lib/inventory/cryptoAlgorithmFamily.d.ts.map +1 -0
- package/types/lib/inventory/deps.d.ts +140 -0
- package/types/lib/inventory/deps.d.ts.map +1 -0
- package/types/lib/inventory/depsUtils.d.ts +74 -0
- package/types/lib/inventory/depsUtils.d.ts.map +1 -0
- package/types/lib/inventory/display.d.ts +227 -0
- package/types/lib/inventory/display.d.ts.map +1 -0
- package/types/lib/inventory/dosai.d.ts +130 -0
- package/types/lib/inventory/dosai.d.ts.map +1 -0
- package/types/lib/inventory/dosaiParsers.d.ts +59 -0
- package/types/lib/inventory/dosaiParsers.d.ts.map +1 -0
- package/types/lib/inventory/dynamic.d.ts +25 -0
- package/types/lib/inventory/dynamic.d.ts.map +1 -0
- package/types/lib/inventory/envcontext.d.ts +377 -0
- package/types/lib/inventory/envcontext.d.ts.map +1 -0
- package/types/lib/inventory/evidenceUtils.d.ts +74 -0
- package/types/lib/inventory/evidenceUtils.d.ts.map +1 -0
- package/types/lib/inventory/fetchBatch.d.ts +127 -0
- package/types/lib/inventory/fetchBatch.d.ts.map +1 -0
- package/types/lib/inventory/fetchRate.d.ts +118 -0
- package/types/lib/inventory/fetchRate.d.ts.map +1 -0
- package/types/lib/inventory/forgeEnricher.d.ts +31 -0
- package/types/lib/inventory/forgeEnricher.d.ts.map +1 -0
- package/types/lib/inventory/formulationParsers.d.ts +50 -0
- package/types/lib/inventory/formulationParsers.d.ts.map +1 -0
- package/types/lib/inventory/gtfobins.d.ts +27 -0
- package/types/lib/inventory/gtfobins.d.ts.map +1 -0
- package/types/lib/inventory/hbom.d.ts +58 -0
- package/types/lib/inventory/hbom.d.ts.map +1 -0
- package/types/lib/inventory/hbomAnalysis.d.ts +56 -0
- package/types/lib/inventory/hbomAnalysis.d.ts.map +1 -0
- package/types/lib/inventory/hbomLoader.d.ts +7 -0
- package/types/lib/inventory/hbomLoader.d.ts.map +1 -0
- package/types/lib/inventory/hostTopology.d.ts +47 -0
- package/types/lib/inventory/hostTopology.d.ts.map +1 -0
- package/types/lib/inventory/inventoryStats.d.ts +42 -0
- package/types/lib/inventory/inventoryStats.d.ts.map +1 -0
- package/types/lib/inventory/jsonLike.d.ts +23 -0
- package/types/lib/inventory/jsonLike.d.ts.map +1 -0
- package/types/lib/inventory/licenseEnhancer.d.ts +70 -0
- package/types/lib/inventory/licenseEnhancer.d.ts.map +1 -0
- package/types/lib/inventory/lolbas.d.ts +16 -0
- package/types/lib/inventory/lolbas.d.ts.map +1 -0
- package/types/lib/inventory/mcp.d.ts +29 -0
- package/types/lib/inventory/mcp.d.ts.map +1 -0
- package/types/lib/inventory/mcpConfigParser.d.ts +20 -0
- package/types/lib/inventory/mcpConfigParser.d.ts.map +1 -0
- package/types/lib/inventory/mcpDiscovery.d.ts +33 -0
- package/types/lib/inventory/mcpDiscovery.d.ts.map +1 -0
- package/types/lib/inventory/mcpPinning.d.ts +11 -0
- package/types/lib/inventory/mcpPinning.d.ts.map +1 -0
- package/types/lib/inventory/osPackageResolver.d.ts +49 -0
- package/types/lib/inventory/osPackageResolver.d.ts.map +1 -0
- package/types/lib/inventory/osinfo.d.ts +201 -0
- package/types/lib/inventory/osinfo.d.ts.map +1 -0
- package/types/lib/inventory/osqueryTransform.d.ts +84 -0
- package/types/lib/inventory/osqueryTransform.d.ts.map +1 -0
- package/types/lib/inventory/plugins.d.ts +58 -0
- package/types/lib/inventory/plugins.d.ts.map +1 -0
- package/types/lib/inventory/protobom.d.ts +71 -0
- package/types/lib/inventory/protobom.d.ts.map +1 -0
- package/types/lib/inventory/protobomLoader.d.ts +17 -0
- package/types/lib/inventory/protobomLoader.d.ts.map +1 -0
- package/types/lib/inventory/provenanceUtils.d.ts +98 -0
- package/types/lib/inventory/provenanceUtils.d.ts.map +1 -0
- package/types/lib/inventory/purl.d.ts +313 -0
- package/types/lib/inventory/purl.d.ts.map +1 -0
- package/types/lib/inventory/rustFormulationParser.d.ts +17 -0
- package/types/lib/inventory/rustFormulationParser.d.ts.map +1 -0
- package/types/lib/inventory/sbomDocument.d.ts +59 -0
- package/types/lib/inventory/sbomDocument.d.ts.map +1 -0
- package/types/lib/inventory/source.d.ts +163 -0
- package/types/lib/inventory/source.d.ts.map +1 -0
- package/types/lib/inventory/spdx.d.ts +66 -0
- package/types/lib/inventory/spdx.d.ts.map +1 -0
- package/types/lib/inventory/spdxExpression.d.ts +58 -0
- package/types/lib/inventory/spdxExpression.d.ts.map +1 -0
- package/types/lib/inventory/spdxUtils.d.ts +12 -0
- package/types/lib/inventory/spdxUtils.d.ts.map +1 -0
- package/types/lib/inventory/table.d.ts +22 -0
- package/types/lib/inventory/table.d.ts.map +1 -0
- package/types/lib/inventory/traceRunner.d.ts +80 -0
- package/types/lib/inventory/traceRunner.d.ts.map +1 -0
- package/types/lib/inventory/unicodeScan.d.ts +46 -0
- package/types/lib/inventory/unicodeScan.d.ts.map +1 -0
- package/types/lib/managers/binary.d.ts +147 -0
- package/types/lib/managers/binary.d.ts.map +1 -0
- package/types/lib/managers/containerutils.d.ts +30 -0
- package/types/lib/managers/containerutils.d.ts.map +1 -0
- package/types/lib/managers/docker.d.ts +157 -0
- package/types/lib/managers/docker.d.ts.map +1 -0
- package/types/lib/managers/dockerConnection.d.ts +42 -0
- package/types/lib/managers/dockerConnection.d.ts.map +1 -0
- package/types/lib/managers/oci.d.ts +21 -0
- package/types/lib/managers/oci.d.ts.map +1 -0
- package/types/lib/managers/piptree.d.ts +13 -0
- package/types/lib/managers/piptree.d.ts.map +1 -0
- package/types/lib/parsers/cmakeCache.d.ts +70 -0
- package/types/lib/parsers/cmakeCache.d.ts.map +1 -0
- package/types/lib/parsers/gguf.d.ts +39 -0
- package/types/lib/parsers/gguf.d.ts.map +1 -0
- package/types/lib/parsers/gitAiNotes.d.ts +15 -0
- package/types/lib/parsers/gitAiNotes.d.ts.map +1 -0
- package/types/lib/parsers/gitmodules.d.ts +88 -0
- package/types/lib/parsers/gitmodules.d.ts.map +1 -0
- package/types/lib/parsers/htmlExtract.d.ts +34 -0
- package/types/lib/parsers/htmlExtract.d.ts.map +1 -0
- package/types/lib/parsers/huggingfaceManifest.d.ts +153 -0
- package/types/lib/parsers/huggingfaceManifest.d.ts.map +1 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts +155 -0
- package/types/lib/parsers/huggingfaceUtils.d.ts.map +1 -0
- package/types/lib/parsers/iri.d.ts +68 -0
- package/types/lib/parsers/iri.d.ts.map +1 -0
- package/types/lib/parsers/npmrc.d.ts +33 -0
- package/types/lib/parsers/npmrc.d.ts.map +1 -0
- package/types/lib/parsers/ollama.d.ts +22 -0
- package/types/lib/parsers/ollama.d.ts.map +1 -0
- package/types/lib/parsers/xml.d.ts +47 -0
- package/types/lib/parsers/xml.d.ts.map +1 -0
- package/types/lib/server/server.d.ts +51 -0
- package/types/lib/server/server.d.ts.map +1 -0
- package/types/lib/stages/postgen/annotator.d.ts +36 -0
- package/types/lib/stages/postgen/annotator.d.ts.map +1 -0
- package/types/lib/stages/postgen/auditBom.d.ts +92 -0
- package/types/lib/stages/postgen/auditBom.d.ts.map +1 -0
- package/types/lib/stages/postgen/postgen.d.ts +59 -0
- package/types/lib/stages/postgen/postgen.d.ts.map +1 -0
- package/types/lib/stages/postgen/ruleEngine.d.ts +18 -0
- package/types/lib/stages/postgen/ruleEngine.d.ts.map +1 -0
- package/types/lib/stages/postgen/sortBom.d.ts +34 -0
- package/types/lib/stages/postgen/sortBom.d.ts.map +1 -0
- package/types/lib/stages/postgen/spdxConverter.d.ts +11 -0
- package/types/lib/stages/postgen/spdxConverter.d.ts.map +1 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts +71 -0
- package/types/lib/stages/postgen/specVersionCompat.d.ts.map +1 -0
- package/types/lib/stages/pregen/envAudit.d.ts +14 -0
- package/types/lib/stages/pregen/envAudit.d.ts.map +1 -0
- package/types/lib/stages/pregen/pregen.d.ts +59 -0
- package/types/lib/stages/pregen/pregen.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/index.d.ts +47 -0
- package/types/lib/third-party/arborist/lib/arborist/index.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts +4 -0
- package/types/lib/third-party/arborist/lib/arborist/load-actual.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts +4 -0
- package/types/lib/third-party/arborist/lib/arborist/load-virtual.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/bin-links.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/bin-links.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/calc-dep-flags.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts +9 -0
- package/types/lib/third-party/arborist/lib/case-insensitive-map.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/consistent-resolve.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/debug.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/debug.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/dep-valid.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/dep-valid.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/edge.d.ts +46 -0
- package/types/lib/third-party/arborist/lib/edge.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/from-path.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/from-path.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/gather-dep-set.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/index.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/index.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/inventory.d.ts +14 -0
- package/types/lib/third-party/arborist/lib/inventory.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/link.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/link.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/node.d.ts +112 -0
- package/types/lib/third-party/arborist/lib/node.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/npm-extension.d.ts +18 -0
- package/types/lib/third-party/arborist/lib/npm-extension.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/override-resolves.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/override-resolves.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/override-set.d.ts +27 -0
- package/types/lib/third-party/arborist/lib/override-set.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/package-extensions.d.ts +36 -0
- package/types/lib/third-party/arborist/lib/package-extensions.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/printable.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/printable.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/proc-log.d.ts +20 -0
- package/types/lib/third-party/arborist/lib/proc-log.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/realpath.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/realpath.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/relpath.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/relpath.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts +54 -0
- package/types/lib/third-party/arborist/lib/shrinkwrap.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/spec-from-lock.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/tree-check.d.ts +3 -0
- package/types/lib/third-party/arborist/lib/tree-check.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts +13 -0
- package/types/lib/third-party/arborist/lib/validate-npm-package-name.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts +6 -0
- package/types/lib/third-party/arborist/lib/version-from-tgz.d.ts.map +1 -0
- package/types/lib/third-party/arborist/lib/yarn-lock.d.ts +35 -0
- package/types/lib/third-party/arborist/lib/yarn-lock.d.ts.map +1 -0
- package/types/lib/validator/bomValidator.d.ts +40 -0
- package/types/lib/validator/bomValidator.d.ts.map +1 -0
- package/types/lib/validator/complianceEngine.d.ts +72 -0
- package/types/lib/validator/complianceEngine.d.ts.map +1 -0
- package/types/lib/validator/complianceRules.d.ts +61 -0
- package/types/lib/validator/complianceRules.d.ts.map +1 -0
- package/types/lib/validator/index.d.ts +101 -0
- package/types/lib/validator/index.d.ts.map +1 -0
- package/types/lib/validator/reporters/annotations.d.ts +37 -0
- package/types/lib/validator/reporters/annotations.d.ts.map +1 -0
- package/types/lib/validator/reporters/console.d.ts +34 -0
- package/types/lib/validator/reporters/console.d.ts.map +1 -0
- package/types/lib/validator/reporters/index.d.ts +30 -0
- package/types/lib/validator/reporters/index.d.ts.map +1 -0
- package/types/lib/validator/reporters/json.d.ts +11 -0
- package/types/lib/validator/reporters/json.d.ts.map +1 -0
- package/types/lib/validator/reporters/sarif.d.ts +22 -0
- package/types/lib/validator/reporters/sarif.d.ts.map +1 -0
- package/mod.d.ts +0 -7
- package/mod.js +0 -22
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
|
|
3
|
+
import mapWorkspaces from "@npmcli/map-workspaces";
|
|
4
|
+
import nameFromFolder from "@npmcli/name-from-folder";
|
|
5
|
+
import PackageJson from "@npmcli/package-json";
|
|
6
|
+
|
|
7
|
+
import calcDepFlags from "../calc-dep-flags.js";
|
|
8
|
+
import consistentResolve from "../consistent-resolve.js";
|
|
9
|
+
import Link from "../link.js";
|
|
10
|
+
import Node from "../node.js";
|
|
11
|
+
import relpath from "../relpath.js";
|
|
12
|
+
import Shrinkwrap from "../shrinkwrap.js";
|
|
13
|
+
import treeCheck from "../tree-check.js";
|
|
14
|
+
|
|
15
|
+
// mixin providing the loadVirtual method
|
|
16
|
+
|
|
17
|
+
const flagsSuspect = Symbol.for("flagsSuspect");
|
|
18
|
+
const setWorkspaces = Symbol.for("setWorkspaces");
|
|
19
|
+
|
|
20
|
+
/** @returns {any} */
|
|
21
|
+
export default (cls) =>
|
|
22
|
+
class VirtualLoader extends cls {
|
|
23
|
+
#rootOptionProvided;
|
|
24
|
+
|
|
25
|
+
// public method
|
|
26
|
+
async loadVirtual(options = {}) {
|
|
27
|
+
if (this.virtualTree) {
|
|
28
|
+
return this.virtualTree;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// allow the user to set reify options on the ctor as well.
|
|
32
|
+
// XXX: deprecate separate reify() options object.
|
|
33
|
+
options = { ...this.options, ...options };
|
|
34
|
+
|
|
35
|
+
if (options.root && options.root.meta) {
|
|
36
|
+
await this.#loadFromShrinkwrap(options.root.meta, options.root);
|
|
37
|
+
return treeCheck(this.virtualTree);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const s = await Shrinkwrap.load({
|
|
41
|
+
path: this.path,
|
|
42
|
+
lockfileVersion: this.options.lockfileVersion,
|
|
43
|
+
resolveOptions: this.options,
|
|
44
|
+
});
|
|
45
|
+
if (!s.loadedFromDisk && !options.root) {
|
|
46
|
+
const er = new Error(
|
|
47
|
+
"loadVirtual requires existing package-lock.json file",
|
|
48
|
+
);
|
|
49
|
+
throw Object.assign(er, { code: "ENOLOCK" });
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// when building the ideal tree, we pass in a root node to this function
|
|
53
|
+
// otherwise, load it from the root package json or the lockfile
|
|
54
|
+
const pkg = await PackageJson.normalize(this.path)
|
|
55
|
+
.then((p) => p.content)
|
|
56
|
+
.catch(() => s.data.packages[""] || {});
|
|
57
|
+
// TODO clean this up
|
|
58
|
+
const {
|
|
59
|
+
root = await this[setWorkspaces](this.#loadNode("", pkg, true)),
|
|
60
|
+
} = options;
|
|
61
|
+
this.#rootOptionProvided = options.root;
|
|
62
|
+
|
|
63
|
+
await this.#loadFromShrinkwrap(s, root);
|
|
64
|
+
root.assertRootOverrides();
|
|
65
|
+
return treeCheck(this.virtualTree);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async #loadFromShrinkwrap(s, root) {
|
|
69
|
+
if (!this.#rootOptionProvided) {
|
|
70
|
+
// root is never any of these things, but might be a brand new
|
|
71
|
+
// baby Node object that never had its dep flags calculated.
|
|
72
|
+
root.unsetDepFlags();
|
|
73
|
+
} else {
|
|
74
|
+
this[flagsSuspect] = true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.#checkRootEdges(s, root);
|
|
78
|
+
root.meta = s;
|
|
79
|
+
this.virtualTree = root;
|
|
80
|
+
// separate out link metadata, and create Node objects for nodes
|
|
81
|
+
const links = new Map();
|
|
82
|
+
const nodes = new Map([["", root]]);
|
|
83
|
+
for (const [location, meta] of Object.entries(s.data.packages)) {
|
|
84
|
+
// skip the root because we already got it
|
|
85
|
+
if (!location) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (meta.link) {
|
|
90
|
+
links.set(location, meta);
|
|
91
|
+
} else {
|
|
92
|
+
nodes.set(location, this.#loadNode(location, meta));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
await this.#resolveLinks(links, nodes);
|
|
96
|
+
if (!(s.originalLockfileVersion >= 2)) {
|
|
97
|
+
this.#assignBundles(nodes);
|
|
98
|
+
}
|
|
99
|
+
if (this[flagsSuspect]) {
|
|
100
|
+
// reset all dep flags
|
|
101
|
+
// can't use inventory here, because virtualTree might not be root
|
|
102
|
+
for (const node of nodes.values()) {
|
|
103
|
+
if (node.isRoot || node === this.#rootOptionProvided) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
node.resetDepFlags();
|
|
107
|
+
}
|
|
108
|
+
calcDepFlags(this.virtualTree, !this.#rootOptionProvided);
|
|
109
|
+
}
|
|
110
|
+
return root;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// check the lockfile deps, and see if they match. if they do not
|
|
114
|
+
// then we have to reset dep flags at the end. for example, if the
|
|
115
|
+
// user manually edits their package.json file, then we need to know
|
|
116
|
+
// that the idealTree is no longer entirely trustworthy.
|
|
117
|
+
#checkRootEdges(s, root) {
|
|
118
|
+
// loaded virtually from tree, no chance of being out of sync
|
|
119
|
+
// ancient lockfiles are critically damaged by this process,
|
|
120
|
+
// so we need to just hope for the best in those cases.
|
|
121
|
+
if (!s.loadedFromDisk || s.ancientLockfile) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const lock = s.get("");
|
|
126
|
+
const prod = lock.dependencies || {};
|
|
127
|
+
const dev = lock.devDependencies || {};
|
|
128
|
+
const optional = lock.optionalDependencies || {};
|
|
129
|
+
const peer = lock.peerDependencies || {};
|
|
130
|
+
const peerOptional = {};
|
|
131
|
+
|
|
132
|
+
if (lock.peerDependenciesMeta) {
|
|
133
|
+
for (const [name, meta] of Object.entries(lock.peerDependenciesMeta)) {
|
|
134
|
+
if (meta.optional && peer[name] !== undefined) {
|
|
135
|
+
peerOptional[name] = peer[name];
|
|
136
|
+
delete peer[name];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
for (const name of Object.keys(optional)) {
|
|
142
|
+
delete prod[name];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const lockWS = {};
|
|
146
|
+
const workspaces = mapWorkspaces.virtual({
|
|
147
|
+
cwd: this.path,
|
|
148
|
+
lockfile: s.data,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
for (const [name, path] of workspaces.entries()) {
|
|
152
|
+
lockWS[name] = `file:${path}`;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Should rootNames exclude optional?
|
|
156
|
+
const rootNames = new Set(root.edgesOut.keys());
|
|
157
|
+
|
|
158
|
+
const lockByType = {
|
|
159
|
+
dev,
|
|
160
|
+
optional,
|
|
161
|
+
peer,
|
|
162
|
+
peerOptional,
|
|
163
|
+
prod,
|
|
164
|
+
workspace: lockWS,
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// Find anything in shrinkwrap deps that doesn't match root's type or spec
|
|
168
|
+
for (const type in lockByType) {
|
|
169
|
+
const deps = lockByType[type];
|
|
170
|
+
for (const name in deps) {
|
|
171
|
+
const edge = root.edgesOut.get(name);
|
|
172
|
+
if (!edge || edge.type !== type || edge.spec !== deps[name]) {
|
|
173
|
+
return (this[flagsSuspect] = true);
|
|
174
|
+
}
|
|
175
|
+
rootNames.delete(name);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Something was in root that's not accounted for in shrinkwrap
|
|
179
|
+
if (rootNames.size) {
|
|
180
|
+
return (this[flagsSuspect] = true);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// links is the set of metadata, and nodes is the map of non-Link nodes
|
|
185
|
+
// Set the targets to nodes in the set, if we have them (we might not)
|
|
186
|
+
// XXX build-ideal-tree also has a #resolveLinks, is there overlap?
|
|
187
|
+
async #resolveLinks(links, nodes) {
|
|
188
|
+
for (const [location, meta] of links.entries()) {
|
|
189
|
+
const targetPath = resolve(this.path, meta.resolved);
|
|
190
|
+
const targetLoc = relpath(this.path, targetPath);
|
|
191
|
+
const target = nodes.get(targetLoc);
|
|
192
|
+
|
|
193
|
+
if (!target) {
|
|
194
|
+
const err = new Error(
|
|
195
|
+
`Missing target in lock file: "${targetLoc}" is referenced by "${location}" but does not exist.
|
|
196
|
+
To fix:
|
|
197
|
+
1. rm package-lock.json
|
|
198
|
+
2. npm install`,
|
|
199
|
+
);
|
|
200
|
+
err.code = "EMISSINGTARGET";
|
|
201
|
+
throw err;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const link = this.#loadLink(location, targetLoc, target, meta);
|
|
205
|
+
nodes.set(location, link);
|
|
206
|
+
nodes.set(targetLoc, link.target);
|
|
207
|
+
|
|
208
|
+
// we always need to read the package.json for link targets
|
|
209
|
+
// outside node_modules because they can be changed by the local user
|
|
210
|
+
if (!link.target.parent) {
|
|
211
|
+
await PackageJson.normalize(link.realpath)
|
|
212
|
+
.then((p) => (link.target.package = p.content))
|
|
213
|
+
.catch(() => null);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
#assignBundles(nodes) {
|
|
219
|
+
for (const [location, node] of nodes) {
|
|
220
|
+
// Skip assignment of parentage for the root package
|
|
221
|
+
if (!location || (node.isLink && !node.target.location)) {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const {
|
|
225
|
+
name,
|
|
226
|
+
parent,
|
|
227
|
+
package: { inBundle },
|
|
228
|
+
} = node;
|
|
229
|
+
|
|
230
|
+
if (!parent) {
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// read inBundle from package because 'package' here is
|
|
235
|
+
// actually a v2 lockfile metadata entry.
|
|
236
|
+
// If the *parent* is also bundled, though, or if the parent has
|
|
237
|
+
// no dependency on it, then we assume that it's being pulled in
|
|
238
|
+
// just by virtue of its parent or a transitive dep being bundled.
|
|
239
|
+
const { package: ppkg } = parent;
|
|
240
|
+
const { inBundle: parentBundled } = ppkg;
|
|
241
|
+
if (inBundle && !parentBundled && parent.edgesOut.has(node.name)) {
|
|
242
|
+
if (!ppkg.bundleDependencies) {
|
|
243
|
+
ppkg.bundleDependencies = [name];
|
|
244
|
+
} else {
|
|
245
|
+
ppkg.bundleDependencies.push(name);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
#loadNode(location, sw, loadOverrides) {
|
|
252
|
+
const p = this.virtualTree ? this.virtualTree.realpath : this.path;
|
|
253
|
+
const path = resolve(p, location);
|
|
254
|
+
// shrinkwrap doesn't include package name unless necessary
|
|
255
|
+
if (!sw.name) {
|
|
256
|
+
sw.name = nameFromFolder(path);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const node = new Node({
|
|
260
|
+
installLinks: this.installLinks,
|
|
261
|
+
legacyPeerDeps: this.legacyPeerDeps,
|
|
262
|
+
root: this.virtualTree,
|
|
263
|
+
path,
|
|
264
|
+
realpath: path,
|
|
265
|
+
integrity: sw.integrity,
|
|
266
|
+
patched: sw.patched,
|
|
267
|
+
packageExtensionsApplied: sw.packageExtensionsApplied,
|
|
268
|
+
npmExtensionApplied: sw.npmExtensionApplied,
|
|
269
|
+
resolved: consistentResolve(sw.resolved, this.path, path),
|
|
270
|
+
pkg: sw,
|
|
271
|
+
loadOverrides,
|
|
272
|
+
// cast to boolean because they're undefined in the lock file when false
|
|
273
|
+
extraneous: !!sw.extraneous,
|
|
274
|
+
devOptional: !!(sw.devOptional || sw.dev || sw.optional),
|
|
275
|
+
peer: !!sw.peer,
|
|
276
|
+
optional: !!sw.optional,
|
|
277
|
+
dev: !!sw.dev,
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
return node;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
#loadLink(location, targetLoc, target) {
|
|
284
|
+
const path = resolve(this.path, location);
|
|
285
|
+
const link = new Link({
|
|
286
|
+
installLinks: this.installLinks,
|
|
287
|
+
legacyPeerDeps: this.legacyPeerDeps,
|
|
288
|
+
path,
|
|
289
|
+
realpath: resolve(this.path, targetLoc),
|
|
290
|
+
target,
|
|
291
|
+
pkg: target && target.package,
|
|
292
|
+
});
|
|
293
|
+
link.extraneous = target.extraneous;
|
|
294
|
+
link.devOptional = target.devOptional;
|
|
295
|
+
link.peer = target.peer;
|
|
296
|
+
link.optional = target.optional;
|
|
297
|
+
link.dev = target.dev;
|
|
298
|
+
return link;
|
|
299
|
+
}
|
|
300
|
+
};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { basename, dirname, extname, resolve } from "node:path";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
|
|
4
|
+
const isWindows = process.platform === "win32";
|
|
5
|
+
|
|
6
|
+
// Memoize node_modules folder resolution to keep it fast
|
|
7
|
+
const memoNodeModules = new Map();
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns the path to the node_modules directory under which a package is installed.
|
|
11
|
+
* Handles scoped packages correctly.
|
|
12
|
+
*
|
|
13
|
+
* @param {string} path Path to the package
|
|
14
|
+
* @returns {string} Path to the parent node_modules directory
|
|
15
|
+
*/
|
|
16
|
+
function getNodeModules(path) {
|
|
17
|
+
if (memoNodeModules.has(path)) {
|
|
18
|
+
return memoNodeModules.get(path);
|
|
19
|
+
}
|
|
20
|
+
const scopeOrNm = dirname(path);
|
|
21
|
+
const nm =
|
|
22
|
+
basename(scopeOrNm) === "node_modules" ? scopeOrNm : dirname(scopeOrNm);
|
|
23
|
+
memoNodeModules.set(path, nm);
|
|
24
|
+
return nm;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Resolves the parent prefix directory for the installed package.
|
|
29
|
+
*
|
|
30
|
+
* @param {string} path Path to the package
|
|
31
|
+
* @returns {string} The prefix path
|
|
32
|
+
*/
|
|
33
|
+
function getPrefix(path) {
|
|
34
|
+
return dirname(getNodeModules(path));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Resolves the binary target installation directory.
|
|
39
|
+
*
|
|
40
|
+
* @param {Object} options
|
|
41
|
+
* @param {boolean} options.top Is this a top-level package
|
|
42
|
+
* @param {string} options.path Path to the package
|
|
43
|
+
* @returns {string} Target binary folder path
|
|
44
|
+
*/
|
|
45
|
+
function binTarget({ top, path }) {
|
|
46
|
+
if (!top) {
|
|
47
|
+
return `${getNodeModules(path)}/.bin`;
|
|
48
|
+
}
|
|
49
|
+
if (isWindows) {
|
|
50
|
+
return getPrefix(path);
|
|
51
|
+
}
|
|
52
|
+
return `${dirname(getPrefix(path))}/bin`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Resolves the manual page installation directory.
|
|
57
|
+
*
|
|
58
|
+
* @param {Object} options
|
|
59
|
+
* @param {boolean} options.top Is this a top-level package
|
|
60
|
+
* @param {string} options.path Path to the package
|
|
61
|
+
* @returns {string | null} Target manual folder path or null
|
|
62
|
+
*/
|
|
63
|
+
function manTarget({ top, path }) {
|
|
64
|
+
if (!top || isWindows) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return `${dirname(getPrefix(path))}/share/man`;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Custom lightweight replacement for the bin-links getPaths function.
|
|
72
|
+
* Calculates all possible symbolic links or shims that would be created.
|
|
73
|
+
*
|
|
74
|
+
* @param {Object} options Options object
|
|
75
|
+
* @param {string} options.path Path to the package directory
|
|
76
|
+
* @param {Object} options.pkg The parsed package.json object
|
|
77
|
+
* @param {boolean} [options.global] Whether this is a global install
|
|
78
|
+
* @param {boolean} [options.top] Whether this is the top-level package being installed
|
|
79
|
+
* @returns {string[]} An array of potential link target file paths
|
|
80
|
+
*/
|
|
81
|
+
export default function getPaths({ path, pkg, global, top }) {
|
|
82
|
+
if (top && !global) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const binSet = [];
|
|
87
|
+
const binTarg = binTarget({ path, top });
|
|
88
|
+
if (pkg.bin) {
|
|
89
|
+
const binKeys =
|
|
90
|
+
typeof pkg.bin === "string"
|
|
91
|
+
? [pkg.name ? basename(pkg.name) : basename(path)]
|
|
92
|
+
: Object.keys(pkg.bin);
|
|
93
|
+
|
|
94
|
+
for (const bin of binKeys) {
|
|
95
|
+
const b = resolve(binTarg, bin);
|
|
96
|
+
binSet.push(b);
|
|
97
|
+
if (isWindows) {
|
|
98
|
+
binSet.push(`${b}.cmd`);
|
|
99
|
+
binSet.push(`${b}.ps1`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const manTarg = manTarget({ path, top });
|
|
105
|
+
const manSet = [];
|
|
106
|
+
if (manTarg && pkg.man && Array.isArray(pkg.man) && pkg.man.length) {
|
|
107
|
+
for (const man of pkg.man) {
|
|
108
|
+
if (!/.\.[0-9]+(\.gz)?$/.test(man)) {
|
|
109
|
+
return binSet;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const section = extname(basename(man, ".gz")).slice(1);
|
|
113
|
+
const base = basename(man);
|
|
114
|
+
|
|
115
|
+
manSet.push(resolve(manTarg, `man${section}`, base));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return manSet.length ? [...binSet, ...manSet] : binSet;
|
|
120
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Dep flag (dev, peer, etc.) calculation requires default or reset flags.
|
|
2
|
+
// Flags are true by default and are unset to false as we walk deps.
|
|
3
|
+
// We iterate outward edges looking for dep flags that can
|
|
4
|
+
// be unset based on the current nodes flags and edge type.
|
|
5
|
+
// Examples:
|
|
6
|
+
// - a non-optional node with a non-optional edge out, the edge node should not be optional
|
|
7
|
+
// - a non-peer node with a non-peer edge out, the edge node should not be peer
|
|
8
|
+
// If a node is changed, we add to the queue and continue until no more changes.
|
|
9
|
+
// Flags that remain after all this unsetting should be valid.
|
|
10
|
+
// Examples:
|
|
11
|
+
// - a node still flagged optional must only be reachable via optional edges
|
|
12
|
+
// - a node still flagged peer must only be reachable via peer edges
|
|
13
|
+
const calcDepFlags = (tree, resetRoot = true) => {
|
|
14
|
+
if (resetRoot) {
|
|
15
|
+
tree.unsetDepFlags();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const seen = new Set();
|
|
19
|
+
const queue = [tree];
|
|
20
|
+
|
|
21
|
+
let node;
|
|
22
|
+
while ((node = queue.pop())) {
|
|
23
|
+
seen.add(node);
|
|
24
|
+
|
|
25
|
+
// Unset extraneous from all parents to avoid removal of children.
|
|
26
|
+
if (!node.extraneous) {
|
|
27
|
+
for (let n = node.resolveParent; n?.extraneous; n = n.resolveParent) {
|
|
28
|
+
n.extraneous = false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// for links, map their hierarchy appropriately
|
|
33
|
+
if (node.isLink) {
|
|
34
|
+
// node.target can be null, we check to ensure it's not null before proceeding
|
|
35
|
+
if (node.target == null) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// Only unset flags, matching the edge walk below, so multiple links to one target can't clobber a correct value.
|
|
39
|
+
let changed = false;
|
|
40
|
+
if (node.target.dev && !node.dev) {
|
|
41
|
+
node.target.dev = false;
|
|
42
|
+
changed = true;
|
|
43
|
+
}
|
|
44
|
+
if (node.target.optional && !node.optional) {
|
|
45
|
+
node.target.optional = false;
|
|
46
|
+
changed = true;
|
|
47
|
+
}
|
|
48
|
+
if (node.target.devOptional && !node.devOptional) {
|
|
49
|
+
node.target.devOptional = false;
|
|
50
|
+
changed = true;
|
|
51
|
+
}
|
|
52
|
+
if (node.target.peer && !node.peer) {
|
|
53
|
+
node.target.peer = false;
|
|
54
|
+
changed = true;
|
|
55
|
+
}
|
|
56
|
+
if (node.target.extraneous && !node.extraneous) {
|
|
57
|
+
node.target.extraneous = false;
|
|
58
|
+
changed = true;
|
|
59
|
+
}
|
|
60
|
+
// queue target on first visit so its deps are walked
|
|
61
|
+
if (changed || !seen.has(node.target)) {
|
|
62
|
+
queue.push(node.target);
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (const { peer, optional, dev, to } of node.edgesOut.values()) {
|
|
68
|
+
// if the dep is missing, then its flags are already maximally unset
|
|
69
|
+
if (!to) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
let changed = false;
|
|
74
|
+
|
|
75
|
+
// only optional peer dependencies should stay extraneous
|
|
76
|
+
if (to.extraneous && !node.extraneous && !(peer && optional)) {
|
|
77
|
+
to.extraneous = false;
|
|
78
|
+
changed = true;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (to.dev && !node.dev && !dev) {
|
|
82
|
+
to.dev = false;
|
|
83
|
+
changed = true;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (to.optional && !node.optional && !optional) {
|
|
87
|
+
to.optional = false;
|
|
88
|
+
changed = true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// devOptional is the *overlap* of the dev and optional tree.
|
|
92
|
+
// A node may be depended on by separate dev and optional nodes.
|
|
93
|
+
// It SHOULD NOT be removed when pruning dev OR optional.
|
|
94
|
+
// It SHOULD be removed when pruning dev AND optional.
|
|
95
|
+
// We only unset here if a node is not dev AND not optional because
|
|
96
|
+
// if we did unset, it would prevent any overlap deeper in the tree.
|
|
97
|
+
// We correct this later by removing if dev OR optional is set.
|
|
98
|
+
if (
|
|
99
|
+
to.devOptional &&
|
|
100
|
+
!node.devOptional &&
|
|
101
|
+
!node.dev &&
|
|
102
|
+
!node.optional &&
|
|
103
|
+
!dev &&
|
|
104
|
+
!optional
|
|
105
|
+
) {
|
|
106
|
+
to.devOptional = false;
|
|
107
|
+
changed = true;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (to.peer && !node.peer && !peer) {
|
|
111
|
+
to.peer = false;
|
|
112
|
+
changed = true;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (changed) {
|
|
116
|
+
queue.push(to);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Remove incorrect devOptional flags now that we have walked all deps.
|
|
122
|
+
seen.delete(tree);
|
|
123
|
+
for (const node of seen.values()) {
|
|
124
|
+
if (node.devOptional && (node.dev || node.optional)) {
|
|
125
|
+
node.devOptional = false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export default calcDepFlags;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// package children are represented with a Map object, but many file systems
|
|
2
|
+
// are case-insensitive and unicode-normalizing, so we need to treat
|
|
3
|
+
// node.children.get('FOO') and node.children.get('foo') as the same thing.
|
|
4
|
+
|
|
5
|
+
export default class CIMap extends Map {
|
|
6
|
+
#keys = new Map();
|
|
7
|
+
|
|
8
|
+
constructor(items = []) {
|
|
9
|
+
super();
|
|
10
|
+
for (const [key, val] of items) {
|
|
11
|
+
this.set(key, val);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
#normKey(key) {
|
|
16
|
+
if (typeof key !== "string") {
|
|
17
|
+
return key;
|
|
18
|
+
}
|
|
19
|
+
return key.normalize("NFKD").toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
get(key) {
|
|
23
|
+
const normKey = this.#normKey(key);
|
|
24
|
+
return this.#keys.has(normKey)
|
|
25
|
+
? super.get(this.#keys.get(normKey))
|
|
26
|
+
: undefined;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
set(key, val) {
|
|
30
|
+
const normKey = this.#normKey(key);
|
|
31
|
+
if (this.#keys.has(normKey)) {
|
|
32
|
+
super.delete(this.#keys.get(normKey));
|
|
33
|
+
}
|
|
34
|
+
this.#keys.set(normKey, key);
|
|
35
|
+
return super.set(key, val);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
delete(key) {
|
|
39
|
+
const normKey = this.#normKey(key);
|
|
40
|
+
if (this.#keys.has(normKey)) {
|
|
41
|
+
const prevKey = this.#keys.get(normKey);
|
|
42
|
+
this.#keys.delete(normKey);
|
|
43
|
+
return super.delete(prevKey);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
has(key) {
|
|
48
|
+
const normKey = this.#normKey(key);
|
|
49
|
+
return this.#keys.has(normKey) && super.has(this.#keys.get(normKey));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import npa from "npm-package-arg";
|
|
2
|
+
|
|
3
|
+
import relpath from "./relpath.js";
|
|
4
|
+
|
|
5
|
+
// take a path and a resolved value, and turn it into a resolution from
|
|
6
|
+
// the given new path. This is used with converting a package.json's
|
|
7
|
+
// relative file: path into one suitable for a lockfile, or between
|
|
8
|
+
// lockfiles, and for converting hosted git repos to a consistent url type.
|
|
9
|
+
const consistentResolve = (resolved, fromPath, toPath, relPaths = false) => {
|
|
10
|
+
if (!resolved) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
try {
|
|
15
|
+
const hostedOpt = { noCommittish: false };
|
|
16
|
+
const { fetchSpec, saveSpec, type, hosted, rawSpec, raw } = npa(
|
|
17
|
+
resolved,
|
|
18
|
+
fromPath,
|
|
19
|
+
);
|
|
20
|
+
if (type === "file" || type === "directory") {
|
|
21
|
+
if (relPaths && toPath) {
|
|
22
|
+
return `file:${relpath(toPath, fetchSpec)}`;
|
|
23
|
+
}
|
|
24
|
+
return `file:${fetchSpec}`;
|
|
25
|
+
}
|
|
26
|
+
if (hosted) {
|
|
27
|
+
return `git+${hosted.auth || hosted.default === "https" ? hosted.https(hostedOpt) : hosted.sshurl(hostedOpt)}`;
|
|
28
|
+
}
|
|
29
|
+
if (type === "git") {
|
|
30
|
+
return saveSpec;
|
|
31
|
+
}
|
|
32
|
+
if (rawSpec === "*") {
|
|
33
|
+
return raw;
|
|
34
|
+
}
|
|
35
|
+
return rawSpec;
|
|
36
|
+
} catch (_) {
|
|
37
|
+
// whatever we passed in was not acceptable to npa.
|
|
38
|
+
// leave it 100% untouched.
|
|
39
|
+
return resolved;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
export default consistentResolve;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// certain assertions we should do only when testing arborist itself, because
|
|
2
|
+
// they are too expensive or aggressive and would break user programs if we
|
|
3
|
+
// miss a situation where they are actually valid.
|
|
4
|
+
//
|
|
5
|
+
// call like this:
|
|
6
|
+
//
|
|
7
|
+
// /* istanbul ignore next - debug check */
|
|
8
|
+
// debug(() => {
|
|
9
|
+
// if (someExpensiveCheck)
|
|
10
|
+
// throw new Error('expensive check should have returned false')
|
|
11
|
+
// })
|
|
12
|
+
// run in debug mode if explicitly requested, running arborist tests,
|
|
13
|
+
// or working in the arborist project directory.
|
|
14
|
+
import { dirname, resolve } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
import { format } from "node:util";
|
|
17
|
+
|
|
18
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
|
|
20
|
+
const debug =
|
|
21
|
+
process.env.ARBORIST_DEBUG !== "0" &&
|
|
22
|
+
(process.env.ARBORIST_DEBUG === "1" ||
|
|
23
|
+
/\barborist\b/.test(process.env.NODE_DEBUG || "") ||
|
|
24
|
+
(process.env.npm_package_name === "@npmcli/arborist" &&
|
|
25
|
+
["test", "snap"].includes(process.env.npm_lifecycle_event)) ||
|
|
26
|
+
process.cwd() === resolve(__dirname, ".."));
|
|
27
|
+
|
|
28
|
+
const debugFunction = debug
|
|
29
|
+
? (fn) => fn()
|
|
30
|
+
: () => {
|
|
31
|
+
// ignore
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const red = process.stderr.isTTY ? (msg) => `\x1B[31m${msg}\x1B[39m` : (m) => m;
|
|
35
|
+
|
|
36
|
+
debugFunction.log = (...msg) =>
|
|
37
|
+
debugFunction(() => {
|
|
38
|
+
const prefix = `\n${process.pid} ${red(format(msg.shift()))} `;
|
|
39
|
+
msg = (
|
|
40
|
+
prefix +
|
|
41
|
+
format(...msg)
|
|
42
|
+
.trim()
|
|
43
|
+
.split("\n")
|
|
44
|
+
.join(prefix)
|
|
45
|
+
).trim();
|
|
46
|
+
/* eslint-disable-next-line no-console */
|
|
47
|
+
console.error(msg);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export default debugFunction;
|