kirograph 0.17.0 → 0.20.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/LICENSE +1 -1
- package/README.md +105 -1822
- package/dist/architecture/layers/dart.d.ts +10 -0
- package/dist/architecture/layers/dart.d.ts.map +1 -0
- package/dist/architecture/layers/dart.js +112 -0
- package/dist/architecture/layers/dart.js.map +7 -0
- package/dist/architecture/layers/elixir.d.ts +6 -0
- package/dist/architecture/layers/elixir.d.ts.map +1 -0
- package/dist/architecture/layers/index.d.ts.map +1 -1
- package/dist/architecture/layers/index.js +3 -1
- package/dist/architecture/layers/index.js.map +2 -2
- package/dist/architecture/layers/ocaml.d.ts +6 -0
- package/dist/architecture/layers/ocaml.d.ts.map +1 -0
- package/dist/architecture/layers/scala.d.ts +6 -0
- package/dist/architecture/layers/scala.d.ts.map +1 -0
- package/dist/architecture/layers/solidity.d.ts +6 -0
- package/dist/architecture/layers/solidity.d.ts.map +1 -0
- package/dist/architecture/layers/vue.d.ts +6 -0
- package/dist/architecture/layers/vue.d.ts.map +1 -0
- package/dist/architecture/manifest/elm.d.ts +3 -0
- package/dist/architecture/manifest/elm.d.ts.map +1 -0
- package/dist/architecture/manifest/index.d.ts.map +1 -1
- package/dist/architecture/manifest/ocaml.d.ts +3 -0
- package/dist/architecture/manifest/ocaml.d.ts.map +1 -0
- package/dist/architecture/manifest/scala.d.ts +3 -0
- package/dist/architecture/manifest/scala.d.ts.map +1 -0
- package/dist/bin/banner.d.ts.map +1 -1
- package/dist/bin/banner.js +74 -6
- package/dist/bin/banner.js.map +2 -2
- package/dist/bin/commands/affected.d.ts.map +1 -1
- package/dist/bin/commands/attack-surface.d.ts +3 -0
- package/dist/bin/commands/attack-surface.d.ts.map +1 -0
- package/dist/bin/commands/attack-surface.js +164 -0
- package/dist/bin/commands/attack-surface.js.map +7 -0
- package/dist/bin/commands/benchmark.d.ts +9 -0
- package/dist/bin/commands/benchmark.d.ts.map +1 -0
- package/dist/bin/commands/benchmark.js +206 -0
- package/dist/bin/commands/benchmark.js.map +7 -0
- package/dist/bin/commands/budget.d.ts +6 -0
- package/dist/bin/commands/budget.d.ts.map +1 -0
- package/dist/bin/commands/budget.js +70 -0
- package/dist/bin/commands/budget.js.map +7 -0
- package/dist/bin/commands/caveman.d.ts +7 -0
- package/dist/bin/commands/caveman.d.ts.map +1 -0
- package/dist/bin/commands/communities.d.ts +3 -0
- package/dist/bin/commands/communities.d.ts.map +1 -0
- package/dist/bin/commands/communities.js +77 -0
- package/dist/bin/commands/communities.js.map +7 -0
- package/dist/bin/commands/compression.d.ts +7 -0
- package/dist/bin/commands/compression.d.ts.map +1 -0
- package/dist/bin/commands/context.d.ts.map +1 -1
- package/dist/bin/commands/data.d.ts +3 -0
- package/dist/bin/commands/data.d.ts.map +1 -0
- package/dist/bin/commands/dead-code.d.ts +3 -0
- package/dist/bin/commands/dead-code.d.ts.map +1 -0
- package/dist/bin/commands/dep-confusion.d.ts +3 -0
- package/dist/bin/commands/dep-confusion.d.ts.map +1 -0
- package/dist/bin/commands/dep-confusion.js +119 -0
- package/dist/bin/commands/dep-confusion.js.map +7 -0
- package/dist/bin/commands/docs.d.ts +3 -0
- package/dist/bin/commands/docs.d.ts.map +1 -0
- package/dist/bin/commands/exec.d.ts +11 -0
- package/dist/bin/commands/exec.d.ts.map +1 -0
- package/dist/bin/commands/export.d.ts +3 -0
- package/dist/bin/commands/export.d.ts.map +1 -0
- package/dist/bin/commands/export.js +304 -10
- package/dist/bin/commands/export.js.map +2 -2
- package/dist/bin/commands/flows.d.ts +3 -0
- package/dist/bin/commands/flows.d.ts.map +1 -0
- package/dist/bin/commands/flows.js +97 -0
- package/dist/bin/commands/flows.js.map +7 -0
- package/dist/bin/commands/gain.d.ts +6 -0
- package/dist/bin/commands/gain.d.ts.map +1 -0
- package/dist/bin/commands/help.d.ts +7 -0
- package/dist/bin/commands/help.d.ts.map +1 -1
- package/dist/bin/commands/help.js +399 -101
- package/dist/bin/commands/help.js.map +2 -2
- package/dist/bin/commands/hotspots.d.ts +3 -0
- package/dist/bin/commands/hotspots.d.ts.map +1 -0
- package/dist/bin/commands/hotspots.js +94 -1
- package/dist/bin/commands/hotspots.js.map +3 -3
- package/dist/bin/commands/install.d.ts.map +1 -1
- package/dist/bin/commands/install.js +90 -8
- package/dist/bin/commands/install.js.map +2 -2
- package/dist/bin/commands/licenses.d.ts +3 -0
- package/dist/bin/commands/licenses.d.ts.map +1 -0
- package/dist/bin/commands/licenses.js +201 -0
- package/dist/bin/commands/licenses.js.map +7 -0
- package/dist/bin/commands/memory.d.ts +16 -0
- package/dist/bin/commands/memory.d.ts.map +1 -0
- package/dist/bin/commands/memory.js +151 -4
- package/dist/bin/commands/memory.js.map +2 -2
- package/dist/bin/commands/path.d.ts +3 -0
- package/dist/bin/commands/path.d.ts.map +1 -0
- package/dist/bin/commands/pattern.d.ts +3 -0
- package/dist/bin/commands/pattern.d.ts.map +1 -0
- package/dist/bin/commands/pattern.js +592 -0
- package/dist/bin/commands/pattern.js.map +7 -0
- package/dist/bin/commands/query.d.ts.map +1 -1
- package/dist/bin/commands/reachability.d.ts +3 -0
- package/dist/bin/commands/reachability.d.ts.map +1 -0
- package/dist/bin/commands/reachability.js +160 -0
- package/dist/bin/commands/reachability.js.map +7 -0
- package/dist/bin/commands/read.d.ts +6 -0
- package/dist/bin/commands/read.d.ts.map +1 -0
- package/dist/bin/commands/read.js +100 -0
- package/dist/bin/commands/read.js.map +7 -0
- package/dist/bin/commands/refactor.d.ts +3 -0
- package/dist/bin/commands/refactor.d.ts.map +1 -0
- package/dist/bin/commands/refactor.js +116 -0
- package/dist/bin/commands/refactor.js.map +7 -0
- package/dist/bin/commands/remediation.d.ts +3 -0
- package/dist/bin/commands/remediation.d.ts.map +1 -0
- package/dist/bin/commands/remediation.js +133 -0
- package/dist/bin/commands/remediation.js.map +7 -0
- package/dist/bin/commands/sbom.d.ts +3 -0
- package/dist/bin/commands/sbom.d.ts.map +1 -0
- package/dist/bin/commands/sbom.js +76 -0
- package/dist/bin/commands/sbom.js.map +7 -0
- package/dist/bin/commands/security-ci-report.d.ts +9 -0
- package/dist/bin/commands/security-ci-report.d.ts.map +1 -0
- package/dist/bin/commands/security-ci-report.js +267 -0
- package/dist/bin/commands/security-ci-report.js.map +7 -0
- package/dist/bin/commands/security-export.d.ts +2 -0
- package/dist/bin/commands/security-export.d.ts.map +1 -0
- package/dist/bin/commands/security-export.js +1349 -0
- package/dist/bin/commands/security-export.js.map +7 -0
- package/dist/bin/commands/security-flows.d.ts +3 -0
- package/dist/bin/commands/security-flows.d.ts.map +1 -0
- package/dist/bin/commands/security-flows.js +126 -0
- package/dist/bin/commands/security-flows.js.map +7 -0
- package/dist/bin/commands/security-secrets.d.ts +3 -0
- package/dist/bin/commands/security-secrets.d.ts.map +1 -0
- package/dist/bin/commands/security-secrets.js +170 -0
- package/dist/bin/commands/security-secrets.js.map +7 -0
- package/dist/bin/commands/security.d.ts +3 -0
- package/dist/bin/commands/security.d.ts.map +1 -0
- package/dist/bin/commands/security.js +208 -0
- package/dist/bin/commands/security.js.map +7 -0
- package/dist/bin/commands/snapshot.d.ts +3 -0
- package/dist/bin/commands/snapshot.d.ts.map +1 -0
- package/dist/bin/commands/staleness.d.ts +3 -0
- package/dist/bin/commands/staleness.d.ts.map +1 -0
- package/dist/bin/commands/staleness.js +144 -0
- package/dist/bin/commands/staleness.js.map +7 -0
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +129 -2
- package/dist/bin/commands/status.js.map +2 -2
- package/dist/bin/commands/supply-chain.d.ts +3 -0
- package/dist/bin/commands/supply-chain.d.ts.map +1 -0
- package/dist/bin/commands/supply-chain.js +138 -0
- package/dist/bin/commands/supply-chain.js.map +7 -0
- package/dist/bin/commands/surprising.d.ts +3 -0
- package/dist/bin/commands/surprising.d.ts.map +1 -0
- package/dist/bin/commands/sync.d.ts.map +1 -1
- package/dist/bin/commands/uninit.d.ts.map +1 -1
- package/dist/bin/commands/uninit.js +109 -60
- package/dist/bin/commands/uninit.js.map +2 -2
- package/dist/bin/commands/utils.d.ts +5 -0
- package/dist/bin/commands/utils.d.ts.map +1 -1
- package/dist/bin/commands/vex.d.ts +3 -0
- package/dist/bin/commands/vex.d.ts.map +1 -0
- package/dist/bin/commands/vex.js +76 -0
- package/dist/bin/commands/vex.js.map +7 -0
- package/dist/bin/commands/vuln-suppress.d.ts +3 -0
- package/dist/bin/commands/vuln-suppress.d.ts.map +1 -0
- package/dist/bin/commands/vuln-suppress.js +95 -0
- package/dist/bin/commands/vuln-suppress.js.map +7 -0
- package/dist/bin/commands/vulns.d.ts +3 -0
- package/dist/bin/commands/vulns.d.ts.map +1 -0
- package/dist/bin/commands/vulns.js +382 -0
- package/dist/bin/commands/vulns.js.map +7 -0
- package/dist/bin/installer/archive.d.ts +47 -0
- package/dist/bin/installer/archive.d.ts.map +1 -0
- package/dist/bin/installer/auto-detect.d.ts +16 -0
- package/dist/bin/installer/auto-detect.d.ts.map +1 -0
- package/dist/bin/installer/auto-detect.js +125 -0
- package/dist/bin/installer/auto-detect.js.map +7 -0
- package/dist/bin/installer/caveman.d.ts +12 -0
- package/dist/bin/installer/caveman.d.ts.map +1 -0
- package/dist/bin/installer/cli-agent.d.ts +7 -2
- package/dist/bin/installer/cli-agent.d.ts.map +1 -1
- package/dist/bin/installer/cli-agent.js +32 -5
- package/dist/bin/installer/cli-agent.js.map +2 -2
- package/dist/bin/installer/common.d.ts +36 -0
- package/dist/bin/installer/common.d.ts.map +1 -0
- package/dist/bin/installer/common.js +48 -0
- package/dist/bin/installer/common.js.map +2 -2
- package/dist/bin/installer/config-prompt.d.ts +1 -1
- package/dist/bin/installer/config-prompt.d.ts.map +1 -1
- package/dist/bin/installer/config-prompt.js +85 -2
- package/dist/bin/installer/config-prompt.js.map +2 -2
- package/dist/bin/installer/dashboard.d.ts.map +1 -1
- package/dist/bin/installer/detect.d.ts +30 -0
- package/dist/bin/installer/detect.d.ts.map +1 -0
- package/dist/bin/installer/detect.js +309 -0
- package/dist/bin/installer/detect.js.map +7 -0
- package/dist/bin/installer/hooks.d.ts +4 -1
- package/dist/bin/installer/hooks.d.ts.map +1 -1
- package/dist/bin/installer/hooks.js +34 -0
- package/dist/bin/installer/hooks.js.map +2 -2
- package/dist/bin/installer/index.d.ts +5 -4
- package/dist/bin/installer/index.d.ts.map +1 -1
- package/dist/bin/installer/index.js +46 -8
- package/dist/bin/installer/index.js.map +2 -2
- package/dist/bin/installer/instructions.d.ts +14 -0
- package/dist/bin/installer/instructions.d.ts.map +1 -0
- package/dist/bin/installer/instructions.js +209 -3
- package/dist/bin/installer/instructions.js.map +2 -2
- package/dist/bin/installer/mcp.d.ts.map +1 -1
- package/dist/bin/installer/prompts.d.ts +17 -0
- package/dist/bin/installer/prompts.d.ts.map +1 -1
- package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -1
- package/dist/bin/installer/steering.d.ts +14 -2
- package/dist/bin/installer/steering.d.ts.map +1 -1
- package/dist/bin/installer/steering.js +488 -0
- package/dist/bin/installer/steering.js.map +2 -2
- package/dist/bin/installer/targets/aider.d.ts +6 -0
- package/dist/bin/installer/targets/aider.d.ts.map +1 -0
- package/dist/bin/installer/targets/aider.js +3 -3
- package/dist/bin/installer/targets/aider.js.map +2 -2
- package/dist/bin/installer/targets/amp.d.ts +6 -0
- package/dist/bin/installer/targets/amp.d.ts.map +1 -0
- package/dist/bin/installer/targets/amp.js +3 -3
- package/dist/bin/installer/targets/amp.js.map +2 -2
- package/dist/bin/installer/targets/antigravity.d.ts +13 -0
- package/dist/bin/installer/targets/antigravity.d.ts.map +1 -0
- package/dist/bin/installer/targets/antigravity.js +35 -6
- package/dist/bin/installer/targets/antigravity.js.map +2 -2
- package/dist/bin/installer/targets/augment.d.ts +6 -0
- package/dist/bin/installer/targets/augment.d.ts.map +1 -0
- package/dist/bin/installer/targets/augment.js +3 -3
- package/dist/bin/installer/targets/augment.js.map +2 -2
- package/dist/bin/installer/targets/claude.d.ts +6 -0
- package/dist/bin/installer/targets/claude.d.ts.map +1 -0
- package/dist/bin/installer/targets/claude.js +49 -5
- package/dist/bin/installer/targets/claude.js.map +2 -2
- package/dist/bin/installer/targets/cline.d.ts +13 -0
- package/dist/bin/installer/targets/cline.d.ts.map +1 -0
- package/dist/bin/installer/targets/cline.js +32 -6
- package/dist/bin/installer/targets/cline.js.map +2 -2
- package/dist/bin/installer/targets/codex.d.ts +6 -0
- package/dist/bin/installer/targets/codex.d.ts.map +1 -0
- package/dist/bin/installer/targets/codex.js +64 -12
- package/dist/bin/installer/targets/codex.js.map +2 -2
- package/dist/bin/installer/targets/continue.d.ts +12 -0
- package/dist/bin/installer/targets/continue.d.ts.map +1 -0
- package/dist/bin/installer/targets/continue.js +2 -2
- package/dist/bin/installer/targets/continue.js.map +2 -2
- package/dist/bin/installer/targets/copilot-cli.d.ts +12 -0
- package/dist/bin/installer/targets/copilot-cli.d.ts.map +1 -0
- package/dist/bin/installer/targets/copilot-cli.js +101 -0
- package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
- package/dist/bin/installer/targets/copilot.d.ts +6 -0
- package/dist/bin/installer/targets/copilot.d.ts.map +1 -0
- package/dist/bin/installer/targets/copilot.js +31 -5
- package/dist/bin/installer/targets/copilot.js.map +2 -2
- package/dist/bin/installer/targets/cursor.d.ts +6 -0
- package/dist/bin/installer/targets/cursor.d.ts.map +1 -0
- package/dist/bin/installer/targets/cursor.js +4 -4
- package/dist/bin/installer/targets/cursor.js.map +2 -2
- package/dist/bin/installer/targets/devin.d.ts +13 -0
- package/dist/bin/installer/targets/devin.d.ts.map +1 -0
- package/dist/bin/installer/targets/devin.js +2 -2
- package/dist/bin/installer/targets/devin.js.map +2 -2
- package/dist/bin/installer/targets/gemini-cli.d.ts +16 -0
- package/dist/bin/installer/targets/gemini-cli.d.ts.map +1 -0
- package/dist/bin/installer/targets/gemini-cli.js +2 -2
- package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
- package/dist/bin/installer/targets/generic.d.ts +59 -0
- package/dist/bin/installer/targets/generic.d.ts.map +1 -0
- package/dist/bin/installer/targets/generic.js +2 -14
- package/dist/bin/installer/targets/generic.js.map +2 -2
- package/dist/bin/installer/targets/goose.d.ts +6 -0
- package/dist/bin/installer/targets/goose.d.ts.map +1 -0
- package/dist/bin/installer/targets/goose.js +3 -3
- package/dist/bin/installer/targets/goose.js.map +2 -2
- package/dist/bin/installer/targets/index.d.ts +11 -0
- package/dist/bin/installer/targets/index.d.ts.map +1 -0
- package/dist/bin/installer/targets/index.js +250 -0
- package/dist/bin/installer/targets/index.js.map +2 -2
- package/dist/bin/installer/targets/junie.d.ts +13 -0
- package/dist/bin/installer/targets/junie.d.ts.map +1 -0
- package/dist/bin/installer/targets/junie.js +2 -2
- package/dist/bin/installer/targets/junie.js.map +2 -2
- package/dist/bin/installer/targets/kilo.d.ts +12 -0
- package/dist/bin/installer/targets/kilo.d.ts.map +1 -0
- package/dist/bin/installer/targets/kilo.js +2 -2
- package/dist/bin/installer/targets/kilo.js.map +2 -2
- package/dist/bin/installer/targets/kiro.d.ts +5 -0
- package/dist/bin/installer/targets/kiro.d.ts.map +1 -0
- package/dist/bin/installer/targets/kiro.js +4 -4
- package/dist/bin/installer/targets/kiro.js.map +2 -2
- package/dist/bin/installer/targets/opencode.d.ts +13 -0
- package/dist/bin/installer/targets/opencode.d.ts.map +1 -0
- package/dist/bin/installer/targets/opencode.js +2 -2
- package/dist/bin/installer/targets/opencode.js.map +2 -2
- package/dist/bin/installer/targets/openhands.d.ts +6 -0
- package/dist/bin/installer/targets/openhands.d.ts.map +1 -0
- package/dist/bin/installer/targets/openhands.js +3 -3
- package/dist/bin/installer/targets/openhands.js.map +2 -2
- package/dist/bin/installer/targets/qoder.d.ts +12 -0
- package/dist/bin/installer/targets/qoder.d.ts.map +1 -0
- package/dist/bin/installer/targets/qoder.js +91 -0
- package/dist/bin/installer/targets/qoder.js.map +7 -0
- package/dist/bin/installer/targets/qwen.d.ts +12 -0
- package/dist/bin/installer/targets/qwen.d.ts.map +1 -0
- package/dist/bin/installer/targets/qwen.js +96 -0
- package/dist/bin/installer/targets/qwen.js.map +7 -0
- package/dist/bin/installer/targets/replit.d.ts +6 -0
- package/dist/bin/installer/targets/replit.d.ts.map +1 -0
- package/dist/bin/installer/targets/replit.js +3 -3
- package/dist/bin/installer/targets/replit.js.map +2 -2
- package/dist/bin/installer/targets/roo.d.ts +13 -0
- package/dist/bin/installer/targets/roo.d.ts.map +1 -0
- package/dist/bin/installer/targets/roo.js +2 -2
- package/dist/bin/installer/targets/roo.js.map +2 -2
- package/dist/bin/installer/targets/tabnine.d.ts +6 -0
- package/dist/bin/installer/targets/tabnine.d.ts.map +1 -0
- package/dist/bin/installer/targets/tabnine.js +3 -3
- package/dist/bin/installer/targets/tabnine.js.map +2 -2
- package/dist/bin/installer/targets/trae.d.ts +6 -0
- package/dist/bin/installer/targets/trae.d.ts.map +1 -0
- package/dist/bin/installer/targets/trae.js +5 -5
- package/dist/bin/installer/targets/trae.js.map +2 -2
- package/dist/bin/installer/targets/warp.d.ts +12 -0
- package/dist/bin/installer/targets/warp.d.ts.map +1 -0
- package/dist/bin/installer/targets/warp.js +2 -2
- package/dist/bin/installer/targets/warp.js.map +2 -2
- package/dist/bin/installer/targets/windsurf.d.ts +13 -0
- package/dist/bin/installer/targets/windsurf.d.ts.map +1 -0
- package/dist/bin/installer/targets/windsurf.js +35 -6
- package/dist/bin/installer/targets/windsurf.js.map +2 -2
- package/dist/bin/kirograph.js +74 -6
- package/dist/bin/kirograph.js.map +3 -3
- package/dist/bin/progress.d.ts +16 -1
- package/dist/bin/progress.d.ts.map +1 -1
- package/dist/compression/filters/aws.d.ts +9 -0
- package/dist/compression/filters/aws.d.ts.map +1 -0
- package/dist/compression/filters/docker.d.ts +6 -0
- package/dist/compression/filters/docker.d.ts.map +1 -0
- package/dist/compression/filters/files.d.ts +6 -0
- package/dist/compression/filters/files.d.ts.map +1 -0
- package/dist/compression/filters/generic.d.ts +7 -0
- package/dist/compression/filters/generic.d.ts.map +1 -0
- package/dist/compression/filters/git.d.ts +6 -0
- package/dist/compression/filters/git.d.ts.map +1 -0
- package/dist/compression/filters/github.d.ts +6 -0
- package/dist/compression/filters/github.d.ts.map +1 -0
- package/dist/compression/filters/lint.d.ts +6 -0
- package/dist/compression/filters/lint.d.ts.map +1 -0
- package/dist/compression/filters/misc.d.ts +6 -0
- package/dist/compression/filters/misc.d.ts.map +1 -0
- package/dist/compression/filters/package.d.ts +6 -0
- package/dist/compression/filters/package.d.ts.map +1 -0
- package/dist/compression/filters/test.d.ts +6 -0
- package/dist/compression/filters/test.d.ts.map +1 -0
- package/dist/compression/index.d.ts +29 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/naive-cost.d.ts +26 -0
- package/dist/compression/naive-cost.d.ts.map +1 -0
- package/dist/compression/tracker.d.ts +155 -0
- package/dist/compression/tracker.d.ts.map +1 -0
- package/dist/compression/tracker.js +80 -0
- package/dist/compression/tracker.js.map +2 -2
- package/dist/compression/types.d.ts +49 -0
- package/dist/compression/types.d.ts.map +1 -0
- package/dist/config.d.ts +90 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +144 -3
- package/dist/config.js.map +2 -2
- package/dist/core/lock-manager.d.ts +2 -0
- package/dist/core/lock-manager.d.ts.map +1 -1
- package/dist/core/pipeline.d.ts +4 -1
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +78 -2
- package/dist/core/pipeline.js.map +2 -2
- package/dist/core/snapshot.d.ts +58 -0
- package/dist/core/snapshot.d.ts.map +1 -0
- package/dist/data/filters.d.ts +23 -0
- package/dist/data/filters.d.ts.map +1 -0
- package/dist/data/indexer.d.ts +25 -0
- package/dist/data/indexer.d.ts.map +1 -0
- package/dist/data/linker.d.ts +37 -0
- package/dist/data/linker.d.ts.map +1 -0
- package/dist/data/lint.d.ts +27 -0
- package/dist/data/lint.d.ts.map +1 -0
- package/dist/data/parsers/csv.d.ts +11 -0
- package/dist/data/parsers/csv.d.ts.map +1 -0
- package/dist/data/parsers/excel.d.ts +10 -0
- package/dist/data/parsers/excel.d.ts.map +1 -0
- package/dist/data/parsers/index.d.ts +28 -0
- package/dist/data/parsers/index.d.ts.map +1 -0
- package/dist/data/parsers/json-array.d.ts +9 -0
- package/dist/data/parsers/json-array.d.ts.map +1 -0
- package/dist/data/parsers/jsonl.d.ts +9 -0
- package/dist/data/parsers/jsonl.d.ts.map +1 -0
- package/dist/data/parsers/parquet.d.ts +10 -0
- package/dist/data/parsers/parquet.d.ts.map +1 -0
- package/dist/data/profiler.d.ts +29 -0
- package/dist/data/profiler.d.ts.map +1 -0
- package/dist/data/queries.d.ts +95 -0
- package/dist/data/queries.d.ts.map +1 -0
- package/dist/data/types.d.ts +103 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/db/database.d.ts +57 -0
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +75 -5
- package/dist/db/database.js.map +2 -2
- package/dist/db/memory-schema.sql +5 -1
- package/dist/db/patterns-schema.sql +23 -0
- package/dist/db/schema.sql +3 -1
- package/dist/db/security-schema.sql +72 -0
- package/dist/docs/formats/asciidoc.d.ts +9 -0
- package/dist/docs/formats/asciidoc.d.ts.map +1 -0
- package/dist/docs/formats/html.d.ts +10 -0
- package/dist/docs/formats/html.d.ts.map +1 -0
- package/dist/docs/formats/index.d.ts +31 -0
- package/dist/docs/formats/index.d.ts.map +1 -0
- package/dist/docs/formats/markdown.d.ts +11 -0
- package/dist/docs/formats/markdown.d.ts.map +1 -0
- package/dist/docs/formats/openapi.d.ts +17 -0
- package/dist/docs/formats/openapi.d.ts.map +1 -0
- package/dist/docs/formats/org.d.ts +9 -0
- package/dist/docs/formats/org.d.ts.map +1 -0
- package/dist/docs/formats/plaintext.d.ts +11 -0
- package/dist/docs/formats/plaintext.d.ts.map +1 -0
- package/dist/docs/formats/rdoc.d.ts +10 -0
- package/dist/docs/formats/rdoc.d.ts.map +1 -0
- package/dist/docs/formats/rst.d.ts +11 -0
- package/dist/docs/formats/rst.d.ts.map +1 -0
- package/dist/docs/indexer.d.ts +49 -0
- package/dist/docs/indexer.d.ts.map +1 -0
- package/dist/docs/linker.d.ts +30 -0
- package/dist/docs/linker.d.ts.map +1 -0
- package/dist/docs/lint.d.ts +27 -0
- package/dist/docs/lint.d.ts.map +1 -0
- package/dist/docs/queries.d.ts +78 -0
- package/dist/docs/queries.d.ts.map +1 -0
- package/dist/docs/section-id.d.ts +48 -0
- package/dist/docs/section-id.d.ts.map +1 -0
- package/dist/docs/summarizer.d.ts +13 -0
- package/dist/docs/summarizer.d.ts.map +1 -0
- package/dist/docs/types.d.ts +71 -0
- package/dist/docs/types.d.ts.map +1 -0
- package/dist/docs/vectors.d.ts +54 -0
- package/dist/docs/vectors.d.ts.map +1 -0
- package/dist/extraction/extractor.d.ts +1 -1
- package/dist/extraction/extractor.d.ts.map +1 -1
- package/dist/extraction/extractor.js +81 -0
- package/dist/extraction/extractor.js.map +2 -2
- package/dist/extraction/grammars.d.ts +6 -0
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +32 -8
- package/dist/extraction/grammars.js.map +2 -2
- package/dist/extraction/languages.d.ts.map +1 -1
- package/dist/extraction/languages.js +43 -1
- package/dist/extraction/languages.js.map +2 -2
- package/dist/extraction/notebook.d.ts +14 -0
- package/dist/extraction/notebook.d.ts.map +1 -0
- package/dist/extraction/notebook.js +300 -0
- package/dist/extraction/notebook.js.map +7 -0
- package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
- package/dist/frameworks/amplify.d.ts +9 -0
- package/dist/frameworks/amplify.d.ts.map +1 -0
- package/dist/frameworks/angular.d.ts +9 -0
- package/dist/frameworks/angular.d.ts.map +1 -0
- package/dist/frameworks/ansible.d.ts +8 -0
- package/dist/frameworks/ansible.d.ts.map +1 -0
- package/dist/frameworks/cloudformation.d.ts +9 -0
- package/dist/frameworks/cloudformation.d.ts.map +1 -0
- package/dist/frameworks/docker.d.ts +9 -0
- package/dist/frameworks/docker.d.ts.map +1 -0
- package/dist/frameworks/elixir.d.ts +6 -0
- package/dist/frameworks/elixir.d.ts.map +1 -0
- package/dist/frameworks/flutter.d.ts +12 -0
- package/dist/frameworks/flutter.d.ts.map +1 -0
- package/dist/frameworks/flutter.js +130 -0
- package/dist/frameworks/flutter.js.map +7 -0
- package/dist/frameworks/iac.d.ts +10 -0
- package/dist/frameworks/iac.d.ts.map +1 -0
- package/dist/frameworks/index.d.ts +14 -0
- package/dist/frameworks/index.d.ts.map +1 -1
- package/dist/frameworks/index.js +7 -1
- package/dist/frameworks/index.js.map +3 -3
- package/dist/frameworks/kubernetes.d.ts +9 -0
- package/dist/frameworks/kubernetes.d.ts.map +1 -0
- package/dist/frameworks/pulumi.d.ts +9 -0
- package/dist/frameworks/pulumi.d.ts.map +1 -0
- package/dist/frameworks/scala.d.ts +6 -0
- package/dist/frameworks/scala.d.ts.map +1 -0
- package/dist/frameworks/solidity.d.ts +6 -0
- package/dist/frameworks/solidity.d.ts.map +1 -0
- package/dist/frameworks/terraform.d.ts +14 -0
- package/dist/frameworks/terraform.d.ts.map +1 -0
- package/dist/frameworks/vue.d.ts +7 -0
- package/dist/frameworks/vue.d.ts.map +1 -0
- package/dist/graph/communities.d.ts +43 -0
- package/dist/graph/communities.d.ts.map +1 -0
- package/dist/graph/communities.js +317 -0
- package/dist/graph/communities.js.map +7 -0
- package/dist/graph/flows.d.ts +55 -0
- package/dist/graph/flows.d.ts.map +1 -0
- package/dist/graph/flows.js +138 -0
- package/dist/graph/flows.js.map +7 -0
- package/dist/graph/refactor.d.ts +43 -0
- package/dist/graph/refactor.d.ts.map +1 -0
- package/dist/graph/refactor.js +155 -0
- package/dist/graph/refactor.js.map +7 -0
- package/dist/index.d.ts +36 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +2 -2
- package/dist/mcp/cache.d.ts +69 -0
- package/dist/mcp/cache.d.ts.map +1 -0
- package/dist/mcp/cache.js +172 -0
- package/dist/mcp/cache.js.map +7 -0
- package/dist/mcp/read-modes.d.ts +31 -0
- package/dist/mcp/read-modes.d.ts.map +1 -0
- package/dist/mcp/read-modes.js +295 -0
- package/dist/mcp/read-modes.js.map +7 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +17 -3
- package/dist/mcp/server.js.map +2 -2
- package/dist/mcp/tool-names.d.ts +2 -0
- package/dist/mcp/tool-names.d.ts.map +1 -0
- package/dist/mcp/tool-names.js +24 -1
- package/dist/mcp/tool-names.js.map +2 -2
- package/dist/mcp/tools.d.ts +12 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1560 -4
- package/dist/mcp/tools.js.map +3 -3
- package/dist/memory/compress.d.ts +19 -0
- package/dist/memory/compress.d.ts.map +1 -0
- package/dist/memory/database.d.ts +92 -0
- package/dist/memory/database.d.ts.map +1 -0
- package/dist/memory/database.js +70 -2
- package/dist/memory/database.js.map +2 -2
- package/dist/memory/index.d.ts +71 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +12 -2
- package/dist/memory/index.js.map +2 -2
- package/dist/memory/symbols.d.ts +21 -0
- package/dist/memory/symbols.d.ts.map +1 -0
- package/dist/memory/types.d.ts +78 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/vectors.d.ts +43 -0
- package/dist/memory/vectors.d.ts.map +1 -0
- package/dist/patterns/graph.d.ts +16 -0
- package/dist/patterns/graph.d.ts.map +1 -0
- package/dist/patterns/graph.js +45 -0
- package/dist/patterns/graph.js.map +7 -0
- package/dist/patterns/index.d.ts +4 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +39 -0
- package/dist/patterns/index.js.map +7 -0
- package/dist/patterns/indexer.d.ts +15 -0
- package/dist/patterns/indexer.d.ts.map +1 -0
- package/dist/patterns/indexer.js +97 -0
- package/dist/patterns/indexer.js.map +7 -0
- package/dist/patterns/library/command-injection-go.yaml +11 -0
- package/dist/patterns/library/dangerous-eval-js.yaml +14 -0
- package/dist/patterns/library/dangerous-exec-py.yaml +13 -0
- package/dist/patterns/library/dangerous-reflection-java.yaml +8 -0
- package/dist/patterns/library/path-traversal-go.yaml +11 -0
- package/dist/patterns/library/path-traversal-py.yaml +12 -0
- package/dist/patterns/library/path-traversal-readfile-js.yaml +14 -0
- package/dist/patterns/library/prototype-pollution-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-concat-js.yaml +12 -0
- package/dist/patterns/library/sql-injection-java.yaml +13 -0
- package/dist/patterns/library/sql-injection-py.yaml +12 -0
- package/dist/patterns/library/sql-injection-template-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-md5-js.yaml +13 -0
- package/dist/patterns/library/weak-crypto-py.yaml +13 -0
- package/dist/patterns/loader.d.ts +18 -0
- package/dist/patterns/loader.d.ts.map +1 -0
- package/dist/patterns/loader.js +277 -0
- package/dist/patterns/loader.js.map +7 -0
- package/dist/patterns/runner.d.ts +42 -0
- package/dist/patterns/runner.d.ts.map +1 -0
- package/dist/patterns/runner.js +277 -0
- package/dist/patterns/runner.js.map +7 -0
- package/dist/patterns/types.d.ts +27 -0
- package/dist/patterns/types.d.ts.map +1 -0
- package/dist/patterns/types.js +34 -0
- package/dist/patterns/types.js.map +7 -0
- package/dist/resolution/bridges/android-rn.d.ts +13 -0
- package/dist/resolution/bridges/android-rn.d.ts.map +1 -0
- package/dist/resolution/bridges/android-rn.js +298 -0
- package/dist/resolution/bridges/android-rn.js.map +7 -0
- package/dist/resolution/bridges/expo-modules.d.ts +10 -0
- package/dist/resolution/bridges/expo-modules.d.ts.map +1 -0
- package/dist/resolution/bridges/expo-modules.js +155 -0
- package/dist/resolution/bridges/expo-modules.js.map +7 -0
- package/dist/resolution/bridges/flutter-channel.d.ts +14 -0
- package/dist/resolution/bridges/flutter-channel.d.ts.map +1 -0
- package/dist/resolution/bridges/flutter-channel.js +385 -0
- package/dist/resolution/bridges/flutter-channel.js.map +7 -0
- package/dist/resolution/bridges/index.d.ts +40 -0
- package/dist/resolution/bridges/index.d.ts.map +1 -0
- package/dist/resolution/bridges/index.js +80 -0
- package/dist/resolution/bridges/index.js.map +7 -0
- package/dist/resolution/bridges/native-events.d.ts +10 -0
- package/dist/resolution/bridges/native-events.d.ts.map +1 -0
- package/dist/resolution/bridges/native-events.js +188 -0
- package/dist/resolution/bridges/native-events.js.map +7 -0
- package/dist/resolution/bridges/native-views.d.ts +13 -0
- package/dist/resolution/bridges/native-views.d.ts.map +1 -0
- package/dist/resolution/bridges/native-views.js +244 -0
- package/dist/resolution/bridges/native-views.js.map +7 -0
- package/dist/resolution/bridges/react-native.d.ts +9 -0
- package/dist/resolution/bridges/react-native.d.ts.map +1 -0
- package/dist/resolution/bridges/react-native.js +161 -0
- package/dist/resolution/bridges/react-native.js.map +7 -0
- package/dist/resolution/bridges/swift-objc.d.ts +14 -0
- package/dist/resolution/bridges/swift-objc.d.ts.map +1 -0
- package/dist/resolution/bridges/swift-objc.js +227 -0
- package/dist/resolution/bridges/swift-objc.js.map +7 -0
- package/dist/resolution/bridges/turbomodules.d.ts +10 -0
- package/dist/resolution/bridges/turbomodules.d.ts.map +1 -0
- package/dist/resolution/bridges/turbomodules.js +216 -0
- package/dist/resolution/bridges/turbomodules.js.map +7 -0
- package/dist/resolution/index.d.ts +28 -3
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +61 -2
- package/dist/resolution/index.js.map +2 -2
- package/dist/security/attack-surface.d.ts +46 -0
- package/dist/security/attack-surface.d.ts.map +1 -0
- package/dist/security/attack-surface.js +206 -0
- package/dist/security/attack-surface.js.map +7 -0
- package/dist/security/context-warnings.d.ts +40 -0
- package/dist/security/context-warnings.d.ts.map +1 -0
- package/dist/security/context-warnings.js +123 -0
- package/dist/security/context-warnings.js.map +7 -0
- package/dist/security/data-flows.d.ts +33 -0
- package/dist/security/data-flows.d.ts.map +1 -0
- package/dist/security/data-flows.js +286 -0
- package/dist/security/data-flows.js.map +7 -0
- package/dist/security/dep-confusion.d.ts +23 -0
- package/dist/security/dep-confusion.d.ts.map +1 -0
- package/dist/security/dep-confusion.js +255 -0
- package/dist/security/dep-confusion.js.map +7 -0
- package/dist/security/errors.d.ts +16 -0
- package/dist/security/errors.d.ts.map +1 -0
- package/dist/security/errors.js +51 -0
- package/dist/security/errors.js.map +7 -0
- package/dist/security/export/fix-suggestions.d.ts +21 -0
- package/dist/security/export/fix-suggestions.d.ts.map +1 -0
- package/dist/security/export/fix-suggestions.js +58 -0
- package/dist/security/export/fix-suggestions.js.map +7 -0
- package/dist/security/export/sbom.d.ts +33 -0
- package/dist/security/export/sbom.d.ts.map +1 -0
- package/dist/security/export/sbom.js +230 -0
- package/dist/security/export/sbom.js.map +7 -0
- package/dist/security/export/serialization.d.ts +62 -0
- package/dist/security/export/serialization.d.ts.map +1 -0
- package/dist/security/export/serialization.js +142 -0
- package/dist/security/export/serialization.js.map +7 -0
- package/dist/security/export/vex.d.ts +58 -0
- package/dist/security/export/vex.d.ts.map +1 -0
- package/dist/security/export/vex.js +220 -0
- package/dist/security/export/vex.js.map +7 -0
- package/dist/security/index.d.ts +21 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +67 -0
- package/dist/security/index.js.map +7 -0
- package/dist/security/integrator.d.ts +63 -0
- package/dist/security/integrator.d.ts.map +1 -0
- package/dist/security/integrator.js +491 -0
- package/dist/security/integrator.js.map +7 -0
- package/dist/security/license.d.ts +33 -0
- package/dist/security/license.d.ts.map +1 -0
- package/dist/security/license.js +70 -0
- package/dist/security/license.js.map +7 -0
- package/dist/security/manifest/adapter.d.ts +92 -0
- package/dist/security/manifest/adapter.d.ts.map +1 -0
- package/dist/security/manifest/adapter.js +243 -0
- package/dist/security/manifest/adapter.js.map +7 -0
- package/dist/security/manifest/parser.d.ts +73 -0
- package/dist/security/manifest/parser.d.ts.map +1 -0
- package/dist/security/manifest/parser.js +376 -0
- package/dist/security/manifest/parser.js.map +7 -0
- package/dist/security/manifest/plugins/cargo.d.ts +11 -0
- package/dist/security/manifest/plugins/cargo.d.ts.map +1 -0
- package/dist/security/manifest/plugins/cargo.js +233 -0
- package/dist/security/manifest/plugins/cargo.js.map +7 -0
- package/dist/security/manifest/plugins/composer.d.ts +11 -0
- package/dist/security/manifest/plugins/composer.d.ts.map +1 -0
- package/dist/security/manifest/plugins/composer.js +152 -0
- package/dist/security/manifest/plugins/composer.js.map +7 -0
- package/dist/security/manifest/plugins/go.d.ts +12 -0
- package/dist/security/manifest/plugins/go.d.ts.map +1 -0
- package/dist/security/manifest/plugins/go.js +146 -0
- package/dist/security/manifest/plugins/go.js.map +7 -0
- package/dist/security/manifest/plugins/gradle.d.ts +12 -0
- package/dist/security/manifest/plugins/gradle.d.ts.map +1 -0
- package/dist/security/manifest/plugins/gradle.js +159 -0
- package/dist/security/manifest/plugins/gradle.js.map +7 -0
- package/dist/security/manifest/plugins/hex.d.ts +11 -0
- package/dist/security/manifest/plugins/hex.d.ts.map +1 -0
- package/dist/security/manifest/plugins/hex.js +159 -0
- package/dist/security/manifest/plugins/hex.js.map +7 -0
- package/dist/security/manifest/plugins/maven.d.ts +11 -0
- package/dist/security/manifest/plugins/maven.d.ts.map +1 -0
- package/dist/security/manifest/plugins/maven.js +128 -0
- package/dist/security/manifest/plugins/maven.js.map +7 -0
- package/dist/security/manifest/plugins/npm.d.ts +11 -0
- package/dist/security/manifest/plugins/npm.d.ts.map +1 -0
- package/dist/security/manifest/plugins/npm.js +284 -0
- package/dist/security/manifest/plugins/npm.js.map +7 -0
- package/dist/security/manifest/plugins/nuget.d.ts +12 -0
- package/dist/security/manifest/plugins/nuget.d.ts.map +1 -0
- package/dist/security/manifest/plugins/nuget.js +186 -0
- package/dist/security/manifest/plugins/nuget.js.map +7 -0
- package/dist/security/manifest/plugins/pip.d.ts +11 -0
- package/dist/security/manifest/plugins/pip.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pip.js +123 -0
- package/dist/security/manifest/plugins/pip.js.map +7 -0
- package/dist/security/manifest/plugins/pubspec.d.ts +11 -0
- package/dist/security/manifest/plugins/pubspec.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pubspec.js +212 -0
- package/dist/security/manifest/plugins/pubspec.js.map +7 -0
- package/dist/security/manifest/plugins/pyproject.d.ts +3 -0
- package/dist/security/manifest/plugins/pyproject.d.ts.map +1 -0
- package/dist/security/manifest/plugins/pyproject.js +261 -0
- package/dist/security/manifest/plugins/pyproject.js.map +7 -0
- package/dist/security/manifest/plugins/rubygems.d.ts +11 -0
- package/dist/security/manifest/plugins/rubygems.d.ts.map +1 -0
- package/dist/security/manifest/plugins/rubygems.js +185 -0
- package/dist/security/manifest/plugins/rubygems.js.map +7 -0
- package/dist/security/manifest/plugins/swift.d.ts +11 -0
- package/dist/security/manifest/plugins/swift.d.ts.map +1 -0
- package/dist/security/manifest/plugins/swift.js +200 -0
- package/dist/security/manifest/plugins/swift.js.map +7 -0
- package/dist/security/owasp.d.ts +16 -0
- package/dist/security/owasp.d.ts.map +1 -0
- package/dist/security/owasp.js +104 -0
- package/dist/security/owasp.js.map +7 -0
- package/dist/security/pipeline.d.ts +37 -0
- package/dist/security/pipeline.d.ts.map +1 -0
- package/dist/security/pipeline.js +125 -0
- package/dist/security/pipeline.js.map +7 -0
- package/dist/security/reachability.d.ts +67 -0
- package/dist/security/reachability.d.ts.map +1 -0
- package/dist/security/reachability.js +276 -0
- package/dist/security/reachability.js.map +7 -0
- package/dist/security/remediation.d.ts +51 -0
- package/dist/security/remediation.d.ts.map +1 -0
- package/dist/security/remediation.js +126 -0
- package/dist/security/remediation.js.map +7 -0
- package/dist/security/secrets.d.ts +38 -0
- package/dist/security/secrets.d.ts.map +1 -0
- package/dist/security/secrets.js +176 -0
- package/dist/security/secrets.js.map +7 -0
- package/dist/security/staleness.d.ts +43 -0
- package/dist/security/staleness.d.ts.map +1 -0
- package/dist/security/staleness.js +231 -0
- package/dist/security/staleness.js.map +7 -0
- package/dist/security/supply-chain.d.ts +34 -0
- package/dist/security/supply-chain.d.ts.map +1 -0
- package/dist/security/supply-chain.js +301 -0
- package/dist/security/supply-chain.js.map +7 -0
- package/dist/security/suppressions.d.ts +18 -0
- package/dist/security/suppressions.d.ts.map +1 -0
- package/dist/security/suppressions.js +106 -0
- package/dist/security/suppressions.js.map +7 -0
- package/dist/security/types.d.ts +144 -0
- package/dist/security/types.d.ts.map +1 -0
- package/dist/security/types.js +17 -0
- package/dist/security/types.js.map +7 -0
- package/dist/security/vuln/client.d.ts +90 -0
- package/dist/security/vuln/client.d.ts.map +1 -0
- package/dist/security/vuln/client.js +355 -0
- package/dist/security/vuln/client.js.map +7 -0
- package/dist/security/vuln/epss-client.d.ts +26 -0
- package/dist/security/vuln/epss-client.d.ts.map +1 -0
- package/dist/security/vuln/epss-client.js +95 -0
- package/dist/security/vuln/epss-client.js.map +7 -0
- package/dist/security/vuln/index.d.ts +6 -0
- package/dist/security/vuln/index.d.ts.map +1 -0
- package/dist/security/vuln/index.js +29 -0
- package/dist/security/vuln/index.js.map +7 -0
- package/dist/security/vuln/osv-adapter.d.ts +58 -0
- package/dist/security/vuln/osv-adapter.d.ts.map +1 -0
- package/dist/security/vuln/osv-adapter.js +321 -0
- package/dist/security/vuln/osv-adapter.js.map +7 -0
- package/dist/security/vuln/types.d.ts +29 -0
- package/dist/security/vuln/types.d.ts.map +1 -0
- package/dist/security/vuln/types.js +17 -0
- package/dist/security/vuln/types.js.map +7 -0
- package/dist/sync/index.d.ts +4 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/types.d.ts +10 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +2 -2
- package/dist/vectors/index.d.ts +11 -3
- package/dist/vectors/index.d.ts.map +1 -1
- package/dist/vectors/qdrant-index.d.ts +10 -3
- package/dist/vectors/qdrant-index.d.ts.map +1 -1
- package/dist/vectors/typesense-index.d.ts.map +1 -1
- package/dist/watchmen/index.js +83 -0
- package/dist/watchmen/index.js.map +7 -0
- package/dist/watchmen/synthesize.js +475 -0
- package/dist/watchmen/synthesize.js.map +7 -0
- package/package.json +6 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/resolution/bridges/native-views.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Fabric/Paper Native Views Bridge\n *\n * Synthesizes edges between JSX usage of native components (<MyView />)\n * and their native view manager implementations. Uses convention-based\n * name + suffix lookup to match components to their native counterparts.\n *\n * Conventions:\n * <MyView /> \u2192 MyViewManager, MyViewComponentView, RCTMyViewManager\n */\n\nimport type { Node } from '../../types';\nimport type { ResolutionContext } from '../../frameworks/types';\nimport type { BridgeResolver, SynthesizedEdge } from './index';\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface NativeViewUsage {\n componentName: string;\n usageNodeId: string;\n filePath: string;\n}\n\ninterface NativeViewManager {\n componentName: string; // The base component name (without Manager suffix)\n nodeId: string;\n filePath: string;\n className: string;\n}\n\n/**\n * Common suffixes for native view manager classes.\n */\nconst VIEW_MANAGER_SUFFIXES = [\n 'Manager',\n 'ViewManager',\n 'ComponentView',\n 'NativeComponent',\n];\n\n/**\n * Common prefixes for native view manager classes.\n */\nconst VIEW_MANAGER_PREFIXES = ['RCT', ''];\n\n/**\n * Find JSX usages of native components in JS/TS files.\n * Native components are typically PascalCase and imported from native modules.\n */\nfunction findNativeViewUsages(context: ResolutionContext): NativeViewUsage[] {\n const usages: NativeViewUsage[] = [];\n const files = context.getAllFiles();\n\n for (const f of files) {\n if (!f.endsWith('.tsx') && !f.endsWith('.jsx')) continue;\n\n const content = context.readFile(f);\n if (!content) continue;\n\n const nodes = context.getNodesInFile(f);\n\n // Look for requireNativeComponent('ComponentName') patterns\n const requireNativeRegex = /requireNativeComponent\\s*(?:<[^>]*>)?\\s*\\(\\s*['\"](\\w+)['\"]\\s*\\)/g;\n let match: RegExpExecArray | null;\n\n while ((match = requireNativeRegex.exec(content)) !== null) {\n const componentName = match[1];\n const lineNum = content.slice(0, match.index).split('\\n').length;\n\n // Find enclosing node or file-level node\n const enclosing = nodes.find(\n n => n.startLine <= lineNum && n.endLine >= lineNum\n );\n\n if (enclosing) {\n usages.push({ componentName, usageNodeId: enclosing.id, filePath: f });\n }\n }\n\n // Look for codegenNativeComponent('ComponentName') patterns (Fabric)\n const codegenRegex = /codegenNativeComponent\\s*(?:<[^>]*>)?\\s*\\(\\s*['\"](\\w+)['\"]\\s*\\)/g;\n while ((match = codegenRegex.exec(content)) !== null) {\n const componentName = match[1];\n const lineNum = content.slice(0, match.index).split('\\n').length;\n\n const enclosing = nodes.find(\n n => n.startLine <= lineNum && n.endLine >= lineNum\n );\n\n if (enclosing) {\n usages.push({ componentName, usageNodeId: enclosing.id, filePath: f });\n }\n }\n\n // Look for UIManager.getViewManagerConfig('ComponentName')\n const uiManagerRegex = /UIManager\\.getViewManagerConfig\\s*\\(\\s*['\"](\\w+)['\"]\\s*\\)/g;\n while ((match = uiManagerRegex.exec(content)) !== null) {\n const componentName = match[1];\n const lineNum = content.slice(0, match.index).split('\\n').length;\n\n const enclosing = nodes.find(\n n => n.startLine <= lineNum && n.endLine >= lineNum\n );\n\n if (enclosing) {\n usages.push({ componentName, usageNodeId: enclosing.id, filePath: f });\n }\n }\n }\n\n return usages;\n}\n\n/**\n * Find native view manager classes in ObjC/Swift/Java/Kotlin files.\n */\nfunction findNativeViewManagers(context: ResolutionContext): NativeViewManager[] {\n const managers: NativeViewManager[] = [];\n const files = context.getAllFiles();\n\n for (const f of files) {\n if (!f.endsWith('.m') && !f.endsWith('.mm') && !f.endsWith('.swift') &&\n !f.endsWith('.java') && !f.endsWith('.kt') && !f.endsWith('.h')) {\n continue;\n }\n\n const content = context.readFile(f);\n if (!content) continue;\n\n const nodes = context.getNodesInFile(f);\n\n // ObjC: @implementation RCTMyViewManager or subclass of RCTViewManager\n if (f.endsWith('.m') || f.endsWith('.mm') || f.endsWith('.h')) {\n // Find class implementations/declarations\n const implRegex = /@(?:implementation|interface)\\s+(\\w+(?:Manager|ViewManager|ComponentView))\\b/g;\n let match: RegExpExecArray | null;\n\n while ((match = implRegex.exec(content)) !== null) {\n const className = match[1];\n const componentName = extractComponentName(className);\n\n const classNode = nodes.find(\n n => n.kind === 'class' && n.name === className\n );\n\n if (classNode && componentName) {\n managers.push({ componentName, nodeId: classNode.id, filePath: f, className });\n }\n }\n\n // Also check RCT_EXPORT_VIEW_PROPERTY patterns\n if (content.includes('RCT_EXPORT_VIEW_PROPERTY') || content.includes('RCTViewManager')) {\n const classImpl = content.match(/@implementation\\s+(\\w+)/);\n if (classImpl) {\n const className = classImpl[1];\n const componentName = extractComponentName(className);\n const classNode = nodes.find(n => n.kind === 'class' && n.name === className);\n\n if (classNode && componentName) {\n const exists = managers.some(m => m.nodeId === classNode.id);\n if (!exists) {\n managers.push({ componentName, nodeId: classNode.id, filePath: f, className });\n }\n }\n }\n }\n }\n\n // Swift: class that extends RCTViewManager or uses @objc\n if (f.endsWith('.swift')) {\n const classRegex = /class\\s+(\\w+(?:Manager|ViewManager|ComponentView))\\s*:\\s*(\\w+)/g;\n let match: RegExpExecArray | null;\n\n while ((match = classRegex.exec(content)) !== null) {\n const className = match[1];\n const componentName = extractComponentName(className);\n\n const classNode = nodes.find(\n n => n.kind === 'class' && n.name === className\n );\n\n if (classNode && componentName) {\n managers.push({ componentName, nodeId: classNode.id, filePath: f, className });\n }\n }\n }\n\n // Java/Kotlin: class extending SimpleViewManager or ViewGroupManager\n if (f.endsWith('.java') || f.endsWith('.kt')) {\n const classRegex = /class\\s+(\\w+(?:Manager|ViewManager))\\s+(?:extends|:)\\s+\\w*(?:ViewManager|SimpleViewManager|ViewGroupManager)/g;\n let match: RegExpExecArray | null;\n\n while ((match = classRegex.exec(content)) !== null) {\n const className = match[1];\n const componentName = extractComponentName(className);\n\n const classNode = nodes.find(\n n => n.kind === 'class' && n.name === className\n );\n\n if (classNode && componentName) {\n managers.push({ componentName, nodeId: classNode.id, filePath: f, className });\n }\n }\n\n // Also check getName() return value for the component name\n const getNameMatch = content.match(/getName\\s*\\(\\s*\\)\\s*(?::\\s*String\\s*)?\\{[^}]*return\\s*\"(\\w+)\"/);\n if (getNameMatch) {\n const registeredName = getNameMatch[1];\n const classMatch = content.match(/class\\s+(\\w+)/);\n if (classMatch) {\n const classNode = nodes.find(n => n.kind === 'class' && n.name === classMatch[1]);\n if (classNode) {\n const exists = managers.some(m => m.nodeId === classNode.id);\n if (!exists) {\n managers.push({\n componentName: registeredName,\n nodeId: classNode.id,\n filePath: f,\n className: classMatch[1],\n });\n }\n }\n }\n }\n }\n }\n\n return managers;\n}\n\n/**\n * Extract the base component name from a view manager class name.\n * RCTMyViewManager \u2192 MyView\n * MyViewManager \u2192 MyView\n * MyComponentView \u2192 My\n */\nfunction extractComponentName(className: string): string | null {\n // Strip prefixes\n let name = className;\n for (const prefix of VIEW_MANAGER_PREFIXES) {\n if (prefix && name.startsWith(prefix)) {\n name = name.slice(prefix.length);\n break;\n }\n }\n\n // Strip suffixes\n for (const suffix of VIEW_MANAGER_SUFFIXES) {\n if (name.endsWith(suffix)) {\n name = name.slice(0, -suffix.length);\n if (name.length > 0) return name;\n }\n }\n\n return name.length > 0 ? name : null;\n}\n\n// \u2500\u2500 Bridge Implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const nativeViewsBridge: BridgeResolver = {\n name: 'native-views-bridge',\n\n detect(context: ResolutionContext): boolean {\n const files = context.getAllFiles();\n\n // Check for view manager files or codegen specs\n for (const f of files) {\n const fileName = f.split('/').pop() ?? '';\n\n // Check for ViewManager pattern in filenames\n if (fileName.includes('ViewManager') || fileName.includes('ComponentView')) {\n return true;\n }\n\n // Check for requireNativeComponent or codegenNativeComponent in JS/TS\n if (f.endsWith('.tsx') || f.endsWith('.jsx') || f.endsWith('.ts') || f.endsWith('.js')) {\n const content = context.readFile(f);\n if (content && (\n content.includes('requireNativeComponent') ||\n content.includes('codegenNativeComponent')\n )) {\n return true;\n }\n }\n }\n\n return false;\n },\n\n resolve(context: ResolutionContext): SynthesizedEdge[] {\n const edges: SynthesizedEdge[] = [];\n\n const usages = findNativeViewUsages(context);\n const managers = findNativeViewManagers(context);\n\n // Match usages to managers by component name\n for (const usage of usages) {\n for (const manager of managers) {\n // Direct name match\n if (usage.componentName === manager.componentName) {\n edges.push({\n source: usage.usageNodeId,\n target: manager.nodeId,\n kind: 'references',\n confidence: 'inferred',\n confidenceScore: 0.85,\n metadata: {\n synthesizedBy: 'native-views-bridge',\n provenance: 'heuristic',\n componentName: usage.componentName,\n nativeClass: manager.className,\n },\n });\n }\n\n // Also try case-insensitive match\n if (usage.componentName.toLowerCase() === manager.componentName.toLowerCase() &&\n usage.componentName !== manager.componentName) {\n edges.push({\n source: usage.usageNodeId,\n target: manager.nodeId,\n kind: 'references',\n confidence: 'inferred',\n confidenceScore: 0.75,\n metadata: {\n synthesizedBy: 'native-views-bridge',\n provenance: 'heuristic',\n componentName: usage.componentName,\n nativeClass: manager.className,\n matchType: 'case-insensitive',\n },\n });\n }\n }\n }\n\n return edges;\n },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Native Legacy Bridge
|
|
3
|
+
*
|
|
4
|
+
* Synthesizes edges between JavaScript/TypeScript calls to NativeModules.X.method()
|
|
5
|
+
* and native implementations declared via RCT_EXPORT_METHOD (ObjC) or @ReactMethod (Java/Kotlin).
|
|
6
|
+
*/
|
|
7
|
+
import type { BridgeResolver } from './index';
|
|
8
|
+
export declare const reactNativeLegacyBridge: BridgeResolver;
|
|
9
|
+
//# sourceMappingURL=react-native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-native.d.ts","sourceRoot":"","sources":["../../../src/resolution/bridges/react-native.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,SAAS,CAAC;AAuK/D,eAAO,MAAM,uBAAuB,EAAE,cA+CrC,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var react_native_exports = {};
|
|
20
|
+
__export(react_native_exports, {
|
|
21
|
+
reactNativeLegacyBridge: () => reactNativeLegacyBridge
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(react_native_exports);
|
|
24
|
+
function findNativeModuleCalls(context) {
|
|
25
|
+
const calls = [];
|
|
26
|
+
const files = context.getAllFiles();
|
|
27
|
+
for (const f of files) {
|
|
28
|
+
if (!f.endsWith(".ts") && !f.endsWith(".tsx") && !f.endsWith(".js") && !f.endsWith(".jsx")) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const content = context.readFile(f);
|
|
32
|
+
if (!content) continue;
|
|
33
|
+
const nativeModuleRegex = /NativeModules\.(\w+)\.(\w+)\s*\(/g;
|
|
34
|
+
let match;
|
|
35
|
+
const nodes = context.getNodesInFile(f);
|
|
36
|
+
while ((match = nativeModuleRegex.exec(content)) !== null) {
|
|
37
|
+
const moduleName = match[1];
|
|
38
|
+
const methodName = match[2];
|
|
39
|
+
const lineNum = content.slice(0, match.index).split("\n").length;
|
|
40
|
+
const enclosing = nodes.find(
|
|
41
|
+
(n) => (n.kind === "function" || n.kind === "method") && n.startLine <= lineNum && n.endLine >= lineNum
|
|
42
|
+
);
|
|
43
|
+
if (enclosing) {
|
|
44
|
+
calls.push({ moduleName, methodName, callerNodeId: enclosing.id });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return calls;
|
|
49
|
+
}
|
|
50
|
+
function findNativeMethodDecls(context) {
|
|
51
|
+
const decls = [];
|
|
52
|
+
const files = context.getAllFiles();
|
|
53
|
+
for (const f of files) {
|
|
54
|
+
if (f.endsWith(".m") || f.endsWith(".mm")) {
|
|
55
|
+
const content = context.readFile(f);
|
|
56
|
+
if (!content) continue;
|
|
57
|
+
const moduleMatch = content.match(/RCT_EXPORT_MODULE\((\w*)\)/);
|
|
58
|
+
const implMatch = content.match(/@implementation\s+(\w+)/);
|
|
59
|
+
let moduleName = moduleMatch?.[1] || "";
|
|
60
|
+
if (!moduleName && implMatch) {
|
|
61
|
+
moduleName = implMatch[1].replace(/^RCT/, "");
|
|
62
|
+
}
|
|
63
|
+
if (!moduleName) continue;
|
|
64
|
+
const methodRegex = /RCT_EXPORT_METHOD\((\w+)/g;
|
|
65
|
+
let methodMatch;
|
|
66
|
+
const nodes = context.getNodesInFile(f);
|
|
67
|
+
while ((methodMatch = methodRegex.exec(content)) !== null) {
|
|
68
|
+
const methodName = methodMatch[1];
|
|
69
|
+
const lineNum = content.slice(0, methodMatch.index).split("\n").length;
|
|
70
|
+
const methodNode = nodes.find(
|
|
71
|
+
(n) => (n.kind === "method" || n.kind === "function") && (n.name === methodName || n.name.startsWith(methodName)) && Math.abs(n.startLine - lineNum) < 5
|
|
72
|
+
);
|
|
73
|
+
if (methodNode) {
|
|
74
|
+
decls.push({ moduleName, methodName, nodeId: methodNode.id, language: "objc" });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const remapRegex = /RCT_REMAP_METHOD\((\w+)\s*,\s*(\w+)/g;
|
|
78
|
+
let remapMatch;
|
|
79
|
+
while ((remapMatch = remapRegex.exec(content)) !== null) {
|
|
80
|
+
const jsMethodName = remapMatch[1];
|
|
81
|
+
const lineNum = content.slice(0, remapMatch.index).split("\n").length;
|
|
82
|
+
const methodNode = nodes.find(
|
|
83
|
+
(n) => (n.kind === "method" || n.kind === "function") && Math.abs(n.startLine - lineNum) < 5
|
|
84
|
+
);
|
|
85
|
+
if (methodNode) {
|
|
86
|
+
decls.push({ moduleName, methodName: jsMethodName, nodeId: methodNode.id, language: "objc" });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (f.endsWith(".java") || f.endsWith(".kt")) {
|
|
91
|
+
const content = context.readFile(f);
|
|
92
|
+
if (!content) continue;
|
|
93
|
+
const getNameMatch = content.match(/getName\s*\(\s*\)\s*\{[^}]*return\s*"(\w+)"/);
|
|
94
|
+
const classMatch = content.match(/class\s+(\w+Module)\b/);
|
|
95
|
+
let moduleName = getNameMatch?.[1] || "";
|
|
96
|
+
if (!moduleName && classMatch) {
|
|
97
|
+
moduleName = classMatch[1].replace(/Module$/, "");
|
|
98
|
+
}
|
|
99
|
+
if (!moduleName) continue;
|
|
100
|
+
const reactMethodRegex = /@ReactMethod[\s\S]*?(?:fun|void|public)\s+(\w+)\s*\(/g;
|
|
101
|
+
let methodMatch;
|
|
102
|
+
const nodes = context.getNodesInFile(f);
|
|
103
|
+
while ((methodMatch = reactMethodRegex.exec(content)) !== null) {
|
|
104
|
+
const methodName = methodMatch[1];
|
|
105
|
+
const lineNum = content.slice(0, methodMatch.index).split("\n").length;
|
|
106
|
+
const methodNode = nodes.find(
|
|
107
|
+
(n) => (n.kind === "method" || n.kind === "function") && n.name === methodName && Math.abs(n.startLine - lineNum) < 5
|
|
108
|
+
);
|
|
109
|
+
if (methodNode) {
|
|
110
|
+
decls.push({ moduleName, methodName, nodeId: methodNode.id, language: "java" });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return decls;
|
|
116
|
+
}
|
|
117
|
+
const reactNativeLegacyBridge = {
|
|
118
|
+
name: "react-native-legacy-bridge",
|
|
119
|
+
detect(context) {
|
|
120
|
+
const packageJson = context.readFile("package.json");
|
|
121
|
+
if (!packageJson) return false;
|
|
122
|
+
try {
|
|
123
|
+
const pkg = JSON.parse(packageJson);
|
|
124
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
125
|
+
return "react-native" in deps;
|
|
126
|
+
} catch {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
resolve(context) {
|
|
131
|
+
const edges = [];
|
|
132
|
+
const calls = findNativeModuleCalls(context);
|
|
133
|
+
const decls = findNativeMethodDecls(context);
|
|
134
|
+
for (const call of calls) {
|
|
135
|
+
for (const decl of decls) {
|
|
136
|
+
if (call.moduleName === decl.moduleName && call.methodName === decl.methodName) {
|
|
137
|
+
edges.push({
|
|
138
|
+
source: call.callerNodeId,
|
|
139
|
+
target: decl.nodeId,
|
|
140
|
+
kind: "calls",
|
|
141
|
+
confidence: "inferred",
|
|
142
|
+
confidenceScore: 0.85,
|
|
143
|
+
metadata: {
|
|
144
|
+
synthesizedBy: "react-native-legacy-bridge",
|
|
145
|
+
provenance: "heuristic",
|
|
146
|
+
moduleName: call.moduleName,
|
|
147
|
+
methodName: call.methodName,
|
|
148
|
+
nativeLanguage: decl.language
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return edges;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
158
|
+
0 && (module.exports = {
|
|
159
|
+
reactNativeLegacyBridge
|
|
160
|
+
});
|
|
161
|
+
//# sourceMappingURL=react-native.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/resolution/bridges/react-native.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * React Native Legacy Bridge\n *\n * Synthesizes edges between JavaScript/TypeScript calls to NativeModules.X.method()\n * and native implementations declared via RCT_EXPORT_METHOD (ObjC) or @ReactMethod (Java/Kotlin).\n */\n\nimport type { Node } from '../../types';\nimport type { ResolutionContext } from '../../frameworks/types';\nimport type { BridgeResolver, SynthesizedEdge } from './index';\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ninterface NativeModuleCall {\n moduleName: string;\n methodName: string;\n callerNodeId: string;\n}\n\ninterface NativeMethodDecl {\n moduleName: string;\n methodName: string;\n nodeId: string;\n language: 'objc' | 'java' | 'kotlin';\n}\n\n/**\n * Scan JS/TS files for NativeModules.X.method() call patterns.\n */\nfunction findNativeModuleCalls(context: ResolutionContext): NativeModuleCall[] {\n const calls: NativeModuleCall[] = [];\n const files = context.getAllFiles();\n\n for (const f of files) {\n if (!f.endsWith('.ts') && !f.endsWith('.tsx') && !f.endsWith('.js') && !f.endsWith('.jsx')) {\n continue;\n }\n\n const content = context.readFile(f);\n if (!content) continue;\n\n // Match NativeModules.ModuleName.methodName patterns\n const nativeModuleRegex = /NativeModules\\.(\\w+)\\.(\\w+)\\s*\\(/g;\n let match: RegExpExecArray | null;\n\n const nodes = context.getNodesInFile(f);\n\n while ((match = nativeModuleRegex.exec(content)) !== null) {\n const moduleName = match[1];\n const methodName = match[2];\n const lineNum = content.slice(0, match.index).split('\\n').length;\n\n // Find enclosing function/method\n const enclosing = nodes.find(\n n => (n.kind === 'function' || n.kind === 'method') &&\n n.startLine <= lineNum && n.endLine >= lineNum\n );\n\n if (enclosing) {\n calls.push({ moduleName, methodName, callerNodeId: enclosing.id });\n }\n }\n }\n\n return calls;\n}\n\n/**\n * Scan native files for RCT_EXPORT_METHOD / @ReactMethod declarations.\n */\nfunction findNativeMethodDecls(context: ResolutionContext): NativeMethodDecl[] {\n const decls: NativeMethodDecl[] = [];\n const files = context.getAllFiles();\n\n for (const f of files) {\n // ObjC files\n if (f.endsWith('.m') || f.endsWith('.mm')) {\n const content = context.readFile(f);\n if (!content) continue;\n\n // Extract module name from RCT_EXPORT_MODULE(Name)\n const moduleMatch = content.match(/RCT_EXPORT_MODULE\\((\\w*)\\)/);\n // Also try class name pattern: @implementation RCTModuleName\n const implMatch = content.match(/@implementation\\s+(\\w+)/);\n\n let moduleName = moduleMatch?.[1] || '';\n if (!moduleName && implMatch) {\n // Strip RCT prefix for module name\n moduleName = implMatch[1].replace(/^RCT/, '');\n }\n\n if (!moduleName) continue;\n\n // Find RCT_EXPORT_METHOD declarations\n const methodRegex = /RCT_EXPORT_METHOD\\((\\w+)/g;\n let methodMatch: RegExpExecArray | null;\n const nodes = context.getNodesInFile(f);\n\n while ((methodMatch = methodRegex.exec(content)) !== null) {\n const methodName = methodMatch[1];\n const lineNum = content.slice(0, methodMatch.index).split('\\n').length;\n\n // Find the node for this method\n const methodNode = nodes.find(\n n => (n.kind === 'method' || n.kind === 'function') &&\n (n.name === methodName || n.name.startsWith(methodName)) &&\n Math.abs(n.startLine - lineNum) < 5\n );\n\n if (methodNode) {\n decls.push({ moduleName, methodName, nodeId: methodNode.id, language: 'objc' });\n }\n }\n\n // Also check RCT_REMAP_METHOD\n const remapRegex = /RCT_REMAP_METHOD\\((\\w+)\\s*,\\s*(\\w+)/g;\n let remapMatch: RegExpExecArray | null;\n while ((remapMatch = remapRegex.exec(content)) !== null) {\n const jsMethodName = remapMatch[1];\n const lineNum = content.slice(0, remapMatch.index).split('\\n').length;\n\n const methodNode = nodes.find(\n n => (n.kind === 'method' || n.kind === 'function') &&\n Math.abs(n.startLine - lineNum) < 5\n );\n\n if (methodNode) {\n decls.push({ moduleName, methodName: jsMethodName, nodeId: methodNode.id, language: 'objc' });\n }\n }\n }\n\n // Java/Kotlin files\n if (f.endsWith('.java') || f.endsWith('.kt')) {\n const content = context.readFile(f);\n if (!content) continue;\n\n // Extract module name from getName() method\n const getNameMatch = content.match(/getName\\s*\\(\\s*\\)\\s*\\{[^}]*return\\s*\"(\\w+)\"/);\n // Also try class name\n const classMatch = content.match(/class\\s+(\\w+Module)\\b/);\n\n let moduleName = getNameMatch?.[1] || '';\n if (!moduleName && classMatch) {\n moduleName = classMatch[1].replace(/Module$/, '');\n }\n\n if (!moduleName) continue;\n\n // Find @ReactMethod annotated methods\n const reactMethodRegex = /@ReactMethod[\\s\\S]*?(?:fun|void|public)\\s+(\\w+)\\s*\\(/g;\n let methodMatch: RegExpExecArray | null;\n const nodes = context.getNodesInFile(f);\n\n while ((methodMatch = reactMethodRegex.exec(content)) !== null) {\n const methodName = methodMatch[1];\n const lineNum = content.slice(0, methodMatch.index).split('\\n').length;\n\n const methodNode = nodes.find(\n n => (n.kind === 'method' || n.kind === 'function') &&\n n.name === methodName &&\n Math.abs(n.startLine - lineNum) < 5\n );\n\n if (methodNode) {\n decls.push({ moduleName, methodName, nodeId: methodNode.id, language: 'java' });\n }\n }\n }\n }\n\n return decls;\n}\n\n// \u2500\u2500 Bridge Implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const reactNativeLegacyBridge: BridgeResolver = {\n name: 'react-native-legacy-bridge',\n\n detect(context: ResolutionContext): boolean {\n // Check for react-native in package.json\n const packageJson = context.readFile('package.json');\n if (!packageJson) return false;\n\n try {\n const pkg = JSON.parse(packageJson);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n return 'react-native' in deps;\n } catch {\n return false;\n }\n },\n\n resolve(context: ResolutionContext): SynthesizedEdge[] {\n const edges: SynthesizedEdge[] = [];\n\n const calls = findNativeModuleCalls(context);\n const decls = findNativeMethodDecls(context);\n\n // Match calls to declarations by module name + method name\n for (const call of calls) {\n for (const decl of decls) {\n if (call.moduleName === decl.moduleName && call.methodName === decl.methodName) {\n edges.push({\n source: call.callerNodeId,\n target: decl.nodeId,\n kind: 'calls',\n confidence: 'inferred',\n confidenceScore: 0.85,\n metadata: {\n synthesizedBy: 'react-native-legacy-bridge',\n provenance: 'heuristic',\n moduleName: call.moduleName,\n methodName: call.methodName,\n nativeLanguage: decl.language,\n },\n });\n }\n }\n }\n\n return edges;\n },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swift ↔ ObjC Bridge
|
|
3
|
+
*
|
|
4
|
+
* Synthesizes edges between Swift functions with @objc attributes and
|
|
5
|
+
* Objective-C message sends that match the mangled selector.
|
|
6
|
+
*
|
|
7
|
+
* Name mangling rules:
|
|
8
|
+
* - func foo(bar: Int) → -fooWithBar:
|
|
9
|
+
* - init(name:) → -initWithName:
|
|
10
|
+
* - var x → -x / -setX:
|
|
11
|
+
*/
|
|
12
|
+
import type { BridgeResolver } from './index';
|
|
13
|
+
export declare const swiftObjcBridge: BridgeResolver;
|
|
14
|
+
//# sourceMappingURL=swift-objc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift-objc.d.ts","sourceRoot":"","sources":["../../../src/resolution/bridges/swift-objc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,SAAS,CAAC;AA0F/D,eAAO,MAAM,eAAe,EAAE,cAoL7B,CAAC"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var swift_objc_exports = {};
|
|
20
|
+
__export(swift_objc_exports, {
|
|
21
|
+
swiftObjcBridge: () => swiftObjcBridge
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(swift_objc_exports);
|
|
24
|
+
function swiftToObjcSelector(funcName, signature) {
|
|
25
|
+
const selectors = [];
|
|
26
|
+
if (signature) {
|
|
27
|
+
const paramMatch = signature.match(/\(([^)]*)\)/);
|
|
28
|
+
if (paramMatch) {
|
|
29
|
+
const params = paramMatch[1].split(",").map((p) => p.trim()).filter(Boolean);
|
|
30
|
+
if (params.length === 0) {
|
|
31
|
+
selectors.push(funcName);
|
|
32
|
+
} else {
|
|
33
|
+
const labels = params.map((p) => {
|
|
34
|
+
const parts = p.split(":")[0].trim().split(/\s+/);
|
|
35
|
+
return parts[0];
|
|
36
|
+
});
|
|
37
|
+
if (labels.length > 0 && labels[0] !== "_") {
|
|
38
|
+
const firstLabel = labels[0];
|
|
39
|
+
const capitalizedFirst = firstLabel.charAt(0).toUpperCase() + firstLabel.slice(1);
|
|
40
|
+
let selector = `${funcName}With${capitalizedFirst}:`;
|
|
41
|
+
for (let i = 1; i < labels.length; i++) {
|
|
42
|
+
if (labels[i] !== "_") {
|
|
43
|
+
selector += `${labels[i]}:`;
|
|
44
|
+
} else {
|
|
45
|
+
selector += ":";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
selectors.push(selector);
|
|
49
|
+
}
|
|
50
|
+
let directSelector = `${funcName}:`;
|
|
51
|
+
for (let i = 1; i < labels.length; i++) {
|
|
52
|
+
if (labels[i] !== "_") {
|
|
53
|
+
directSelector += `${labels[i]}:`;
|
|
54
|
+
} else {
|
|
55
|
+
directSelector += ":";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
selectors.push(directSelector);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
selectors.push(funcName);
|
|
63
|
+
if (funcName === "init" && signature) {
|
|
64
|
+
const paramMatch = signature.match(/\(([^)]*)\)/);
|
|
65
|
+
if (paramMatch) {
|
|
66
|
+
const params = paramMatch[1].split(",").map((p) => p.trim()).filter(Boolean);
|
|
67
|
+
if (params.length > 0) {
|
|
68
|
+
const firstLabel = params[0].split(":")[0].trim().split(/\s+/)[0];
|
|
69
|
+
if (firstLabel !== "_") {
|
|
70
|
+
const cap = firstLabel.charAt(0).toUpperCase() + firstLabel.slice(1);
|
|
71
|
+
selectors.push(`initWith${cap}:`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return [...new Set(selectors)];
|
|
77
|
+
}
|
|
78
|
+
function swiftPropertyToObjcSelectors(propName) {
|
|
79
|
+
const capitalized = propName.charAt(0).toUpperCase() + propName.slice(1);
|
|
80
|
+
return [propName, `set${capitalized}:`];
|
|
81
|
+
}
|
|
82
|
+
const swiftObjcBridge = {
|
|
83
|
+
name: "swift-objc-bridge",
|
|
84
|
+
detect(context) {
|
|
85
|
+
const files = context.getAllFiles();
|
|
86
|
+
let hasSwift = false;
|
|
87
|
+
let hasObjc = false;
|
|
88
|
+
for (const f of files) {
|
|
89
|
+
if (f.endsWith(".swift")) hasSwift = true;
|
|
90
|
+
if (f.endsWith(".m") || f.endsWith(".mm") || f.endsWith(".h")) hasObjc = true;
|
|
91
|
+
if (hasSwift && hasObjc) return true;
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
},
|
|
95
|
+
resolve(context) {
|
|
96
|
+
const edges = [];
|
|
97
|
+
const files = context.getAllFiles();
|
|
98
|
+
const swiftNodes = [];
|
|
99
|
+
for (const f of files) {
|
|
100
|
+
if (f.endsWith(".swift")) {
|
|
101
|
+
const nodes = context.getNodesInFile(f);
|
|
102
|
+
for (const node of nodes) {
|
|
103
|
+
if ((node.kind === "function" || node.kind === "method" || node.kind === "property") && node.decorators?.includes("objc")) {
|
|
104
|
+
swiftNodes.push(node);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (swiftNodes.length === 0) return edges;
|
|
110
|
+
const selectorToSwiftNode = /* @__PURE__ */ new Map();
|
|
111
|
+
for (const node of swiftNodes) {
|
|
112
|
+
if (node.kind === "property") {
|
|
113
|
+
const selectors = swiftPropertyToObjcSelectors(node.name);
|
|
114
|
+
for (const sel of selectors) {
|
|
115
|
+
selectorToSwiftNode.set(sel, node);
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
const selectors = swiftToObjcSelector(node.name, node.signature);
|
|
119
|
+
for (const sel of selectors) {
|
|
120
|
+
selectorToSwiftNode.set(sel, node);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
for (const f of files) {
|
|
125
|
+
if (!f.endsWith(".m") && !f.endsWith(".mm")) continue;
|
|
126
|
+
const content = context.readFile(f);
|
|
127
|
+
if (!content) continue;
|
|
128
|
+
const objcNodes = context.getNodesInFile(f);
|
|
129
|
+
for (const node of objcNodes) {
|
|
130
|
+
if (node.kind !== "method" && node.kind !== "function") continue;
|
|
131
|
+
const swiftTarget = selectorToSwiftNode.get(node.name);
|
|
132
|
+
if (swiftTarget) {
|
|
133
|
+
edges.push({
|
|
134
|
+
source: node.id,
|
|
135
|
+
target: swiftTarget.id,
|
|
136
|
+
kind: "calls",
|
|
137
|
+
confidence: "inferred",
|
|
138
|
+
confidenceScore: 0.85,
|
|
139
|
+
metadata: {
|
|
140
|
+
synthesizedBy: "swift-objc-bridge",
|
|
141
|
+
provenance: "heuristic",
|
|
142
|
+
direction: "objc-to-swift"
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const msgSendRegex = /\[[\w\s.]+\s+(\w+(?::\w*)*)\s*\]/g;
|
|
148
|
+
let match;
|
|
149
|
+
while ((match = msgSendRegex.exec(content)) !== null) {
|
|
150
|
+
const selector = match[1];
|
|
151
|
+
const swiftTarget = selectorToSwiftNode.get(selector);
|
|
152
|
+
if (!swiftTarget) continue;
|
|
153
|
+
const lineNum = content.slice(0, match.index).split("\n").length;
|
|
154
|
+
const enclosingNode = objcNodes.find(
|
|
155
|
+
(n) => (n.kind === "method" || n.kind === "function") && n.startLine <= lineNum && n.endLine >= lineNum
|
|
156
|
+
);
|
|
157
|
+
if (enclosingNode) {
|
|
158
|
+
const exists = edges.some(
|
|
159
|
+
(e) => e.source === enclosingNode.id && e.target === swiftTarget.id
|
|
160
|
+
);
|
|
161
|
+
if (!exists) {
|
|
162
|
+
edges.push({
|
|
163
|
+
source: enclosingNode.id,
|
|
164
|
+
target: swiftTarget.id,
|
|
165
|
+
kind: "calls",
|
|
166
|
+
confidence: "inferred",
|
|
167
|
+
confidenceScore: 0.8,
|
|
168
|
+
metadata: {
|
|
169
|
+
synthesizedBy: "swift-objc-bridge",
|
|
170
|
+
provenance: "heuristic",
|
|
171
|
+
direction: "objc-to-swift",
|
|
172
|
+
selector
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
for (const f of files) {
|
|
180
|
+
if (!f.endsWith(".swift")) continue;
|
|
181
|
+
const content = context.readFile(f);
|
|
182
|
+
if (!content) continue;
|
|
183
|
+
const swiftFileNodes = context.getNodesInFile(f);
|
|
184
|
+
const objcMethods = [];
|
|
185
|
+
for (const of2 of files) {
|
|
186
|
+
if (!of2.endsWith(".m") && !of2.endsWith(".mm") && !of2.endsWith(".h")) continue;
|
|
187
|
+
const nodes = context.getNodesInFile(of2);
|
|
188
|
+
for (const n of nodes) {
|
|
189
|
+
if (n.kind === "method" || n.kind === "function") {
|
|
190
|
+
objcMethods.push(n);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
for (const swiftNode of swiftFileNodes) {
|
|
195
|
+
if (swiftNode.kind !== "method" && swiftNode.kind !== "function") continue;
|
|
196
|
+
for (const objcMethod of objcMethods) {
|
|
197
|
+
const nameMatch = swiftNode.name === objcMethod.name;
|
|
198
|
+
if (nameMatch) {
|
|
199
|
+
const exists = edges.some(
|
|
200
|
+
(e) => e.source === swiftNode.id && e.target === objcMethod.id
|
|
201
|
+
);
|
|
202
|
+
if (!exists) {
|
|
203
|
+
edges.push({
|
|
204
|
+
source: swiftNode.id,
|
|
205
|
+
target: objcMethod.id,
|
|
206
|
+
kind: "calls",
|
|
207
|
+
confidence: "inferred",
|
|
208
|
+
confidenceScore: 0.7,
|
|
209
|
+
metadata: {
|
|
210
|
+
synthesizedBy: "swift-objc-bridge",
|
|
211
|
+
provenance: "heuristic",
|
|
212
|
+
direction: "swift-to-objc"
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return edges;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
224
|
+
0 && (module.exports = {
|
|
225
|
+
swiftObjcBridge
|
|
226
|
+
});
|
|
227
|
+
//# sourceMappingURL=swift-objc.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/resolution/bridges/swift-objc.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Swift \u2194 ObjC Bridge\n *\n * Synthesizes edges between Swift functions with @objc attributes and\n * Objective-C message sends that match the mangled selector.\n *\n * Name mangling rules:\n * - func foo(bar: Int) \u2192 -fooWithBar:\n * - init(name:) \u2192 -initWithName:\n * - var x \u2192 -x / -setX:\n */\n\nimport type { Node } from '../../types';\nimport type { ResolutionContext } from '../../frameworks/types';\nimport type { BridgeResolver, SynthesizedEdge } from './index';\n\n// \u2500\u2500 Swift \u2192 ObjC name mangling \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Convert a Swift function signature to its ObjC selector equivalent.\n * Examples:\n * foo(bar:baz:) \u2192 fooWithBar:baz:\n * init(name:) \u2192 initWithName:\n * doSomething() \u2192 doSomething\n */\nfunction swiftToObjcSelector(funcName: string, signature?: string): string[] {\n const selectors: string[] = [];\n\n // Extract parameter labels from signature if available\n // Signature format: func foo(bar: Int, baz: String)\n if (signature) {\n const paramMatch = signature.match(/\\(([^)]*)\\)/);\n if (paramMatch) {\n const params = paramMatch[1].split(',').map(p => p.trim()).filter(Boolean);\n if (params.length === 0) {\n // No params: selector is just the function name\n selectors.push(funcName);\n } else {\n // First param label gets \"With\" prefix (Cocoa convention)\n const labels = params.map(p => {\n const parts = p.split(':')[0].trim().split(/\\s+/);\n return parts[0]; // external label\n });\n\n if (labels.length > 0 && labels[0] !== '_') {\n const firstLabel = labels[0];\n const capitalizedFirst = firstLabel.charAt(0).toUpperCase() + firstLabel.slice(1);\n let selector = `${funcName}With${capitalizedFirst}:`;\n for (let i = 1; i < labels.length; i++) {\n if (labels[i] !== '_') {\n selector += `${labels[i]}:`;\n } else {\n selector += ':';\n }\n }\n selectors.push(selector);\n }\n\n // Also try direct selector without \"With\" prefix\n let directSelector = `${funcName}:`;\n for (let i = 1; i < labels.length; i++) {\n if (labels[i] !== '_') {\n directSelector += `${labels[i]}:`;\n } else {\n directSelector += ':';\n }\n }\n selectors.push(directSelector);\n }\n }\n }\n\n // Always include the bare name as a candidate\n selectors.push(funcName);\n\n // For init methods, add initWith variant\n if (funcName === 'init' && signature) {\n const paramMatch = signature.match(/\\(([^)]*)\\)/);\n if (paramMatch) {\n const params = paramMatch[1].split(',').map(p => p.trim()).filter(Boolean);\n if (params.length > 0) {\n const firstLabel = params[0].split(':')[0].trim().split(/\\s+/)[0];\n if (firstLabel !== '_') {\n const cap = firstLabel.charAt(0).toUpperCase() + firstLabel.slice(1);\n selectors.push(`initWith${cap}:`);\n }\n }\n }\n }\n\n return [...new Set(selectors)];\n}\n\n/**\n * Generate ObjC property accessor selectors for a Swift property.\n * var x \u2192 [x, setX:]\n */\nfunction swiftPropertyToObjcSelectors(propName: string): string[] {\n const capitalized = propName.charAt(0).toUpperCase() + propName.slice(1);\n return [propName, `set${capitalized}:`];\n}\n\n// \u2500\u2500 Bridge Implementation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const swiftObjcBridge: BridgeResolver = {\n name: 'swift-objc-bridge',\n\n detect(context: ResolutionContext): boolean {\n const files = context.getAllFiles();\n let hasSwift = false;\n let hasObjc = false;\n\n for (const f of files) {\n if (f.endsWith('.swift')) hasSwift = true;\n if (f.endsWith('.m') || f.endsWith('.mm') || f.endsWith('.h')) hasObjc = true;\n if (hasSwift && hasObjc) return true;\n }\n\n return false;\n },\n\n resolve(context: ResolutionContext): SynthesizedEdge[] {\n const edges: SynthesizedEdge[] = [];\n const files = context.getAllFiles();\n\n // Collect Swift @objc functions and properties\n const swiftNodes: Node[] = [];\n for (const f of files) {\n if (f.endsWith('.swift')) {\n const nodes = context.getNodesInFile(f);\n for (const node of nodes) {\n if (\n (node.kind === 'function' || node.kind === 'method' || node.kind === 'property') &&\n node.decorators?.includes('objc')\n ) {\n swiftNodes.push(node);\n }\n }\n }\n }\n\n if (swiftNodes.length === 0) return edges;\n\n // Build selector \u2192 Swift node map\n const selectorToSwiftNode = new Map<string, Node>();\n for (const node of swiftNodes) {\n if (node.kind === 'property') {\n const selectors = swiftPropertyToObjcSelectors(node.name);\n for (const sel of selectors) {\n selectorToSwiftNode.set(sel, node);\n }\n } else {\n const selectors = swiftToObjcSelector(node.name, node.signature);\n for (const sel of selectors) {\n selectorToSwiftNode.set(sel, node);\n }\n }\n }\n\n // Scan ObjC files for message sends matching selectors\n for (const f of files) {\n if (!f.endsWith('.m') && !f.endsWith('.mm')) continue;\n\n const content = context.readFile(f);\n if (!content) continue;\n\n const objcNodes = context.getNodesInFile(f);\n\n // Look for message send patterns: [obj selectorName...]\n // Also look for method declarations that call Swift methods\n for (const node of objcNodes) {\n if (node.kind !== 'method' && node.kind !== 'function') continue;\n\n // Check if this ObjC method name matches a Swift selector\n const swiftTarget = selectorToSwiftNode.get(node.name);\n if (swiftTarget) {\n edges.push({\n source: node.id,\n target: swiftTarget.id,\n kind: 'calls',\n confidence: 'inferred',\n confidenceScore: 0.85,\n metadata: {\n synthesizedBy: 'swift-objc-bridge',\n provenance: 'heuristic',\n direction: 'objc-to-swift',\n },\n });\n }\n }\n\n // Regex-based scan for message sends in ObjC source\n const msgSendRegex = /\\[[\\w\\s.]+\\s+(\\w+(?::\\w*)*)\\s*\\]/g;\n let match: RegExpExecArray | null;\n while ((match = msgSendRegex.exec(content)) !== null) {\n const selector = match[1];\n const swiftTarget = selectorToSwiftNode.get(selector);\n if (!swiftTarget) continue;\n\n // Find the enclosing ObjC function/method for this call site\n const lineNum = content.slice(0, match.index).split('\\n').length;\n const enclosingNode = objcNodes.find(\n n => (n.kind === 'method' || n.kind === 'function') &&\n n.startLine <= lineNum && n.endLine >= lineNum\n );\n\n if (enclosingNode) {\n // Avoid duplicate edges\n const exists = edges.some(\n e => e.source === enclosingNode.id && e.target === swiftTarget.id\n );\n if (!exists) {\n edges.push({\n source: enclosingNode.id,\n target: swiftTarget.id,\n kind: 'calls',\n confidence: 'inferred',\n confidenceScore: 0.8,\n metadata: {\n synthesizedBy: 'swift-objc-bridge',\n provenance: 'heuristic',\n direction: 'objc-to-swift',\n selector,\n },\n });\n }\n }\n }\n }\n\n // Reverse direction: Swift calling ObjC methods\n // Look for Swift files calling ObjC selectors\n for (const f of files) {\n if (!f.endsWith('.swift')) continue;\n\n const content = context.readFile(f);\n if (!content) continue;\n\n const swiftFileNodes = context.getNodesInFile(f);\n\n // Collect all ObjC method nodes for matching\n const objcMethods: Node[] = [];\n for (const of2 of files) {\n if (!of2.endsWith('.m') && !of2.endsWith('.mm') && !of2.endsWith('.h')) continue;\n const nodes = context.getNodesInFile(of2);\n for (const n of nodes) {\n if (n.kind === 'method' || n.kind === 'function') {\n objcMethods.push(n);\n }\n }\n }\n\n // Match Swift method calls to ObjC implementations\n for (const swiftNode of swiftFileNodes) {\n if (swiftNode.kind !== 'method' && swiftNode.kind !== 'function') continue;\n\n for (const objcMethod of objcMethods) {\n // Check if the Swift node references the ObjC method name\n const nameMatch = swiftNode.name === objcMethod.name;\n if (nameMatch) {\n const exists = edges.some(\n e => e.source === swiftNode.id && e.target === objcMethod.id\n );\n if (!exists) {\n edges.push({\n source: swiftNode.id,\n target: objcMethod.id,\n kind: 'calls',\n confidence: 'inferred',\n confidenceScore: 0.7,\n metadata: {\n synthesizedBy: 'swift-objc-bridge',\n provenance: 'heuristic',\n direction: 'swift-to-objc',\n },\n });\n }\n }\n }\n }\n }\n\n return edges;\n },\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Native TurboModules Bridge
|
|
3
|
+
*
|
|
4
|
+
* Synthesizes edges between TypeScript TurboModule spec interfaces and their
|
|
5
|
+
* native implementations. TurboModules use codegen specs (Native*.ts files)
|
|
6
|
+
* as the source of truth for the JS ↔ Native contract.
|
|
7
|
+
*/
|
|
8
|
+
import type { BridgeResolver } from './index';
|
|
9
|
+
export declare const turboModulesBridge: BridgeResolver;
|
|
10
|
+
//# sourceMappingURL=turbomodules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"turbomodules.d.ts","sourceRoot":"","sources":["../../../src/resolution/bridges/turbomodules.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,SAAS,CAAC;AA6J/D,eAAO,MAAM,kBAAkB,EAAE,cA8EhC,CAAC"}
|