homegraph 1.5.7 → 1.5.10
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/CHANGELOG.md +37 -0
- package/README.md +2 -2
- package/dist/bin/homegraph.js +16 -14
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +11 -25
- package/dist/db/queries.d.ts +5 -1
- package/dist/db/queries.js +31 -2
- package/dist/db/sqlite-adapter.d.ts +6 -12
- package/dist/db/sqlite-adapter.js +13 -41
- package/dist/directory.d.ts +1 -1
- package/dist/directory.js +25 -1
- package/dist/extraction/grammars.d.ts +2 -0
- package/dist/extraction/grammars.js +7 -7
- package/dist/extraction/index.js +17 -12
- package/dist/extraction/languages/arkts.d.ts +40 -7
- package/dist/extraction/languages/arkts.js +290 -84
- package/dist/extraction/tree-sitter.js +12 -3
- package/dist/graph/evidence-paths.d.ts +63 -0
- package/dist/graph/evidence-paths.js +245 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.js +78 -29
- package/dist/mcp/arkts-evidence-packs.d.ts +67 -0
- package/dist/mcp/arkts-evidence-packs.js +352 -0
- package/dist/mcp/daemon.js +1 -1
- package/dist/mcp/engine.d.ts +20 -7
- package/dist/mcp/engine.js +113 -106
- package/dist/mcp/index-availability.d.ts +31 -0
- package/dist/mcp/index-availability.js +105 -0
- package/dist/mcp/index.js +5 -4
- package/dist/mcp/query-cache.d.ts +1 -1
- package/dist/mcp/query-cache.js +6 -2
- package/dist/mcp/query-worker.d.ts +1 -1
- package/dist/mcp/query-worker.js +1 -1
- package/dist/mcp/server-instructions.d.ts +2 -11
- package/dist/mcp/server-instructions.js +42 -75
- package/dist/mcp/session.js +12 -4
- package/dist/mcp/source-slice-identity.d.ts +3 -0
- package/dist/mcp/source-slice-identity.js +11 -0
- package/dist/mcp/tools.d.ts +29 -6
- package/dist/mcp/tools.js +240 -122
- package/dist/project-map/index.js +2 -42
- package/dist/spec/llm/client.js +3 -15
- package/dist/spec/llm/openai-sdk.d.ts +14 -0
- package/dist/spec/llm/openai-sdk.js +37 -0
- package/dist/spec/llm/retry.js +8 -9
- package/dist/utils.d.ts +5 -0
- package/dist/utils.js +24 -0
- package/package.json +4 -6
- package/dist/addons/dynamic-import.d.ts.map +0 -1
- package/dist/addons/dynamic-import.js.map +0 -1
- package/dist/addons/init-template.d.ts.map +0 -1
- package/dist/addons/init-template.js.map +0 -1
- package/dist/addons/loader.d.ts.map +0 -1
- package/dist/addons/loader.js.map +0 -1
- package/dist/addons/manager.d.ts.map +0 -1
- package/dist/addons/manager.js.map +0 -1
- package/dist/addons/paths.d.ts.map +0 -1
- package/dist/addons/paths.js.map +0 -1
- package/dist/addons/registry.d.ts.map +0 -1
- package/dist/addons/registry.js.map +0 -1
- package/dist/addons/semver.d.ts.map +0 -1
- package/dist/addons/semver.js.map +0 -1
- package/dist/addons/types.d.ts.map +0 -1
- package/dist/addons/types.js.map +0 -1
- package/dist/addons/validate.d.ts.map +0 -1
- package/dist/addons/validate.js.map +0 -1
- package/dist/arkui/index.d.ts.map +0 -1
- package/dist/arkui/index.js.map +0 -1
- package/dist/arkui/migrate-passage.d.ts.map +0 -1
- package/dist/arkui/migrate-passage.js.map +0 -1
- package/dist/arkui/migrate-semantics.d.ts.map +0 -1
- package/dist/arkui/migrate-semantics.js.map +0 -1
- package/dist/arkui/migrate-snapshot.d.ts.map +0 -1
- package/dist/arkui/migrate-snapshot.js.map +0 -1
- package/dist/bin/addon-commands.d.ts.map +0 -1
- package/dist/bin/addon-commands.js.map +0 -1
- package/dist/bin/command-supervision.d.ts.map +0 -1
- package/dist/bin/command-supervision.js.map +0 -1
- package/dist/bin/fatal-handler.d.ts.map +0 -1
- package/dist/bin/fatal-handler.js.map +0 -1
- package/dist/bin/homegraph.d.ts.map +0 -1
- package/dist/bin/homegraph.js.map +0 -1
- package/dist/bin/node-version-check.d.ts.map +0 -1
- package/dist/bin/node-version-check.js.map +0 -1
- package/dist/bin/uninstall.d.ts.map +0 -1
- package/dist/bin/uninstall.js.map +0 -1
- package/dist/context/formatter.d.ts.map +0 -1
- package/dist/context/formatter.js.map +0 -1
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js.map +0 -1
- package/dist/context/markers.d.ts.map +0 -1
- package/dist/context/markers.js.map +0 -1
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js.map +0 -1
- package/dist/db/migrations.d.ts.map +0 -1
- package/dist/db/migrations.js.map +0 -1
- package/dist/db/queries.d.ts.map +0 -1
- package/dist/db/queries.js.map +0 -1
- package/dist/db/sqlite-adapter.d.ts.map +0 -1
- package/dist/db/sqlite-adapter.js.map +0 -1
- package/dist/db/wal-valve.d.ts.map +0 -1
- package/dist/db/wal-valve.js.map +0 -1
- package/dist/directory.d.ts.map +0 -1
- package/dist/directory.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/extraction/arkts-batch-worker.d.ts.map +0 -1
- package/dist/extraction/arkts-batch-worker.js.map +0 -1
- package/dist/extraction/astro-extractor.d.ts.map +0 -1
- package/dist/extraction/astro-extractor.js.map +0 -1
- package/dist/extraction/cfml-extractor.d.ts.map +0 -1
- package/dist/extraction/cfml-extractor.js.map +0 -1
- package/dist/extraction/context.d.ts.map +0 -1
- package/dist/extraction/context.js.map +0 -1
- package/dist/extraction/default-ignore.d.ts.map +0 -1
- package/dist/extraction/default-ignore.js.map +0 -1
- package/dist/extraction/dfm-extractor.d.ts.map +0 -1
- package/dist/extraction/dfm-extractor.js.map +0 -1
- package/dist/extraction/extraction-version.d.ts.map +0 -1
- package/dist/extraction/extraction-version.js.map +0 -1
- package/dist/extraction/function-ref.d.ts.map +0 -1
- package/dist/extraction/function-ref.js.map +0 -1
- package/dist/extraction/generated-detection.d.ts.map +0 -1
- package/dist/extraction/generated-detection.js.map +0 -1
- package/dist/extraction/grammars.d.ts.map +0 -1
- package/dist/extraction/grammars.js.map +0 -1
- package/dist/extraction/index.d.ts.map +0 -1
- package/dist/extraction/index.js.map +0 -1
- package/dist/extraction/languages/arkts.d.ts.map +0 -1
- package/dist/extraction/languages/arkts.js.map +0 -1
- package/dist/extraction/languages/c-cpp.d.ts.map +0 -1
- package/dist/extraction/languages/c-cpp.js.map +0 -1
- package/dist/extraction/languages/cfquery.d.ts.map +0 -1
- package/dist/extraction/languages/cfquery.js.map +0 -1
- package/dist/extraction/languages/cfscript.d.ts.map +0 -1
- package/dist/extraction/languages/cfscript.js.map +0 -1
- package/dist/extraction/languages/cobol.d.ts.map +0 -1
- package/dist/extraction/languages/cobol.js.map +0 -1
- package/dist/extraction/languages/csharp.d.ts.map +0 -1
- package/dist/extraction/languages/csharp.js.map +0 -1
- package/dist/extraction/languages/dart.d.ts.map +0 -1
- package/dist/extraction/languages/dart.js.map +0 -1
- package/dist/extraction/languages/erlang.d.ts.map +0 -1
- package/dist/extraction/languages/erlang.js.map +0 -1
- package/dist/extraction/languages/go.d.ts.map +0 -1
- package/dist/extraction/languages/go.js.map +0 -1
- package/dist/extraction/languages/index.d.ts.map +0 -1
- package/dist/extraction/languages/index.js.map +0 -1
- package/dist/extraction/languages/java.d.ts.map +0 -1
- package/dist/extraction/languages/java.js.map +0 -1
- package/dist/extraction/languages/javascript.d.ts.map +0 -1
- package/dist/extraction/languages/javascript.js.map +0 -1
- package/dist/extraction/languages/kotlin.d.ts.map +0 -1
- package/dist/extraction/languages/kotlin.js.map +0 -1
- package/dist/extraction/languages/lua.d.ts.map +0 -1
- package/dist/extraction/languages/lua.js.map +0 -1
- package/dist/extraction/languages/luau.d.ts.map +0 -1
- package/dist/extraction/languages/luau.js.map +0 -1
- package/dist/extraction/languages/nix.d.ts.map +0 -1
- package/dist/extraction/languages/nix.js.map +0 -1
- package/dist/extraction/languages/objc.d.ts.map +0 -1
- package/dist/extraction/languages/objc.js.map +0 -1
- package/dist/extraction/languages/pascal.d.ts.map +0 -1
- package/dist/extraction/languages/pascal.js.map +0 -1
- package/dist/extraction/languages/php.d.ts.map +0 -1
- package/dist/extraction/languages/php.js.map +0 -1
- package/dist/extraction/languages/python.d.ts.map +0 -1
- package/dist/extraction/languages/python.js.map +0 -1
- package/dist/extraction/languages/r.d.ts.map +0 -1
- package/dist/extraction/languages/r.js.map +0 -1
- package/dist/extraction/languages/ruby.d.ts.map +0 -1
- package/dist/extraction/languages/ruby.js.map +0 -1
- package/dist/extraction/languages/rust.d.ts.map +0 -1
- package/dist/extraction/languages/rust.js.map +0 -1
- package/dist/extraction/languages/scala.d.ts.map +0 -1
- package/dist/extraction/languages/scala.js.map +0 -1
- package/dist/extraction/languages/solidity.d.ts.map +0 -1
- package/dist/extraction/languages/solidity.js.map +0 -1
- package/dist/extraction/languages/swift.d.ts.map +0 -1
- package/dist/extraction/languages/swift.js.map +0 -1
- package/dist/extraction/languages/terraform.d.ts.map +0 -1
- package/dist/extraction/languages/terraform.js.map +0 -1
- package/dist/extraction/languages/typescript.d.ts.map +0 -1
- package/dist/extraction/languages/typescript.js.map +0 -1
- package/dist/extraction/languages/vbnet.d.ts.map +0 -1
- package/dist/extraction/languages/vbnet.js.map +0 -1
- package/dist/extraction/liquid-extractor.d.ts.map +0 -1
- package/dist/extraction/liquid-extractor.js.map +0 -1
- package/dist/extraction/mybatis-extractor.d.ts.map +0 -1
- package/dist/extraction/mybatis-extractor.js.map +0 -1
- package/dist/extraction/parse-pool.d.ts.map +0 -1
- package/dist/extraction/parse-pool.js.map +0 -1
- package/dist/extraction/parse-worker.d.ts.map +0 -1
- package/dist/extraction/parse-worker.js.map +0 -1
- package/dist/extraction/razor-extractor.d.ts.map +0 -1
- package/dist/extraction/razor-extractor.js.map +0 -1
- package/dist/extraction/store-worker.d.ts.map +0 -1
- package/dist/extraction/store-worker.js.map +0 -1
- package/dist/extraction/store-writer.d.ts.map +0 -1
- package/dist/extraction/store-writer.js.map +0 -1
- package/dist/extraction/svelte-extractor.d.ts.map +0 -1
- package/dist/extraction/svelte-extractor.js.map +0 -1
- package/dist/extraction/tree-sitter-helpers.d.ts.map +0 -1
- package/dist/extraction/tree-sitter-helpers.js.map +0 -1
- package/dist/extraction/tree-sitter-types.d.ts.map +0 -1
- package/dist/extraction/tree-sitter-types.js.map +0 -1
- package/dist/extraction/tree-sitter.d.ts.map +0 -1
- package/dist/extraction/tree-sitter.js.map +0 -1
- package/dist/extraction/vue-extractor.d.ts.map +0 -1
- package/dist/extraction/vue-extractor.js.map +0 -1
- package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
- package/dist/extraction/wasm-runtime-flags.d.ts.map +0 -1
- package/dist/extraction/wasm-runtime-flags.js.map +0 -1
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/queries.d.ts.map +0 -1
- package/dist/graph/queries.js.map +0 -1
- package/dist/graph/traversal.d.ts.map +0 -1
- package/dist/graph/traversal.js.map +0 -1
- package/dist/graph-sources.d.ts.map +0 -1
- package/dist/graph-sources.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/installer/config-writer.d.ts.map +0 -1
- package/dist/installer/config-writer.js.map +0 -1
- package/dist/installer/index.d.ts.map +0 -1
- package/dist/installer/index.js.map +0 -1
- package/dist/installer/instructions-template.d.ts.map +0 -1
- package/dist/installer/instructions-template.js.map +0 -1
- package/dist/installer/targets/antigravity.d.ts.map +0 -1
- package/dist/installer/targets/antigravity.js.map +0 -1
- package/dist/installer/targets/claude.d.ts.map +0 -1
- package/dist/installer/targets/claude.js.map +0 -1
- package/dist/installer/targets/codebuddy.d.ts.map +0 -1
- package/dist/installer/targets/codebuddy.js.map +0 -1
- package/dist/installer/targets/codex.d.ts.map +0 -1
- package/dist/installer/targets/codex.js.map +0 -1
- package/dist/installer/targets/cursor.d.ts.map +0 -1
- package/dist/installer/targets/cursor.js.map +0 -1
- package/dist/installer/targets/deveco.d.ts.map +0 -1
- package/dist/installer/targets/deveco.js.map +0 -1
- package/dist/installer/targets/gemini.d.ts.map +0 -1
- package/dist/installer/targets/gemini.js.map +0 -1
- package/dist/installer/targets/hermes.d.ts.map +0 -1
- package/dist/installer/targets/hermes.js.map +0 -1
- package/dist/installer/targets/kiro.d.ts.map +0 -1
- package/dist/installer/targets/kiro.js.map +0 -1
- package/dist/installer/targets/opencode.d.ts.map +0 -1
- package/dist/installer/targets/opencode.js.map +0 -1
- package/dist/installer/targets/registry.d.ts.map +0 -1
- package/dist/installer/targets/registry.js.map +0 -1
- package/dist/installer/targets/shared.d.ts.map +0 -1
- package/dist/installer/targets/shared.js.map +0 -1
- package/dist/installer/targets/toml.d.ts.map +0 -1
- package/dist/installer/targets/toml.js.map +0 -1
- package/dist/installer/targets/types.d.ts.map +0 -1
- package/dist/installer/targets/types.js.map +0 -1
- package/dist/mcp/daemon-manager.d.ts.map +0 -1
- package/dist/mcp/daemon-manager.js.map +0 -1
- package/dist/mcp/daemon-paths.d.ts.map +0 -1
- package/dist/mcp/daemon-paths.js.map +0 -1
- package/dist/mcp/daemon-registry.d.ts.map +0 -1
- package/dist/mcp/daemon-registry.js.map +0 -1
- package/dist/mcp/daemon.d.ts.map +0 -1
- package/dist/mcp/daemon.js.map +0 -1
- package/dist/mcp/diff-impact.d.ts.map +0 -1
- package/dist/mcp/diff-impact.js.map +0 -1
- package/dist/mcp/dynamic-boundaries.d.ts.map +0 -1
- package/dist/mcp/dynamic-boundaries.js.map +0 -1
- package/dist/mcp/early-ppid.d.ts.map +0 -1
- package/dist/mcp/early-ppid.js.map +0 -1
- package/dist/mcp/engine.d.ts.map +0 -1
- package/dist/mcp/engine.js.map +0 -1
- package/dist/mcp/evidence-rendering.d.ts.map +0 -1
- package/dist/mcp/evidence-rendering.js.map +0 -1
- package/dist/mcp/explore-dedup.d.ts.map +0 -1
- package/dist/mcp/explore-dedup.js.map +0 -1
- package/dist/mcp/explore-repeat-guard.d.ts.map +0 -1
- package/dist/mcp/explore-repeat-guard.js.map +0 -1
- package/dist/mcp/explore-session-state.d.ts.map +0 -1
- package/dist/mcp/explore-session-state.js.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/liveness-watchdog.d.ts.map +0 -1
- package/dist/mcp/liveness-watchdog.js.map +0 -1
- package/dist/mcp/memory-budget.d.ts.map +0 -1
- package/dist/mcp/memory-budget.js.map +0 -1
- package/dist/mcp/ppid-watchdog.d.ts.map +0 -1
- package/dist/mcp/ppid-watchdog.js.map +0 -1
- package/dist/mcp/proxy.d.ts.map +0 -1
- package/dist/mcp/proxy.js.map +0 -1
- package/dist/mcp/query-cache.d.ts.map +0 -1
- package/dist/mcp/query-cache.js.map +0 -1
- package/dist/mcp/query-pool.d.ts.map +0 -1
- package/dist/mcp/query-pool.js.map +0 -1
- package/dist/mcp/query-worker.d.ts.map +0 -1
- package/dist/mcp/query-worker.js.map +0 -1
- package/dist/mcp/server-instructions.d.ts.map +0 -1
- package/dist/mcp/server-instructions.js.map +0 -1
- package/dist/mcp/session.d.ts.map +0 -1
- package/dist/mcp/session.js.map +0 -1
- package/dist/mcp/startup-handshake.d.ts.map +0 -1
- package/dist/mcp/startup-handshake.js.map +0 -1
- package/dist/mcp/stdin-teardown.d.ts.map +0 -1
- package/dist/mcp/stdin-teardown.js.map +0 -1
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/transport.d.ts.map +0 -1
- package/dist/mcp/transport.js.map +0 -1
- package/dist/mcp/version.d.ts.map +0 -1
- package/dist/mcp/version.js.map +0 -1
- package/dist/project-config.d.ts.map +0 -1
- package/dist/project-config.js.map +0 -1
- package/dist/project-map/index.d.ts.map +0 -1
- package/dist/project-map/index.js.map +0 -1
- package/dist/resolution/c-fnptr-synthesizer.d.ts.map +0 -1
- package/dist/resolution/c-fnptr-synthesizer.js.map +0 -1
- package/dist/resolution/callback-synthesizer.d.ts.map +0 -1
- package/dist/resolution/callback-synthesizer.js.map +0 -1
- package/dist/resolution/cooperative-yield.d.ts.map +0 -1
- package/dist/resolution/cooperative-yield.js.map +0 -1
- package/dist/resolution/frameworks/arkts-entry.d.ts.map +0 -1
- package/dist/resolution/frameworks/arkts-entry.js.map +0 -1
- package/dist/resolution/frameworks/arkts-napi.d.ts.map +0 -1
- package/dist/resolution/frameworks/arkts-napi.js.map +0 -1
- package/dist/resolution/frameworks/astro.d.ts.map +0 -1
- package/dist/resolution/frameworks/astro.js.map +0 -1
- package/dist/resolution/frameworks/cargo-workspace.d.ts.map +0 -1
- package/dist/resolution/frameworks/cargo-workspace.js.map +0 -1
- package/dist/resolution/frameworks/cics.d.ts.map +0 -1
- package/dist/resolution/frameworks/cics.js.map +0 -1
- package/dist/resolution/frameworks/csharp.d.ts.map +0 -1
- package/dist/resolution/frameworks/csharp.js.map +0 -1
- package/dist/resolution/frameworks/drupal.d.ts.map +0 -1
- package/dist/resolution/frameworks/drupal.js.map +0 -1
- package/dist/resolution/frameworks/expo-modules.d.ts.map +0 -1
- package/dist/resolution/frameworks/expo-modules.js.map +0 -1
- package/dist/resolution/frameworks/express.d.ts.map +0 -1
- package/dist/resolution/frameworks/express.js.map +0 -1
- package/dist/resolution/frameworks/fabric.d.ts.map +0 -1
- package/dist/resolution/frameworks/fabric.js.map +0 -1
- package/dist/resolution/frameworks/go.d.ts.map +0 -1
- package/dist/resolution/frameworks/go.js.map +0 -1
- package/dist/resolution/frameworks/goframe.d.ts.map +0 -1
- package/dist/resolution/frameworks/goframe.js.map +0 -1
- package/dist/resolution/frameworks/index.d.ts.map +0 -1
- package/dist/resolution/frameworks/index.js.map +0 -1
- package/dist/resolution/frameworks/java.d.ts.map +0 -1
- package/dist/resolution/frameworks/java.js.map +0 -1
- package/dist/resolution/frameworks/laravel.d.ts.map +0 -1
- package/dist/resolution/frameworks/laravel.js.map +0 -1
- package/dist/resolution/frameworks/nestjs.d.ts.map +0 -1
- package/dist/resolution/frameworks/nestjs.js.map +0 -1
- package/dist/resolution/frameworks/play.d.ts.map +0 -1
- package/dist/resolution/frameworks/play.js.map +0 -1
- package/dist/resolution/frameworks/python.d.ts.map +0 -1
- package/dist/resolution/frameworks/python.js.map +0 -1
- package/dist/resolution/frameworks/react-native.d.ts.map +0 -1
- package/dist/resolution/frameworks/react-native.js.map +0 -1
- package/dist/resolution/frameworks/react.d.ts.map +0 -1
- package/dist/resolution/frameworks/react.js.map +0 -1
- package/dist/resolution/frameworks/ruby.d.ts.map +0 -1
- package/dist/resolution/frameworks/ruby.js.map +0 -1
- package/dist/resolution/frameworks/rust.d.ts.map +0 -1
- package/dist/resolution/frameworks/rust.js.map +0 -1
- package/dist/resolution/frameworks/svelte.d.ts.map +0 -1
- package/dist/resolution/frameworks/svelte.js.map +0 -1
- package/dist/resolution/frameworks/swift-objc.d.ts.map +0 -1
- package/dist/resolution/frameworks/swift-objc.js.map +0 -1
- package/dist/resolution/frameworks/swift.d.ts.map +0 -1
- package/dist/resolution/frameworks/swift.js.map +0 -1
- package/dist/resolution/frameworks/terraform.d.ts.map +0 -1
- package/dist/resolution/frameworks/terraform.js.map +0 -1
- package/dist/resolution/frameworks/vue.d.ts.map +0 -1
- package/dist/resolution/frameworks/vue.js.map +0 -1
- package/dist/resolution/go-module.d.ts.map +0 -1
- package/dist/resolution/go-module.js.map +0 -1
- package/dist/resolution/goframe-synthesizer.d.ts.map +0 -1
- package/dist/resolution/goframe-synthesizer.js.map +0 -1
- package/dist/resolution/import-resolver.d.ts.map +0 -1
- package/dist/resolution/import-resolver.js.map +0 -1
- package/dist/resolution/index.d.ts.map +0 -1
- package/dist/resolution/index.js.map +0 -1
- package/dist/resolution/lru-cache.d.ts.map +0 -1
- package/dist/resolution/lru-cache.js.map +0 -1
- package/dist/resolution/memory-budget.d.ts.map +0 -1
- package/dist/resolution/memory-budget.js.map +0 -1
- package/dist/resolution/name-matcher.d.ts.map +0 -1
- package/dist/resolution/name-matcher.js.map +0 -1
- package/dist/resolution/path-aliases.d.ts.map +0 -1
- package/dist/resolution/path-aliases.js.map +0 -1
- package/dist/resolution/resolver-pool.d.ts.map +0 -1
- package/dist/resolution/resolver-pool.js.map +0 -1
- package/dist/resolution/resolver-worker.d.ts.map +0 -1
- package/dist/resolution/resolver-worker.js.map +0 -1
- package/dist/resolution/strip-comments.d.ts.map +0 -1
- package/dist/resolution/strip-comments.js.map +0 -1
- package/dist/resolution/swift-objc-bridge.d.ts.map +0 -1
- package/dist/resolution/swift-objc-bridge.js.map +0 -1
- package/dist/resolution/types.d.ts.map +0 -1
- package/dist/resolution/types.js.map +0 -1
- package/dist/resolution/workspace-packages.d.ts.map +0 -1
- package/dist/resolution/workspace-packages.js.map +0 -1
- package/dist/search/identifier-segments.d.ts.map +0 -1
- package/dist/search/identifier-segments.js.map +0 -1
- package/dist/search/literal-evidence.d.ts.map +0 -1
- package/dist/search/literal-evidence.js.map +0 -1
- package/dist/search/query-parser.d.ts.map +0 -1
- package/dist/search/query-parser.js.map +0 -1
- package/dist/search/query-plan-provider.d.ts.map +0 -1
- package/dist/search/query-plan-provider.js.map +0 -1
- package/dist/search/query-plan.d.ts.map +0 -1
- package/dist/search/query-plan.js.map +0 -1
- package/dist/search/query-utils.d.ts.map +0 -1
- package/dist/search/query-utils.js.map +0 -1
- package/dist/spec/build/diff-parser.d.ts.map +0 -1
- package/dist/spec/build/diff-parser.js.map +0 -1
- package/dist/spec/build/pipeline.d.ts.map +0 -1
- package/dist/spec/build/pipeline.js.map +0 -1
- package/dist/spec/build/scan.d.ts.map +0 -1
- package/dist/spec/build/scan.js.map +0 -1
- package/dist/spec/build/scope-resolver.d.ts.map +0 -1
- package/dist/spec/build/scope-resolver.js.map +0 -1
- package/dist/spec/build/spec-extractor.d.ts.map +0 -1
- package/dist/spec/build/spec-extractor.js.map +0 -1
- package/dist/spec/config.d.ts.map +0 -1
- package/dist/spec/config.js.map +0 -1
- package/dist/spec/db/commit-node.d.ts.map +0 -1
- package/dist/spec/db/commit-node.js.map +0 -1
- package/dist/spec/db/fragment-node.d.ts.map +0 -1
- package/dist/spec/db/fragment-node.js.map +0 -1
- package/dist/spec/db/fts.d.ts.map +0 -1
- package/dist/spec/db/fts.js.map +0 -1
- package/dist/spec/db/index.d.ts.map +0 -1
- package/dist/spec/db/index.js.map +0 -1
- package/dist/spec/db/persist.d.ts.map +0 -1
- package/dist/spec/db/persist.js.map +0 -1
- package/dist/spec/db/relations.d.ts.map +0 -1
- package/dist/spec/db/relations.js.map +0 -1
- package/dist/spec/db/schema.d.ts.map +0 -1
- package/dist/spec/db/schema.js.map +0 -1
- package/dist/spec/db/spec-node.d.ts.map +0 -1
- package/dist/spec/db/spec-node.js.map +0 -1
- package/dist/spec/db/sql-utils.d.ts.map +0 -1
- package/dist/spec/db/sql-utils.js.map +0 -1
- package/dist/spec/evolve/cluster-context.d.ts.map +0 -1
- package/dist/spec/evolve/cluster-context.js.map +0 -1
- package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +0 -1
- package/dist/spec/evolve/commit-spec-analyzer.js.map +0 -1
- package/dist/spec/evolve/commit-spec-persister.d.ts.map +0 -1
- package/dist/spec/evolve/commit-spec-persister.js.map +0 -1
- package/dist/spec/evolve/impact-locator.d.ts.map +0 -1
- package/dist/spec/evolve/impact-locator.js.map +0 -1
- package/dist/spec/evolve/pipeline.d.ts.map +0 -1
- package/dist/spec/evolve/pipeline.js.map +0 -1
- package/dist/spec/evolve/spec-rewriter.d.ts.map +0 -1
- package/dist/spec/evolve/spec-rewriter.js.map +0 -1
- package/dist/spec/git/commits.d.ts.map +0 -1
- package/dist/spec/git/commits.js.map +0 -1
- package/dist/spec/git/exec.d.ts.map +0 -1
- package/dist/spec/git/exec.js.map +0 -1
- package/dist/spec/git/index.d.ts.map +0 -1
- package/dist/spec/git/index.js.map +0 -1
- package/dist/spec/graph/index.d.ts.map +0 -1
- package/dist/spec/graph/index.js.map +0 -1
- package/dist/spec/graph/queries.d.ts.map +0 -1
- package/dist/spec/graph/queries.js.map +0 -1
- package/dist/spec/llm/agent-client.d.ts.map +0 -1
- package/dist/spec/llm/agent-client.js.map +0 -1
- package/dist/spec/llm/agents/claude-code.d.ts.map +0 -1
- package/dist/spec/llm/agents/claude-code.js.map +0 -1
- package/dist/spec/llm/agents/codex.d.ts.map +0 -1
- package/dist/spec/llm/agents/codex.js.map +0 -1
- package/dist/spec/llm/agents/detect-utils.d.ts.map +0 -1
- package/dist/spec/llm/agents/detect-utils.js.map +0 -1
- package/dist/spec/llm/agents/deveco-code.d.ts.map +0 -1
- package/dist/spec/llm/agents/deveco-code.js.map +0 -1
- package/dist/spec/llm/agents/index.d.ts.map +0 -1
- package/dist/spec/llm/agents/index.js.map +0 -1
- package/dist/spec/llm/agents/types.d.ts.map +0 -1
- package/dist/spec/llm/agents/types.js.map +0 -1
- package/dist/spec/llm/client.d.ts.map +0 -1
- package/dist/spec/llm/client.js.map +0 -1
- package/dist/spec/llm/factory.d.ts.map +0 -1
- package/dist/spec/llm/factory.js.map +0 -1
- package/dist/spec/llm/prompts.d.ts.map +0 -1
- package/dist/spec/llm/prompts.js.map +0 -1
- package/dist/spec/llm/retry.d.ts.map +0 -1
- package/dist/spec/llm/retry.js.map +0 -1
- package/dist/spec/mine/addon/adapter.d.ts.map +0 -1
- package/dist/spec/mine/addon/adapter.js.map +0 -1
- package/dist/spec/mine/addon/render.d.ts.map +0 -1
- package/dist/spec/mine/addon/render.js.map +0 -1
- package/dist/spec/mine/addon/types.d.ts.map +0 -1
- package/dist/spec/mine/addon/types.js.map +0 -1
- package/dist/spec/mine/clustering/features.d.ts.map +0 -1
- package/dist/spec/mine/clustering/features.js.map +0 -1
- package/dist/spec/mine/clustering/index.d.ts.map +0 -1
- package/dist/spec/mine/clustering/index.js.map +0 -1
- package/dist/spec/mine/clustering/leiden.d.ts.map +0 -1
- package/dist/spec/mine/clustering/leiden.js.map +0 -1
- package/dist/spec/mine/clustering/text-similarity.d.ts.map +0 -1
- package/dist/spec/mine/clustering/text-similarity.js.map +0 -1
- package/dist/spec/mine/generator.d.ts.map +0 -1
- package/dist/spec/mine/generator.js.map +0 -1
- package/dist/spec/mine/persist.d.ts.map +0 -1
- package/dist/spec/mine/persist.js.map +0 -1
- package/dist/spec/mine/pipeline.d.ts.map +0 -1
- package/dist/spec/mine/pipeline.js.map +0 -1
- package/dist/spec/mine/scanner.d.ts.map +0 -1
- package/dist/spec/mine/scanner.js.map +0 -1
- package/dist/spec/types.d.ts.map +0 -1
- package/dist/spec/types.js.map +0 -1
- package/dist/spec/ui/index.d.ts.map +0 -1
- package/dist/spec/ui/index.js.map +0 -1
- package/dist/spec/ui/progress-handler.d.ts.map +0 -1
- package/dist/spec/ui/progress-handler.js.map +0 -1
- package/dist/spec/ui/progress.d.ts.map +0 -1
- package/dist/spec/ui/progress.js.map +0 -1
- package/dist/spec/utils/fs.d.ts.map +0 -1
- package/dist/spec/utils/fs.js.map +0 -1
- package/dist/spec/utils/index.d.ts.map +0 -1
- package/dist/spec/utils/index.js.map +0 -1
- package/dist/spec/utils/meta.d.ts.map +0 -1
- package/dist/spec/utils/meta.js.map +0 -1
- package/dist/spec/utils/truncate.d.ts.map +0 -1
- package/dist/spec/utils/truncate.js.map +0 -1
- package/dist/sync/git-hooks.d.ts.map +0 -1
- package/dist/sync/git-hooks.js.map +0 -1
- package/dist/sync/index.d.ts.map +0 -1
- package/dist/sync/index.js.map +0 -1
- package/dist/sync/watch-policy.d.ts.map +0 -1
- package/dist/sync/watch-policy.js.map +0 -1
- package/dist/sync/watcher.d.ts.map +0 -1
- package/dist/sync/watcher.js.map +0 -1
- package/dist/sync/worktree.d.ts.map +0 -1
- package/dist/sync/worktree.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/ui/glyphs.d.ts.map +0 -1
- package/dist/ui/glyphs.js.map +0 -1
- package/dist/ui/shimmer-progress.d.ts.map +0 -1
- package/dist/ui/shimmer-progress.js.map +0 -1
- package/dist/ui/shimmer-worker.d.ts.map +0 -1
- package/dist/ui/shimmer-worker.js.map +0 -1
- package/dist/ui/types.d.ts.map +0 -1
- package/dist/ui/types.js.map +0 -1
- package/dist/upgrade/index.d.ts.map +0 -1
- package/dist/upgrade/index.js.map +0 -1
- package/dist/upgrade/remove-binary.d.ts.map +0 -1
- package/dist/upgrade/remove-binary.js.map +0 -1
- package/dist/upgrade/update-check.d.ts.map +0 -1
- package/dist/upgrade/update-check.js.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
|
@@ -49,6 +49,16 @@ export declare function buildArkMethodSignatureFields(method: ArkMethod): {
|
|
|
49
49
|
* the indexer (rare Photos-scale Windows cases).
|
|
50
50
|
*/
|
|
51
51
|
export declare function shouldUseIsolatedArkTSBuild(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Default to serial parse + no resolve worker pool on Harmony modular repos.
|
|
54
|
+
* analyseByModule dominates wall clock; worker pools mainly spike peak RSS after
|
|
55
|
+
* Scene release (Spec 0037). Explicit CODEGRAPH_PARSE_WORKERS still wins when set.
|
|
56
|
+
*
|
|
57
|
+
* - unset: true iff root `build-profile.json5` exists
|
|
58
|
+
* - `HOMEGRAPH_HARMONY_SERIAL=0`/`false`: never
|
|
59
|
+
* - `HOMEGRAPH_HARMONY_SERIAL=1`/`true`: always
|
|
60
|
+
*/
|
|
61
|
+
export declare function preferHarmonySerialIndexing(rootDir: string): boolean;
|
|
52
62
|
/** One PROJECT module from root `build-profile.json5`. */
|
|
53
63
|
export interface HarmonyModuleRef {
|
|
54
64
|
name: string;
|
|
@@ -63,19 +73,38 @@ export declare function normalizeHarmonyModuleSrcPath(srcPath: string): string;
|
|
|
63
73
|
*/
|
|
64
74
|
export declare function listHarmonyProjectModules(rootDir: string): HarmonyModuleRef[];
|
|
65
75
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
76
|
+
* True when registering `srcPath` as a synthetic PROJECT would re-load real
|
|
77
|
+
* Harmony modules: exact path collision, or a parent of existing `srcPath`s
|
|
78
|
+
* (e.g. synthetic `feature/` swallowing `feature/appcenter`).
|
|
69
79
|
*/
|
|
70
|
-
export declare function
|
|
80
|
+
export declare function syntheticRootConflictsWithHarmonyModules(srcPath: string, modules: readonly HarmonyModuleRef[]): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Nearest **Node** `package.json` directory for an orphan Ark/TS source.
|
|
83
|
+
* Never returns the project root (registering `.` would re-scan every Harmony
|
|
84
|
+
* module). Lone files directly under the root return null.
|
|
85
|
+
*
|
|
86
|
+
* Only `package.json` counts — not `oh-package.json5`. Forgotten Harmony HARs
|
|
87
|
+
* left out of root `build-profile.json5` (scene_board `feature/visionglass`
|
|
88
|
+
* etc.) often declare heavy `file:`/`../` deps on modules already indexed as
|
|
89
|
+
* real PROJECT modules; registering them as synthetic PROJECT→BODIES reloads
|
|
90
|
+
* those deps into ModuleCache and spikes wall time + RSS for almost no unique
|
|
91
|
+
* coverage. Those orphans fall through to tree-sitter instead.
|
|
92
|
+
*
|
|
93
|
+
* When `harmonyModules` is provided, skips roots that would swallow those
|
|
94
|
+
* modules (e.g. a plugin under `feature/intelligent` must not become
|
|
95
|
+
* `synthetic:feature/` and re-BODIES the whole `feature/` tree).
|
|
96
|
+
*/
|
|
97
|
+
export declare function findSyntheticArkModuleRoot(rootDir: string, relFile: string, harmonyModules?: readonly HarmonyModuleRef[]): string | null;
|
|
71
98
|
/**
|
|
72
99
|
* ArkAnalyzer sources under `scannedFiles` that are not inside any
|
|
73
100
|
* build-profile PROJECT module `srcPath`.
|
|
74
101
|
*/
|
|
75
102
|
export declare function listOrphanArkAnalyzerSources(scannedFiles: Iterable<string>, harmonyModules: HarmonyModuleRef[]): string[];
|
|
76
103
|
/**
|
|
77
|
-
* Cluster orphan `.ets`/`.ts`/`.d.ts` into synthetic PROJECT module roots
|
|
78
|
-
* (e.g.
|
|
104
|
+
* Cluster orphan `.ets`/`.ts`/`.d.ts` into synthetic PROJECT module roots for
|
|
105
|
+
* Node-style packages only (`package.json`, e.g. HMRouterPlugin). Harmony
|
|
106
|
+
* `oh-package.json5` trees omitted from build-profile are not registered —
|
|
107
|
+
* analyseByModule would re-SIGNATURES their monorepo deps at high RSS cost.
|
|
79
108
|
*/
|
|
80
109
|
export declare function listSyntheticArkModuleRoots(rootDir: string, scannedFiles: Iterable<string>, harmonyModules?: HarmonyModuleRef[]): HarmonyModuleRef[];
|
|
81
110
|
export type DirtyHarmonyModuleResolution = {
|
|
@@ -273,7 +302,11 @@ export interface BindOhosApiDbOptions extends EnsureOhosApiDbOptions {
|
|
|
273
302
|
/** Prefix applied to API db node file paths so explore can render without disk reads. */
|
|
274
303
|
export declare function markOhosApiFilePath(relativePath: string): string;
|
|
275
304
|
export declare function isOhosApiFilePath(filePath: string): boolean;
|
|
276
|
-
/**
|
|
305
|
+
/**
|
|
306
|
+
* DevEco / Harmony JSON5 subset → JSON.parse.
|
|
307
|
+
* Supports: line/block comments, trailing commas, bare keys, single-quoted strings
|
|
308
|
+
* (e.g. deviceTypes: ['phone', '2in1']). Not a full JSON5 implementation.
|
|
309
|
+
*/
|
|
277
310
|
export declare function parseJson5Minimal(text: string): unknown;
|
|
278
311
|
/** Normalize compileSdkVersion values like "6.0.1(21)" → "6.0.1". */
|
|
279
312
|
export declare function normalizeOhosApiVersion(raw: unknown): string | null;
|
|
@@ -67,8 +67,10 @@ exports.cleanArkTypeString = cleanArkTypeString;
|
|
|
67
67
|
exports.normalizeArktsReturnType = normalizeArktsReturnType;
|
|
68
68
|
exports.buildArkMethodSignatureFields = buildArkMethodSignatureFields;
|
|
69
69
|
exports.shouldUseIsolatedArkTSBuild = shouldUseIsolatedArkTSBuild;
|
|
70
|
+
exports.preferHarmonySerialIndexing = preferHarmonySerialIndexing;
|
|
70
71
|
exports.normalizeHarmonyModuleSrcPath = normalizeHarmonyModuleSrcPath;
|
|
71
72
|
exports.listHarmonyProjectModules = listHarmonyProjectModules;
|
|
73
|
+
exports.syntheticRootConflictsWithHarmonyModules = syntheticRootConflictsWithHarmonyModules;
|
|
72
74
|
exports.findSyntheticArkModuleRoot = findSyntheticArkModuleRoot;
|
|
73
75
|
exports.listOrphanArkAnalyzerSources = listOrphanArkAnalyzerSources;
|
|
74
76
|
exports.listSyntheticArkModuleRoots = listSyntheticArkModuleRoots;
|
|
@@ -319,6 +321,23 @@ function shouldUseModularArkTSBuild(rootDir) {
|
|
|
319
321
|
return true;
|
|
320
322
|
return fs.existsSync(path.join(rootDir, 'build-profile.json5'));
|
|
321
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Default to serial parse + no resolve worker pool on Harmony modular repos.
|
|
326
|
+
* analyseByModule dominates wall clock; worker pools mainly spike peak RSS after
|
|
327
|
+
* Scene release (Spec 0037). Explicit CODEGRAPH_PARSE_WORKERS still wins when set.
|
|
328
|
+
*
|
|
329
|
+
* - unset: true iff root `build-profile.json5` exists
|
|
330
|
+
* - `HOMEGRAPH_HARMONY_SERIAL=0`/`false`: never
|
|
331
|
+
* - `HOMEGRAPH_HARMONY_SERIAL=1`/`true`: always
|
|
332
|
+
*/
|
|
333
|
+
function preferHarmonySerialIndexing(rootDir) {
|
|
334
|
+
const mode = process.env.HOMEGRAPH_HARMONY_SERIAL?.trim();
|
|
335
|
+
if (mode === '0' || mode === 'false')
|
|
336
|
+
return false;
|
|
337
|
+
if (mode === '1' || mode === 'true')
|
|
338
|
+
return true;
|
|
339
|
+
return fs.existsSync(path.join(rootDir, 'build-profile.json5'));
|
|
340
|
+
}
|
|
322
341
|
/** Normalize build-profile `srcPath` / relative file paths for prefix matching. */
|
|
323
342
|
function normalizeHarmonyModuleSrcPath(srcPath) {
|
|
324
343
|
return srcPath.replace(/\\/g, '/').replace(/^\.\//, '').replace(/\/$/, '');
|
|
@@ -371,37 +390,72 @@ function resolveArkModuleAbsPath(rootDir, relSrcPath) {
|
|
|
371
390
|
}
|
|
372
391
|
}
|
|
373
392
|
/**
|
|
374
|
-
*
|
|
375
|
-
*
|
|
376
|
-
*
|
|
393
|
+
* True when registering `srcPath` as a synthetic PROJECT would re-load real
|
|
394
|
+
* Harmony modules: exact path collision, or a parent of existing `srcPath`s
|
|
395
|
+
* (e.g. synthetic `feature/` swallowing `feature/appcenter`).
|
|
396
|
+
*/
|
|
397
|
+
function syntheticRootConflictsWithHarmonyModules(srcPath, modules) {
|
|
398
|
+
const src = normalizeHarmonyModuleSrcPath(srcPath);
|
|
399
|
+
if (!src || src === '.' || src === '')
|
|
400
|
+
return true;
|
|
401
|
+
for (const m of modules) {
|
|
402
|
+
const mod = m.srcPath;
|
|
403
|
+
if (mod === src || mod.startsWith(`${src}/`))
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
return false;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Nearest **Node** `package.json` directory for an orphan Ark/TS source.
|
|
410
|
+
* Never returns the project root (registering `.` would re-scan every Harmony
|
|
411
|
+
* module). Lone files directly under the root return null.
|
|
412
|
+
*
|
|
413
|
+
* Only `package.json` counts — not `oh-package.json5`. Forgotten Harmony HARs
|
|
414
|
+
* left out of root `build-profile.json5` (scene_board `feature/visionglass`
|
|
415
|
+
* etc.) often declare heavy `file:`/`../` deps on modules already indexed as
|
|
416
|
+
* real PROJECT modules; registering them as synthetic PROJECT→BODIES reloads
|
|
417
|
+
* those deps into ModuleCache and spikes wall time + RSS for almost no unique
|
|
418
|
+
* coverage. Those orphans fall through to tree-sitter instead.
|
|
419
|
+
*
|
|
420
|
+
* When `harmonyModules` is provided, skips roots that would swallow those
|
|
421
|
+
* modules (e.g. a plugin under `feature/intelligent` must not become
|
|
422
|
+
* `synthetic:feature/` and re-BODIES the whole `feature/` tree).
|
|
377
423
|
*/
|
|
378
|
-
function findSyntheticArkModuleRoot(rootDir, relFile) {
|
|
424
|
+
function findSyntheticArkModuleRoot(rootDir, relFile, harmonyModules = []) {
|
|
379
425
|
const file = normIndexPath(relFile);
|
|
380
426
|
if (!file || file.startsWith('@'))
|
|
381
427
|
return null;
|
|
382
|
-
|
|
428
|
+
const dir = path.posix.dirname(file);
|
|
383
429
|
if (dir === '.' || dir === '')
|
|
384
430
|
return null;
|
|
385
431
|
const rootAbs = path.resolve(rootDir);
|
|
432
|
+
const candidates = [];
|
|
386
433
|
let curAbs = path.resolve(rootDir, dir);
|
|
387
434
|
for (;;) {
|
|
388
435
|
const relFromRoot = path.relative(rootAbs, curAbs);
|
|
389
436
|
if (!relFromRoot || relFromRoot.startsWith('..') || path.isAbsolute(relFromRoot))
|
|
390
437
|
break;
|
|
391
|
-
const rel = relFromRoot.replace(/\\/g, '/');
|
|
392
|
-
if (
|
|
393
|
-
|
|
394
|
-
return normalizeHarmonyModuleSrcPath(rel);
|
|
395
|
-
}
|
|
438
|
+
const rel = normalizeHarmonyModuleSrcPath(relFromRoot.replace(/\\/g, '/'));
|
|
439
|
+
if (rel && rel !== '.')
|
|
440
|
+
candidates.push(rel);
|
|
396
441
|
const parent = path.dirname(curAbs);
|
|
397
442
|
if (parent === curAbs)
|
|
398
443
|
break;
|
|
399
444
|
curAbs = parent;
|
|
400
445
|
}
|
|
401
|
-
|
|
402
|
-
if (!first || first === file)
|
|
446
|
+
if (candidates.length === 0)
|
|
403
447
|
return null;
|
|
404
|
-
|
|
448
|
+
const safe = (rel) => !syntheticRootConflictsWithHarmonyModules(rel, harmonyModules);
|
|
449
|
+
// Nearest package.json that does not swallow Harmony modules (Node plugins).
|
|
450
|
+
for (const rel of candidates) {
|
|
451
|
+
if (!safe(rel))
|
|
452
|
+
continue;
|
|
453
|
+
const abs = path.resolve(rootDir, rel);
|
|
454
|
+
if (fs.existsSync(path.join(abs, 'package.json'))) {
|
|
455
|
+
return rel;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
return null;
|
|
405
459
|
}
|
|
406
460
|
/**
|
|
407
461
|
* ArkAnalyzer sources under `scannedFiles` that are not inside any
|
|
@@ -421,19 +475,21 @@ function listOrphanArkAnalyzerSources(scannedFiles, harmonyModules) {
|
|
|
421
475
|
return orphans;
|
|
422
476
|
}
|
|
423
477
|
/**
|
|
424
|
-
* Cluster orphan `.ets`/`.ts`/`.d.ts` into synthetic PROJECT module roots
|
|
425
|
-
* (e.g.
|
|
478
|
+
* Cluster orphan `.ets`/`.ts`/`.d.ts` into synthetic PROJECT module roots for
|
|
479
|
+
* Node-style packages only (`package.json`, e.g. HMRouterPlugin). Harmony
|
|
480
|
+
* `oh-package.json5` trees omitted from build-profile are not registered —
|
|
481
|
+
* analyseByModule would re-SIGNATURES their monorepo deps at high RSS cost.
|
|
426
482
|
*/
|
|
427
483
|
function listSyntheticArkModuleRoots(rootDir, scannedFiles, harmonyModules) {
|
|
428
484
|
const modules = harmonyModules ?? listHarmonyProjectModules(rootDir);
|
|
429
485
|
const orphans = listOrphanArkAnalyzerSources(scannedFiles, modules);
|
|
430
486
|
const bySrc = new Map();
|
|
431
487
|
for (const f of orphans) {
|
|
432
|
-
const srcPath = findSyntheticArkModuleRoot(rootDir, f);
|
|
488
|
+
const srcPath = findSyntheticArkModuleRoot(rootDir, f, modules);
|
|
433
489
|
if (!srcPath)
|
|
434
490
|
continue;
|
|
435
|
-
//
|
|
436
|
-
if (
|
|
491
|
+
// Belt-and-suspenders with findSyntheticArkModuleRoot's conflict check.
|
|
492
|
+
if (syntheticRootConflictsWithHarmonyModules(srcPath, modules))
|
|
437
493
|
continue;
|
|
438
494
|
if (bySrc.has(srcPath))
|
|
439
495
|
continue;
|
|
@@ -914,14 +970,27 @@ function tryForceGc() {
|
|
|
914
970
|
}
|
|
915
971
|
}
|
|
916
972
|
}
|
|
973
|
+
/** Compact stderr phase/heartbeat lines for ArkTS index stalls (scene_board-scale). */
|
|
974
|
+
function arktsPhaseLog(msg) {
|
|
975
|
+
const mu = process.memoryUsage();
|
|
976
|
+
const heap = (mu.heapUsed / 1024 / 1024).toFixed(0);
|
|
977
|
+
const rss = (mu.rss / 1024 / 1024).toFixed(0);
|
|
978
|
+
process.stderr.write(`\x1b[36m ArkTS[${new Date().toISOString()}] ${msg} (heap=${heap}MB rss=${rss}MB)\x1b[0m\n`);
|
|
979
|
+
}
|
|
917
980
|
/**
|
|
918
981
|
* Unload every module's IR then dispose Scene globals. Plain `scene.dispose()`
|
|
919
982
|
* only clears SDK helpers / moduleCache — project ArkFiles stay reachable and
|
|
920
983
|
* pin multi-GB RSS into Parsing/Resolving.
|
|
921
984
|
*/
|
|
922
985
|
function releaseArkAnalyzerScene(scene) {
|
|
986
|
+
const t0 = Date.now();
|
|
987
|
+
let n = 0;
|
|
988
|
+
let total = -1;
|
|
923
989
|
try {
|
|
924
|
-
|
|
990
|
+
const mods = [...scene.getModules()];
|
|
991
|
+
total = mods.length;
|
|
992
|
+
arktsPhaseLog(`releaseScene: disposing ${total} module(s)…`);
|
|
993
|
+
for (const mod of mods) {
|
|
925
994
|
try {
|
|
926
995
|
scene.disposeModule(mod);
|
|
927
996
|
mod.setFileDepGraph(undefined);
|
|
@@ -931,18 +1000,24 @@ function releaseArkAnalyzerScene(scene) {
|
|
|
931
1000
|
catch {
|
|
932
1001
|
// per-module best-effort
|
|
933
1002
|
}
|
|
1003
|
+
n++;
|
|
1004
|
+
if (n === 1 || n === total || n % 25 === 0) {
|
|
1005
|
+
arktsPhaseLog(`releaseScene: disposed ${n}/${total}`);
|
|
1006
|
+
}
|
|
934
1007
|
}
|
|
935
1008
|
}
|
|
936
1009
|
catch {
|
|
937
1010
|
// ignore
|
|
938
1011
|
}
|
|
939
1012
|
try {
|
|
1013
|
+
arktsPhaseLog('releaseScene: scene.dispose()…');
|
|
940
1014
|
scene.dispose();
|
|
941
1015
|
}
|
|
942
1016
|
catch {
|
|
943
1017
|
// ignore
|
|
944
1018
|
}
|
|
945
1019
|
tryForceGc();
|
|
1020
|
+
arktsPhaseLog(`releaseScene: done in ${Date.now() - t0}ms (disposed ${n}/${total})`);
|
|
946
1021
|
}
|
|
947
1022
|
/**
|
|
948
1023
|
* ArkAnalyzer 1.0.92 keeps INDEX hollow on {@link ModuleBuilder} as a private
|
|
@@ -1109,18 +1184,20 @@ function runArkTSBatch(rootDir, queries, triggerFile) {
|
|
|
1109
1184
|
return cached;
|
|
1110
1185
|
}
|
|
1111
1186
|
// indexAll releases the in-memory payload after SQLite persist. A later
|
|
1112
|
-
// ArkTSExtractor hit must NOT rebuild the entire Scene (looks like a restart
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1187
|
+
// ArkTSExtractor hit must NOT rebuild the entire Scene (looks like a restart
|
|
1188
|
+
// after "127/127 … releaseScene done"). That includes orphans that were never
|
|
1189
|
+
// in a PROJECT module — they are meant to fall through to tree-sitter, not
|
|
1190
|
+
// trigger a second analyseByModule without streamPersist.
|
|
1191
|
+
if (batchBuildCommitted && persistedBatch && persistedBatch.rootDir === rootDir) {
|
|
1117
1192
|
return {
|
|
1118
1193
|
fileResults: new Map(),
|
|
1119
1194
|
crossFileEdges: [],
|
|
1120
1195
|
nodeIds: new Set(),
|
|
1121
1196
|
errors: [
|
|
1122
1197
|
{
|
|
1123
|
-
message:
|
|
1198
|
+
message: batchPersistedPaths.has(normalizedTrigger)
|
|
1199
|
+
? 'ArkTS batch already persisted this run; in-memory payload released'
|
|
1200
|
+
: 'ArkTS batch already finished this run; file was outside PROJECT modules (tree-sitter fallback)',
|
|
1124
1201
|
severity: 'warning',
|
|
1125
1202
|
},
|
|
1126
1203
|
],
|
|
@@ -4035,7 +4112,7 @@ function buildArkTSIndexByModuleInner(rootDir, scannedFiles, options) {
|
|
|
4035
4112
|
};
|
|
4036
4113
|
try {
|
|
4037
4114
|
scene.config(sceneConfig);
|
|
4038
|
-
// Register build-profile modules +
|
|
4115
|
+
// Register build-profile modules + Node package.json orphan plugins before the
|
|
4039
4116
|
// dep graph is frozen — otherwise analyseByModule never sees HMRouterPlugin-style .ts.
|
|
4040
4117
|
const synthetics = prepareArkModulesWithSynthetics(scene, rootDir, scannedList);
|
|
4041
4118
|
if (synthetics.length > 0) {
|
|
@@ -4079,67 +4156,115 @@ function buildArkTSIndexByModuleInner(rootDir, scannedFiles, options) {
|
|
|
4079
4156
|
config.setIncludeType(arkanalyzer_1.ModuleType.PROJECT, true);
|
|
4080
4157
|
process.stderr.write(`\n\x1b[33m ArkTS: analyseByModule (PROJECT→BODIES, deps→SIGNATURES, memoryLimitMB=${memoryLimitMB}, maxOldSpace=${(0, wasm_runtime_flags_1.resolveMaxOldSpaceSizeMb)()}${streamQueries ? ', streamPersist' : ''})...\x1b[0m\n`);
|
|
4081
4158
|
}
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
4085
|
-
.
|
|
4086
|
-
|
|
4087
|
-
adapter.indexModule(module, scn);
|
|
4088
|
-
// HomeGraph already captured this module's symbols/edges. Hollow every
|
|
4089
|
-
// currently-loaded module still above INDEX (target + oh_modules /
|
|
4090
|
-
// SIGNATURES deps left in ModuleCache). Topo order means PROJECT deps of
|
|
4091
|
-
// the current target are often already INDEX from their own callback, so
|
|
4092
|
-
// BFS-from-self alone left depHollowed=0; sweeping the cache catches the
|
|
4093
|
-
// fat non-target SIGNATURES that memoryLimitMB rarely evicts under a large
|
|
4094
|
-
// soft budget. INDEX keeps export-reachable shells; loadModule upgrades
|
|
4095
|
-
// when a later target needs SIGNATURES/BODIES.
|
|
4096
|
-
let depHollowed = 0;
|
|
4097
|
-
try {
|
|
4098
|
-
const builder = new arkanalyzer_1.ModuleBuilder(scn);
|
|
4099
|
-
const selfId = scn.getModuleId(module);
|
|
4100
|
-
hollowModuleToIndex(builder, selfId);
|
|
4101
|
-
const cache = scn.getModuleCache();
|
|
4102
|
-
if (cache) {
|
|
4103
|
-
for (const modId of cache.getLoadedModules()) {
|
|
4104
|
-
if (modId === selfId)
|
|
4105
|
-
continue;
|
|
4106
|
-
const depMod = builder.getModule(modId);
|
|
4107
|
-
if (!depMod || depMod.getLoadState() <= arkanalyzer_1.ModuleLoadState.INDEX)
|
|
4108
|
-
continue;
|
|
4109
|
-
hollowModuleToIndex(builder, modId);
|
|
4110
|
-
depHollowed++;
|
|
4111
|
-
}
|
|
4112
|
-
}
|
|
4113
|
-
}
|
|
4114
|
-
catch (e) {
|
|
4115
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
4116
|
-
errors.push({
|
|
4117
|
-
message: `ArkTS post-index INDEX hollow failed for ${module.getModuleName() || module.getModulePath()}: ${message}`,
|
|
4118
|
-
severity: 'warning',
|
|
4119
|
-
});
|
|
4159
|
+
let projectModuleCount = 0;
|
|
4160
|
+
try {
|
|
4161
|
+
for (const mod of scene.getModules()) {
|
|
4162
|
+
if (mod.getModuleType() === arkanalyzer_1.ModuleType.PROJECT)
|
|
4163
|
+
projectModuleCount++;
|
|
4120
4164
|
}
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4165
|
+
}
|
|
4166
|
+
catch {
|
|
4167
|
+
projectModuleCount = -1;
|
|
4168
|
+
}
|
|
4169
|
+
// Heartbeat: analyseByModule is native between callbacks — without this the
|
|
4170
|
+
// CLI looks frozen after the last `indexed module` line (scene_board ~127).
|
|
4171
|
+
let lastCallbackAt = Date.now();
|
|
4172
|
+
let lastCallbackName = '(none)';
|
|
4173
|
+
let inCallback = false;
|
|
4174
|
+
const analyseStartedAt = Date.now();
|
|
4175
|
+
const heartbeat = setInterval(() => {
|
|
4176
|
+
const idleSec = ((Date.now() - lastCallbackAt) / 1000).toFixed(1);
|
|
4177
|
+
arktsPhaseLog(`heartbeat: analyseByModule still running — modulesDone=${modulesIndexed}/${projectModuleCount} ` +
|
|
4178
|
+
`last=${lastCallbackName} inCallback=${inCallback} idleSinceCallback=${idleSec}s ` +
|
|
4179
|
+
`elapsed=${((Date.now() - analyseStartedAt) / 1000).toFixed(0)}s`);
|
|
4180
|
+
}, 10_000);
|
|
4181
|
+
// Don't keep the process alive solely for the heartbeat if AA finishes.
|
|
4182
|
+
heartbeat.unref?.();
|
|
4183
|
+
arktsPhaseLog(`analyseByModule: ENTER expectedProjectModules=${projectModuleCount} scannedFiles=${scannedList.length}`);
|
|
4184
|
+
try {
|
|
4185
|
+
scene.analyseByModule((module, scn) => {
|
|
4186
|
+
inCallback = true;
|
|
4187
|
+
const callbackStarted = Date.now();
|
|
4188
|
+
const name = module.getModuleName() || path.basename(module.getModulePath());
|
|
4189
|
+
const gapSec = ((callbackStarted - lastCallbackAt) / 1000).toFixed(1);
|
|
4190
|
+
if (modulesIndexed > 0 && callbackStarted - lastCallbackAt >= 15_000) {
|
|
4191
|
+
arktsPhaseLog(`analyseByModule: gap before "${name}" — ${gapSec}s native since module ${modulesIndexed}`);
|
|
4192
|
+
}
|
|
4193
|
+
const moduleFileRels = [...module.getFilesMap().values()]
|
|
4194
|
+
.map((f) => adapter.normalizeRelPath(f.getFilePath()))
|
|
4195
|
+
.filter((p) => p && isArkAnalyzerSourcePath(p))
|
|
4196
|
+
.map(normIndexPath);
|
|
4197
|
+
const tIndex = Date.now();
|
|
4198
|
+
adapter.indexModule(module, scn);
|
|
4199
|
+
const indexMs = Date.now() - tIndex;
|
|
4200
|
+
// HomeGraph already captured this module's symbols/edges. Hollow every
|
|
4201
|
+
// currently-loaded module still above INDEX (target + oh_modules /
|
|
4202
|
+
// SIGNATURES deps left in ModuleCache). Topo order means PROJECT deps of
|
|
4203
|
+
// the current target are often already INDEX from their own callback, so
|
|
4204
|
+
// BFS-from-self alone left depHollowed=0; sweeping the cache catches the
|
|
4205
|
+
// fat non-target SIGNATURES that memoryLimitMB rarely evicts under a large
|
|
4206
|
+
// soft budget. INDEX keeps export-reachable shells; loadModule upgrades
|
|
4207
|
+
// when a later target needs SIGNATURES/BODIES.
|
|
4208
|
+
let depHollowed = 0;
|
|
4209
|
+
const tHollow = Date.now();
|
|
4125
4210
|
try {
|
|
4126
|
-
|
|
4211
|
+
const builder = new arkanalyzer_1.ModuleBuilder(scn);
|
|
4212
|
+
const selfId = scn.getModuleId(module);
|
|
4213
|
+
hollowModuleToIndex(builder, selfId);
|
|
4214
|
+
const cache = scn.getModuleCache();
|
|
4215
|
+
if (cache) {
|
|
4216
|
+
for (const modId of cache.getLoadedModules()) {
|
|
4217
|
+
if (modId === selfId)
|
|
4218
|
+
continue;
|
|
4219
|
+
const depMod = builder.getModule(modId);
|
|
4220
|
+
if (!depMod || depMod.getLoadState() <= arkanalyzer_1.ModuleLoadState.INDEX)
|
|
4221
|
+
continue;
|
|
4222
|
+
hollowModuleToIndex(builder, modId);
|
|
4223
|
+
depHollowed++;
|
|
4224
|
+
}
|
|
4225
|
+
}
|
|
4127
4226
|
}
|
|
4128
4227
|
catch (e) {
|
|
4129
4228
|
const message = e instanceof Error ? e.message : String(e);
|
|
4130
4229
|
errors.push({
|
|
4131
|
-
message: `ArkTS
|
|
4132
|
-
severity: '
|
|
4230
|
+
message: `ArkTS post-index INDEX hollow failed for ${module.getModuleName() || module.getModulePath()}: ${message}`,
|
|
4231
|
+
severity: 'warning',
|
|
4133
4232
|
});
|
|
4134
|
-
throw e;
|
|
4135
4233
|
}
|
|
4136
|
-
|
|
4137
|
-
|
|
4138
|
-
|
|
4139
|
-
|
|
4140
|
-
|
|
4141
|
-
|
|
4142
|
-
|
|
4234
|
+
const hollowMs = Date.now() - tHollow;
|
|
4235
|
+
let persistMs = 0;
|
|
4236
|
+
if (streamQueries) {
|
|
4237
|
+
// Persist this module's file bodies now; keep @dummyFile until finalize.
|
|
4238
|
+
const slicePaths = moduleFileRels.filter((p) => p !== ARKANALYZER_DUMMY_FILE);
|
|
4239
|
+
const slice = adapter.takeFileResults(slicePaths);
|
|
4240
|
+
const tPersist = Date.now();
|
|
4241
|
+
try {
|
|
4242
|
+
persistAndDropModuleSlice(rootDir, streamQueries, slice, streamedPersistedPaths, persistOrdinal);
|
|
4243
|
+
}
|
|
4244
|
+
catch (e) {
|
|
4245
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
4246
|
+
errors.push({
|
|
4247
|
+
message: `ArkTS stream persist failed for ${module.getModuleName() || module.getModulePath()}: ${message}`,
|
|
4248
|
+
severity: 'error',
|
|
4249
|
+
});
|
|
4250
|
+
throw e;
|
|
4251
|
+
}
|
|
4252
|
+
persistMs = Date.now() - tPersist;
|
|
4253
|
+
}
|
|
4254
|
+
modulesIndexed++;
|
|
4255
|
+
lastCallbackAt = Date.now();
|
|
4256
|
+
lastCallbackName = name;
|
|
4257
|
+
inCallback = false;
|
|
4258
|
+
const st = arkanalyzer_1.ModuleLoadState[module.getLoadState()] ?? String(module.getLoadState());
|
|
4259
|
+
const depNote = depHollowed > 0 ? `, hollowed ${depHollowed} deps` : '';
|
|
4260
|
+
const timingNote = ` [gap=${gapSec}s idx=${indexMs}ms hollow=${hollowMs}ms persist=${persistMs}ms total=${Date.now() - callbackStarted}ms]`;
|
|
4261
|
+
process.stderr.write(`\x1b[33m ArkTS: indexed module ${modulesIndexed}/${projectModuleCount}: ${name} → ${st}${depNote}${streamQueries ? ` (streamed ${moduleFileRels.length} files)` : ''}${timingNote}\x1b[0m\n`);
|
|
4262
|
+
}, config);
|
|
4263
|
+
}
|
|
4264
|
+
finally {
|
|
4265
|
+
clearInterval(heartbeat);
|
|
4266
|
+
}
|
|
4267
|
+
arktsPhaseLog(`analyseByModule: RETURNED modulesIndexed=${modulesIndexed}/${projectModuleCount} in ${Date.now() - analyseStartedAt}ms`);
|
|
4143
4268
|
if (process.env.HOMEGRAPH_ARKTS_DIAG === '1') {
|
|
4144
4269
|
const sceneDiag = scene;
|
|
4145
4270
|
const ev = typeof sceneDiag.getModuleEvictionStats === 'function'
|
|
@@ -4158,7 +4283,10 @@ function buildArkTSIndexByModuleInner(rootDir, scannedFiles, options) {
|
|
|
4158
4283
|
return emptyArkTSBatchIndex(errors);
|
|
4159
4284
|
}
|
|
4160
4285
|
try {
|
|
4286
|
+
const tFin = Date.now();
|
|
4287
|
+
arktsPhaseLog('finalizeCallGraph: ENTER');
|
|
4161
4288
|
adapter.finalizeCallGraph(scene);
|
|
4289
|
+
arktsPhaseLog(`finalizeCallGraph: DONE in ${Date.now() - tFin}ms`);
|
|
4162
4290
|
}
|
|
4163
4291
|
catch (e) {
|
|
4164
4292
|
const message = e instanceof Error ? e.message : String(e);
|
|
@@ -4166,10 +4294,14 @@ function buildArkTSIndexByModuleInner(rootDir, scannedFiles, options) {
|
|
|
4166
4294
|
message: `ArkTS modular leftover RTA skipped: ${message}`,
|
|
4167
4295
|
severity: 'warning',
|
|
4168
4296
|
});
|
|
4297
|
+
arktsPhaseLog(`finalizeCallGraph: SKIPPED (${message})`);
|
|
4169
4298
|
}
|
|
4170
4299
|
if (streamQueries) {
|
|
4300
|
+
const tLeft = Date.now();
|
|
4301
|
+
arktsPhaseLog('leftoverPersist: ENTER');
|
|
4171
4302
|
const leftover = adapter.takeFileResults(adapter.fileResultPaths());
|
|
4172
4303
|
persistAndDropModuleSlice(rootDir, streamQueries, leftover, streamedPersistedPaths, persistOrdinal);
|
|
4304
|
+
arktsPhaseLog(`leftoverPersist: DONE in ${Date.now() - tLeft}ms leftoverFiles=${leftover.size} streamedTotal=${streamedPersistedPaths.size}`);
|
|
4173
4305
|
}
|
|
4174
4306
|
const index = adapter.toBatchIndex(errors);
|
|
4175
4307
|
if (streamQueries) {
|
|
@@ -4182,6 +4314,7 @@ function buildArkTSIndexByModuleInner(rootDir, scannedFiles, options) {
|
|
|
4182
4314
|
});
|
|
4183
4315
|
return emptyArkTSBatchIndex(errors);
|
|
4184
4316
|
}
|
|
4317
|
+
arktsPhaseLog('buildArkTSIndexByModuleInner: returning index (finally will releaseScene)');
|
|
4185
4318
|
return index;
|
|
4186
4319
|
}
|
|
4187
4320
|
catch (e) {
|
|
@@ -4190,6 +4323,7 @@ function buildArkTSIndexByModuleInner(rootDir, scannedFiles, options) {
|
|
|
4190
4323
|
message: `ArkTS analyseByModule failed: ${message}; falling back to full Scene build`,
|
|
4191
4324
|
severity: 'warning',
|
|
4192
4325
|
});
|
|
4326
|
+
arktsPhaseLog(`analyseByModule: FAILED — ${message}`);
|
|
4193
4327
|
return emptyArkTSBatchIndex(errors);
|
|
4194
4328
|
}
|
|
4195
4329
|
finally {
|
|
@@ -4564,13 +4698,85 @@ function markOhosApiFilePath(relativePath) {
|
|
|
4564
4698
|
function isOhosApiFilePath(filePath) {
|
|
4565
4699
|
return filePath.startsWith(exports.OHOS_API_FILE_PREFIX);
|
|
4566
4700
|
}
|
|
4567
|
-
/**
|
|
4701
|
+
/**
|
|
4702
|
+
* DevEco / Harmony JSON5 subset → JSON.parse.
|
|
4703
|
+
* Supports: line/block comments, trailing commas, bare keys, single-quoted strings
|
|
4704
|
+
* (e.g. deviceTypes: ['phone', '2in1']). Not a full JSON5 implementation.
|
|
4705
|
+
*/
|
|
4568
4706
|
function parseJson5Minimal(text) {
|
|
4569
|
-
|
|
4707
|
+
let s = text
|
|
4570
4708
|
.replace(/\/\/.*$/gm, '')
|
|
4571
|
-
.replace(/\/\*[\s\S]*?\*\//g, '')
|
|
4572
|
-
|
|
4573
|
-
|
|
4709
|
+
.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
4710
|
+
// Quote bare keys before touching string quotes.
|
|
4711
|
+
s = s.replace(/([{,]\s*)([A-Za-z_][\w]*)\s*:/g, '$1"$2":');
|
|
4712
|
+
s = convertJson5SingleQuotedStrings(s);
|
|
4713
|
+
s = s.replace(/,(\s*[}\]])/g, '$1');
|
|
4714
|
+
return JSON.parse(s);
|
|
4715
|
+
}
|
|
4716
|
+
/** Convert `'…'` string literals to JSON `"…"` outside existing double-quoted strings. */
|
|
4717
|
+
function convertJson5SingleQuotedStrings(input) {
|
|
4718
|
+
let out = '';
|
|
4719
|
+
let i = 0;
|
|
4720
|
+
while (i < input.length) {
|
|
4721
|
+
const c = input[i];
|
|
4722
|
+
if (c === '"') {
|
|
4723
|
+
out += c;
|
|
4724
|
+
i++;
|
|
4725
|
+
while (i < input.length) {
|
|
4726
|
+
const ch = input[i];
|
|
4727
|
+
out += ch;
|
|
4728
|
+
i++;
|
|
4729
|
+
if (ch === '\\' && i < input.length) {
|
|
4730
|
+
out += input[i];
|
|
4731
|
+
i++;
|
|
4732
|
+
continue;
|
|
4733
|
+
}
|
|
4734
|
+
if (ch === '"')
|
|
4735
|
+
break;
|
|
4736
|
+
}
|
|
4737
|
+
continue;
|
|
4738
|
+
}
|
|
4739
|
+
if (c === "'") {
|
|
4740
|
+
out += '"';
|
|
4741
|
+
i++;
|
|
4742
|
+
while (i < input.length) {
|
|
4743
|
+
const ch = input[i];
|
|
4744
|
+
if (ch === '\\' && i + 1 < input.length) {
|
|
4745
|
+
const next = input[i + 1];
|
|
4746
|
+
i += 2;
|
|
4747
|
+
if (next === "'") {
|
|
4748
|
+
out += "'";
|
|
4749
|
+
}
|
|
4750
|
+
else if (next === '"') {
|
|
4751
|
+
out += '\\"';
|
|
4752
|
+
}
|
|
4753
|
+
else if (next === '\\') {
|
|
4754
|
+
out += '\\\\';
|
|
4755
|
+
}
|
|
4756
|
+
else {
|
|
4757
|
+
out += '\\' + next;
|
|
4758
|
+
}
|
|
4759
|
+
continue;
|
|
4760
|
+
}
|
|
4761
|
+
if (ch === "'") {
|
|
4762
|
+
out += '"';
|
|
4763
|
+
i++;
|
|
4764
|
+
break;
|
|
4765
|
+
}
|
|
4766
|
+
if (ch === '"') {
|
|
4767
|
+
out += '\\"';
|
|
4768
|
+
i++;
|
|
4769
|
+
continue;
|
|
4770
|
+
}
|
|
4771
|
+
out += ch;
|
|
4772
|
+
i++;
|
|
4773
|
+
}
|
|
4774
|
+
continue;
|
|
4775
|
+
}
|
|
4776
|
+
out += c;
|
|
4777
|
+
i++;
|
|
4778
|
+
}
|
|
4779
|
+
return out;
|
|
4574
4780
|
}
|
|
4575
4781
|
/** Normalize compileSdkVersion values like "6.0.1(21)" → "6.0.1". */
|
|
4576
4782
|
function normalizeOhosApiVersion(raw) {
|
|
@@ -6512,9 +6512,18 @@ function extractFromSource(filePath, source, language, frameworkNames) {
|
|
|
6512
6512
|
result = extractor.extract();
|
|
6513
6513
|
}
|
|
6514
6514
|
else if (detectedLanguage === 'arkts') {
|
|
6515
|
-
//
|
|
6516
|
-
|
|
6517
|
-
|
|
6515
|
+
// Prefer ArkAnalyzer via ArkTSExtractor. After a committed modular/full batch,
|
|
6516
|
+
// files that never entered a PROJECT module must NOT call ArkTSExtractor —
|
|
6517
|
+
// that path would rebuild the entire Scene (second analyseByModule). Use the
|
|
6518
|
+
// TypeScript grammar as a shallow symbol fallback for those orphans.
|
|
6519
|
+
if ((0, arkts_1.isArkTSBatchCommitted)() && !(0, arkts_1.isArkTSBatchPersisted)(filePath)) {
|
|
6520
|
+
const extractor = new TreeSitterExtractor(filePath, source, 'typescript');
|
|
6521
|
+
result = extractor.extract();
|
|
6522
|
+
}
|
|
6523
|
+
else {
|
|
6524
|
+
const extractor = new arkts_1.ArkTSExtractor(filePath, source);
|
|
6525
|
+
result = extractor.extract();
|
|
6526
|
+
}
|
|
6518
6527
|
}
|
|
6519
6528
|
else if ((0, grammars_1.isFileLevelOnlyLanguage)(detectedLanguage)) {
|
|
6520
6529
|
// No symbol extraction at this stage — files are tracked at the file-record
|