homegraph 0.9.10 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +243 -193
- package/dist/bin/fatal-handler.d.ts +20 -0
- package/dist/bin/fatal-handler.d.ts.map +1 -0
- package/dist/bin/fatal-handler.js +118 -0
- package/dist/bin/fatal-handler.js.map +1 -0
- package/dist/bin/homegraph.d.ts +6 -6
- package/dist/bin/homegraph.js +532 -109
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/bin/node-version-check.d.ts +4 -4
- package/dist/bin/node-version-check.js +12 -12
- package/dist/bin/uninstall.d.ts +1 -1
- package/dist/bin/uninstall.js +1 -1
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +8 -1
- package/dist/context/index.js.map +1 -1
- package/dist/db/index.d.ts +22 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +48 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +26 -17
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/queries.d.ts +21 -1
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +180 -137
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.sql +152 -151
- package/dist/db/sqlite-adapter.d.ts +1 -1
- package/dist/db/sqlite-adapter.js +3 -3
- package/dist/directory.d.ts +87 -6
- package/dist/directory.d.ts.map +1 -1
- package/dist/directory.js +319 -57
- package/dist/directory.js.map +1 -1
- package/dist/errors.d.ts +15 -15
- package/dist/errors.js +20 -20
- package/dist/extraction/astro-extractor.d.ts +79 -0
- package/dist/extraction/astro-extractor.d.ts.map +1 -0
- package/dist/extraction/astro-extractor.js +320 -0
- package/dist/extraction/astro-extractor.js.map +1 -0
- package/dist/extraction/context.d.ts +1 -1
- package/dist/extraction/context.js +1 -1
- package/dist/extraction/extraction-version.d.ts +2 -2
- package/dist/extraction/extraction-version.d.ts.map +1 -1
- package/dist/extraction/extraction-version.js +2 -2
- package/dist/extraction/extraction-version.js.map +1 -1
- package/dist/extraction/function-ref.d.ts +118 -0
- package/dist/extraction/function-ref.d.ts.map +1 -0
- package/dist/extraction/function-ref.js +727 -0
- package/dist/extraction/function-ref.js.map +1 -0
- package/dist/extraction/generated-detection.d.ts.map +1 -1
- package/dist/extraction/generated-detection.js +3 -0
- package/dist/extraction/generated-detection.js.map +1 -1
- package/dist/extraction/grammars.d.ts +15 -5
- package/dist/extraction/grammars.d.ts.map +1 -1
- package/dist/extraction/grammars.js +44 -10
- package/dist/extraction/grammars.js.map +1 -1
- package/dist/extraction/index.d.ts +37 -0
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +562 -70
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts-viewtree.d.ts +22 -0
- package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -0
- package/dist/extraction/languages/arkts-viewtree.js +133 -0
- package/dist/extraction/languages/arkts-viewtree.js.map +1 -0
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +211 -20
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/languages/c-cpp.d.ts +8 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/dist/extraction/languages/c-cpp.js +104 -2
- package/dist/extraction/languages/c-cpp.js.map +1 -1
- package/dist/extraction/languages/csharp.d.ts.map +1 -1
- package/dist/extraction/languages/csharp.js +58 -3
- package/dist/extraction/languages/csharp.js.map +1 -1
- package/dist/extraction/languages/dart.d.ts.map +1 -1
- package/dist/extraction/languages/dart.js +183 -1
- package/dist/extraction/languages/dart.js.map +1 -1
- package/dist/extraction/languages/go.d.ts.map +1 -1
- package/dist/extraction/languages/go.js +37 -0
- package/dist/extraction/languages/go.js.map +1 -1
- package/dist/extraction/languages/index.d.ts.map +1 -1
- package/dist/extraction/languages/index.js +2 -0
- package/dist/extraction/languages/index.js.map +1 -1
- package/dist/extraction/languages/java.d.ts.map +1 -1
- package/dist/extraction/languages/java.js +241 -0
- package/dist/extraction/languages/java.js.map +1 -1
- package/dist/extraction/languages/javascript.d.ts.map +1 -1
- package/dist/extraction/languages/javascript.js +16 -0
- package/dist/extraction/languages/javascript.js.map +1 -1
- package/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/dist/extraction/languages/kotlin.js +94 -0
- package/dist/extraction/languages/kotlin.js.map +1 -1
- package/dist/extraction/languages/objc.d.ts.map +1 -1
- package/dist/extraction/languages/objc.js +42 -0
- package/dist/extraction/languages/objc.js.map +1 -1
- package/dist/extraction/languages/pascal.d.ts.map +1 -1
- package/dist/extraction/languages/pascal.js +11 -0
- package/dist/extraction/languages/pascal.js.map +1 -1
- package/dist/extraction/languages/php.d.ts.map +1 -1
- package/dist/extraction/languages/php.js +77 -1
- package/dist/extraction/languages/php.js.map +1 -1
- package/dist/extraction/languages/r.d.ts +3 -0
- package/dist/extraction/languages/r.d.ts.map +1 -0
- package/dist/extraction/languages/r.js +314 -0
- package/dist/extraction/languages/r.js.map +1 -0
- package/dist/extraction/languages/rust.d.ts.map +1 -1
- package/dist/extraction/languages/rust.js +29 -0
- package/dist/extraction/languages/rust.js.map +1 -1
- package/dist/extraction/languages/scala.d.ts.map +1 -1
- package/dist/extraction/languages/scala.js +44 -9
- package/dist/extraction/languages/scala.js.map +1 -1
- package/dist/extraction/languages/swift.d.ts.map +1 -1
- package/dist/extraction/languages/swift.js +61 -0
- package/dist/extraction/languages/swift.js.map +1 -1
- package/dist/extraction/languages/typescript.d.ts +13 -0
- package/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/dist/extraction/languages/typescript.js +38 -0
- package/dist/extraction/languages/typescript.js.map +1 -1
- package/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/dist/extraction/liquid-extractor.js +4 -1
- package/dist/extraction/liquid-extractor.js.map +1 -1
- package/dist/extraction/parse-worker.js +4 -1
- package/dist/extraction/parse-worker.js.map +1 -1
- package/dist/extraction/svelte-extractor.d.ts.map +1 -1
- package/dist/extraction/svelte-extractor.js +6 -3
- package/dist/extraction/svelte-extractor.js.map +1 -1
- package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/dist/extraction/tree-sitter-helpers.js +59 -10
- package/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/dist/extraction/tree-sitter-types.d.ts +29 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.d.ts +192 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/dist/extraction/tree-sitter.js +1553 -45
- package/dist/extraction/tree-sitter.js.map +1 -1
- package/dist/extraction/vue-extractor.d.ts.map +1 -1
- package/dist/extraction/vue-extractor.js +6 -3
- package/dist/extraction/vue-extractor.js.map +1 -1
- package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
- package/dist/graph/traversal.d.ts.map +1 -1
- package/dist/graph/traversal.js +11 -2
- package/dist/graph/traversal.js.map +1 -1
- package/dist/index.d.ts +64 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +137 -41
- package/dist/index.js.map +1 -1
- package/dist/installer/config-writer.d.ts +1 -1
- package/dist/installer/config-writer.js +1 -1
- package/dist/installer/index.d.ts +4 -4
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +100 -73
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/instructions-template.d.ts +34 -11
- package/dist/installer/instructions-template.d.ts.map +1 -1
- package/dist/installer/instructions-template.js +44 -12
- package/dist/installer/instructions-template.js.map +1 -1
- package/dist/installer/targets/antigravity.d.ts +6 -6
- package/dist/installer/targets/antigravity.js +14 -14
- package/dist/installer/targets/claude.d.ts +19 -13
- package/dist/installer/targets/claude.d.ts.map +1 -1
- package/dist/installer/targets/claude.js +97 -29
- package/dist/installer/targets/claude.js.map +1 -1
- package/dist/installer/targets/codebuddy.d.ts +17 -0
- package/dist/installer/targets/codebuddy.d.ts.map +1 -0
- package/dist/installer/targets/codebuddy.js +150 -0
- package/dist/installer/targets/codebuddy.js.map +1 -0
- package/dist/installer/targets/codex.js +5 -7
- package/dist/installer/targets/codex.js.map +1 -1
- package/dist/installer/targets/cursor.d.ts +1 -1
- package/dist/installer/targets/cursor.js +7 -7
- package/dist/installer/targets/deveco.d.ts +23 -0
- package/dist/installer/targets/deveco.d.ts.map +1 -0
- package/dist/installer/targets/deveco.js +217 -0
- package/dist/installer/targets/deveco.js.map +1 -0
- package/dist/installer/targets/gemini.js +5 -7
- package/dist/installer/targets/gemini.js.map +1 -1
- package/dist/installer/targets/hermes.js +15 -15
- package/dist/installer/targets/kiro.d.ts +1 -1
- package/dist/installer/targets/kiro.js +4 -4
- package/dist/installer/targets/opencode.d.ts +9 -1
- package/dist/installer/targets/opencode.d.ts.map +1 -1
- package/dist/installer/targets/opencode.js +92 -41
- package/dist/installer/targets/opencode.js.map +1 -1
- package/dist/installer/targets/registry.d.ts.map +1 -1
- package/dist/installer/targets/registry.js +4 -0
- package/dist/installer/targets/registry.js.map +1 -1
- package/dist/installer/targets/shared.d.ts +28 -4
- package/dist/installer/targets/shared.d.ts.map +1 -1
- package/dist/installer/targets/shared.js +32 -15
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/installer/targets/types.d.ts +9 -2
- package/dist/installer/targets/types.d.ts.map +1 -1
- package/dist/mcp/daemon-manager.d.ts +42 -0
- package/dist/mcp/daemon-manager.d.ts.map +1 -0
- package/dist/mcp/daemon-manager.js +129 -0
- package/dist/mcp/daemon-manager.js.map +1 -0
- package/dist/mcp/daemon-paths.d.ts +1 -1
- package/dist/mcp/daemon-paths.js +3 -3
- package/dist/mcp/daemon-registry.d.ts +47 -0
- package/dist/mcp/daemon-registry.d.ts.map +1 -0
- package/dist/mcp/daemon-registry.js +229 -0
- package/dist/mcp/daemon-registry.js.map +1 -0
- package/dist/mcp/daemon.d.ts.map +1 -1
- package/dist/mcp/daemon.js +27 -6
- package/dist/mcp/daemon.js.map +1 -1
- package/dist/mcp/dynamic-boundaries.d.ts +41 -0
- package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
- package/dist/mcp/dynamic-boundaries.js +359 -0
- package/dist/mcp/dynamic-boundaries.js.map +1 -0
- package/dist/mcp/engine.d.ts +4 -4
- package/dist/mcp/engine.d.ts.map +1 -1
- package/dist/mcp/engine.js +32 -24
- package/dist/mcp/engine.js.map +1 -1
- package/dist/mcp/index.d.ts +8 -7
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +39 -18
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/liveness-watchdog.d.ts +18 -0
- package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
- package/dist/mcp/liveness-watchdog.js +207 -0
- package/dist/mcp/liveness-watchdog.js.map +1 -0
- package/dist/mcp/proxy.d.ts +6 -0
- package/dist/mcp/proxy.d.ts.map +1 -1
- package/dist/mcp/proxy.js +75 -18
- package/dist/mcp/proxy.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +22 -7
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +91 -59
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/session.d.ts +3 -1
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +43 -7
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/stdin-teardown.d.ts +27 -0
- package/dist/mcp/stdin-teardown.d.ts.map +1 -0
- package/dist/mcp/stdin-teardown.js +49 -0
- package/dist/mcp/stdin-teardown.js.map +1 -0
- package/dist/mcp/tools.d.ts +137 -16
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1271 -219
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/transport.d.ts +1 -1
- package/dist/mcp/transport.d.ts.map +1 -1
- package/dist/mcp/transport.js +20 -4
- package/dist/mcp/transport.js.map +1 -1
- package/dist/mcp/version.d.ts +1 -1
- package/dist/mcp/version.js +2 -2
- package/dist/project-config.d.ts +36 -0
- package/dist/project-config.d.ts.map +1 -0
- package/dist/project-config.js +235 -0
- package/dist/project-config.js.map +1 -0
- package/dist/reasoning/config.d.ts +45 -0
- package/dist/reasoning/config.d.ts.map +1 -0
- package/dist/reasoning/config.js +171 -0
- package/dist/reasoning/config.js.map +1 -0
- package/dist/reasoning/credentials.d.ts +5 -0
- package/dist/reasoning/credentials.d.ts.map +1 -0
- package/dist/reasoning/credentials.js +83 -0
- package/dist/reasoning/credentials.js.map +1 -0
- package/dist/reasoning/login.d.ts +21 -0
- package/dist/reasoning/login.d.ts.map +1 -0
- package/dist/reasoning/login.js +85 -0
- package/dist/reasoning/login.js.map +1 -0
- package/dist/reasoning/reasoner.d.ts +43 -0
- package/dist/reasoning/reasoner.d.ts.map +1 -0
- package/dist/reasoning/reasoner.js +308 -0
- package/dist/reasoning/reasoner.js.map +1 -0
- package/dist/resolution/c-fnptr-synthesizer.d.ts +33 -0
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
- package/dist/resolution/c-fnptr-synthesizer.js +352 -0
- package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
- package/dist/resolution/callback-synthesizer.d.ts +6 -1
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +1197 -1
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/frameworks/arkts-entry.d.ts +12 -0
- package/dist/resolution/frameworks/arkts-entry.d.ts.map +1 -0
- package/dist/resolution/frameworks/arkts-entry.js +214 -0
- package/dist/resolution/frameworks/arkts-entry.js.map +1 -0
- package/dist/resolution/frameworks/arkts-napi.d.ts +3 -0
- package/dist/resolution/frameworks/arkts-napi.d.ts.map +1 -0
- package/dist/resolution/frameworks/arkts-napi.js +166 -0
- package/dist/resolution/frameworks/arkts-napi.js.map +1 -0
- package/dist/resolution/frameworks/astro.d.ts +9 -0
- package/dist/resolution/frameworks/astro.d.ts.map +1 -0
- package/dist/resolution/frameworks/astro.js +169 -0
- package/dist/resolution/frameworks/astro.js.map +1 -0
- package/dist/resolution/frameworks/goframe.d.ts +41 -0
- package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
- package/dist/resolution/frameworks/goframe.js +112 -0
- package/dist/resolution/frameworks/goframe.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +3 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/dist/resolution/frameworks/index.js +17 -1
- package/dist/resolution/frameworks/index.js.map +1 -1
- package/dist/resolution/frameworks/java.js +6 -1
- package/dist/resolution/frameworks/java.js.map +1 -1
- package/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/dist/resolution/frameworks/react.js +32 -63
- package/dist/resolution/frameworks/react.js.map +1 -1
- package/dist/resolution/frameworks/svelte.js +6 -2
- package/dist/resolution/frameworks/svelte.js.map +1 -1
- package/dist/resolution/frameworks/vue.js +24 -27
- package/dist/resolution/frameworks/vue.js.map +1 -1
- package/dist/resolution/goframe-synthesizer.d.ts +28 -0
- package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
- package/dist/resolution/goframe-synthesizer.js +158 -0
- package/dist/resolution/goframe-synthesizer.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +10 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -1
- package/dist/resolution/import-resolver.js +125 -2
- package/dist/resolution/import-resolver.js.map +1 -1
- package/dist/resolution/index.d.ts +37 -0
- package/dist/resolution/index.d.ts.map +1 -1
- package/dist/resolution/index.js +306 -3
- package/dist/resolution/index.js.map +1 -1
- package/dist/resolution/name-matcher.d.ts +41 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -1
- package/dist/resolution/name-matcher.js +519 -14
- package/dist/resolution/name-matcher.js.map +1 -1
- package/dist/resolution/strip-comments.d.ts +1 -1
- package/dist/resolution/strip-comments.d.ts.map +1 -1
- package/dist/resolution/strip-comments.js +2 -0
- package/dist/resolution/strip-comments.js.map +1 -1
- package/dist/resolution/types.d.ts +20 -3
- package/dist/resolution/types.d.ts.map +1 -1
- package/dist/search/query-utils.d.ts +17 -1
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +79 -10
- package/dist/search/query-utils.js.map +1 -1
- package/dist/sync/git-hooks.d.ts +4 -4
- package/dist/sync/git-hooks.js +5 -5
- package/dist/sync/watcher.d.ts +69 -2
- package/dist/sync/watcher.d.ts.map +1 -1
- package/dist/sync/watcher.js +226 -21
- package/dist/sync/watcher.js.map +1 -1
- package/dist/sync/worktree.d.ts +3 -3
- package/dist/sync/worktree.js +5 -5
- package/dist/telemetry/index.d.ts +143 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +541 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/types.d.ts +18 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/upgrade/index.d.ts.map +1 -1
- package/dist/upgrade/index.js +46 -10
- package/dist/upgrade/index.js.map +1 -1
- package/dist/utils.d.ts +46 -27
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +87 -53
- package/dist/utils.js.map +1 -1
- package/package.json +57 -57
- package/scripts/add-lang/bench.sh +60 -60
- package/scripts/add-lang/check-grammar.mjs +75 -75
- package/scripts/add-lang/dump-ast.mjs +103 -103
- package/scripts/add-lang/verify-extraction.mjs +70 -70
- package/scripts/agent-eval/ab-adoption.sh +91 -0
- package/scripts/agent-eval/ab-hook.sh +86 -0
- package/scripts/agent-eval/ab-impl.sh +78 -0
- package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -0
- package/scripts/agent-eval/ab-sufficiency.sh +78 -0
- package/scripts/agent-eval/arms-F.sh +21 -21
- package/scripts/agent-eval/arms-matrix.sh +37 -37
- package/scripts/agent-eval/audit.sh +68 -68
- package/scripts/agent-eval/bench-readme.sh +28 -28
- package/scripts/agent-eval/bench-why-repo.sh +22 -22
- package/scripts/agent-eval/block-read-hook.sh +19 -19
- package/scripts/agent-eval/hook-settings.json +15 -15
- package/scripts/agent-eval/itrun.sh +120 -120
- package/scripts/agent-eval/offload-eval-3arm.sh +72 -0
- package/scripts/agent-eval/offload-eval-cost.mjs +133 -0
- package/scripts/agent-eval/offload-eval-effort.mjs +108 -0
- package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -0
- package/scripts/agent-eval/offload-eval-frontload.sh +47 -0
- package/scripts/agent-eval/offload-eval-ground-truth.json +18 -0
- package/scripts/agent-eval/offload-eval-hook.mjs +84 -0
- package/scripts/agent-eval/offload-eval-judge.mjs +103 -0
- package/scripts/agent-eval/offload-eval-matrix.sh +20 -0
- package/scripts/agent-eval/offload-eval-metrics.mjs +94 -0
- package/scripts/agent-eval/offload-eval-refs1.sh +50 -0
- package/scripts/agent-eval/offload-eval-setup.sh +24 -0
- package/scripts/agent-eval/offload-eval-styles.sh +72 -0
- package/scripts/agent-eval/offload-eval-summarize.mjs +68 -0
- package/scripts/agent-eval/offload-eval.md +76 -0
- package/scripts/agent-eval/parse-arms.mjs +116 -116
- package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
- package/scripts/agent-eval/parse-run.mjs +45 -45
- package/scripts/agent-eval/parse-session.mjs +93 -93
- package/scripts/agent-eval/probe-context.mjs +21 -21
- package/scripts/agent-eval/probe-explore.mjs +40 -40
- package/scripts/agent-eval/probe-node.mjs +20 -20
- package/scripts/agent-eval/probe-sweep.mjs +119 -119
- package/scripts/agent-eval/probe-trace.mjs +20 -20
- package/scripts/agent-eval/redirect-read-hook.sh +38 -0
- package/scripts/agent-eval/run-agent.sh +34 -34
- package/scripts/agent-eval/run-all.sh +69 -67
- package/scripts/agent-eval/run-arms.sh +56 -56
- package/scripts/agent-eval/seq-matrix.mjs +137 -137
- package/scripts/build-bundle.sh +118 -118
- package/scripts/extract-release-notes.mjs +130 -130
- package/scripts/local-install.sh +41 -41
- package/scripts/npm-sdk.js +75 -75
- package/scripts/npm-shim.js +246 -246
- package/scripts/pack-npm.sh +119 -119
- package/scripts/prepare-release.mjs +270 -270
- package/scripts/qa_eval/README.md +400 -0
- package/scripts/qa_eval/agent_runner.py +526 -0
- package/scripts/qa_eval/data/.gitignore +4 -0
- package/scripts/qa_eval/data/test-set.jsonl +22 -0
- package/scripts/qa_eval/eval_metrics.py +233 -0
- package/scripts/qa_eval/external_agent.py +577 -0
- package/scripts/qa_eval/llm_config.py +92 -0
- package/scripts/qa_eval/memory_monitor.py +132 -0
- package/scripts/qa_eval/my_answer_accuracy.py +187 -0
- package/scripts/qa_eval/requirements.txt +2 -0
- package/scripts/qa_eval/run_pipeline.py +702 -0
- package/scripts/qa_eval/stats_efficiency.py +279 -0
- package/scripts/qa_eval/stats_scores.py +207 -0
- package/dist/bin/codegraph.d.ts +0 -26
- package/dist/bin/codegraph.d.ts.map +0 -1
- package/dist/bin/codegraph.js +0 -1572
- package/dist/bin/codegraph.js.map +0 -1
- package/dist/extraction/arkanalyzer-extractor.d.ts +0 -6
- package/dist/extraction/arkanalyzer-extractor.d.ts.map +0 -1
- package/dist/extraction/arkanalyzer-extractor.js +0 -11
- package/dist/extraction/arkanalyzer-extractor.js.map +0 -1
- package/dist/extraction/arkanalyzer-project.d.ts +0 -20
- package/dist/extraction/arkanalyzer-project.d.ts.map +0 -1
- package/dist/extraction/arkanalyzer-project.js +0 -596
- package/dist/extraction/arkanalyzer-project.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkts-napi.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/arkts-napi.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,iBAAiB,EAIlB,MAAM,UAAU,CAAC;AAsGlB,eAAO,MAAM,iBAAiB,EAAE,iBA+E/B,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.arktsNapiResolver = void 0;
|
|
4
|
+
/** JS-visible NAPI export: `ClassName_methodName`. */
|
|
5
|
+
const NAPI_SYMBOL_RE = /^[A-Z][A-Za-z0-9_]*_[A-Za-z0-9_]+$/;
|
|
6
|
+
/** `{"Asset_setCropRect", nullptr, Asset_setCropRect, …}` descriptor rows. */
|
|
7
|
+
const NAPI_DESC_RE = /\{\s*["']([A-Z][A-Za-z0-9_]*(?:_[A-Za-z0-9_]+)+)["']\s*,\s*nullptr\s*,\s*([A-Za-z_][A-Za-z0-9_]*)/g;
|
|
8
|
+
/** `static napi_value Asset_setCropRect(` callback definitions. */
|
|
9
|
+
const NAPI_FUNC_RE = /(?:static\s+)?napi_value\s+([A-Z][A-Za-z0-9_]*(?:_[A-Za-z0-9_]+)+)\s*\(/g;
|
|
10
|
+
const CPP_LANGUAGES = new Set(['cpp', 'c']);
|
|
11
|
+
function isNapiSymbol(name) {
|
|
12
|
+
return NAPI_SYMBOL_RE.test(name);
|
|
13
|
+
}
|
|
14
|
+
function lineOf(source, idx) {
|
|
15
|
+
let line = 1;
|
|
16
|
+
for (let i = 0; i < idx && i < source.length; i++) {
|
|
17
|
+
if (source.charCodeAt(i) === 10)
|
|
18
|
+
line++;
|
|
19
|
+
}
|
|
20
|
+
return line;
|
|
21
|
+
}
|
|
22
|
+
function parseNapiExports(source) {
|
|
23
|
+
const results = [];
|
|
24
|
+
const seen = new Set();
|
|
25
|
+
NAPI_DESC_RE.lastIndex = 0;
|
|
26
|
+
let m;
|
|
27
|
+
while ((m = NAPI_DESC_RE.exec(source)) !== null) {
|
|
28
|
+
const jsName = m[1];
|
|
29
|
+
const nativeName = m[2];
|
|
30
|
+
if (!isNapiSymbol(jsName))
|
|
31
|
+
continue;
|
|
32
|
+
if (seen.has(jsName))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(jsName);
|
|
35
|
+
results.push({ jsName, nativeName, line: lineOf(source, m.index) });
|
|
36
|
+
}
|
|
37
|
+
NAPI_FUNC_RE.lastIndex = 0;
|
|
38
|
+
while ((m = NAPI_FUNC_RE.exec(source)) !== null) {
|
|
39
|
+
const name = m[1];
|
|
40
|
+
if (!isNapiSymbol(name))
|
|
41
|
+
continue;
|
|
42
|
+
if (seen.has(name))
|
|
43
|
+
continue;
|
|
44
|
+
seen.add(name);
|
|
45
|
+
results.push({ jsName: name, nativeName: name, line: lineOf(source, m.index) });
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
}
|
|
49
|
+
const napiBySymbol = new WeakMap();
|
|
50
|
+
function buildNapiMap(context) {
|
|
51
|
+
const cached = napiBySymbol.get(context);
|
|
52
|
+
if (cached)
|
|
53
|
+
return cached;
|
|
54
|
+
const bySymbol = new Map();
|
|
55
|
+
const add = (symbol, node) => {
|
|
56
|
+
const arr = bySymbol.get(symbol);
|
|
57
|
+
if (arr)
|
|
58
|
+
arr.push(node);
|
|
59
|
+
else
|
|
60
|
+
bySymbol.set(symbol, [node]);
|
|
61
|
+
};
|
|
62
|
+
for (const node of context.getNodesByKind('function')) {
|
|
63
|
+
if (!CPP_LANGUAGES.has(node.language))
|
|
64
|
+
continue;
|
|
65
|
+
if (isNapiSymbol(node.name))
|
|
66
|
+
add(node.name, node);
|
|
67
|
+
}
|
|
68
|
+
for (const file of context.getAllFiles()) {
|
|
69
|
+
if (!file.endsWith('.cpp') && !file.endsWith('.cc') && !file.endsWith('.cxx'))
|
|
70
|
+
continue;
|
|
71
|
+
const source = context.readFile(file);
|
|
72
|
+
if (!source || !/\bnapi_(define_properties|module_register)\b/.test(source))
|
|
73
|
+
continue;
|
|
74
|
+
for (const exp of parseNapiExports(source)) {
|
|
75
|
+
const candidates = context.getNodesByName(exp.nativeName).filter((n) => CPP_LANGUAGES.has(n.language) && n.filePath === file);
|
|
76
|
+
const node = candidates[0];
|
|
77
|
+
if (node)
|
|
78
|
+
add(exp.jsName, node);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
napiBySymbol.set(context, bySymbol);
|
|
82
|
+
return bySymbol;
|
|
83
|
+
}
|
|
84
|
+
function napiSymbolFromRef(ref) {
|
|
85
|
+
const name = ref.referenceName.includes('.')
|
|
86
|
+
? ref.referenceName.slice(ref.referenceName.lastIndexOf('.') + 1)
|
|
87
|
+
: ref.referenceName;
|
|
88
|
+
return isNapiSymbol(name) ? name : null;
|
|
89
|
+
}
|
|
90
|
+
exports.arktsNapiResolver = {
|
|
91
|
+
name: 'arkts-napi',
|
|
92
|
+
languages: ['arkts', 'cpp', 'c'],
|
|
93
|
+
extract(filePath, source) {
|
|
94
|
+
if (!filePath.endsWith('.cpp') && !filePath.endsWith('.cc') && !filePath.endsWith('.cxx')) {
|
|
95
|
+
return { nodes: [], references: [] };
|
|
96
|
+
}
|
|
97
|
+
if (!/\bnapi_(define_properties|module_register)\b/.test(source)) {
|
|
98
|
+
return { nodes: [], references: [] };
|
|
99
|
+
}
|
|
100
|
+
const exports = parseNapiExports(source);
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const nodes = [];
|
|
103
|
+
const seen = new Set();
|
|
104
|
+
for (const exp of exports) {
|
|
105
|
+
if (seen.has(exp.jsName))
|
|
106
|
+
continue;
|
|
107
|
+
seen.add(exp.jsName);
|
|
108
|
+
nodes.push({
|
|
109
|
+
id: `arkts-napi:${filePath}:${exp.jsName}`,
|
|
110
|
+
kind: 'function',
|
|
111
|
+
name: exp.jsName,
|
|
112
|
+
qualifiedName: `${filePath}::${exp.jsName}`,
|
|
113
|
+
filePath,
|
|
114
|
+
language: 'cpp',
|
|
115
|
+
startLine: exp.line,
|
|
116
|
+
endLine: exp.line,
|
|
117
|
+
startColumn: 0,
|
|
118
|
+
endColumn: 0,
|
|
119
|
+
isExported: true,
|
|
120
|
+
docstring: `NAPI export ${exp.jsName}`,
|
|
121
|
+
signature: `napi_value ${exp.nativeName}(napi_env, napi_callback_info)`,
|
|
122
|
+
updatedAt: now,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return { nodes, references: [] };
|
|
126
|
+
},
|
|
127
|
+
detect(context) {
|
|
128
|
+
for (const file of context.getAllFiles()) {
|
|
129
|
+
if (file.endsWith('.ets') || file.endsWith('.ts')) {
|
|
130
|
+
const src = context.readFile(file);
|
|
131
|
+
if (src && /['"]lib[A-Za-z0-9_]+\.so['"]/.test(src))
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
if (file.endsWith('.cpp') || file.endsWith('.cc') || file.endsWith('.cxx')) {
|
|
135
|
+
const src = context.readFile(file);
|
|
136
|
+
if (src && /\bnapi_(define_properties|module_register)\b/.test(src))
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
},
|
|
142
|
+
claimsReference(name) {
|
|
143
|
+
const symbol = name.includes('.') ? name.slice(name.lastIndexOf('.') + 1) : name;
|
|
144
|
+
return isNapiSymbol(symbol);
|
|
145
|
+
},
|
|
146
|
+
resolve(ref, context) {
|
|
147
|
+
if (ref.language !== 'arkts' || ref.referenceKind !== 'calls')
|
|
148
|
+
return null;
|
|
149
|
+
const symbol = napiSymbolFromRef(ref);
|
|
150
|
+
if (!symbol)
|
|
151
|
+
return null;
|
|
152
|
+
const entries = buildNapiMap(context).get(symbol);
|
|
153
|
+
if (!entries || entries.length === 0)
|
|
154
|
+
return null;
|
|
155
|
+
const target = entries.find((n) => n.filePath.includes('napi')) ?? entries[0];
|
|
156
|
+
if (!target)
|
|
157
|
+
return null;
|
|
158
|
+
return {
|
|
159
|
+
original: ref,
|
|
160
|
+
targetNodeId: target.id,
|
|
161
|
+
confidence: 0.75,
|
|
162
|
+
resolvedBy: 'framework',
|
|
163
|
+
};
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=arkts-napi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkts-napi.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/arkts-napi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Astro Framework Resolver
|
|
3
|
+
*
|
|
4
|
+
* Handles Astro component references, the `Astro` global, `astro:*` virtual
|
|
5
|
+
* module imports, and Astro's `src/pages/` file-based routing.
|
|
6
|
+
*/
|
|
7
|
+
import { FrameworkResolver } from '../types';
|
|
8
|
+
export declare const astroResolver: FrameworkResolver;
|
|
9
|
+
//# sourceMappingURL=astro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/astro.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAiB5F,eAAO,MAAM,aAAa,EAAE,iBA+G3B,CAAC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Astro Framework Resolver
|
|
4
|
+
*
|
|
5
|
+
* Handles Astro component references, the `Astro` global, `astro:*` virtual
|
|
6
|
+
* module imports, and Astro's `src/pages/` file-based routing.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.astroResolver = void 0;
|
|
10
|
+
/**
|
|
11
|
+
* Astro virtual module prefixes — framework-provided, not user code
|
|
12
|
+
*/
|
|
13
|
+
const ASTRO_VIRTUAL_MODULES = [
|
|
14
|
+
'astro:content',
|
|
15
|
+
'astro:assets',
|
|
16
|
+
'astro:actions',
|
|
17
|
+
'astro:env',
|
|
18
|
+
'astro:i18n',
|
|
19
|
+
'astro:middleware',
|
|
20
|
+
'astro:transitions',
|
|
21
|
+
'astro:components',
|
|
22
|
+
'astro:schema',
|
|
23
|
+
];
|
|
24
|
+
exports.astroResolver = {
|
|
25
|
+
name: 'astro',
|
|
26
|
+
detect(context) {
|
|
27
|
+
// Check for astro in package.json
|
|
28
|
+
const packageJson = context.readFile('package.json');
|
|
29
|
+
if (packageJson) {
|
|
30
|
+
try {
|
|
31
|
+
const pkg = JSON.parse(packageJson);
|
|
32
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
33
|
+
if (deps.astro) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Invalid JSON
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Check for .astro files in project
|
|
42
|
+
const allFiles = context.getAllFiles();
|
|
43
|
+
return allFiles.some((f) => f.endsWith('.astro'));
|
|
44
|
+
},
|
|
45
|
+
resolve(ref, context) {
|
|
46
|
+
// Pattern 1: the `Astro` global (Astro.props, Astro.url, Astro.params, …)
|
|
47
|
+
// — runtime-provided in every component's frontmatter. Resolving it as
|
|
48
|
+
// framework-provided keeps it from name-matching a user symbol named Astro.
|
|
49
|
+
if (ref.referenceName === 'Astro' || ref.referenceName.startsWith('Astro.')) {
|
|
50
|
+
return {
|
|
51
|
+
original: ref,
|
|
52
|
+
targetNodeId: ref.fromNodeId,
|
|
53
|
+
confidence: 1.0,
|
|
54
|
+
resolvedBy: 'framework',
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Pattern 2: astro:* virtual module imports (astro:content, astro:assets, …)
|
|
58
|
+
if (ref.referenceKind === 'imports' && ref.referenceName.startsWith('astro:')) {
|
|
59
|
+
if (ASTRO_VIRTUAL_MODULES.some((prefix) => ref.referenceName.startsWith(prefix))) {
|
|
60
|
+
return {
|
|
61
|
+
original: ref,
|
|
62
|
+
targetNodeId: ref.fromNodeId,
|
|
63
|
+
confidence: 1.0,
|
|
64
|
+
resolvedBy: 'framework',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Pattern 3: Component references (PascalCase) — resolve to component
|
|
69
|
+
// nodes. Template tags arrive as `references`, frontmatter expression
|
|
70
|
+
// usages as `calls`.
|
|
71
|
+
if (isPascalCase(ref.referenceName) &&
|
|
72
|
+
(ref.referenceKind === 'references' || ref.referenceKind === 'calls')) {
|
|
73
|
+
const result = resolveComponent(ref.referenceName, ref.filePath, context);
|
|
74
|
+
if (result) {
|
|
75
|
+
return {
|
|
76
|
+
original: ref,
|
|
77
|
+
targetNodeId: result,
|
|
78
|
+
confidence: 0.8,
|
|
79
|
+
resolvedBy: 'framework',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
},
|
|
85
|
+
extract(filePath, _content) {
|
|
86
|
+
const nodes = [];
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
// Normalize to forward slashes
|
|
89
|
+
const normalized = filePath.replace(/\\/g, '/');
|
|
90
|
+
// Astro file-based routing lives under src/pages/ — .astro files are
|
|
91
|
+
// pages, .ts/.js files are API endpoints. (.md/.mdx pages exist too but
|
|
92
|
+
// aren't indexed as source.) Underscore-prefixed segments are excluded
|
|
93
|
+
// from routing by Astro.
|
|
94
|
+
const pagesMatch = /(?:^|\/)src\/pages\//.exec(normalized);
|
|
95
|
+
if (pagesMatch && /\.(astro|ts|js|mjs)$/.test(normalized)) {
|
|
96
|
+
const afterPages = normalized.substring(pagesMatch.index + pagesMatch[0].length);
|
|
97
|
+
const base = afterPages.split('/').pop() || '';
|
|
98
|
+
// Underscore-prefixed segments are excluded from routing by Astro;
|
|
99
|
+
// a stray `*.config.*` in a pages dir is never a route.
|
|
100
|
+
if (!afterPages.split('/').some((segment) => segment.startsWith('_')) &&
|
|
101
|
+
!/\.config\.[a-z]+$/.test(base)) {
|
|
102
|
+
const routePath = filePathToAstroRoute(afterPages);
|
|
103
|
+
nodes.push({
|
|
104
|
+
id: `route:${filePath}:${routePath}:1`,
|
|
105
|
+
kind: 'route',
|
|
106
|
+
name: routePath,
|
|
107
|
+
qualifiedName: `${filePath}::route:${routePath}`,
|
|
108
|
+
filePath,
|
|
109
|
+
startLine: 1,
|
|
110
|
+
endLine: 1,
|
|
111
|
+
startColumn: 0,
|
|
112
|
+
endColumn: 0,
|
|
113
|
+
language: normalized.endsWith('.astro') ? 'astro' : 'typescript',
|
|
114
|
+
updatedAt: now,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { nodes, references: [] };
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Check if string is PascalCase
|
|
123
|
+
*/
|
|
124
|
+
function isPascalCase(str) {
|
|
125
|
+
return /^[A-Z][a-zA-Z0-9]*$/.test(str);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Resolve an Astro component reference using name-based lookup
|
|
129
|
+
*/
|
|
130
|
+
function resolveComponent(name, fromFile, context) {
|
|
131
|
+
// Look for component nodes by name
|
|
132
|
+
const candidates = context.getNodesByName(name);
|
|
133
|
+
const components = candidates.filter((n) => n.kind === 'component');
|
|
134
|
+
if (components.length === 0)
|
|
135
|
+
return null;
|
|
136
|
+
// Prefer same directory
|
|
137
|
+
const fromDir = fromFile.substring(0, fromFile.lastIndexOf('/'));
|
|
138
|
+
const sameDir = components.filter((n) => n.filePath.startsWith(fromDir));
|
|
139
|
+
if (sameDir.length > 0)
|
|
140
|
+
return sameDir[0].id;
|
|
141
|
+
// No positional signal: only an UNAMBIGUOUS name may resolve — picking
|
|
142
|
+
// components[0] would choose an arbitrary same-named component in a
|
|
143
|
+
// multi-app monorepo (#764). Ambiguity falls through to the name-matcher,
|
|
144
|
+
// whose proximity scoring decides.
|
|
145
|
+
return components.length === 1 ? components[0].id : null;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Convert a path under src/pages/ to an Astro route path.
|
|
149
|
+
*
|
|
150
|
+
* blog/[slug].astro -> /blog/:slug
|
|
151
|
+
* blog/[...path].astro -> /blog/*path
|
|
152
|
+
* api/posts.ts -> /api/posts
|
|
153
|
+
* index.astro -> /
|
|
154
|
+
*/
|
|
155
|
+
function filePathToAstroRoute(afterPages) {
|
|
156
|
+
// Remove the extension
|
|
157
|
+
const withoutExt = afterPages.replace(/\.(astro|ts|js|mjs)$/, '');
|
|
158
|
+
// index files map to their parent path (index -> /, blog/index -> /blog)
|
|
159
|
+
const withoutIndex = withoutExt.replace(/(^|\/)index$/, '$1').replace(/\/$/, '');
|
|
160
|
+
// Convert Astro param syntax
|
|
161
|
+
const route = '/' + withoutIndex
|
|
162
|
+
.replace(/\[\.\.\.([^\]]+)\]/g, '*$1') // [...rest] -> *rest (catch-all)
|
|
163
|
+
.replace(/\[([^\]]+)\]/g, ':$1'); // [param] -> :param
|
|
164
|
+
if (route === '/')
|
|
165
|
+
return '/';
|
|
166
|
+
// Remove trailing slash
|
|
167
|
+
return route.replace(/\/$/, '');
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=astro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astro.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/astro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GoFrame Framework Resolver (route metadata) — issue #747.
|
|
3
|
+
*
|
|
4
|
+
* GoFrame's "standard router" binds routes reflectively, so there is no literal
|
|
5
|
+
* path string at a `.GET("/x", handler)` call site and no static edge from a
|
|
6
|
+
* route to the controller method that serves it. The structural facts live in
|
|
7
|
+
* two places, joined only at runtime by GoFrame:
|
|
8
|
+
*
|
|
9
|
+
* // api/user/v1/user_sign_in.go — the route lives in a struct tag on the request type
|
|
10
|
+
* type SignInReq struct {
|
|
11
|
+
* g.Meta `path:"/user/sign-in" method:"post" tags:"UserService" summary:"…"`
|
|
12
|
+
* …
|
|
13
|
+
* }
|
|
14
|
+
* // internal/controller/user/user_v1_sign_in.go — the handler takes *that* request type
|
|
15
|
+
* func (c *ControllerV1) SignIn(ctx context.Context, req *v1.SignInReq) (res *v1.SignInRes, err error)
|
|
16
|
+
* // internal/cmd/cmd.go — reflective binding (no path, no handler name)
|
|
17
|
+
* group.Bind(user.NewV1())
|
|
18
|
+
*
|
|
19
|
+
* This resolver handles the FIRST half: it reads the `g.Meta` struct tag on a
|
|
20
|
+
* request type into a `route` node (`POST /user/sign-in`). The route → handler
|
|
21
|
+
* EDGE is the genuinely reflective part — the method name is NOT derivable from
|
|
22
|
+
* the request type (`DeptSearchReq` is served by `List`, `DeptAddReq` by `Add`),
|
|
23
|
+
* so the only reliable join is the request type appearing in the method's
|
|
24
|
+
* parameter signature. That whole-graph join is done by the companion
|
|
25
|
+
* `goframeRouteEdges` synthesizer, which reads the request type back out of the
|
|
26
|
+
* route node's qualifiedName.
|
|
27
|
+
*
|
|
28
|
+
* Honesty note: the route node carries the `g.Meta` path verbatim. The group
|
|
29
|
+
* prefix from `s.Group("/api", …)` / nested `group.Group("/v1", …)` is applied
|
|
30
|
+
* by reflective `Bind` at runtime and is deliberately NOT reconstructed here —
|
|
31
|
+
* the discriminating, structural part is the per-route path + method.
|
|
32
|
+
*/
|
|
33
|
+
import { FrameworkResolver } from '../types';
|
|
34
|
+
/** Marker embedded in a route node's qualifiedName so the synthesizer can read
|
|
35
|
+
* back the request type to join on. The value after it is the package-qualified
|
|
36
|
+
* request type (`cash.ListReq`) — the package disambiguates the many identical
|
|
37
|
+
* bare names (`ListReq`, `GetReq`) a large app defines, one per module. Falls
|
|
38
|
+
* back to the bare type when no `package` declaration is found. */
|
|
39
|
+
export declare const GOFRAME_ROUTE_MARKER = "::goframe-route:";
|
|
40
|
+
export declare const goframeResolver: FrameworkResolver;
|
|
41
|
+
//# sourceMappingURL=goframe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goframe.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/goframe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,iBAAiB,EAAiD,MAAM,UAAU,CAAC;AAe5F;;;;oEAIoE;AACpE,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,eAAO,MAAM,eAAe,EAAE,iBA6D7B,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GoFrame Framework Resolver (route metadata) — issue #747.
|
|
4
|
+
*
|
|
5
|
+
* GoFrame's "standard router" binds routes reflectively, so there is no literal
|
|
6
|
+
* path string at a `.GET("/x", handler)` call site and no static edge from a
|
|
7
|
+
* route to the controller method that serves it. The structural facts live in
|
|
8
|
+
* two places, joined only at runtime by GoFrame:
|
|
9
|
+
*
|
|
10
|
+
* // api/user/v1/user_sign_in.go — the route lives in a struct tag on the request type
|
|
11
|
+
* type SignInReq struct {
|
|
12
|
+
* g.Meta `path:"/user/sign-in" method:"post" tags:"UserService" summary:"…"`
|
|
13
|
+
* …
|
|
14
|
+
* }
|
|
15
|
+
* // internal/controller/user/user_v1_sign_in.go — the handler takes *that* request type
|
|
16
|
+
* func (c *ControllerV1) SignIn(ctx context.Context, req *v1.SignInReq) (res *v1.SignInRes, err error)
|
|
17
|
+
* // internal/cmd/cmd.go — reflective binding (no path, no handler name)
|
|
18
|
+
* group.Bind(user.NewV1())
|
|
19
|
+
*
|
|
20
|
+
* This resolver handles the FIRST half: it reads the `g.Meta` struct tag on a
|
|
21
|
+
* request type into a `route` node (`POST /user/sign-in`). The route → handler
|
|
22
|
+
* EDGE is the genuinely reflective part — the method name is NOT derivable from
|
|
23
|
+
* the request type (`DeptSearchReq` is served by `List`, `DeptAddReq` by `Add`),
|
|
24
|
+
* so the only reliable join is the request type appearing in the method's
|
|
25
|
+
* parameter signature. That whole-graph join is done by the companion
|
|
26
|
+
* `goframeRouteEdges` synthesizer, which reads the request type back out of the
|
|
27
|
+
* route node's qualifiedName.
|
|
28
|
+
*
|
|
29
|
+
* Honesty note: the route node carries the `g.Meta` path verbatim. The group
|
|
30
|
+
* prefix from `s.Group("/api", …)` / nested `group.Group("/v1", …)` is applied
|
|
31
|
+
* by reflective `Bind` at runtime and is deliberately NOT reconstructed here —
|
|
32
|
+
* the discriminating, structural part is the per-route path + method.
|
|
33
|
+
*/
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.goframeResolver = exports.GOFRAME_ROUTE_MARKER = void 0;
|
|
36
|
+
const strip_comments_1 = require("../strip-comments");
|
|
37
|
+
/**
|
|
38
|
+
* A request type carrying a routable `g.Meta` tag. `g.Meta` is, by GoFrame
|
|
39
|
+
* convention, the first embedded field of the struct, so anchoring on
|
|
40
|
+
* `struct { g.Meta `…` }` is both precise and cheap. Response types embed
|
|
41
|
+
* `g.Meta` too but tag it `mime:"…"` with no `path:` — the path requirement
|
|
42
|
+
* below filters them out.
|
|
43
|
+
*/
|
|
44
|
+
const GOFRAME_META_RE = /\btype\s+([A-Z]\w*)\s+struct\s*\{\s*g\.Meta\s+`([^`]*)`/g;
|
|
45
|
+
const META_PATH_RE = /\bpath:"([^"]+)"/;
|
|
46
|
+
const META_METHOD_RE = /\bmethod:"([^"]+)"/;
|
|
47
|
+
const GO_PACKAGE_RE = /^\s*package\s+(\w+)/m;
|
|
48
|
+
/** Marker embedded in a route node's qualifiedName so the synthesizer can read
|
|
49
|
+
* back the request type to join on. The value after it is the package-qualified
|
|
50
|
+
* request type (`cash.ListReq`) — the package disambiguates the many identical
|
|
51
|
+
* bare names (`ListReq`, `GetReq`) a large app defines, one per module. Falls
|
|
52
|
+
* back to the bare type when no `package` declaration is found. */
|
|
53
|
+
exports.GOFRAME_ROUTE_MARKER = '::goframe-route:';
|
|
54
|
+
exports.goframeResolver = {
|
|
55
|
+
name: 'goframe',
|
|
56
|
+
languages: ['go'],
|
|
57
|
+
detect(context) {
|
|
58
|
+
const goMod = context.readFile('go.mod');
|
|
59
|
+
// GoFrame is `github.com/gogf/gf` (v1) or `github.com/gogf/gf/v2` (v2).
|
|
60
|
+
return !!goMod && goMod.includes('github.com/gogf/gf');
|
|
61
|
+
},
|
|
62
|
+
extract(filePath, content) {
|
|
63
|
+
if (!filePath.endsWith('.go'))
|
|
64
|
+
return { nodes: [], references: [] };
|
|
65
|
+
// Cheap reject: the file must mention g.Meta at all.
|
|
66
|
+
if (!content.includes('g.Meta'))
|
|
67
|
+
return { nodes: [], references: [] };
|
|
68
|
+
const nodes = [];
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
const safe = (0, strip_comments_1.stripCommentsForRegex)(content, 'go');
|
|
71
|
+
const pkg = GO_PACKAGE_RE.exec(safe)?.[1];
|
|
72
|
+
GOFRAME_META_RE.lastIndex = 0;
|
|
73
|
+
let match;
|
|
74
|
+
while ((match = GOFRAME_META_RE.exec(safe)) !== null) {
|
|
75
|
+
const [, requestType, tag] = match;
|
|
76
|
+
const pathMatch = META_PATH_RE.exec(tag);
|
|
77
|
+
if (!pathMatch)
|
|
78
|
+
continue; // response `g.Meta `mime:…`` and other non-route metadata
|
|
79
|
+
const routePath = pathMatch[1];
|
|
80
|
+
const methodMatch = META_METHOD_RE.exec(tag);
|
|
81
|
+
// GoFrame defaults to all methods when `method:` is omitted.
|
|
82
|
+
const method = methodMatch ? methodMatch[1].toUpperCase() : 'ANY';
|
|
83
|
+
const line = safe.slice(0, match.index).split('\n').length;
|
|
84
|
+
// The handler's signature qualifies the request type with its package
|
|
85
|
+
// (`req *cash.ListReq`); encode `pkg.Type` so the synthesizer can match it.
|
|
86
|
+
const joinKey = pkg ? `${pkg}.${requestType}` : requestType;
|
|
87
|
+
nodes.push({
|
|
88
|
+
id: `route:${filePath}:${line}:${method}:${routePath}`,
|
|
89
|
+
kind: 'route',
|
|
90
|
+
name: `${method} ${routePath}`,
|
|
91
|
+
// The request type is the synthesizer's join key — encode it after the
|
|
92
|
+
// marker. The path stays human-readable in `name`.
|
|
93
|
+
qualifiedName: `${filePath}${exports.GOFRAME_ROUTE_MARKER}${joinKey}`,
|
|
94
|
+
filePath,
|
|
95
|
+
startLine: line,
|
|
96
|
+
endLine: line,
|
|
97
|
+
startColumn: 0,
|
|
98
|
+
endColumn: match[0].length,
|
|
99
|
+
language: 'go',
|
|
100
|
+
updatedAt: now,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return { nodes, references: [] };
|
|
104
|
+
},
|
|
105
|
+
// The route → controller-method edge is reflective (request-type join across
|
|
106
|
+
// files) and is built by the `goframeRouteEdges` synthesizer after the graph
|
|
107
|
+
// is complete. This resolver creates no references of its own.
|
|
108
|
+
resolve(_ref, _context) {
|
|
109
|
+
return null;
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=goframe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goframe.js","sourceRoot":"","sources":["../../../src/resolution/frameworks/goframe.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,11 +33,13 @@ export { nestjsResolver } from './nestjs';
|
|
|
33
33
|
export { reactResolver } from './react';
|
|
34
34
|
export { svelteResolver } from './svelte';
|
|
35
35
|
export { vueResolver } from './vue';
|
|
36
|
+
export { astroResolver } from './astro';
|
|
36
37
|
export { djangoResolver, flaskResolver, fastapiResolver } from './python';
|
|
37
38
|
export { railsResolver } from './ruby';
|
|
38
39
|
export { springResolver } from './java';
|
|
39
40
|
export { playResolver } from './play';
|
|
40
41
|
export { goResolver } from './go';
|
|
42
|
+
export { goframeResolver } from './goframe';
|
|
41
43
|
export { rustResolver } from './rust';
|
|
42
44
|
export { aspnetResolver } from './csharp';
|
|
43
45
|
export { swiftUIResolver, uikitResolver, vaporResolver } from './swift';
|
|
@@ -45,4 +47,5 @@ export { swiftObjcBridgeResolver } from './swift-objc';
|
|
|
45
47
|
export { reactNativeBridgeResolver } from './react-native';
|
|
46
48
|
export { expoModulesResolver } from './expo-modules';
|
|
47
49
|
export { fabricViewResolver } from './fabric';
|
|
50
|
+
export { arktsNapiResolver } from './arkts-napi';
|
|
48
51
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/resolution/frameworks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAyE5C;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,iBAAiB,EAAE,CAE9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEhF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,CAQhF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,QAAQ,EAAE,QAAQ,GACjB,iBAAiB,EAAE,CAIrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAO3E;AAGD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
|