homegraph 1.5.2 → 1.5.4
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 +156 -0
- package/README.md +63 -10
- package/dist/addons/dynamic-import.d.ts +18 -0
- package/dist/addons/dynamic-import.d.ts.map +1 -0
- package/dist/addons/dynamic-import.js +25 -0
- package/dist/addons/dynamic-import.js.map +1 -0
- package/dist/addons/init-template.d.ts +15 -0
- package/dist/addons/init-template.d.ts.map +1 -0
- package/dist/addons/init-template.js +290 -0
- package/dist/addons/init-template.js.map +1 -0
- package/dist/addons/loader.d.ts +18 -0
- package/dist/addons/loader.d.ts.map +1 -0
- package/dist/addons/loader.js +88 -0
- package/dist/addons/loader.js.map +1 -0
- package/dist/addons/manager.d.ts +106 -0
- package/dist/addons/manager.d.ts.map +1 -0
- package/dist/addons/manager.js +437 -0
- package/dist/addons/manager.js.map +1 -0
- package/dist/addons/paths.d.ts +22 -0
- package/dist/addons/paths.d.ts.map +1 -0
- package/dist/addons/paths.js +65 -0
- package/dist/addons/paths.js.map +1 -0
- package/dist/addons/registry.d.ts +38 -0
- package/dist/addons/registry.d.ts.map +1 -0
- package/dist/addons/registry.js +160 -0
- package/dist/addons/registry.js.map +1 -0
- package/dist/addons/semver.d.ts +21 -0
- package/dist/addons/semver.d.ts.map +1 -0
- package/dist/addons/semver.js +79 -0
- package/dist/addons/semver.js.map +1 -0
- package/dist/addons/types.d.ts +51 -0
- package/dist/addons/types.d.ts.map +1 -0
- package/dist/addons/types.js +14 -0
- package/dist/addons/types.js.map +1 -0
- package/dist/addons/validate.d.ts +38 -0
- package/dist/addons/validate.d.ts.map +1 -0
- package/dist/addons/validate.js +165 -0
- package/dist/addons/validate.js.map +1 -0
- package/dist/arkui/index.d.ts +4 -0
- package/dist/arkui/index.d.ts.map +1 -0
- package/dist/arkui/index.js +23 -0
- package/dist/arkui/index.js.map +1 -0
- package/dist/arkui/migrate-passage.d.ts +28 -0
- package/dist/arkui/migrate-passage.d.ts.map +1 -0
- package/dist/arkui/migrate-passage.js +310 -0
- package/dist/arkui/migrate-passage.js.map +1 -0
- package/dist/arkui/migrate-semantics.d.ts +47 -0
- package/dist/arkui/migrate-semantics.d.ts.map +1 -0
- package/dist/arkui/migrate-semantics.js +229 -0
- package/dist/arkui/migrate-semantics.js.map +1 -0
- package/dist/arkui/migrate-snapshot.d.ts +79 -0
- package/dist/arkui/migrate-snapshot.d.ts.map +1 -0
- package/dist/arkui/migrate-snapshot.js +364 -0
- package/dist/arkui/migrate-snapshot.js.map +1 -0
- package/dist/bin/addon-commands.d.ts +27 -0
- package/dist/bin/addon-commands.d.ts.map +1 -0
- package/dist/bin/addon-commands.js +254 -0
- package/dist/bin/addon-commands.js.map +1 -0
- package/dist/bin/fatal-handler.js +2 -2
- package/dist/bin/homegraph.js +111 -157
- package/dist/bin/homegraph.js.map +1 -1
- package/dist/bin/node-version-check.d.ts +6 -15
- package/dist/bin/node-version-check.d.ts.map +1 -1
- package/dist/bin/node-version-check.js +8 -37
- package/dist/bin/node-version-check.js.map +1 -1
- package/dist/db/index.d.ts +36 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +92 -6
- 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 +15 -1
- package/dist/db/migrations.js.map +1 -1
- package/dist/db/queries.d.ts +42 -0
- package/dist/db/queries.d.ts.map +1 -1
- package/dist/db/queries.js +177 -10
- package/dist/db/queries.js.map +1 -1
- package/dist/db/schema.sql +6 -1
- package/dist/db/sqlite-adapter.d.ts +7 -3
- package/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/dist/db/sqlite-adapter.js +44 -3
- package/dist/db/sqlite-adapter.js.map +1 -1
- package/dist/extraction/extraction-version.d.ts +1 -1
- package/dist/extraction/extraction-version.js +1 -1
- package/dist/extraction/generated-detection.d.ts +42 -11
- package/dist/extraction/generated-detection.d.ts.map +1 -1
- package/dist/extraction/generated-detection.js +141 -20
- package/dist/extraction/generated-detection.js.map +1 -1
- package/dist/extraction/index.d.ts +42 -0
- package/dist/extraction/index.d.ts.map +1 -1
- package/dist/extraction/index.js +96 -0
- package/dist/extraction/index.js.map +1 -1
- package/dist/extraction/languages/arkts.d.ts +33 -2
- package/dist/extraction/languages/arkts.d.ts.map +1 -1
- package/dist/extraction/languages/arkts.js +525 -129
- package/dist/extraction/languages/arkts.js.map +1 -1
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
- package/dist/extraction/wasm-runtime-flags.js +9 -6
- package/dist/extraction/wasm-runtime-flags.js.map +1 -1
- package/dist/graph-sources.d.ts +41 -0
- package/dist/graph-sources.d.ts.map +1 -0
- package/dist/graph-sources.js +82 -0
- package/dist/graph-sources.js.map +1 -0
- package/dist/index.d.ts +20 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -9
- package/dist/index.js.map +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +0 -48
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/targets/antigravity.js +1 -1
- package/dist/installer/targets/antigravity.js.map +1 -1
- package/dist/installer/targets/deveco.js +1 -1
- package/dist/installer/targets/deveco.js.map +1 -1
- package/dist/installer/targets/hermes.d.ts +1 -1
- package/dist/installer/targets/hermes.js +2 -2
- package/dist/installer/targets/hermes.js.map +1 -1
- package/dist/installer/targets/opencode.js +1 -1
- package/dist/installer/targets/opencode.js.map +1 -1
- package/dist/installer/targets/shared.js +1 -1
- package/dist/installer/targets/shared.js.map +1 -1
- package/dist/mcp/daemon-paths.d.ts +5 -4
- package/dist/mcp/daemon-paths.d.ts.map +1 -1
- package/dist/mcp/daemon-paths.js +28 -13
- package/dist/mcp/daemon-paths.js.map +1 -1
- package/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/dist/mcp/daemon-registry.js +4 -1
- package/dist/mcp/daemon-registry.js.map +1 -1
- package/dist/mcp/daemon.d.ts +1 -1
- package/dist/mcp/daemon.js +1 -1
- package/dist/mcp/engine.d.ts.map +1 -1
- package/dist/mcp/engine.js +12 -3
- package/dist/mcp/engine.js.map +1 -1
- package/dist/mcp/explore-dedup.d.ts +137 -0
- package/dist/mcp/explore-dedup.d.ts.map +1 -0
- package/dist/mcp/explore-dedup.js +236 -0
- package/dist/mcp/explore-dedup.js.map +1 -0
- package/dist/mcp/explore-repeat-guard.d.ts +123 -0
- package/dist/mcp/explore-repeat-guard.d.ts.map +1 -0
- package/dist/mcp/explore-repeat-guard.js +503 -0
- package/dist/mcp/explore-repeat-guard.js.map +1 -0
- package/dist/mcp/explore-session-state.d.ts +237 -0
- package/dist/mcp/explore-session-state.d.ts.map +1 -0
- package/dist/mcp/explore-session-state.js +353 -0
- package/dist/mcp/explore-session-state.js.map +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +4 -7
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/proxy.d.ts.map +1 -1
- package/dist/mcp/proxy.js +20 -18
- package/dist/mcp/proxy.js.map +1 -1
- package/dist/mcp/query-pool.d.ts.map +1 -1
- package/dist/mcp/query-pool.js +10 -13
- package/dist/mcp/query-pool.js.map +1 -1
- package/dist/mcp/query-worker.d.ts +1 -1
- package/dist/mcp/query-worker.js +1 -1
- package/dist/mcp/server-instructions.d.ts +5 -2
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +43 -32
- package/dist/mcp/server-instructions.js.map +1 -1
- package/dist/mcp/session.d.ts +14 -3
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +17 -14
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/startup-handshake.d.ts +1 -1
- package/dist/mcp/startup-handshake.js +1 -1
- package/dist/mcp/tools.d.ts +149 -8
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +4265 -575
- package/dist/mcp/tools.js.map +1 -1
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/dist/resolution/callback-synthesizer.js +166 -0
- package/dist/resolution/callback-synthesizer.js.map +1 -1
- package/dist/resolution/frameworks/arkts-napi.d.ts +14 -0
- package/dist/resolution/frameworks/arkts-napi.d.ts.map +1 -1
- package/dist/resolution/frameworks/arkts-napi.js +169 -49
- package/dist/resolution/frameworks/arkts-napi.js.map +1 -1
- package/dist/search/query-utils.d.ts +157 -5
- package/dist/search/query-utils.d.ts.map +1 -1
- package/dist/search/query-utils.js +1105 -70
- package/dist/search/query-utils.js.map +1 -1
- package/dist/spec/build/scan.js +1 -1
- package/dist/spec/build/scan.js.map +1 -1
- package/dist/spec/build/scope-resolver.d.ts +24 -5
- package/dist/spec/build/scope-resolver.d.ts.map +1 -1
- package/dist/spec/build/scope-resolver.js +76 -10
- package/dist/spec/build/scope-resolver.js.map +1 -1
- package/dist/spec/config.d.ts +8 -0
- package/dist/spec/config.d.ts.map +1 -1
- package/dist/spec/config.js +3 -0
- package/dist/spec/config.js.map +1 -1
- package/dist/spec/evolve/pipeline.d.ts.map +1 -1
- package/dist/spec/evolve/pipeline.js +2 -1
- package/dist/spec/evolve/pipeline.js.map +1 -1
- package/dist/spec/git/commits.d.ts +8 -3
- package/dist/spec/git/commits.d.ts.map +1 -1
- package/dist/spec/git/commits.js +12 -11
- package/dist/spec/git/commits.js.map +1 -1
- package/dist/spec/mine/addon/adapter.d.ts +45 -0
- package/dist/spec/mine/addon/adapter.d.ts.map +1 -0
- package/dist/spec/mine/addon/adapter.js +118 -0
- package/dist/spec/mine/addon/adapter.js.map +1 -0
- package/dist/spec/mine/addon/render.d.ts +20 -0
- package/dist/spec/mine/addon/render.d.ts.map +1 -0
- package/dist/spec/mine/addon/render.js +41 -0
- package/dist/spec/mine/addon/render.js.map +1 -0
- package/dist/spec/mine/addon/types.d.ts +70 -0
- package/dist/spec/mine/addon/types.d.ts.map +1 -0
- package/dist/spec/mine/addon/types.js +14 -0
- package/dist/spec/mine/addon/types.js.map +1 -0
- package/dist/spec/mine/generator.d.ts +5 -1
- package/dist/spec/mine/generator.d.ts.map +1 -1
- package/dist/spec/mine/generator.js +69 -7
- package/dist/spec/mine/generator.js.map +1 -1
- package/dist/spec/mine/pipeline.d.ts.map +1 -1
- package/dist/spec/mine/pipeline.js +5 -1
- package/dist/spec/mine/pipeline.js.map +1 -1
- package/dist/spec/mine/scanner.d.ts +1 -0
- package/dist/spec/mine/scanner.d.ts.map +1 -1
- package/dist/spec/mine/scanner.js +1 -1
- package/dist/spec/mine/scanner.js.map +1 -1
- package/dist/spec/types.d.ts +1 -1
- package/dist/spec/types.d.ts.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/upgrade/index.d.ts +14 -26
- package/dist/upgrade/index.d.ts.map +1 -1
- package/dist/upgrade/index.js +28 -123
- package/dist/upgrade/index.js.map +1 -1
- package/dist/upgrade/remove-binary.d.ts +19 -19
- package/dist/upgrade/remove-binary.d.ts.map +1 -1
- package/dist/upgrade/remove-binary.js +20 -21
- package/dist/upgrade/remove-binary.js.map +1 -1
- package/dist/upgrade/update-check.d.ts +4 -3
- package/dist/upgrade/update-check.d.ts.map +1 -1
- package/dist/upgrade/update-check.js +4 -3
- package/dist/upgrade/update-check.js.map +1 -1
- package/package.json +13 -9
- package/dist/telemetry/index.d.ts +0 -143
- package/dist/telemetry/index.d.ts.map +0 -1
- package/dist/telemetry/index.js +0 -541
- package/dist/telemetry/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/callback-synthesizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAWjD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"callback-synthesizer.d.ts","sourceRoot":"","sources":["../../src/resolution/callback-synthesizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,IAAI,EAAkB,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAWjD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyiHrE,mGAAmG;AACnG,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;AAE5C;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;IAChC,GAAG,EAAE,CACH,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,iBAAiB,EACtB,WAAW,EAAE,UAAU,EACvB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,KACrC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;CACtB;AAsGD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,YAAY,EAmEtC,CAAC;AAIF,eAAO,MAAM,oBAAoB,QAA0C,CAAC;AAC5E,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,YAAY,EACrB,GAAG,EAAE,iBAAiB,EACtB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,EAIlD,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAInG,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAGzC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAwOjB"}
|
|
@@ -743,6 +743,170 @@ async function arkuiEmitterEdges(ctx, onYield) {
|
|
|
743
743
|
}
|
|
744
744
|
return edges;
|
|
745
745
|
}
|
|
746
|
+
/** Cap for commonEvent event-key fan-out (same rationale as emitter). */
|
|
747
|
+
const ARKUI_COMMON_EVENT_FANOUT_CAP = 8;
|
|
748
|
+
/**
|
|
749
|
+
* HarmonyOS `commonEventManager.publish` ↔ `createSubscriber`/`subscribe` when
|
|
750
|
+
* both name the same literal event string. Without this, notification / screen /
|
|
751
|
+
* package flows die at the publish call (no static edge to the subscriber).
|
|
752
|
+
*
|
|
753
|
+
* Precision: literal event strings only; fan-out capped; `.ets` only.
|
|
754
|
+
*/
|
|
755
|
+
async function arkuiCommonEventEdges(ctx, onYield) {
|
|
756
|
+
let scanned = 0;
|
|
757
|
+
const publishes = new Map();
|
|
758
|
+
const subscribers = new Map();
|
|
759
|
+
const push = (map, key, site) => {
|
|
760
|
+
(map.get(key) ?? map.set(key, []).get(key)).push(site);
|
|
761
|
+
};
|
|
762
|
+
for (const file of ctx.getAllFiles()) {
|
|
763
|
+
if ((++scanned & 15) === 0)
|
|
764
|
+
await onYield();
|
|
765
|
+
if (!file.endsWith('.ets'))
|
|
766
|
+
continue;
|
|
767
|
+
const content = ctx.readFile(file);
|
|
768
|
+
if (!content || !/commonEventManager|CommonEvent/i.test(content))
|
|
769
|
+
continue;
|
|
770
|
+
const safe = (0, strip_comments_1.stripCommentsForRegex)(content, 'typescript');
|
|
771
|
+
if (!/commonEventManager\s*\./.test(safe) && !/\bpublish\s*\(/.test(safe))
|
|
772
|
+
continue;
|
|
773
|
+
const nodes = ctx.getNodesInFile(file)
|
|
774
|
+
.filter((n) => n.kind === 'method' || n.kind === 'function');
|
|
775
|
+
const enclAt = (index) => {
|
|
776
|
+
const line = safe.slice(0, index).split('\n').length;
|
|
777
|
+
const encl = nodes
|
|
778
|
+
.filter((n) => n.startLine <= line && n.endLine >= line)
|
|
779
|
+
.sort((a, b) => (a.endLine - a.startLine) - (b.endLine - b.startLine))[0];
|
|
780
|
+
return encl ? { nodeId: encl.id, file, line } : null;
|
|
781
|
+
};
|
|
782
|
+
// publish({ event: 'usual.event.X' }) or publish('usual.event.X', …)
|
|
783
|
+
const pubRe = /\b(?:commonEventManager\s*\.\s*)?publish\s*\(\s*(?:\{[^}]{0,200}?\bevent\s*:\s*['"]([^'"]+)['"]|['"]([^'"]+)['"])/g;
|
|
784
|
+
let m;
|
|
785
|
+
while ((m = pubRe.exec(safe))) {
|
|
786
|
+
const event = (m[1] || m[2] || '').trim();
|
|
787
|
+
if (!event || event.length < 4)
|
|
788
|
+
continue;
|
|
789
|
+
const site = enclAt(m.index);
|
|
790
|
+
if (site)
|
|
791
|
+
push(publishes, event, site);
|
|
792
|
+
}
|
|
793
|
+
// createSubscriber({ events: ['usual.event.X', ...] }) — subscriber side
|
|
794
|
+
const createRe = /\bcreateSubscriber\s*\(\s*\{[^}]{0,400}?\bevents\s*:\s*\[([^\]]{0,400})\]/g;
|
|
795
|
+
while ((m = createRe.exec(safe))) {
|
|
796
|
+
const list = m[1] || '';
|
|
797
|
+
const site = enclAt(m.index);
|
|
798
|
+
if (!site)
|
|
799
|
+
continue;
|
|
800
|
+
for (const em of list.matchAll(/['"]([^'"]+)['"]/g)) {
|
|
801
|
+
const event = em[1].trim();
|
|
802
|
+
if (event.length >= 4)
|
|
803
|
+
push(subscribers, event, site);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
// Also: subscribe(…) in a method that earlier referenced events: ['…'] in same method body
|
|
807
|
+
// (createSubscriber often inlined). Covered by createSubscriber scan above when both in one file.
|
|
808
|
+
}
|
|
809
|
+
const edges = [];
|
|
810
|
+
const seen = new Set();
|
|
811
|
+
for (const [event, pubs] of publishes) {
|
|
812
|
+
const subs = subscribers.get(event);
|
|
813
|
+
if (!subs)
|
|
814
|
+
continue;
|
|
815
|
+
if (pubs.length > ARKUI_COMMON_EVENT_FANOUT_CAP || subs.length > ARKUI_COMMON_EVENT_FANOUT_CAP)
|
|
816
|
+
continue;
|
|
817
|
+
for (const p of pubs)
|
|
818
|
+
for (const s of subs) {
|
|
819
|
+
if (p.nodeId === s.nodeId)
|
|
820
|
+
continue;
|
|
821
|
+
const dedupe = `${p.nodeId}>${s.nodeId}>ce:${event}`;
|
|
822
|
+
if (seen.has(dedupe))
|
|
823
|
+
continue;
|
|
824
|
+
seen.add(dedupe);
|
|
825
|
+
edges.push({
|
|
826
|
+
source: p.nodeId,
|
|
827
|
+
target: s.nodeId,
|
|
828
|
+
kind: 'calls',
|
|
829
|
+
line: p.line,
|
|
830
|
+
provenance: 'heuristic',
|
|
831
|
+
metadata: {
|
|
832
|
+
synthesizedBy: 'arkui-common-event',
|
|
833
|
+
event,
|
|
834
|
+
registeredAt: `${s.file}:${s.line}`,
|
|
835
|
+
},
|
|
836
|
+
});
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
return edges;
|
|
840
|
+
}
|
|
841
|
+
/**
|
|
842
|
+
* `@kit.ArkTS` / `@ohos.taskpool`: `taskpool.execute(new taskpool.Task(fn, …))`
|
|
843
|
+
* or `taskpool.execute(fn, …)` — static call is only `execute`, so the worker
|
|
844
|
+
* function never appears on the caller's trail. Bridge execute-site → named `fn`
|
|
845
|
+
* when the name resolves uniquely (or same-file).
|
|
846
|
+
*/
|
|
847
|
+
async function arkuiTaskpoolEdges(ctx, onYield) {
|
|
848
|
+
const edges = [];
|
|
849
|
+
const seen = new Set();
|
|
850
|
+
let scanned = 0;
|
|
851
|
+
const execRe = /\btaskpool\s*\.\s*execute\s*\(\s*(?:new\s+(?:taskpool\.)?Task\s*\(\s*)?([A-Za-z_$][\w]*)/g;
|
|
852
|
+
for (const file of ctx.getAllFiles()) {
|
|
853
|
+
if ((++scanned & 15) === 0)
|
|
854
|
+
await onYield();
|
|
855
|
+
if (!/\.(?:ets|ts)$/.test(file))
|
|
856
|
+
continue;
|
|
857
|
+
const content = ctx.readFile(file);
|
|
858
|
+
if (!content || !content.includes('taskpool'))
|
|
859
|
+
continue;
|
|
860
|
+
const safe = (0, strip_comments_1.stripCommentsForRegex)(content, 'typescript');
|
|
861
|
+
if (!/\btaskpool\s*\.\s*execute\s*\(/.test(safe))
|
|
862
|
+
continue;
|
|
863
|
+
const nodes = ctx.getNodesInFile(file)
|
|
864
|
+
.filter((n) => n.kind === 'method' || n.kind === 'function');
|
|
865
|
+
execRe.lastIndex = 0;
|
|
866
|
+
let m;
|
|
867
|
+
while ((m = execRe.exec(safe))) {
|
|
868
|
+
const fnName = m[1];
|
|
869
|
+
if (!fnName || fnName === 'Task' || fnName === 'taskpool')
|
|
870
|
+
continue;
|
|
871
|
+
const line = safe.slice(0, m.index).split('\n').length;
|
|
872
|
+
const encl = nodes
|
|
873
|
+
.filter((n) => n.startLine <= line && n.endLine >= line)
|
|
874
|
+
.sort((a, b) => (a.endLine - a.startLine) - (b.endLine - b.startLine))[0];
|
|
875
|
+
if (!encl)
|
|
876
|
+
continue;
|
|
877
|
+
let targets = ctx.getNodesByName(fnName)
|
|
878
|
+
.filter((n) => (n.kind === 'function' || n.kind === 'method') && !(0, generated_detection_1.isGeneratedFile)(n.filePath));
|
|
879
|
+
if (targets.length === 0)
|
|
880
|
+
continue;
|
|
881
|
+
const sameFile = targets.filter((n) => n.filePath === file);
|
|
882
|
+
if (sameFile.length > 0)
|
|
883
|
+
targets = sameFile;
|
|
884
|
+
if (targets.length > 3)
|
|
885
|
+
continue; // ambiguous name — don't guess
|
|
886
|
+
for (const t of targets) {
|
|
887
|
+
if (t.id === encl.id)
|
|
888
|
+
continue;
|
|
889
|
+
const dedupe = `${encl.id}>${t.id}>taskpool`;
|
|
890
|
+
if (seen.has(dedupe))
|
|
891
|
+
continue;
|
|
892
|
+
seen.add(dedupe);
|
|
893
|
+
edges.push({
|
|
894
|
+
source: encl.id,
|
|
895
|
+
target: t.id,
|
|
896
|
+
kind: 'calls',
|
|
897
|
+
line,
|
|
898
|
+
provenance: 'heuristic',
|
|
899
|
+
metadata: {
|
|
900
|
+
synthesizedBy: 'arkui-taskpool',
|
|
901
|
+
via: fnName,
|
|
902
|
+
registeredAt: `${file}:${line}`,
|
|
903
|
+
},
|
|
904
|
+
});
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
return edges;
|
|
909
|
+
}
|
|
746
910
|
/** `router.pushUrl({ url: 'pages/Detail' })` / replaceUrl — literal urls only. */
|
|
747
911
|
const ARKUI_ROUTER_RE = /\brouter\s*\.\s*(?:pushUrl|replaceUrl)\s*\(\s*\{[^)]{0,200}?\burl\s*:\s*['"]([\w\-./]+)['"]/g;
|
|
748
912
|
/**
|
|
@@ -3921,6 +4085,8 @@ exports.SYNTH_PASSES = [
|
|
|
3921
4085
|
{ name: 'flutterEdges', gate: (has) => has('dart'), run: (q, c, y) => flutterBuildEdges(q, c, y) },
|
|
3922
4086
|
{ name: 'arkuiStateEdges', gate: (has) => has('arkts'), run: (q, c, y) => arkuiStateBuildEdges(q, c, y) },
|
|
3923
4087
|
{ name: 'arkuiEmitter', gate: (has) => has('arkts'), run: (_q, c, y) => arkuiEmitterEdges(c, y) },
|
|
4088
|
+
{ name: 'arkuiCommonEvent', gate: (has) => has('arkts'), run: (_q, c, y) => arkuiCommonEventEdges(c, y) },
|
|
4089
|
+
{ name: 'arkuiTaskpool', gate: (has) => has('arkts'), run: (_q, c, y) => arkuiTaskpoolEdges(c, y) },
|
|
3924
4090
|
{ name: 'arkuiRoutes', gate: (has) => has('arkts'), run: (_q, c, y) => arkuiRouterEdges(c, y) },
|
|
3925
4091
|
{ name: 'arktsStartupEdges', gate: (has) => has('arkts'), run: async (q, c) => arktsEntryEdges(q, c) },
|
|
3926
4092
|
{ name: 'cppEdges', gate: (has) => has('cpp'), run: (q, _c, y) => cppOverrideEdges(q, y) },
|