@cdxgen/cdxgen 0.0.1 → 13.0.0
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 +2324 -0
- package/bin/convert.js +213 -0
- package/bin/evinse.js +353 -0
- package/bin/hbom.js +495 -0
- package/bin/repl.js +2224 -0
- package/bin/sign.js +195 -0
- package/bin/tracebom.js +295 -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 +1833 -0
- package/lib/cli/cliOptions.js +513 -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 +142 -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 +876 -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 +575 -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 +1789 -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 +277 -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 +263 -0
- package/lib/inventory/traceRunner.js +439 -0
- package/lib/inventory/unicodeScan.js +147 -0
- package/lib/managers/binary.js +3307 -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 +315 -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 +28 -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 +120 -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 +19 -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 +76 -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,767 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { basename, dirname, join } from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
|
|
5
|
+
import { DEBUG_MODE, readEnvironmentVariable } from "../core/activity.js";
|
|
6
|
+
import { getAllFiles, safeExistsSync } from "../core/fs.js";
|
|
7
|
+
import { splitCommandArgs } from "../ecosystems/parsers-js.js";
|
|
8
|
+
import { runSwiftCommand } from "../inventory/envcontext.js";
|
|
9
|
+
import { executeSourcekitten } from "../managers/binary.js";
|
|
10
|
+
|
|
11
|
+
// Swift entity kinds
|
|
12
|
+
// https://github.com/swiftlang/swift/blob/main/tools/SourceKit/docs/SwiftSupport.txt
|
|
13
|
+
const SWIFT_ENTITY_KINDS = {
|
|
14
|
+
IMPORT_CLANG: "source.lang.swift.import.module.clang",
|
|
15
|
+
IMPORT_SWIFT: "source.lang.swift.import.module.swift",
|
|
16
|
+
IMPORT_SOURCE: "source.lang.swift.import.sourcefile",
|
|
17
|
+
DECL_EXTN_STRUCT: "source.lang.swift.decl.extension.struct",
|
|
18
|
+
DECL_EXTN_CLASS: "source.lang.swift.decl.extension.class",
|
|
19
|
+
DECL_EXTN_ENUM: "source.lang.swift.decl.extension.enum",
|
|
20
|
+
DECL_FREE: "source.lang.swift.decl.function.free",
|
|
21
|
+
REF_FREE: "source.lang.swift.ref.function.free",
|
|
22
|
+
DECL_METHOD_INSTANCE: "source.lang.swift.decl.function.method.instance",
|
|
23
|
+
REF_METHOD_INSTANCE: "source.lang.swift.ref.function.method.instance",
|
|
24
|
+
DECL_METHOD_STATIC: "source.lang.swift.decl.function.method.static",
|
|
25
|
+
REF_METHOD_STATIC: "source.lang.swift.ref.function.method.static",
|
|
26
|
+
DECL_CONSTRUCTOR: "source.lang.swift.decl.function.constructor",
|
|
27
|
+
REF_CONSTRUCTOR: "source.lang.swift.ref.function.constructor",
|
|
28
|
+
DECL_DESTRUCTOR: "source.lang.swift.decl.function.destructor",
|
|
29
|
+
REF_DESTRUCTOR: "source.lang.swift.ref.function.destructor",
|
|
30
|
+
DECL_OPERATOR: "source.lang.swift.decl.function.operator",
|
|
31
|
+
REF_OPERATOR: "source.lang.swift.ref.function.operator",
|
|
32
|
+
DECL_SUBSCRIPT: "source.lang.swift.decl.function.subscript",
|
|
33
|
+
REF_SUBSCRIPT: "source.lang.swift.ref.function.subscript",
|
|
34
|
+
DECL_GETTER: "source.lang.swift.decl.function.accessor.getter",
|
|
35
|
+
REF_GETTER: "source.lang.swift.ref.function.accessor.getter",
|
|
36
|
+
DECL_SETTER: "source.lang.swift.decl.function.accessor.setter",
|
|
37
|
+
REF_SETTER: "source.lang.swift.ref.function.accessor.setter",
|
|
38
|
+
DECL_CLASS: "source.lang.swift.decl.class",
|
|
39
|
+
REF_CLASS: "source.lang.swift.ref.class",
|
|
40
|
+
DECL_STRUCT: "source.lang.swift.decl.struct",
|
|
41
|
+
REF_STRUCT: "source.lang.swift.ref.struct",
|
|
42
|
+
DECL_ENUM: "source.lang.swift.decl.enum",
|
|
43
|
+
REF_ENUM: "source.lang.swift.ref.enum",
|
|
44
|
+
DECL_ENUM_ELEMENT: "source.lang.swift.decl.enumelement",
|
|
45
|
+
REF_ENUM_ELEMENT: "source.lang.swift.ref.enumelement",
|
|
46
|
+
DECL_PROTOCOL: "source.lang.swift.decl.protocol",
|
|
47
|
+
REF_PROTOCOL: "source.lang.swift.ref.protocol",
|
|
48
|
+
DECL_TYPE_ALIAS: "source.lang.swift.decl.typealias",
|
|
49
|
+
REF_TYPE_ALIAS: "source.lang.swift.ref.typealias",
|
|
50
|
+
DECL_VAR_GLOBAL: "source.lang.swift.decl.var.global",
|
|
51
|
+
REF_VAR_GLOBAL: "source.lang.swift.ref.var.global",
|
|
52
|
+
DECL_VAR_INSTANCE: "source.lang.swift.decl.var.instance",
|
|
53
|
+
REF_VAR_INSTANCE: "source.lang.swift.ref.var.instance",
|
|
54
|
+
DECL_VAR_STATIC: "source.lang.swift.decl.var.static",
|
|
55
|
+
REF_VAR_STATIC: "source.lang.swift.ref.var.static",
|
|
56
|
+
DECL_VAR_LOCAL: "source.lang.swift.decl.var.local",
|
|
57
|
+
REF_VAR_LOCAL: "source.lang.swift.ref.var.local",
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
// Array of standard types that can be ignored
|
|
61
|
+
const IGNORABLE_TYPES = [
|
|
62
|
+
"Bool",
|
|
63
|
+
"Error?",
|
|
64
|
+
"AnyObject",
|
|
65
|
+
"()",
|
|
66
|
+
"Any?",
|
|
67
|
+
"Void",
|
|
68
|
+
"[String]",
|
|
69
|
+
"String?",
|
|
70
|
+
"String",
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Retrieve the structure information of a .swift file in json format
|
|
75
|
+
*
|
|
76
|
+
* @param {String} filePath Path to .swift file
|
|
77
|
+
*
|
|
78
|
+
* @returns {undefined|Object} JSON representation of the swift file or undefined.
|
|
79
|
+
*/
|
|
80
|
+
export function getStructure(filePath) {
|
|
81
|
+
return executeSourcekitten(["structure", "--file", filePath]);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Parse the data from the structure command
|
|
86
|
+
*
|
|
87
|
+
* @param {Object} structureJson Json from the structure command
|
|
88
|
+
* @returns {Object|undefined} Parsed value
|
|
89
|
+
*/
|
|
90
|
+
export function parseStructure(structureJson) {
|
|
91
|
+
if (
|
|
92
|
+
structureJson?.["key.diagnostic_stage"] !==
|
|
93
|
+
"source.diagnostic.stage.swift.parse" ||
|
|
94
|
+
!structureJson["key.substructure"]
|
|
95
|
+
) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
const metadata = {};
|
|
99
|
+
const refTypes = new Set();
|
|
100
|
+
collectStructureTypes(structureJson["key.substructure"], refTypes);
|
|
101
|
+
if (refTypes.size) {
|
|
102
|
+
metadata["referredTypes"] = Array.from(refTypes).sort();
|
|
103
|
+
}
|
|
104
|
+
return metadata;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Recursively collect referred types from the sub-structure
|
|
109
|
+
*
|
|
110
|
+
* @param substructures {Object} Sub structures
|
|
111
|
+
* @param refTypes {Set<String>} Identified reference types
|
|
112
|
+
*/
|
|
113
|
+
function collectStructureTypes(substructures, refTypes) {
|
|
114
|
+
if (!substructures || !Array.isArray(substructures)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
for (const asubstruct of substructures) {
|
|
118
|
+
if (
|
|
119
|
+
asubstruct["key.typename"] &&
|
|
120
|
+
!IGNORABLE_TYPES.includes(asubstruct["key.typename"])
|
|
121
|
+
) {
|
|
122
|
+
refTypes.add(asubstruct["key.typename"]);
|
|
123
|
+
}
|
|
124
|
+
if (asubstruct["key.inheritedtypes"]) {
|
|
125
|
+
for (const inheritedType of asubstruct["key.inheritedtypes"]) {
|
|
126
|
+
if (!IGNORABLE_TYPES.includes(inheritedType["key.name"])) {
|
|
127
|
+
refTypes.add(inheritedType["key.name"]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Recurse
|
|
132
|
+
if (asubstruct["key.substructure"]) {
|
|
133
|
+
collectStructureTypes(asubstruct["key.substructure"], refTypes);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (substructures["key.substructure"]) {
|
|
138
|
+
collectStructureTypes(substructures["key.substructure"], refTypes);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Method to perform swift build in verbose mode.
|
|
144
|
+
*
|
|
145
|
+
* @param {String} basePath Path
|
|
146
|
+
* @returns {undefined|String} Verbose build output
|
|
147
|
+
*/
|
|
148
|
+
export function verboseBuild(basePath) {
|
|
149
|
+
runSwiftCommand(basePath, ["package", "clean"]);
|
|
150
|
+
console.log("Extracting compiler arguments from swift build...");
|
|
151
|
+
return runSwiftCommand(basePath, [
|
|
152
|
+
"build",
|
|
153
|
+
"-c",
|
|
154
|
+
"debug",
|
|
155
|
+
"--verbose",
|
|
156
|
+
"-Xcc",
|
|
157
|
+
"-Wno-error",
|
|
158
|
+
]);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Method to parse the verbose swift build output to identify key compiler parameters.
|
|
163
|
+
*
|
|
164
|
+
* @param {String} buildOutput Verbose build output
|
|
165
|
+
* @returns {Object} compiler build parameters
|
|
166
|
+
*/
|
|
167
|
+
export function extractCompilerParamsFromBuild(buildOutput) {
|
|
168
|
+
const params = {};
|
|
169
|
+
if (!buildOutput) {
|
|
170
|
+
console.log("No build output. Returning empty compilerArgs");
|
|
171
|
+
return { params, compilerArgs: [] };
|
|
172
|
+
}
|
|
173
|
+
const singletonArgs = new Set([
|
|
174
|
+
"-sdk",
|
|
175
|
+
"-target",
|
|
176
|
+
"-swift-version",
|
|
177
|
+
"-package-description-version",
|
|
178
|
+
"-module-cache-path",
|
|
179
|
+
]);
|
|
180
|
+
const cumulativeArgs = new Set([
|
|
181
|
+
"-F",
|
|
182
|
+
"-I",
|
|
183
|
+
"-L",
|
|
184
|
+
"-vfsoverlay",
|
|
185
|
+
"-Xllvm",
|
|
186
|
+
"-external-plugin-path",
|
|
187
|
+
"-plugin-path",
|
|
188
|
+
]);
|
|
189
|
+
const orderedArgs = new Set(["-Xcc"]);
|
|
190
|
+
const boolArgs = new Set([
|
|
191
|
+
"-parse-as-library",
|
|
192
|
+
"-incremental",
|
|
193
|
+
"-track-system-dependencies",
|
|
194
|
+
"-suppress-remarks",
|
|
195
|
+
"-suppress-warnings",
|
|
196
|
+
"-stack-check",
|
|
197
|
+
"-disable-clang-spi",
|
|
198
|
+
"-no-color-diagnostics",
|
|
199
|
+
"-enable-testing",
|
|
200
|
+
"-enable-library-evolution",
|
|
201
|
+
]);
|
|
202
|
+
const ignoredArgs = new Set([
|
|
203
|
+
"-o",
|
|
204
|
+
"-output-file-map",
|
|
205
|
+
"-emit-module-path",
|
|
206
|
+
"-emit-module-doc-path",
|
|
207
|
+
"-emit-dependencies-path",
|
|
208
|
+
"-emit-reference-dependencies-path",
|
|
209
|
+
"-emit-objc-header-path",
|
|
210
|
+
"-primary-file",
|
|
211
|
+
"-main-file",
|
|
212
|
+
"-num-threads",
|
|
213
|
+
"-enable-objc-interop",
|
|
214
|
+
"-empty-abi-descriptor",
|
|
215
|
+
"-target-sdk-version",
|
|
216
|
+
"-target-sdk-name",
|
|
217
|
+
"-incremental",
|
|
218
|
+
"-module-name",
|
|
219
|
+
"-j",
|
|
220
|
+
]);
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Validates a parameter value to ensure it's not a garbage string or full command.
|
|
224
|
+
*/
|
|
225
|
+
const isValidParamValue = (val) => {
|
|
226
|
+
if (!val) return false;
|
|
227
|
+
if (val.length > 2048) return false;
|
|
228
|
+
return !(val.includes(" -cc1") || val.includes('clang"'));
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const lines = buildOutput.split("\n");
|
|
232
|
+
let bestLine = "";
|
|
233
|
+
for (let l of lines) {
|
|
234
|
+
l = l.trim();
|
|
235
|
+
if (!l.includes("swiftc") && !l.includes("swift-frontend")) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
if (l === "/usr/bin/swift-frontend" || l.endsWith("swift-frontend")) {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
if (l.length > bestLine.length) {
|
|
242
|
+
bestLine = l;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Parse only the best line found
|
|
247
|
+
if (bestLine) {
|
|
248
|
+
const tokens = splitCommandArgs(bestLine);
|
|
249
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
250
|
+
const token = tokens[i];
|
|
251
|
+
if (ignoredArgs.has(token)) {
|
|
252
|
+
if (i + 1 < tokens.length && !tokens[i + 1].startsWith("-")) {
|
|
253
|
+
i++;
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (singletonArgs.has(token)) {
|
|
258
|
+
if (i + 1 < tokens.length) {
|
|
259
|
+
const val = tokens[i + 1];
|
|
260
|
+
if (isValidParamValue(val)) {
|
|
261
|
+
params[token] = val;
|
|
262
|
+
}
|
|
263
|
+
i++;
|
|
264
|
+
}
|
|
265
|
+
} else if (orderedArgs.has(token)) {
|
|
266
|
+
if (i + 1 < tokens.length) {
|
|
267
|
+
const val = tokens[i + 1];
|
|
268
|
+
if (isValidParamValue(val)) {
|
|
269
|
+
if (!params[token]) {
|
|
270
|
+
params[token] = [];
|
|
271
|
+
}
|
|
272
|
+
params[token].push(val);
|
|
273
|
+
}
|
|
274
|
+
i++;
|
|
275
|
+
}
|
|
276
|
+
} else if (cumulativeArgs.has(token)) {
|
|
277
|
+
if (i + 1 < tokens.length) {
|
|
278
|
+
const val = tokens[i + 1];
|
|
279
|
+
if (isValidParamValue(val)) {
|
|
280
|
+
if (!params[token]) {
|
|
281
|
+
params[token] = new Set();
|
|
282
|
+
}
|
|
283
|
+
params[token].add(val);
|
|
284
|
+
}
|
|
285
|
+
i++;
|
|
286
|
+
}
|
|
287
|
+
} else if (boolArgs.has(token)) {
|
|
288
|
+
params[token] = true;
|
|
289
|
+
} else if (token.startsWith("-D")) {
|
|
290
|
+
if (!params["-D"]) params["-D"] = new Set();
|
|
291
|
+
if (token === "-D" && i + 1 < tokens.length) {
|
|
292
|
+
params["-D"].add(tokens[i + 1]);
|
|
293
|
+
i++;
|
|
294
|
+
} else {
|
|
295
|
+
params["-D"].add(token.substring(2));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const compilerArgsList = [];
|
|
301
|
+
if (process?.env?.SWIFT_COMPILER_EXTRA_ARGS) {
|
|
302
|
+
compilerArgsList.push(...process.env.SWIFT_COMPILER_EXTRA_ARGS.split(" "));
|
|
303
|
+
}
|
|
304
|
+
for (const key of Object.keys(params)) {
|
|
305
|
+
const value = params[key];
|
|
306
|
+
if (value instanceof Set) {
|
|
307
|
+
for (const v of Array.from(value)) {
|
|
308
|
+
compilerArgsList.push(key);
|
|
309
|
+
compilerArgsList.push(v);
|
|
310
|
+
}
|
|
311
|
+
} else if (Array.isArray(value)) {
|
|
312
|
+
for (const v of value) {
|
|
313
|
+
compilerArgsList.push(key);
|
|
314
|
+
compilerArgsList.push(v);
|
|
315
|
+
}
|
|
316
|
+
} else if (typeof value === "string") {
|
|
317
|
+
compilerArgsList.push(key);
|
|
318
|
+
compilerArgsList.push(value);
|
|
319
|
+
} else if (value === true) {
|
|
320
|
+
compilerArgsList.push(key);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
return { params, compilerArgs: compilerArgsList };
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Method to index a swift file and extract metadata
|
|
328
|
+
*
|
|
329
|
+
* @param {String} filePath Path to .swift file
|
|
330
|
+
* @param {String|Array<string>} compilerArgs Compiler arguments extracted from verbose build log
|
|
331
|
+
* @returns {undefined|Object} metadata
|
|
332
|
+
*/
|
|
333
|
+
export function index(filePath, compilerArgs) {
|
|
334
|
+
const skArgs = ["index", "--file", filePath];
|
|
335
|
+
if (compilerArgs) {
|
|
336
|
+
skArgs.push("--");
|
|
337
|
+
if (Array.isArray(compilerArgs)) {
|
|
338
|
+
skArgs.push(...compilerArgs);
|
|
339
|
+
} else {
|
|
340
|
+
skArgs.push(...compilerArgs.split(" "));
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
skArgs.push(filePath);
|
|
344
|
+
return executeSourcekitten(skArgs);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Parse the data from the index command
|
|
349
|
+
*
|
|
350
|
+
* @param {Object} indexJson Json from the index command
|
|
351
|
+
* @returns {Object|undefined} Parsed value
|
|
352
|
+
*/
|
|
353
|
+
export function parseIndex(indexJson) {
|
|
354
|
+
if (!indexJson) {
|
|
355
|
+
return undefined;
|
|
356
|
+
}
|
|
357
|
+
// Some modules can be in both swift and clang
|
|
358
|
+
const swiftModules = new Set();
|
|
359
|
+
const clangModules = new Set();
|
|
360
|
+
collectIndexedModules(
|
|
361
|
+
indexJson["key.dependencies"],
|
|
362
|
+
swiftModules,
|
|
363
|
+
clangModules,
|
|
364
|
+
);
|
|
365
|
+
// Maps the given symbols with this obfuscated version
|
|
366
|
+
const obfuscatedSymbols = {};
|
|
367
|
+
// Line numbers where the given symbols are found
|
|
368
|
+
const symbolLocations = {};
|
|
369
|
+
buildIndexedObfuscatedSymbols(
|
|
370
|
+
indexJson["key.entities"],
|
|
371
|
+
obfuscatedSymbols,
|
|
372
|
+
symbolLocations,
|
|
373
|
+
);
|
|
374
|
+
return {
|
|
375
|
+
swiftModules: Array.from(swiftModules).sort(),
|
|
376
|
+
clangModules: Array.from(clangModules).sort(),
|
|
377
|
+
obfuscatedSymbols,
|
|
378
|
+
symbolLocations,
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Recursively collect the swift and llvm modules from the index data
|
|
384
|
+
*
|
|
385
|
+
* @param dependencies {Array} dependencies array as per the index command
|
|
386
|
+
* @param swiftModules {Set<String>} Swift modules used
|
|
387
|
+
* @param clangModules {Set<String>} clang modules
|
|
388
|
+
*/
|
|
389
|
+
function collectIndexedModules(dependencies, swiftModules, clangModules) {
|
|
390
|
+
for (const adep of dependencies) {
|
|
391
|
+
if (adep["key.kind"] === SWIFT_ENTITY_KINDS.IMPORT_SWIFT) {
|
|
392
|
+
swiftModules.add(adep["key.name"]);
|
|
393
|
+
} else if (adep["key.kind"] === SWIFT_ENTITY_KINDS.IMPORT_CLANG) {
|
|
394
|
+
clangModules.add(adep["key.name"]);
|
|
395
|
+
}
|
|
396
|
+
if (adep["key.dependencies"]) {
|
|
397
|
+
collectIndexedModules(
|
|
398
|
+
adep["key.dependencies"],
|
|
399
|
+
swiftModules,
|
|
400
|
+
clangModules,
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Recursively collect the obfuscated symbols from the index data
|
|
408
|
+
*
|
|
409
|
+
* @param entities {Array} Entities found in the index data
|
|
410
|
+
* @param obfuscatedSymbols {Object} Obfuscated symbols map
|
|
411
|
+
* @param symbolLocations {Object} Symbol locations
|
|
412
|
+
*/
|
|
413
|
+
function buildIndexedObfuscatedSymbols(
|
|
414
|
+
entities,
|
|
415
|
+
obfuscatedSymbols,
|
|
416
|
+
symbolLocations,
|
|
417
|
+
) {
|
|
418
|
+
if (!entities) {
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
for (const aentity of entities) {
|
|
422
|
+
if (aentity["key.name"] && aentity["key.usr"]) {
|
|
423
|
+
obfuscatedSymbols[aentity["key.name"]] = aentity["key.usr"];
|
|
424
|
+
}
|
|
425
|
+
if (aentity["key.line"]) {
|
|
426
|
+
const symbolLocationsKey = aentity["key.name"] || aentity["key.usr"];
|
|
427
|
+
if (!symbolLocationsKey) {
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
if (
|
|
431
|
+
!symbolLocations[symbolLocationsKey] ||
|
|
432
|
+
!Array.isArray(symbolLocations[symbolLocationsKey])
|
|
433
|
+
) {
|
|
434
|
+
symbolLocations[symbolLocationsKey] = [];
|
|
435
|
+
}
|
|
436
|
+
if (!symbolLocations[symbolLocationsKey].includes(aentity["key.line"])) {
|
|
437
|
+
symbolLocations[symbolLocationsKey].push(aentity["key.line"]);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
if (aentity["key.entities"]) {
|
|
441
|
+
buildIndexedObfuscatedSymbols(
|
|
442
|
+
aentity["key.entities"],
|
|
443
|
+
obfuscatedSymbols,
|
|
444
|
+
symbolLocations,
|
|
445
|
+
);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Method to execute dump-package package command.
|
|
452
|
+
*
|
|
453
|
+
* @param {String} basePath Path
|
|
454
|
+
* @returns {undefined|Object} Output from dump-package command
|
|
455
|
+
*/
|
|
456
|
+
export function dumpPackage(basePath) {
|
|
457
|
+
const cmdOutput = runSwiftCommand(basePath, ["package", "dump-package"]);
|
|
458
|
+
if (!cmdOutput) {
|
|
459
|
+
return undefined;
|
|
460
|
+
}
|
|
461
|
+
try {
|
|
462
|
+
return JSON.parse(cmdOutput);
|
|
463
|
+
} catch (_e) {
|
|
464
|
+
return undefined;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* Parse the data from dump-package command
|
|
470
|
+
*
|
|
471
|
+
* @param {Object} dumpJson Json from dump-package command
|
|
472
|
+
* @returns {Object|undefined} Parsed value
|
|
473
|
+
*/
|
|
474
|
+
export function parseDumpPackage(dumpJson) {
|
|
475
|
+
if (!dumpJson) {
|
|
476
|
+
return undefined;
|
|
477
|
+
}
|
|
478
|
+
const metadata = {
|
|
479
|
+
rootModule: dumpJson?.name,
|
|
480
|
+
rootDir: dumpJson?.packageKind?.root,
|
|
481
|
+
platforms: dumpJson?.platforms,
|
|
482
|
+
};
|
|
483
|
+
const rootPkgDependencies = [];
|
|
484
|
+
if (dumpJson.targets) {
|
|
485
|
+
for (const atarget of dumpJson.targets) {
|
|
486
|
+
const ref = atarget.name.replace("+", "_");
|
|
487
|
+
if (atarget.dependencies) {
|
|
488
|
+
const dependsOn = atarget.dependencies
|
|
489
|
+
.map((v) => v?.byName?.[0].replace("+", "_"))
|
|
490
|
+
.filter((v) => v !== undefined);
|
|
491
|
+
rootPkgDependencies.push({
|
|
492
|
+
ref,
|
|
493
|
+
dependsOn,
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
metadata.dependencies = rootPkgDependencies;
|
|
499
|
+
return metadata;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Retrieve the module information of the swift project
|
|
504
|
+
*
|
|
505
|
+
* @param {String} moduleName Module name
|
|
506
|
+
* @param {String|Array<string>} compilerArgs Compiler arguments extracted from verbose build log
|
|
507
|
+
* @returns {undefined|Object} JSON representation of the swift module or undefined.
|
|
508
|
+
*/
|
|
509
|
+
export function moduleInfo(moduleName, compilerArgs) {
|
|
510
|
+
const skArgs = ["module-info", "--module", moduleName];
|
|
511
|
+
if (compilerArgs && compilerArgs.length > 0) {
|
|
512
|
+
skArgs.push("--");
|
|
513
|
+
if (Array.isArray(compilerArgs)) {
|
|
514
|
+
skArgs.push(...compilerArgs);
|
|
515
|
+
} else {
|
|
516
|
+
skArgs.push(...compilerArgs.split(" "));
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
return executeSourcekitten(skArgs);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Parse the data from module-info command to replicate the swift interface
|
|
524
|
+
*
|
|
525
|
+
* @param {Object} moduleInfoJson Json from module-info command
|
|
526
|
+
* @returns {Object|undefined} Parsed classes, protocols, enums and their functions
|
|
527
|
+
*/
|
|
528
|
+
export function parseModuleInfo(moduleInfoJson) {
|
|
529
|
+
if (!moduleInfoJson?.["key.annotations"]) {
|
|
530
|
+
return undefined;
|
|
531
|
+
}
|
|
532
|
+
const classes = new Set();
|
|
533
|
+
const protocols = new Set();
|
|
534
|
+
const enums = new Set();
|
|
535
|
+
const obfuscationMap = {};
|
|
536
|
+
const classMethods = {};
|
|
537
|
+
const protocolMethods = {};
|
|
538
|
+
// Collect the classes, protocols and enums first
|
|
539
|
+
for (const annot of moduleInfoJson["key.annotations"] || []) {
|
|
540
|
+
switch (annot["key.kind"]) {
|
|
541
|
+
case SWIFT_ENTITY_KINDS.REF_CLASS:
|
|
542
|
+
classes.add(annot["key.name"]);
|
|
543
|
+
break;
|
|
544
|
+
case SWIFT_ENTITY_KINDS.REF_PROTOCOL:
|
|
545
|
+
protocols.add(annot["key.name"]);
|
|
546
|
+
break;
|
|
547
|
+
case SWIFT_ENTITY_KINDS.REF_ENUM:
|
|
548
|
+
enums.add(annot["key.name"]);
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
// Build the obfuscation map
|
|
552
|
+
if (
|
|
553
|
+
[
|
|
554
|
+
SWIFT_ENTITY_KINDS.REF_CLASS,
|
|
555
|
+
SWIFT_ENTITY_KINDS.REF_PROTOCOL,
|
|
556
|
+
SWIFT_ENTITY_KINDS.REF_ENUM,
|
|
557
|
+
].includes(annot["key.kind"])
|
|
558
|
+
) {
|
|
559
|
+
obfuscationMap[annot["key.name"]] = annot["key.usr"];
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
// Collect the class and protocol functions
|
|
563
|
+
for (const aentity of moduleInfoJson["key.entities"] || []) {
|
|
564
|
+
if (
|
|
565
|
+
aentity["key.entities"] &&
|
|
566
|
+
[
|
|
567
|
+
SWIFT_ENTITY_KINDS.DECL_CLASS,
|
|
568
|
+
SWIFT_ENTITY_KINDS.DECL_PROTOCOL,
|
|
569
|
+
].includes(aentity["key.kind"])
|
|
570
|
+
) {
|
|
571
|
+
for (const centities of aentity["key.entities"] || []) {
|
|
572
|
+
if (
|
|
573
|
+
[SWIFT_ENTITY_KINDS.DECL_METHOD_INSTANCE].includes(
|
|
574
|
+
centities["key.kind"],
|
|
575
|
+
)
|
|
576
|
+
) {
|
|
577
|
+
switch (aentity["key.kind"]) {
|
|
578
|
+
case SWIFT_ENTITY_KINDS.DECL_CLASS:
|
|
579
|
+
if (!classMethods[aentity["key.name"]]) {
|
|
580
|
+
classMethods[aentity["key.name"]] = [];
|
|
581
|
+
}
|
|
582
|
+
classMethods[aentity["key.name"]].push(centities["key.name"]);
|
|
583
|
+
break;
|
|
584
|
+
case SWIFT_ENTITY_KINDS.DECL_PROTOCOL:
|
|
585
|
+
if (!protocolMethods[aentity["key.name"]]) {
|
|
586
|
+
protocolMethods[aentity["key.name"]] = [];
|
|
587
|
+
}
|
|
588
|
+
protocolMethods[aentity["key.name"]].push(centities["key.name"]);
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
591
|
+
obfuscationMap[centities["key.name"]] = centities["key.usr"];
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
// Collect the imported modules
|
|
597
|
+
const importedModules = moduleInfoJson?.["key.sourcetext"]
|
|
598
|
+
.split("\n")
|
|
599
|
+
.filter((l) => l.startsWith("import "))
|
|
600
|
+
.map((l) => l.replaceAll("\r", "").replace("import ", ""))
|
|
601
|
+
.sort();
|
|
602
|
+
return {
|
|
603
|
+
classes: Array.from(classes).sort(),
|
|
604
|
+
protocols: Array.from(protocols).sort(),
|
|
605
|
+
enums: Array.from(enums).sort(),
|
|
606
|
+
obfuscationMap,
|
|
607
|
+
classMethods,
|
|
608
|
+
protocolMethods,
|
|
609
|
+
importedModules,
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
/**
|
|
614
|
+
* Method to collect the build symbols from the output file maps generated by swift build.
|
|
615
|
+
*
|
|
616
|
+
* @param {String} basePath Path
|
|
617
|
+
* @param {Object} options CLI options
|
|
618
|
+
* @returns {Object} symbols map
|
|
619
|
+
*/
|
|
620
|
+
export function collectBuildSymbols(basePath, options) {
|
|
621
|
+
const outputFileMaps = getAllFiles(
|
|
622
|
+
basePath,
|
|
623
|
+
".build/**/debug/**/output-file-map.json",
|
|
624
|
+
options,
|
|
625
|
+
);
|
|
626
|
+
const symbolsMap = {};
|
|
627
|
+
for (const afilemap of outputFileMaps) {
|
|
628
|
+
const metadata = parseOutputFileMap(afilemap);
|
|
629
|
+
// Skip testing modules
|
|
630
|
+
if (metadata.moduleName.endsWith("Tests")) {
|
|
631
|
+
continue;
|
|
632
|
+
}
|
|
633
|
+
symbolsMap[metadata.moduleName] = metadata.moduleSymbols;
|
|
634
|
+
}
|
|
635
|
+
return symbolsMap;
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
* Method to parse output file map to identify the module and their symbols.
|
|
640
|
+
* This list is imprecise when compared with the data from module-info command.
|
|
641
|
+
*
|
|
642
|
+
* @param filemap {String} File name
|
|
643
|
+
* @returns {Object} parsed module metadata
|
|
644
|
+
*/
|
|
645
|
+
export function parseOutputFileMap(filemap) {
|
|
646
|
+
const moduleName = basename(dirname(filemap)).replace(".build", "");
|
|
647
|
+
const fileMapObj = JSON.parse(readFileSync(filemap, { encoding: "utf-8" }));
|
|
648
|
+
// Module symbols could be class or protocol names
|
|
649
|
+
const moduleSymbols = [];
|
|
650
|
+
for (const akey of Object.keys(fileMapObj)) {
|
|
651
|
+
if (akey.length) {
|
|
652
|
+
const symbolName = basename(
|
|
653
|
+
fileMapObj[akey]["swift-dependencies"],
|
|
654
|
+
).replace(".swiftdeps", "");
|
|
655
|
+
moduleSymbols.push(symbolName.replace("+", "_"));
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return { moduleName, moduleSymbols };
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
/**
|
|
662
|
+
* Create a precise semantics slices file for a swift project.
|
|
663
|
+
*
|
|
664
|
+
* @param basePath basePath Path
|
|
665
|
+
* @param options options CLI options
|
|
666
|
+
*/
|
|
667
|
+
export function createSemanticsSlices(basePath, options) {
|
|
668
|
+
let compilerArgs = process?.env?.SWIFT_COMPILER_ARGS;
|
|
669
|
+
let sdkArgs = process?.env?.SWIFT_SDK_ARGS;
|
|
670
|
+
const pkgSwiftFiles = getAllFiles(
|
|
671
|
+
basePath,
|
|
672
|
+
`${options.multiProject ? "**/" : ""}Package*.swift`,
|
|
673
|
+
options,
|
|
674
|
+
);
|
|
675
|
+
if (!pkgSwiftFiles.length) {
|
|
676
|
+
return undefined;
|
|
677
|
+
}
|
|
678
|
+
const hasSwiftVersionFile = basePath
|
|
679
|
+
? safeExistsSync(join(basePath, ".swift-version"))
|
|
680
|
+
: false;
|
|
681
|
+
if (!compilerArgs || !sdkArgs) {
|
|
682
|
+
// We begin by performing a clean verbose debug build to learn the compiler arguments needed for a successful build
|
|
683
|
+
// We do this because most users would not know the compiler arguments themselves!
|
|
684
|
+
const paramsObj = extractCompilerParamsFromBuild(verboseBuild(basePath));
|
|
685
|
+
// Our auto-detection attempt has failed.
|
|
686
|
+
if (!paramsObj) {
|
|
687
|
+
if (readEnvironmentVariable("CDXGEN_IN_CONTAINER") !== "true") {
|
|
688
|
+
console.log(
|
|
689
|
+
"Automatic swift build has failed. Check if the appropriate version of swift is installed. Try using the cdxgen container image, which bundles the latest Swift 6 compiler.",
|
|
690
|
+
);
|
|
691
|
+
} else {
|
|
692
|
+
console.log(
|
|
693
|
+
"Automatic swift build has failed. Check if this project is compatible with Swift 5/6 that is bundled with the cdxgen container image.",
|
|
694
|
+
);
|
|
695
|
+
}
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
698
|
+
compilerArgs = paramsObj.compilerArgs;
|
|
699
|
+
if (paramsObj?.params?.["-sdk"]) {
|
|
700
|
+
sdkArgs = Array.from(paramsObj.params["-sdk"]).join(" ");
|
|
701
|
+
}
|
|
702
|
+
if (DEBUG_MODE && !sdkArgs && !hasSwiftVersionFile) {
|
|
703
|
+
console.log(
|
|
704
|
+
"TIP: Unable to detect the swift sdk needed to build this project. Try running the swift build command to check if this project builds successfully.",
|
|
705
|
+
);
|
|
706
|
+
console.log(
|
|
707
|
+
"Check whether the project requires xcodebuild to build. Such projects are currently unsupported.",
|
|
708
|
+
);
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
// Success we now have the compiler and sdk arguments
|
|
712
|
+
if (DEBUG_MODE) {
|
|
713
|
+
console.log("Detected swift compiler arguments", compilerArgs);
|
|
714
|
+
}
|
|
715
|
+
// Package.swift file contains useful information needed to understand the semantic context
|
|
716
|
+
// Let's use the dump-package command to retriev this information in json format
|
|
717
|
+
const packageMetadata = parseDumpPackage(dumpPackage(basePath));
|
|
718
|
+
// Our attempt to build must have yielded some output file maps.
|
|
719
|
+
// These can be used to understand the symbols offered by each of the dependency
|
|
720
|
+
const buildSymbols = collectBuildSymbols(basePath, options);
|
|
721
|
+
// Now let's attempt to learn about each module (internal and external) in detail
|
|
722
|
+
// Information about the classes, protocols, enums, and methods exported by each module is valuable
|
|
723
|
+
const moduleInfos = {};
|
|
724
|
+
const allModules = new Set([
|
|
725
|
+
packageMetadata?.rootModule.trim(),
|
|
726
|
+
...(packageMetadata?.dependencies || []).map((d) => d.ref.trim()),
|
|
727
|
+
...Object.keys(buildSymbols),
|
|
728
|
+
]);
|
|
729
|
+
for (const moduleName of Array.from(allModules)) {
|
|
730
|
+
// Skip the testing modules
|
|
731
|
+
if (
|
|
732
|
+
!moduleName ||
|
|
733
|
+
moduleName?.length === 0 ||
|
|
734
|
+
moduleName?.endsWith("Tests")
|
|
735
|
+
) {
|
|
736
|
+
continue;
|
|
737
|
+
}
|
|
738
|
+
const moduleInfoObj = parseModuleInfo(moduleInfo(moduleName, compilerArgs));
|
|
739
|
+
if (moduleInfoObj) {
|
|
740
|
+
moduleInfos[moduleName] = moduleInfoObj;
|
|
741
|
+
} else {
|
|
742
|
+
console.log(
|
|
743
|
+
"Unable to obtain the semantic context for the module",
|
|
744
|
+
moduleName,
|
|
745
|
+
);
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
// Finally, let's do some structural analysis of swift source codes
|
|
749
|
+
const swiftFiles = getAllFiles(basePath, "**/*.swift", options);
|
|
750
|
+
const fileStructures = {};
|
|
751
|
+
const fileIndexes = {};
|
|
752
|
+
for (const afile of swiftFiles) {
|
|
753
|
+
// Skip testing and Package.swift
|
|
754
|
+
if (afile.includes("Tests") || afile.endsWith("Package.swift")) {
|
|
755
|
+
continue;
|
|
756
|
+
}
|
|
757
|
+
fileStructures[afile] = parseStructure(getStructure(afile));
|
|
758
|
+
fileIndexes[afile] = parseIndex(index(afile, compilerArgs));
|
|
759
|
+
}
|
|
760
|
+
return {
|
|
761
|
+
packageMetadata,
|
|
762
|
+
buildSymbols,
|
|
763
|
+
moduleInfos,
|
|
764
|
+
fileStructures,
|
|
765
|
+
fileIndexes,
|
|
766
|
+
};
|
|
767
|
+
}
|