@quolu/lattice 0.69.5 → 0.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +5 -1
- package/package.json +1 -1
- package/sensor/dist/bin/lattice-sensor.js +746 -323
- package/sensor/dist/bin/viewer-gate.d.ts +17 -0
- package/sensor/dist/bin/viewer-gate.d.ts.map +1 -0
- package/sensor/dist/bin/viewer-gate.js +31 -0
- package/sensor/dist/bin/viewer-gate.js.map +1 -0
- package/sensor/dist/context/formatter.d.ts +7 -1
- package/sensor/dist/context/formatter.d.ts.map +1 -1
- package/sensor/dist/context/formatter.js +12 -6
- package/sensor/dist/context/formatter.js.map +1 -1
- package/sensor/dist/context/index.d.ts +12 -0
- package/sensor/dist/context/index.d.ts.map +1 -1
- package/sensor/dist/context/index.js +103 -16
- package/sensor/dist/context/index.js.map +1 -1
- package/sensor/dist/db/index.d.ts +23 -2
- package/sensor/dist/db/index.d.ts.map +1 -1
- package/sensor/dist/db/index.js +109 -31
- package/sensor/dist/db/index.js.map +1 -1
- package/sensor/dist/db/migrations.d.ts +1 -1
- package/sensor/dist/db/migrations.d.ts.map +1 -1
- package/sensor/dist/db/migrations.js +68 -1
- package/sensor/dist/db/migrations.js.map +1 -1
- package/sensor/dist/db/queries.d.ts +583 -6
- package/sensor/dist/db/queries.d.ts.map +1 -1
- package/sensor/dist/db/queries.js +1425 -57
- package/sensor/dist/db/queries.js.map +1 -1
- package/sensor/dist/db/schema.sql +27 -4
- package/sensor/dist/db/sqlite-adapter.d.ts +2 -0
- package/sensor/dist/db/sqlite-adapter.d.ts.map +1 -1
- package/sensor/dist/db/sqlite-adapter.js +56 -7
- package/sensor/dist/db/sqlite-adapter.js.map +1 -1
- package/sensor/dist/db/synthesis-stage.d.ts +12 -0
- package/sensor/dist/db/synthesis-stage.d.ts.map +1 -0
- package/sensor/dist/db/synthesis-stage.js +93 -0
- package/sensor/dist/db/synthesis-stage.js.map +1 -0
- package/sensor/dist/db/wal-valve.d.ts +32 -12
- package/sensor/dist/db/wal-valve.d.ts.map +1 -1
- package/sensor/dist/db/wal-valve.js +65 -22
- package/sensor/dist/db/wal-valve.js.map +1 -1
- package/sensor/dist/db/wsl-shared-index.d.ts +53 -0
- package/sensor/dist/db/wsl-shared-index.d.ts.map +1 -0
- package/sensor/dist/db/wsl-shared-index.js +121 -0
- package/sensor/dist/db/wsl-shared-index.js.map +1 -0
- package/sensor/dist/directory.d.ts +126 -2
- package/sensor/dist/directory.d.ts.map +1 -1
- package/sensor/dist/directory.js +285 -16
- package/sensor/dist/directory.js.map +1 -1
- package/sensor/dist/errors.d.ts +14 -0
- package/sensor/dist/errors.d.ts.map +1 -1
- package/sensor/dist/errors.js +16 -1
- package/sensor/dist/errors.js.map +1 -1
- package/sensor/dist/extraction/cfml-extractor.d.ts +1 -0
- package/sensor/dist/extraction/cfml-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/cfml-extractor.js +15 -3
- package/sensor/dist/extraction/cfml-extractor.js.map +1 -1
- package/sensor/dist/extraction/dfm-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/dfm-extractor.js +14 -10
- package/sensor/dist/extraction/dfm-extractor.js.map +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts +1 -1
- package/sensor/dist/extraction/extraction-version.d.ts.map +1 -1
- package/sensor/dist/extraction/extraction-version.js +3 -1
- package/sensor/dist/extraction/extraction-version.js.map +1 -1
- package/sensor/dist/extraction/function-ref.d.ts +6 -4
- package/sensor/dist/extraction/function-ref.d.ts.map +1 -1
- package/sensor/dist/extraction/function-ref.js +35 -14
- package/sensor/dist/extraction/function-ref.js.map +1 -1
- package/sensor/dist/extraction/generated-detection.d.ts +48 -12
- package/sensor/dist/extraction/generated-detection.d.ts.map +1 -1
- package/sensor/dist/extraction/generated-detection.js +176 -11
- package/sensor/dist/extraction/generated-detection.js.map +1 -1
- package/sensor/dist/extraction/grammars.d.ts +38 -0
- package/sensor/dist/extraction/grammars.d.ts.map +1 -1
- package/sensor/dist/extraction/grammars.js +115 -3
- package/sensor/dist/extraction/grammars.js.map +1 -1
- package/sensor/dist/extraction/index.d.ts +218 -14
- package/sensor/dist/extraction/index.d.ts.map +1 -1
- package/sensor/dist/extraction/index.js +887 -175
- package/sensor/dist/extraction/index.js.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.d.ts +58 -0
- package/sensor/dist/extraction/languages/c-cpp.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/c-cpp.js +310 -19
- package/sensor/dist/extraction/languages/c-cpp.js.map +1 -1
- package/sensor/dist/extraction/languages/dart.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/dart.js +8 -3
- package/sensor/dist/extraction/languages/dart.js.map +1 -1
- package/sensor/dist/extraction/languages/erlang.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/erlang.js +58 -22
- package/sensor/dist/extraction/languages/erlang.js.map +1 -1
- package/sensor/dist/extraction/languages/javascript.js +1 -1
- package/sensor/dist/extraction/languages/javascript.js.map +1 -1
- package/sensor/dist/extraction/languages/kotlin.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/kotlin.js +169 -36
- package/sensor/dist/extraction/languages/kotlin.js.map +1 -1
- package/sensor/dist/extraction/languages/lua.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/lua.js +4 -1
- package/sensor/dist/extraction/languages/lua.js.map +1 -1
- package/sensor/dist/extraction/languages/objc.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/objc.js +4 -0
- package/sensor/dist/extraction/languages/objc.js.map +1 -1
- package/sensor/dist/extraction/languages/python.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/python.js +71 -0
- package/sensor/dist/extraction/languages/python.js.map +1 -1
- package/sensor/dist/extraction/languages/rust.d.ts +20 -0
- package/sensor/dist/extraction/languages/rust.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/rust.js +50 -20
- package/sensor/dist/extraction/languages/rust.js.map +1 -1
- package/sensor/dist/extraction/languages/scala.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/scala.js +18 -3
- package/sensor/dist/extraction/languages/scala.js.map +1 -1
- package/sensor/dist/extraction/languages/swift.d.ts +15 -0
- package/sensor/dist/extraction/languages/swift.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/swift.js +50 -0
- package/sensor/dist/extraction/languages/swift.js.map +1 -1
- package/sensor/dist/extraction/languages/typescript.d.ts.map +1 -1
- package/sensor/dist/extraction/languages/typescript.js +9 -2
- package/sensor/dist/extraction/languages/typescript.js.map +1 -1
- package/sensor/dist/extraction/liquid-extractor.d.ts +18 -0
- package/sensor/dist/extraction/liquid-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/liquid-extractor.js +98 -22
- package/sensor/dist/extraction/liquid-extractor.js.map +1 -1
- package/sensor/dist/extraction/mybatis-extractor.d.ts.map +1 -1
- package/sensor/dist/extraction/mybatis-extractor.js +6 -4
- package/sensor/dist/extraction/mybatis-extractor.js.map +1 -1
- package/sensor/dist/extraction/parse-pool.d.ts +7 -0
- package/sensor/dist/extraction/parse-pool.d.ts.map +1 -1
- package/sensor/dist/extraction/parse-pool.js +20 -1
- package/sensor/dist/extraction/parse-pool.js.map +1 -1
- package/sensor/dist/extraction/syntax-tokens.d.ts +103 -0
- package/sensor/dist/extraction/syntax-tokens.d.ts.map +1 -0
- package/sensor/dist/extraction/syntax-tokens.js +381 -0
- package/sensor/dist/extraction/syntax-tokens.js.map +1 -0
- package/sensor/dist/extraction/tree-sitter-helpers.d.ts +5 -0
- package/sensor/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter-helpers.js +17 -0
- package/sensor/dist/extraction/tree-sitter-helpers.js.map +1 -1
- package/sensor/dist/extraction/tree-sitter-types.d.ts +31 -3
- package/sensor/dist/extraction/tree-sitter-types.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.d.ts +101 -18
- package/sensor/dist/extraction/tree-sitter.d.ts.map +1 -1
- package/sensor/dist/extraction/tree-sitter.js +928 -134
- package/sensor/dist/extraction/tree-sitter.js.map +1 -1
- package/sensor/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
- package/sensor/dist/file-limits.d.ts +40 -0
- package/sensor/dist/file-limits.d.ts.map +1 -0
- package/sensor/dist/file-limits.js +147 -0
- package/sensor/dist/file-limits.js.map +1 -0
- package/sensor/dist/graph/branch-guards.d.ts +265 -0
- package/sensor/dist/graph/branch-guards.d.ts.map +1 -0
- package/sensor/dist/graph/branch-guards.js +2325 -0
- package/sensor/dist/graph/branch-guards.js.map +1 -0
- package/sensor/dist/graph/dead-code.d.ts +251 -0
- package/sensor/dist/graph/dead-code.d.ts.map +1 -0
- package/sensor/dist/graph/dead-code.js +776 -0
- package/sensor/dist/graph/dead-code.js.map +1 -0
- package/sensor/dist/graph/dynamic-boundary-report.d.ts +121 -0
- package/sensor/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
- package/sensor/dist/graph/dynamic-boundary-report.js +283 -0
- package/sensor/dist/graph/dynamic-boundary-report.js.map +1 -0
- package/sensor/dist/graph/index.d.ts +4 -0
- package/sensor/dist/graph/index.d.ts.map +1 -1
- package/sensor/dist/graph/index.js +16 -1
- package/sensor/dist/graph/index.js.map +1 -1
- package/sensor/dist/graph/named-symbol-flow.d.ts +125 -0
- package/sensor/dist/graph/named-symbol-flow.d.ts.map +1 -0
- package/sensor/dist/graph/named-symbol-flow.js +552 -0
- package/sensor/dist/graph/named-symbol-flow.js.map +1 -0
- package/sensor/dist/graph/queries.d.ts.map +1 -1
- package/sensor/dist/graph/queries.js +2 -0
- package/sensor/dist/graph/queries.js.map +1 -1
- package/sensor/dist/graph/symbol-lookup.d.ts +83 -0
- package/sensor/dist/graph/symbol-lookup.d.ts.map +1 -0
- package/sensor/dist/graph/symbol-lookup.js +181 -0
- package/sensor/dist/graph/symbol-lookup.js.map +1 -0
- package/sensor/dist/graph/traversal.d.ts +9 -0
- package/sensor/dist/graph/traversal.d.ts.map +1 -1
- package/sensor/dist/graph/traversal.js +62 -36
- package/sensor/dist/graph/traversal.js.map +1 -1
- package/sensor/dist/graph/type-hierarchy.d.ts +155 -0
- package/sensor/dist/graph/type-hierarchy.d.ts.map +1 -0
- package/sensor/dist/graph/type-hierarchy.js +382 -0
- package/sensor/dist/graph/type-hierarchy.js.map +1 -0
- package/sensor/dist/index.d.ts +272 -10
- package/sensor/dist/index.d.ts.map +1 -1
- package/sensor/dist/index.js +510 -34
- package/sensor/dist/index.js.map +1 -1
- package/sensor/dist/mcp/answer-freshness.d.ts +10 -0
- package/sensor/dist/mcp/answer-freshness.d.ts.map +1 -0
- package/sensor/dist/mcp/answer-freshness.js +68 -0
- package/sensor/dist/mcp/answer-freshness.js.map +1 -0
- package/sensor/dist/mcp/daemon-manager.d.ts +1 -1
- package/sensor/dist/mcp/daemon-manager.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-manager.js +17 -1
- package/sensor/dist/mcp/daemon-manager.js.map +1 -1
- package/sensor/dist/mcp/daemon-paths.d.ts +8 -0
- package/sensor/dist/mcp/daemon-paths.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-paths.js +65 -2
- package/sensor/dist/mcp/daemon-paths.js.map +1 -1
- package/sensor/dist/mcp/daemon-registry.d.ts +17 -4
- package/sensor/dist/mcp/daemon-registry.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon-registry.js +133 -23
- package/sensor/dist/mcp/daemon-registry.js.map +1 -1
- package/sensor/dist/mcp/daemon.d.ts +26 -13
- package/sensor/dist/mcp/daemon.d.ts.map +1 -1
- package/sensor/dist/mcp/daemon.js +126 -32
- package/sensor/dist/mcp/daemon.js.map +1 -1
- package/sensor/dist/mcp/dynamic-boundaries.d.ts +1 -10
- package/sensor/dist/mcp/dynamic-boundaries.d.ts.map +1 -1
- package/sensor/dist/mcp/dynamic-boundaries.js +46 -42
- package/sensor/dist/mcp/dynamic-boundaries.js.map +1 -1
- package/sensor/dist/mcp/engine.d.ts +31 -9
- package/sensor/dist/mcp/engine.d.ts.map +1 -1
- package/sensor/dist/mcp/engine.js +190 -79
- package/sensor/dist/mcp/engine.js.map +1 -1
- package/sensor/dist/mcp/explore-dedup.d.ts +140 -0
- package/sensor/dist/mcp/explore-dedup.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-dedup.js +239 -0
- package/sensor/dist/mcp/explore-dedup.js.map +1 -0
- package/sensor/dist/mcp/explore-diagnostics.d.ts +289 -0
- package/sensor/dist/mcp/explore-diagnostics.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-diagnostics.js +558 -0
- package/sensor/dist/mcp/explore-diagnostics.js.map +1 -0
- package/sensor/dist/mcp/explore-session-state.d.ts +217 -0
- package/sensor/dist/mcp/explore-session-state.d.ts.map +1 -0
- package/sensor/dist/mcp/explore-session-state.js +322 -0
- package/sensor/dist/mcp/explore-session-state.js.map +1 -0
- package/sensor/dist/mcp/index-freshness-worker.d.ts +2 -0
- package/sensor/dist/mcp/index-freshness-worker.d.ts.map +1 -0
- package/sensor/dist/mcp/index-freshness-worker.js +30 -0
- package/sensor/dist/mcp/index-freshness-worker.js.map +1 -0
- package/sensor/dist/mcp/index-freshness.d.ts +7 -0
- package/sensor/dist/mcp/index-freshness.d.ts.map +1 -0
- package/sensor/dist/mcp/index-freshness.js +94 -0
- package/sensor/dist/mcp/index-freshness.js.map +1 -0
- package/sensor/dist/mcp/index.d.ts +3 -1
- package/sensor/dist/mcp/index.d.ts.map +1 -1
- package/sensor/dist/mcp/index.js +109 -12
- package/sensor/dist/mcp/index.js.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts +4 -1
- package/sensor/dist/mcp/liveness-watchdog.d.ts.map +1 -1
- package/sensor/dist/mcp/liveness-watchdog.js +11 -2
- package/sensor/dist/mcp/liveness-watchdog.js.map +1 -1
- package/sensor/dist/mcp/project-lifecycle.d.ts +9 -0
- package/sensor/dist/mcp/project-lifecycle.d.ts.map +1 -0
- package/sensor/dist/mcp/project-lifecycle.js +182 -0
- package/sensor/dist/mcp/project-lifecycle.js.map +1 -0
- package/sensor/dist/mcp/proxy.d.ts.map +1 -1
- package/sensor/dist/mcp/proxy.js +15 -1
- package/sensor/dist/mcp/proxy.js.map +1 -1
- package/sensor/dist/mcp/query-pool.d.ts +2 -2
- package/sensor/dist/mcp/query-pool.d.ts.map +1 -1
- package/sensor/dist/mcp/query-pool.js +9 -7
- package/sensor/dist/mcp/query-pool.js.map +1 -1
- package/sensor/dist/mcp/query-worker.js +2 -2
- package/sensor/dist/mcp/query-worker.js.map +1 -1
- package/sensor/dist/mcp/server-instructions.d.ts +2 -2
- package/sensor/dist/mcp/server-instructions.d.ts.map +1 -1
- package/sensor/dist/mcp/server-instructions.js +13 -6
- package/sensor/dist/mcp/server-instructions.js.map +1 -1
- package/sensor/dist/mcp/session.d.ts +16 -0
- package/sensor/dist/mcp/session.d.ts.map +1 -1
- package/sensor/dist/mcp/session.js +36 -13
- package/sensor/dist/mcp/session.js.map +1 -1
- package/sensor/dist/mcp/startup-handshake.d.ts +3 -1
- package/sensor/dist/mcp/startup-handshake.d.ts.map +1 -1
- package/sensor/dist/mcp/startup-handshake.js +10 -2
- package/sensor/dist/mcp/startup-handshake.js.map +1 -1
- package/sensor/dist/mcp/tools.d.ts +496 -38
- package/sensor/dist/mcp/tools.d.ts.map +1 -1
- package/sensor/dist/mcp/tools.js +4021 -772
- package/sensor/dist/mcp/tools.js.map +1 -1
- package/sensor/dist/mcp/writer-lock.d.ts +61 -0
- package/sensor/dist/mcp/writer-lock.d.ts.map +1 -0
- package/sensor/dist/mcp/writer-lock.js +260 -0
- package/sensor/dist/mcp/writer-lock.js.map +1 -0
- package/sensor/dist/project-config.d.ts +23 -0
- package/sensor/dist/project-config.d.ts.map +1 -1
- package/sensor/dist/project-config.js +39 -2
- package/sensor/dist/project-config.js.map +1 -1
- package/sensor/dist/resolution/alias-binding.d.ts +56 -0
- package/sensor/dist/resolution/alias-binding.d.ts.map +1 -0
- package/sensor/dist/resolution/alias-binding.js +127 -0
- package/sensor/dist/resolution/alias-binding.js.map +1 -0
- package/sensor/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/c-fnptr-synthesizer.js +21 -19
- package/sensor/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts +23 -1
- package/sensor/dist/resolution/callback-synthesizer.d.ts.map +1 -1
- package/sensor/dist/resolution/callback-synthesizer.js +356 -155
- package/sensor/dist/resolution/callback-synthesizer.js.map +1 -1
- package/sensor/dist/resolution/cpp-constructor.d.ts +4 -0
- package/sensor/dist/resolution/cpp-constructor.d.ts.map +1 -0
- package/sensor/dist/resolution/cpp-constructor.js +123 -0
- package/sensor/dist/resolution/cpp-constructor.js.map +1 -0
- package/sensor/dist/resolution/cpp-macro-visibility.d.ts +12 -0
- package/sensor/dist/resolution/cpp-macro-visibility.d.ts.map +1 -0
- package/sensor/dist/resolution/cpp-macro-visibility.js +342 -0
- package/sensor/dist/resolution/cpp-macro-visibility.js.map +1 -0
- package/sensor/dist/resolution/expo-router-synthesizer.d.ts +32 -0
- package/sensor/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/expo-router-synthesizer.js +189 -0
- package/sensor/dist/resolution/expo-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/frameworks/csharp.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/csharp.js +96 -2
- package/sensor/dist/resolution/frameworks/csharp.js.map +1 -1
- package/sensor/dist/resolution/frameworks/expo-router.d.ts +189 -0
- package/sensor/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/expo-router.js +785 -0
- package/sensor/dist/resolution/frameworks/expo-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/express.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/express.js +251 -16
- package/sensor/dist/resolution/frameworks/express.js.map +1 -1
- package/sensor/dist/resolution/frameworks/index.d.ts +5 -0
- package/sensor/dist/resolution/frameworks/index.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/index.js +29 -1
- package/sensor/dist/resolution/frameworks/index.js.map +1 -1
- package/sensor/dist/resolution/frameworks/java.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/java.js +79 -47
- package/sensor/dist/resolution/frameworks/java.js.map +1 -1
- package/sensor/dist/resolution/frameworks/laravel.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/laravel.js +294 -4
- package/sensor/dist/resolution/frameworks/laravel.js.map +1 -1
- package/sensor/dist/resolution/frameworks/nestjs.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/nestjs.js +6 -14
- package/sensor/dist/resolution/frameworks/nestjs.js.map +1 -1
- package/sensor/dist/resolution/frameworks/nextjs.d.ts +76 -0
- package/sensor/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/nextjs.js +328 -0
- package/sensor/dist/resolution/frameworks/nextjs.js.map +1 -0
- package/sensor/dist/resolution/frameworks/object-literal.d.ts +32 -0
- package/sensor/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/object-literal.js +139 -0
- package/sensor/dist/resolution/frameworks/object-literal.js.map +1 -0
- package/sensor/dist/resolution/frameworks/package-deps.d.ts +14 -0
- package/sensor/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/package-deps.js +78 -0
- package/sensor/dist/resolution/frameworks/package-deps.js.map +1 -0
- package/sensor/dist/resolution/frameworks/python.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/python.js +166 -0
- package/sensor/dist/resolution/frameworks/python.js.map +1 -1
- package/sensor/dist/resolution/frameworks/react-native.d.ts +26 -0
- package/sensor/dist/resolution/frameworks/react-native.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/react-native.js +153 -14
- package/sensor/dist/resolution/frameworks/react-native.js.map +1 -1
- package/sensor/dist/resolution/frameworks/react-router.d.ts +46 -0
- package/sensor/dist/resolution/frameworks/react-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/react-router.js +187 -0
- package/sensor/dist/resolution/frameworks/react-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/react.d.ts +2 -1
- package/sensor/dist/resolution/frameworks/react.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/react.js +188 -139
- package/sensor/dist/resolution/frameworks/react.js.map +1 -1
- package/sensor/dist/resolution/frameworks/svelte.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/svelte.js +6 -1
- package/sensor/dist/resolution/frameworks/svelte.js.map +1 -1
- package/sensor/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.js +156 -0
- package/sensor/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/swift.d.ts.map +1 -1
- package/sensor/dist/resolution/frameworks/swift.js +140 -99
- package/sensor/dist/resolution/frameworks/swift.js.map +1 -1
- package/sensor/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.js +437 -0
- package/sensor/dist/resolution/frameworks/tanstack-router.js.map +1 -0
- package/sensor/dist/resolution/frameworks/vue-router.d.ts +82 -0
- package/sensor/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
- package/sensor/dist/resolution/frameworks/vue-router.js +377 -0
- package/sensor/dist/resolution/frameworks/vue-router.js.map +1 -0
- package/sensor/dist/resolution/import-resolver.d.ts +38 -0
- package/sensor/dist/resolution/import-resolver.d.ts.map +1 -1
- package/sensor/dist/resolution/import-resolver.js +394 -28
- package/sensor/dist/resolution/import-resolver.js.map +1 -1
- package/sensor/dist/resolution/index.d.ts +89 -25
- package/sensor/dist/resolution/index.d.ts.map +1 -1
- package/sensor/dist/resolution/index.js +573 -148
- package/sensor/dist/resolution/index.js.map +1 -1
- package/sensor/dist/resolution/js-builtins.d.ts +13 -0
- package/sensor/dist/resolution/js-builtins.d.ts.map +1 -0
- package/sensor/dist/resolution/js-builtins.js +46 -0
- package/sensor/dist/resolution/js-builtins.js.map +1 -0
- package/sensor/dist/resolution/name-matcher.d.ts +99 -22
- package/sensor/dist/resolution/name-matcher.d.ts.map +1 -1
- package/sensor/dist/resolution/name-matcher.js +2220 -86
- package/sensor/dist/resolution/name-matcher.js.map +1 -1
- package/sensor/dist/resolution/next-router-synthesizer.d.ts +27 -0
- package/sensor/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/next-router-synthesizer.js +113 -0
- package/sensor/dist/resolution/next-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/path-aliases.d.ts +6 -4
- package/sensor/dist/resolution/path-aliases.d.ts.map +1 -1
- package/sensor/dist/resolution/path-aliases.js +125 -17
- package/sensor/dist/resolution/path-aliases.js.map +1 -1
- package/sensor/dist/resolution/react-router-synthesizer.d.ts +33 -0
- package/sensor/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/react-router-synthesizer.js +126 -0
- package/sensor/dist/resolution/react-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/resolver-pool.d.ts +2 -0
- package/sensor/dist/resolution/resolver-pool.d.ts.map +1 -1
- package/sensor/dist/resolution/resolver-pool.js +4 -0
- package/sensor/dist/resolution/resolver-pool.js.map +1 -1
- package/sensor/dist/resolution/strip-comments.d.ts +6 -0
- package/sensor/dist/resolution/strip-comments.d.ts.map +1 -1
- package/sensor/dist/resolution/strip-comments.js +58 -0
- package/sensor/dist/resolution/strip-comments.js.map +1 -1
- package/sensor/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.js +173 -0
- package/sensor/dist/resolution/sveltekit-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/swift-type-visibility.d.ts +52 -0
- package/sensor/dist/resolution/swift-type-visibility.d.ts.map +1 -0
- package/sensor/dist/resolution/swift-type-visibility.js +328 -0
- package/sensor/dist/resolution/swift-type-visibility.js.map +1 -0
- package/sensor/dist/resolution/synth-utils.d.ts +26 -0
- package/sensor/dist/resolution/synth-utils.d.ts.map +1 -0
- package/sensor/dist/resolution/synth-utils.js +75 -0
- package/sensor/dist/resolution/synth-utils.js.map +1 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.js +114 -0
- package/sensor/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/tier-synthesizer.d.ts +54 -0
- package/sensor/dist/resolution/tier-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/tier-synthesizer.js +1294 -0
- package/sensor/dist/resolution/tier-synthesizer.js.map +1 -0
- package/sensor/dist/resolution/types.d.ts +78 -2
- package/sensor/dist/resolution/types.d.ts.map +1 -1
- package/sensor/dist/resolution/types.js +64 -0
- package/sensor/dist/resolution/types.js.map +1 -1
- package/sensor/dist/resolution/vue-router-synthesizer.d.ts +30 -0
- package/sensor/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
- package/sensor/dist/resolution/vue-router-synthesizer.js +115 -0
- package/sensor/dist/resolution/vue-router-synthesizer.js.map +1 -0
- package/sensor/dist/search/identifier-segments.d.ts +10 -0
- package/sensor/dist/search/identifier-segments.d.ts.map +1 -1
- package/sensor/dist/search/identifier-segments.js +29 -0
- package/sensor/dist/search/identifier-segments.js.map +1 -1
- package/sensor/dist/search/query-paths.d.ts +106 -0
- package/sensor/dist/search/query-paths.d.ts.map +1 -0
- package/sensor/dist/search/query-paths.js +513 -0
- package/sensor/dist/search/query-paths.js.map +1 -0
- package/sensor/dist/search/query-utils.d.ts +22 -2
- package/sensor/dist/search/query-utils.d.ts.map +1 -1
- package/sensor/dist/search/query-utils.js +56 -16
- package/sensor/dist/search/query-utils.js.map +1 -1
- package/sensor/dist/sync/watch-policy.d.ts +14 -0
- package/sensor/dist/sync/watch-policy.d.ts.map +1 -1
- package/sensor/dist/sync/watch-policy.js +19 -0
- package/sensor/dist/sync/watch-policy.js.map +1 -1
- package/sensor/dist/sync/watcher.d.ts +74 -35
- package/sensor/dist/sync/watcher.d.ts.map +1 -1
- package/sensor/dist/sync/watcher.js +281 -99
- package/sensor/dist/sync/watcher.js.map +1 -1
- package/sensor/dist/telemetry/index.d.ts +4 -2
- package/sensor/dist/telemetry/index.d.ts.map +1 -1
- package/sensor/dist/telemetry/index.js +92 -41
- package/sensor/dist/telemetry/index.js.map +1 -1
- package/sensor/dist/types.d.ts +18 -2
- package/sensor/dist/types.d.ts.map +1 -1
- package/sensor/dist/types.js +2 -0
- package/sensor/dist/types.js.map +1 -1
- package/sensor/dist/ui-server/api/deadcode.d.ts +84 -0
- package/sensor/dist/ui-server/api/deadcode.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/deadcode.js +136 -0
- package/sensor/dist/ui-server/api/deadcode.js.map +1 -0
- package/sensor/dist/ui-server/api/effects.d.ts +94 -0
- package/sensor/dist/ui-server/api/effects.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/effects.js +527 -0
- package/sensor/dist/ui-server/api/effects.js.map +1 -0
- package/sensor/dist/ui-server/api/entrypoints.d.ts +92 -0
- package/sensor/dist/ui-server/api/entrypoints.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/entrypoints.js +361 -0
- package/sensor/dist/ui-server/api/entrypoints.js.map +1 -0
- package/sensor/dist/ui-server/api/events.d.ts +183 -0
- package/sensor/dist/ui-server/api/events.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/events.js +430 -0
- package/sensor/dist/ui-server/api/events.js.map +1 -0
- package/sensor/dist/ui-server/api/file.d.ts +66 -0
- package/sensor/dist/ui-server/api/file.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/file.js +235 -0
- package/sensor/dist/ui-server/api/file.js.map +1 -0
- package/sensor/dist/ui-server/api/filecode.d.ts +126 -0
- package/sensor/dist/ui-server/api/filecode.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/filecode.js +205 -0
- package/sensor/dist/ui-server/api/filecode.js.map +1 -0
- package/sensor/dist/ui-server/api/flow.d.ts +226 -0
- package/sensor/dist/ui-server/api/flow.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/flow.js +612 -0
- package/sensor/dist/ui-server/api/flow.js.map +1 -0
- package/sensor/dist/ui-server/api/hierarchy.d.ts +81 -0
- package/sensor/dist/ui-server/api/hierarchy.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/hierarchy.js +92 -0
- package/sensor/dist/ui-server/api/hierarchy.js.map +1 -0
- package/sensor/dist/ui-server/api/index.d.ts +90 -0
- package/sensor/dist/ui-server/api/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/index.js +332 -0
- package/sensor/dist/ui-server/api/index.js.map +1 -0
- package/sensor/dist/ui-server/api/map.d.ts +256 -0
- package/sensor/dist/ui-server/api/map.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/map.js +760 -0
- package/sensor/dist/ui-server/api/map.js.map +1 -0
- package/sensor/dist/ui-server/api/node.d.ts +81 -0
- package/sensor/dist/ui-server/api/node.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/node.js +388 -0
- package/sensor/dist/ui-server/api/node.js.map +1 -0
- package/sensor/dist/ui-server/api/nodes.d.ts +25 -0
- package/sensor/dist/ui-server/api/nodes.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/nodes.js +45 -0
- package/sensor/dist/ui-server/api/nodes.js.map +1 -0
- package/sensor/dist/ui-server/api/program.d.ts +139 -0
- package/sensor/dist/ui-server/api/program.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/program.js +315 -0
- package/sensor/dist/ui-server/api/program.js.map +1 -0
- package/sensor/dist/ui-server/api/respond.d.ts +76 -0
- package/sensor/dist/ui-server/api/respond.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/respond.js +186 -0
- package/sensor/dist/ui-server/api/respond.js.map +1 -0
- package/sensor/dist/ui-server/api/route-roots.d.ts +39 -0
- package/sensor/dist/ui-server/api/route-roots.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/route-roots.js +96 -0
- package/sensor/dist/ui-server/api/route-roots.js.map +1 -0
- package/sensor/dist/ui-server/api/routes.d.ts +59 -0
- package/sensor/dist/ui-server/api/routes.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/routes.js +108 -0
- package/sensor/dist/ui-server/api/routes.js.map +1 -0
- package/sensor/dist/ui-server/api/screens.d.ts +117 -0
- package/sensor/dist/ui-server/api/screens.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/screens.js +611 -0
- package/sensor/dist/ui-server/api/screens.js.map +1 -0
- package/sensor/dist/ui-server/api/search.d.ts +29 -0
- package/sensor/dist/ui-server/api/search.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/search.js +232 -0
- package/sensor/dist/ui-server/api/search.js.map +1 -0
- package/sensor/dist/ui-server/api/session.d.ts +52 -0
- package/sensor/dist/ui-server/api/session.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/session.js +196 -0
- package/sensor/dist/ui-server/api/session.js.map +1 -0
- package/sensor/dist/ui-server/api/source.d.ts +200 -0
- package/sensor/dist/ui-server/api/source.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/source.js +422 -0
- package/sensor/dist/ui-server/api/source.js.map +1 -0
- package/sensor/dist/ui-server/api/stats.d.ts +27 -0
- package/sensor/dist/ui-server/api/stats.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/stats.js +164 -0
- package/sensor/dist/ui-server/api/stats.js.map +1 -0
- package/sensor/dist/ui-server/api/steps.d.ts +274 -0
- package/sensor/dist/ui-server/api/steps.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/steps.js +1544 -0
- package/sensor/dist/ui-server/api/steps.js.map +1 -0
- package/sensor/dist/ui-server/api/trail-store.d.ts +142 -0
- package/sensor/dist/ui-server/api/trail-store.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/trail-store.js +325 -0
- package/sensor/dist/ui-server/api/trail-store.js.map +1 -0
- package/sensor/dist/ui-server/api/trails.d.ts +163 -0
- package/sensor/dist/ui-server/api/trails.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/trails.js +369 -0
- package/sensor/dist/ui-server/api/trails.js.map +1 -0
- package/sensor/dist/ui-server/api/when.d.ts +133 -0
- package/sensor/dist/ui-server/api/when.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/when.js +275 -0
- package/sensor/dist/ui-server/api/when.js.map +1 -0
- package/sensor/dist/ui-server/api/wire.d.ts +179 -0
- package/sensor/dist/ui-server/api/wire.d.ts.map +1 -0
- package/sensor/dist/ui-server/api/wire.js +231 -0
- package/sensor/dist/ui-server/api/wire.js.map +1 -0
- package/sensor/dist/ui-server/assets.d.ts +40 -0
- package/sensor/dist/ui-server/assets.d.ts.map +1 -0
- package/sensor/dist/ui-server/assets.js +110 -0
- package/sensor/dist/ui-server/assets.js.map +1 -0
- package/sensor/dist/ui-server/constants.d.ts +32 -0
- package/sensor/dist/ui-server/constants.d.ts.map +1 -0
- package/sensor/dist/ui-server/constants.js +35 -0
- package/sensor/dist/ui-server/constants.js.map +1 -0
- package/sensor/dist/ui-server/highlight/index.d.ts +113 -0
- package/sensor/dist/ui-server/highlight/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/highlight/index.js +307 -0
- package/sensor/dist/ui-server/highlight/index.js.map +1 -0
- package/sensor/dist/ui-server/highlight/languages.d.ts +36 -0
- package/sensor/dist/ui-server/highlight/languages.d.ts.map +1 -0
- package/sensor/dist/ui-server/highlight/languages.js +50 -0
- package/sensor/dist/ui-server/highlight/languages.js.map +1 -0
- package/sensor/dist/ui-server/index.d.ts +92 -0
- package/sensor/dist/ui-server/index.d.ts.map +1 -0
- package/sensor/dist/ui-server/index.js +399 -0
- package/sensor/dist/ui-server/index.js.map +1 -0
- package/sensor/dist/ui-server/open-browser.d.ts +31 -0
- package/sensor/dist/ui-server/open-browser.d.ts.map +1 -0
- package/sensor/dist/ui-server/open-browser.js +79 -0
- package/sensor/dist/ui-server/open-browser.js.map +1 -0
- package/sensor/dist/ui-server/security.d.ts +127 -0
- package/sensor/dist/ui-server/security.d.ts.map +1 -0
- package/sensor/dist/ui-server/security.js +332 -0
- package/sensor/dist/ui-server/security.js.map +1 -0
- package/sensor/dist/ui-server/static.d.ts +45 -0
- package/sensor/dist/ui-server/static.d.ts.map +1 -0
- package/sensor/dist/ui-server/static.js +165 -0
- package/sensor/dist/ui-server/static.js.map +1 -0
- package/sensor/dist/utils.d.ts +14 -2
- package/sensor/dist/utils.d.ts.map +1 -1
- package/sensor/dist/utils.js +25 -10
- package/sensor/dist/utils.js.map +1 -1
- package/src/cli-help.mjs +4 -2
- package/src/sensor-adapter.mjs +5 -1
- package/src/todo-cli.mjs +88 -11
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* `GET /api/flow` — the call path between two symbols, as cards.
|
|
4
|
+
*
|
|
5
|
+
* The Flow strip answers "how does A reach B" (design spec §3.5): one card per
|
|
6
|
+
* hop, each opened at the exact line that makes the next call, with the
|
|
7
|
+
* synthesized dynamic-dispatch hops drawn dashed and carrying the site they
|
|
8
|
+
* were wired at. This endpoint produces that path and the source windows for
|
|
9
|
+
* it; the geometry is a pure function in the viewer (`ui/src/lib/flow-model.ts`).
|
|
10
|
+
*
|
|
11
|
+
* **The path finder is not ours.** It is `resolveNamedSymbolFlow` in
|
|
12
|
+
* `src/graph/named-symbol-flow.ts` — literally the search `lattice_sensor_explore`
|
|
13
|
+
* leads its answer with, extracted so both callers ride one implementation.
|
|
14
|
+
* A viewer that drew a different path from the one the MCP tool describes would
|
|
15
|
+
* be worse than no viewer: the two would be quoted against each other in a code
|
|
16
|
+
* review and one of them would be wrong.
|
|
17
|
+
*
|
|
18
|
+
* Three questions arrive here, and they are one question with different
|
|
19
|
+
* bindings:
|
|
20
|
+
*
|
|
21
|
+
* - `?from=&to=` — a directed question, from the search box's flow grammar.
|
|
22
|
+
* Both ends pinned, shortest path wins.
|
|
23
|
+
* - `?symbols=a,b,c` — explore's own question, verbatim. Longest chain among
|
|
24
|
+
* the named symbols wins, at most one unnamed bridge.
|
|
25
|
+
* - `?hop=s<id>&hop=d<id>…` — the trail, read as a flow. Nothing is searched:
|
|
26
|
+
* the hops are the ones the reader walked, and the work is finding the edge
|
|
27
|
+
* that already connects each consecutive pair.
|
|
28
|
+
*
|
|
29
|
+
* **Nothing here is cached.** Every other multi-symbol endpoint memoises on the
|
|
30
|
+
* index version, and this one deliberately does not: a flow card carries source
|
|
31
|
+
* read from disk, and the drift verdict on it changes without the index
|
|
32
|
+
* changing. A cached "no drift" is exactly the failure `/api/source` exists to
|
|
33
|
+
* prevent. The search itself costs tens of milliseconds; the windows are seven
|
|
34
|
+
* lines each.
|
|
35
|
+
*/
|
|
36
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
37
|
+
if (k2 === undefined) k2 = k;
|
|
38
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
39
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
40
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
41
|
+
}
|
|
42
|
+
Object.defineProperty(o, k2, desc);
|
|
43
|
+
}) : (function(o, m, k, k2) {
|
|
44
|
+
if (k2 === undefined) k2 = k;
|
|
45
|
+
o[k2] = m[k];
|
|
46
|
+
}));
|
|
47
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
48
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
49
|
+
}) : function(o, v) {
|
|
50
|
+
o["default"] = v;
|
|
51
|
+
});
|
|
52
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
53
|
+
var ownKeys = function(o) {
|
|
54
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
55
|
+
var ar = [];
|
|
56
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
57
|
+
return ar;
|
|
58
|
+
};
|
|
59
|
+
return ownKeys(o);
|
|
60
|
+
};
|
|
61
|
+
return function (mod) {
|
|
62
|
+
if (mod && mod.__esModule) return mod;
|
|
63
|
+
var result = {};
|
|
64
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
65
|
+
__setModuleDefault(result, mod);
|
|
66
|
+
return result;
|
|
67
|
+
};
|
|
68
|
+
})();
|
|
69
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
|
+
exports.MAX_FLOWS = exports.SOURCE_WINDOW = void 0;
|
|
71
|
+
exports.parseFlowQuery = parseFlowQuery;
|
|
72
|
+
exports.flowEdgeLabel = flowEdgeLabel;
|
|
73
|
+
exports.buildFlow = buildFlow;
|
|
74
|
+
const branch_guards_1 = require("../../graph/branch-guards");
|
|
75
|
+
const named_symbol_flow_1 = require("../../graph/named-symbol-flow");
|
|
76
|
+
const dynamic_boundary_report_1 = require("../../graph/dynamic-boundary-report");
|
|
77
|
+
const highlight_1 = require("../highlight");
|
|
78
|
+
const respond_1 = require("./respond");
|
|
79
|
+
// Hops accepted from a trail: the same cap the trail store saves under, so a
|
|
80
|
+
// trail that can be saved can also be read as a flow (#1976).
|
|
81
|
+
const trail_store_1 = require("./trail-store");
|
|
82
|
+
const source_1 = require("./source");
|
|
83
|
+
const security_1 = require("../security");
|
|
84
|
+
const wire_1 = require("./wire");
|
|
85
|
+
const fs = __importStar(require("fs"));
|
|
86
|
+
/** Lines shown either side of the call site on a card (design spec §3.5). */
|
|
87
|
+
exports.SOURCE_WINDOW = 3;
|
|
88
|
+
/**
|
|
89
|
+
* How far above a window the highlighter is allowed to start reading.
|
|
90
|
+
*
|
|
91
|
+
* Seven lines tokenised on their own do not know they are inside a block
|
|
92
|
+
* comment or a template literal, and a window that opens under a JSDoc would
|
|
93
|
+
* render the prose as code. Leading in from the enclosing symbol's first line
|
|
94
|
+
* fixes that for every ordinary body; the cap stops a thousand-line god
|
|
95
|
+
* function from costing a full-file tokenisation for one card. Past it a window
|
|
96
|
+
* can still open mid-construct — rare, and cheaper than the alternative.
|
|
97
|
+
*/
|
|
98
|
+
const HIGHLIGHT_LEAD_MAX = 200;
|
|
99
|
+
/** Distinct paths returned. The header's flow picker is a short list or nothing. */
|
|
100
|
+
exports.MAX_FLOWS = 4;
|
|
101
|
+
const DIR_CHARS = { s: 'start', d: 'down', u: 'up' };
|
|
102
|
+
/**
|
|
103
|
+
* Read the question out of the query string.
|
|
104
|
+
*
|
|
105
|
+
* A trail hop arrives as its own `hop` parameter rather than in one joined
|
|
106
|
+
* list, for the same reason `/api/nodes` repeats `id`: a node id can be a file
|
|
107
|
+
* path and a file path can contain a comma. The one-character direction prefix
|
|
108
|
+
* mirrors `ui/src/lib/trail-codec.ts`, which owns the format.
|
|
109
|
+
*/
|
|
110
|
+
function parseFlowQuery(query) {
|
|
111
|
+
const rawHops = query.getAll('hop').filter((h) => h.length > 1);
|
|
112
|
+
if (rawHops.length > 0) {
|
|
113
|
+
if (rawHops.length > trail_store_1.MAX_TRAIL_HOPS) {
|
|
114
|
+
throw (0, respond_1.badRequest)(`A trail of ${rawHops.length} hops is longer than this endpoint reads (${trail_store_1.MAX_TRAIL_HOPS}).`);
|
|
115
|
+
}
|
|
116
|
+
const hops = rawHops.map((raw) => ({
|
|
117
|
+
id: raw.slice(1),
|
|
118
|
+
dir: DIR_CHARS[raw[0]] ?? 'down',
|
|
119
|
+
}));
|
|
120
|
+
if (hops.length < 2) {
|
|
121
|
+
throw (0, respond_1.badRequest)('A trail needs at least two hops to be read as a flow.');
|
|
122
|
+
}
|
|
123
|
+
return { kind: 'trail', hops };
|
|
124
|
+
}
|
|
125
|
+
const from = (query.get('from') ?? '').trim();
|
|
126
|
+
const to = (query.get('to') ?? '').trim();
|
|
127
|
+
if (from && to) {
|
|
128
|
+
if ((0, named_symbol_flow_1.normalizeToken)(from) === (0, named_symbol_flow_1.normalizeToken)(to)) {
|
|
129
|
+
throw (0, respond_1.badRequest)('"from" and "to" name the same symbol, so there is no path to draw.');
|
|
130
|
+
}
|
|
131
|
+
return { kind: 'directed', from, to };
|
|
132
|
+
}
|
|
133
|
+
const symbols = (query.get('symbols') ?? '').trim();
|
|
134
|
+
if (symbols)
|
|
135
|
+
return { kind: 'symbols', text: symbols };
|
|
136
|
+
throw (0, respond_1.badRequest)('No flow was asked for.', 'Use /api/flow?from=<symbol>&to=<symbol>, ?symbols=a,b,c, or ?hop=s<id>&hop=d<id>.');
|
|
137
|
+
}
|
|
138
|
+
// =============================================================================
|
|
139
|
+
// Edges
|
|
140
|
+
// =============================================================================
|
|
141
|
+
/**
|
|
142
|
+
* The sentence under a link.
|
|
143
|
+
*
|
|
144
|
+
* A synthesized hop must never read as a plain `calls`: it is a bridge the
|
|
145
|
+
* resolver inferred, and the wiring site is the evidence for it. Design spec
|
|
146
|
+
* §3.5 fixes the phrasing — "via callback · registered at file:line".
|
|
147
|
+
*/
|
|
148
|
+
function flowEdgeLabel(edge, upward) {
|
|
149
|
+
const meta = (edge.metadata ?? {});
|
|
150
|
+
const parts = [];
|
|
151
|
+
if (edge.provenance === 'heuristic' && typeof meta.synthesizedBy === 'string') {
|
|
152
|
+
const mechanism = meta.synthesizedBy.replace(/-/g, ' ');
|
|
153
|
+
parts.push(`via ${mechanism}`);
|
|
154
|
+
if (typeof meta.via === 'string' && meta.via)
|
|
155
|
+
parts.push(meta.via);
|
|
156
|
+
if (typeof meta.registeredAt === 'string' && meta.registeredAt) {
|
|
157
|
+
parts.push(`registered at ${meta.registeredAt}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
parts.push(upward ? 'called by' : edge.kind);
|
|
162
|
+
}
|
|
163
|
+
return parts.join(' · ');
|
|
164
|
+
}
|
|
165
|
+
function toFlowEdge(edge, upward) {
|
|
166
|
+
const meta = (edge.metadata ?? {});
|
|
167
|
+
const confidence = typeof meta.confidence === 'number' ? meta.confidence : null;
|
|
168
|
+
return {
|
|
169
|
+
...(0, wire_1.toWireEdge)(edge),
|
|
170
|
+
label: flowEdgeLabel(edge, upward),
|
|
171
|
+
upward,
|
|
172
|
+
uncertain: confidence !== null && confidence < wire_1.UNCERTAIN_BELOW,
|
|
173
|
+
synthesized: edge.provenance === 'heuristic',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function loadFile(cg, projectRoot, cache, filePath) {
|
|
177
|
+
const posix = (0, source_1.toRequestPath)(filePath);
|
|
178
|
+
const hit = cache.get(posix);
|
|
179
|
+
if (hit)
|
|
180
|
+
return hit;
|
|
181
|
+
const found = (0, source_1.findIndexedFile)(cg, posix);
|
|
182
|
+
if (!found)
|
|
183
|
+
return null;
|
|
184
|
+
let entry;
|
|
185
|
+
if ((0, source_1.hasDriftedOnDisk)(projectRoot, found.storedPath, found.record)) {
|
|
186
|
+
entry = {
|
|
187
|
+
lines: null,
|
|
188
|
+
language: found.record.language,
|
|
189
|
+
drift: true,
|
|
190
|
+
reason: 'This file changed on disk after the last index sync, so the recorded call ' +
|
|
191
|
+
'line no longer reliably points at this call. The window returns after the next sync.',
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
try {
|
|
196
|
+
// The chokepoint, before anything is opened — see `source.ts`.
|
|
197
|
+
const absolute = (0, security_1.resolveProjectFile)(projectRoot, found.storedPath);
|
|
198
|
+
entry = {
|
|
199
|
+
lines: (0, source_1.splitLines)(fs.readFileSync(absolute, 'utf-8')),
|
|
200
|
+
language: found.record.language,
|
|
201
|
+
abs: absolute,
|
|
202
|
+
drift: false,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
entry = {
|
|
207
|
+
lines: null,
|
|
208
|
+
language: found.record.language,
|
|
209
|
+
drift: false,
|
|
210
|
+
reason: 'This file is in the index but could not be read.',
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
cache.set(posix, entry);
|
|
215
|
+
return entry;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The ±{@link SOURCE_WINDOW} lines a card shows.
|
|
219
|
+
*
|
|
220
|
+
* Anchored on the line that makes the next call. The last card has no next
|
|
221
|
+
* call, so it anchors on the definition instead — a reader who followed seven
|
|
222
|
+
* hops to get there wants to see what they arrived at.
|
|
223
|
+
*/
|
|
224
|
+
async function windowFor(cg, projectRoot, cache, node, anchor) {
|
|
225
|
+
const file = loadFile(cg, projectRoot, cache, node.filePath);
|
|
226
|
+
if (!file)
|
|
227
|
+
return null;
|
|
228
|
+
const posix = (0, source_1.toRequestPath)(node.filePath);
|
|
229
|
+
if (file.lines === null) {
|
|
230
|
+
return {
|
|
231
|
+
file: posix,
|
|
232
|
+
language: file.language,
|
|
233
|
+
from: anchor,
|
|
234
|
+
to: anchor,
|
|
235
|
+
drift: file.drift,
|
|
236
|
+
...(file.reason ? { reason: file.reason } : {}),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const total = file.lines.length;
|
|
240
|
+
const from = Math.max(1, Math.min(anchor - exports.SOURCE_WINDOW, total));
|
|
241
|
+
const to = Math.max(from, Math.min(anchor + exports.SOURCE_WINDOW, total));
|
|
242
|
+
// Tokenise with the lead-in, then keep only the window — see HIGHLIGHT_LEAD_MAX.
|
|
243
|
+
const leadFrom = Math.max(1, Math.min(from, Math.max(node.startLine, from - HIGHLIGHT_LEAD_MAX)));
|
|
244
|
+
const highlighted = await (0, highlight_1.highlightLines)(file.lines.slice(leadFrom - 1, to), {
|
|
245
|
+
language: file.language,
|
|
246
|
+
cacheKey: `${posix}:${leadFrom}:${to}`,
|
|
247
|
+
});
|
|
248
|
+
return {
|
|
249
|
+
file: posix,
|
|
250
|
+
language: file.language,
|
|
251
|
+
from,
|
|
252
|
+
to,
|
|
253
|
+
lines: file.lines.slice(from - 1, to),
|
|
254
|
+
highlight: {
|
|
255
|
+
...highlighted,
|
|
256
|
+
lines: highlighted.lines.slice(from - leadFrom),
|
|
257
|
+
},
|
|
258
|
+
drift: false,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/** The branch label for `edge`'s call site in `siteNode`'s file, or ''. */
|
|
262
|
+
async function whenAt(cg, projectRoot, cache, siteNode, edge) {
|
|
263
|
+
if (!edge.line || !(0, branch_guards_1.supportsBranchGuards)(siteNode.language))
|
|
264
|
+
return '';
|
|
265
|
+
const file = loadFile(cg, projectRoot, cache, siteNode.filePath);
|
|
266
|
+
if (!file || file.drift || !file.abs)
|
|
267
|
+
return '';
|
|
268
|
+
const site = { line: edge.line, column: typeof edge.column === 'number' ? edge.column : null };
|
|
269
|
+
const guards = await (0, branch_guards_1.guardsForFile)(file.abs, file.language, [site]);
|
|
270
|
+
const g = guards.get((0, branch_guards_1.siteKey)(site));
|
|
271
|
+
return g ? (0, branch_guards_1.guardLabel)(g) : '';
|
|
272
|
+
}
|
|
273
|
+
async function toWireFlow(cg, projectRoot, cache, raw, extra = {}) {
|
|
274
|
+
const hops = [];
|
|
275
|
+
for (let i = 0; i < raw.length; i++) {
|
|
276
|
+
const step = raw[i];
|
|
277
|
+
const previous = raw[i - 1];
|
|
278
|
+
const next = raw[i + 1];
|
|
279
|
+
// Forward: the edge into the NEXT hop was recorded at the line inside THIS
|
|
280
|
+
// body that makes the call. Backwards (a trail read from a callee up to its
|
|
281
|
+
// caller): this card IS the caller, and its own incoming edge carries the
|
|
282
|
+
// line where it calls the card before it.
|
|
283
|
+
let callRef = null;
|
|
284
|
+
if (next !== undefined && !next.upward && next.edge?.line) {
|
|
285
|
+
callRef = {
|
|
286
|
+
line: next.edge.line,
|
|
287
|
+
col: typeof next.edge.column === 'number' ? next.edge.column : null,
|
|
288
|
+
name: next.node.name,
|
|
289
|
+
targetId: next.node.id,
|
|
290
|
+
backwards: false,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
else if (step.upward && previous !== undefined && step.edge?.line) {
|
|
294
|
+
callRef = {
|
|
295
|
+
line: step.edge.line,
|
|
296
|
+
col: typeof step.edge.column === 'number' ? step.edge.column : null,
|
|
297
|
+
name: previous.node.name,
|
|
298
|
+
targetId: previous.node.id,
|
|
299
|
+
backwards: true,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
// The connector's condition: the call site is in the caller's file — the
|
|
303
|
+
// previous card going down, this card itself when the reader stepped up.
|
|
304
|
+
const wireEdge = step.edge === null ? null : toFlowEdge(step.edge, step.upward);
|
|
305
|
+
if (wireEdge && step.edge?.line) {
|
|
306
|
+
const siteNode = step.upward ? step.node : previous?.node;
|
|
307
|
+
const when = siteNode ? await whenAt(cg, projectRoot, cache, siteNode, step.edge) : '';
|
|
308
|
+
if (when) {
|
|
309
|
+
wireEdge.when = when;
|
|
310
|
+
wireEdge.label = `${wireEdge.label} · when ${when}`;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
hops.push({
|
|
314
|
+
node: (0, wire_1.toNodeRef)(step.node),
|
|
315
|
+
edge: wireEdge,
|
|
316
|
+
callRef,
|
|
317
|
+
source: await windowFor(cg, projectRoot, cache, step.node, step.anchor ?? callRef?.line ?? step.node.startLine),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
const first = raw[0]?.node.name ?? '?';
|
|
321
|
+
const last = raw[raw.length - 1]?.node.name ?? '?';
|
|
322
|
+
return {
|
|
323
|
+
id: raw.map((h) => h.node.id).join('>'),
|
|
324
|
+
label: extra.partial ? `${first} → stops here` : `${first} → ${last}`,
|
|
325
|
+
hops,
|
|
326
|
+
boundary: extra.boundary ?? null,
|
|
327
|
+
partial: extra.partial === true,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
// =============================================================================
|
|
331
|
+
// Where the graph stops
|
|
332
|
+
// =============================================================================
|
|
333
|
+
/** Continuations listed in an end cap before it just counts the rest. */
|
|
334
|
+
const MAX_CONTINUATIONS = 6;
|
|
335
|
+
/** Symbols named and never reached, listed in an end cap. */
|
|
336
|
+
const MAX_MISSED = 4;
|
|
337
|
+
/** Dispatch sites reported per strip. One cap is a card, not a report. */
|
|
338
|
+
const MAX_SITES_PER_FLOW = 3;
|
|
339
|
+
function toContinuation(c) {
|
|
340
|
+
return { node: (0, wire_1.toNodeRef)(c.node), line: c.line, confidence: c.confidence };
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Build the end cap for a path that stopped short.
|
|
344
|
+
*
|
|
345
|
+
* `reports` comes from the shared detector, so the form, the key and the
|
|
346
|
+
* candidate targets are the ones `lattice_sensor_explore` would print. Everything
|
|
347
|
+
* else on the cap is graph state around the stopping symbol: the calls it makes
|
|
348
|
+
* that this path did not need, and the name-only matches under 0.6 that the
|
|
349
|
+
* search refused to follow. That last list is the honest half — an unfollowed
|
|
350
|
+
* guess left invisible reads as "there is nothing here".
|
|
351
|
+
*/
|
|
352
|
+
function buildBoundary(cg, stop, reports, missed, onPath) {
|
|
353
|
+
const sites = [];
|
|
354
|
+
for (const report of reports) {
|
|
355
|
+
for (const site of report.sites) {
|
|
356
|
+
if (sites.length >= MAX_SITES_PER_FLOW)
|
|
357
|
+
break;
|
|
358
|
+
sites.push({
|
|
359
|
+
form: site.form,
|
|
360
|
+
label: site.label,
|
|
361
|
+
snippet: site.snippet,
|
|
362
|
+
line: site.line,
|
|
363
|
+
key: site.key ?? null,
|
|
364
|
+
keyIsType: site.keyIsType === true,
|
|
365
|
+
moreSites: site.moreSites ?? 0,
|
|
366
|
+
candidates: site.candidates.map((c) => ({
|
|
367
|
+
node: (0, wire_1.toNodeRef)(c.node),
|
|
368
|
+
display: c.display,
|
|
369
|
+
named: c.named,
|
|
370
|
+
})),
|
|
371
|
+
candidateNote: site.candidateNote,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
const { resolved, uncertain } = (0, dynamic_boundary_report_1.continuationsFrom)(cg, stop, onPath);
|
|
376
|
+
return {
|
|
377
|
+
node: (0, wire_1.toNodeRef)(stop),
|
|
378
|
+
sites,
|
|
379
|
+
uncertain: (0, wire_1.wireList)(uncertain.slice(0, MAX_CONTINUATIONS).map(toContinuation), uncertain.length),
|
|
380
|
+
further: (0, wire_1.wireList)(resolved.slice(0, MAX_CONTINUATIONS).map(toContinuation), resolved.length),
|
|
381
|
+
missed: missed.slice(0, MAX_MISSED).map(wire_1.toNodeRef),
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* The edge that already connects two symbols the reader walked between.
|
|
386
|
+
*
|
|
387
|
+
* A trail is not searched — the hops are given — so all that is missing is
|
|
388
|
+
* which recorded edge the reader crossed. A `down` hop is a call out of the
|
|
389
|
+
* previous symbol; an `up` hop is the same edge read backwards, which is why
|
|
390
|
+
* `upward` exists and why the link says "called by" rather than "calls".
|
|
391
|
+
*/
|
|
392
|
+
function edgeBetween(cg, from, to) {
|
|
393
|
+
let best = null;
|
|
394
|
+
for (const { node, edge } of cg.getCallees(from.id)) {
|
|
395
|
+
if (node.id !== to.id)
|
|
396
|
+
continue;
|
|
397
|
+
if (best === null || (edge.kind === 'calls' && best.kind !== 'calls'))
|
|
398
|
+
best = edge;
|
|
399
|
+
}
|
|
400
|
+
if (best)
|
|
401
|
+
return { edge: best, upward: false };
|
|
402
|
+
for (const { node, edge } of cg.getCallers(from.id)) {
|
|
403
|
+
if (node.id !== to.id)
|
|
404
|
+
continue;
|
|
405
|
+
if (best === null || (edge.kind === 'calls' && best.kind !== 'calls'))
|
|
406
|
+
best = edge;
|
|
407
|
+
}
|
|
408
|
+
return best ? { edge: best, upward: true } : null;
|
|
409
|
+
}
|
|
410
|
+
function ambiguitiesOf(tokenNodes, named, chosen, tokens) {
|
|
411
|
+
const out = [];
|
|
412
|
+
for (const token of tokens) {
|
|
413
|
+
const ids = tokenNodes.get(token) ?? [];
|
|
414
|
+
if (ids.length < 2)
|
|
415
|
+
continue;
|
|
416
|
+
const picked = ids.find((id) => chosen.has(id)) ?? null;
|
|
417
|
+
out.push({
|
|
418
|
+
token,
|
|
419
|
+
chosen: picked ? (0, wire_1.toNodeRef)(named.get(picked)) : null,
|
|
420
|
+
others: ids
|
|
421
|
+
.filter((id) => id !== picked)
|
|
422
|
+
.map((id) => named.get(id))
|
|
423
|
+
.filter((n) => !!n)
|
|
424
|
+
.map(wire_1.toNodeRef),
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
return out;
|
|
428
|
+
}
|
|
429
|
+
async function buildFlow(cg, projectRoot, query) {
|
|
430
|
+
const started = Date.now();
|
|
431
|
+
const parsed = parseFlowQuery(query);
|
|
432
|
+
const maxFlows = (0, respond_1.intParam)(query, 'limit', { min: 1, max: exports.MAX_FLOWS, default: exports.MAX_FLOWS });
|
|
433
|
+
const stats = cg.getStats();
|
|
434
|
+
const cache = new Map();
|
|
435
|
+
const base = {
|
|
436
|
+
flows: [],
|
|
437
|
+
ambiguous: [],
|
|
438
|
+
unresolved: [],
|
|
439
|
+
reason: null,
|
|
440
|
+
index: {
|
|
441
|
+
lastIndexedAt: cg.getLastIndexedAt() ?? null,
|
|
442
|
+
edges: stats.edgeCount,
|
|
443
|
+
files: stats.fileCount,
|
|
444
|
+
},
|
|
445
|
+
};
|
|
446
|
+
if (parsed.kind === 'trail') {
|
|
447
|
+
const byId = cg.getNodesByIds(parsed.hops.map((h) => h.id));
|
|
448
|
+
const raw = [];
|
|
449
|
+
const missing = [];
|
|
450
|
+
for (const hop of parsed.hops) {
|
|
451
|
+
const node = byId.get(hop.id);
|
|
452
|
+
if (!node) {
|
|
453
|
+
missing.push(hop.id);
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
const previous = raw[raw.length - 1];
|
|
457
|
+
const link = previous ? edgeBetween(cg, previous.node, node) : null;
|
|
458
|
+
raw.push({ node, edge: link?.edge ?? null, upward: link?.upward ?? hop.dir === 'up' });
|
|
459
|
+
}
|
|
460
|
+
const flows = raw.length >= 2 ? [await toWireFlow(cg, projectRoot, cache, raw)] : [];
|
|
461
|
+
return {
|
|
462
|
+
...base,
|
|
463
|
+
query: { kind: 'trail', from: null, to: null, symbols: [] },
|
|
464
|
+
flows,
|
|
465
|
+
unresolved: missing,
|
|
466
|
+
reason: flows.length > 0
|
|
467
|
+
? null
|
|
468
|
+
: 'None of the symbols on this trail are still in the index. Re-index, or start a new trail.',
|
|
469
|
+
timing: { elapsedMs: Date.now() - started },
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
const directed = parsed.kind === 'directed';
|
|
473
|
+
const text = directed ? `${parsed.from} ${parsed.to}` : parsed.text;
|
|
474
|
+
const flow = (0, named_symbol_flow_1.resolveNamedSymbolFlow)(cg, text, directed
|
|
475
|
+
? { mode: 'directed', from: parsed.from, to: parsed.to, maxChains: maxFlows }
|
|
476
|
+
: { mode: 'named', maxChains: maxFlows });
|
|
477
|
+
const unresolved = flow.tokens.filter((t) => (flow.tokenNodes.get(t) ?? []).length === 0);
|
|
478
|
+
const chosen = new Set(flow.chains.flatMap((c) => c.steps.map((s) => s.node.id)));
|
|
479
|
+
const flows = [];
|
|
480
|
+
for (const chain of flow.chains) {
|
|
481
|
+
const onPath = new Set(chain.steps.map((s) => s.node.id));
|
|
482
|
+
// A path that reaches everything the question named is connected, and a
|
|
483
|
+
// connected answer gets no cap — this is the gate the whole feature turns
|
|
484
|
+
// on. In directed mode a chain ends at `to` by construction, so it is
|
|
485
|
+
// always connected and this is always empty.
|
|
486
|
+
const missed = uncoveredNamed(flow, onPath);
|
|
487
|
+
let boundary = null;
|
|
488
|
+
if (missed.length > 0) {
|
|
489
|
+
const stop = chain.steps[chain.steps.length - 1].node;
|
|
490
|
+
// Scan order is explore's: the dead end first (that IS where the partial
|
|
491
|
+
// flow stopped), then the symbols it never reached.
|
|
492
|
+
const reports = (0, dynamic_boundary_report_1.findDynamicBoundaries)(cg, [stop, ...missed], {
|
|
493
|
+
named: flow.named,
|
|
494
|
+
maxSites: MAX_SITES_PER_FLOW,
|
|
495
|
+
});
|
|
496
|
+
boundary = buildBoundary(cg, stop, reports, missed, onPath);
|
|
497
|
+
}
|
|
498
|
+
// The last card opens at the dispatch line rather than at its definition,
|
|
499
|
+
// so the window shows the site the cap beside it is describing. Without
|
|
500
|
+
// this a long body puts them hundreds of lines apart and the cap reads as a
|
|
501
|
+
// claim about code the reader cannot see.
|
|
502
|
+
const stopLine = boundary?.sites[0]?.line;
|
|
503
|
+
flows.push(await toWireFlow(cg, projectRoot, cache, chain.steps.map((s, i) => ({
|
|
504
|
+
node: s.node,
|
|
505
|
+
edge: s.edge,
|
|
506
|
+
upward: false,
|
|
507
|
+
...(stopLine !== undefined && i === chain.steps.length - 1 ? { anchor: stopLine } : {}),
|
|
508
|
+
})), { boundary }));
|
|
509
|
+
}
|
|
510
|
+
// No path at all. If a dispatch site explains why, the strip is that site:
|
|
511
|
+
// one card opened at the line where the static path ends, and the cap. Saying
|
|
512
|
+
// "not connected" while the answer sits three lines into the body would be
|
|
513
|
+
// the same silence this whole feature exists to break. With nothing detected
|
|
514
|
+
// we do NOT invent a stopping point — the search covered a whole region, and
|
|
515
|
+
// pinning "the graph stops here" on the seed would be a claim, not a finding.
|
|
516
|
+
if (flows.length === 0 && flow.named.size > 0) {
|
|
517
|
+
const seeds = boundarySeeds(flow, directed ? parsed.from : null, directed ? parsed.to : null);
|
|
518
|
+
const reports = (0, dynamic_boundary_report_1.findDynamicBoundaries)(cg, seeds, {
|
|
519
|
+
named: flow.named,
|
|
520
|
+
maxSites: MAX_SITES_PER_FLOW,
|
|
521
|
+
});
|
|
522
|
+
const first = reports[0];
|
|
523
|
+
if (first && first.sites[0]) {
|
|
524
|
+
const stop = first.node;
|
|
525
|
+
const missed = uncoveredNamed(flow, new Set([stop.id]));
|
|
526
|
+
flows.push(await toWireFlow(cg, projectRoot, cache, [{ node: stop, edge: null, upward: false, anchor: first.sites[0].line }], {
|
|
527
|
+
boundary: buildBoundary(cg, stop, reports, missed, new Set([stop.id])),
|
|
528
|
+
partial: true,
|
|
529
|
+
}));
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
return {
|
|
533
|
+
...base,
|
|
534
|
+
query: {
|
|
535
|
+
kind: parsed.kind,
|
|
536
|
+
from: directed ? parsed.from : null,
|
|
537
|
+
to: directed ? parsed.to : null,
|
|
538
|
+
symbols: flow.tokens,
|
|
539
|
+
},
|
|
540
|
+
flows,
|
|
541
|
+
ambiguous: ambiguitiesOf(flow.tokenNodes, flow.named, chosen, flow.tokens),
|
|
542
|
+
unresolved,
|
|
543
|
+
// A boundary strip is not a path, so the reason still stands: it says what
|
|
544
|
+
// was not found, and the cap says where the looking stopped.
|
|
545
|
+
reason: flow.chains.length > 0 ? null : noFlowReason(parsed, flow.tokens.length, unresolved),
|
|
546
|
+
timing: { elapsedMs: Date.now() - started },
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* The named symbols this path never reaches, deduped by name.
|
|
551
|
+
*
|
|
552
|
+
* Per TOKEN, not per node: a token whose overloads are all off the path is
|
|
553
|
+
* genuinely unreached, but a token with one overload on it is answered — which
|
|
554
|
+
* is exactly how `lattice_sensor_explore` decides whether to announce a boundary.
|
|
555
|
+
* The reader's own vocabulary (`uniqueNamedNodeIds`) sorts first, because a
|
|
556
|
+
* symbol only they named is the one they are actually asking about.
|
|
557
|
+
*/
|
|
558
|
+
function uncoveredNamed(flow, onPath) {
|
|
559
|
+
const out = [];
|
|
560
|
+
const seenName = new Set();
|
|
561
|
+
for (const ids of flow.tokenNodes.values()) {
|
|
562
|
+
if (ids.length === 0 || ids.some((id) => onPath.has(id)))
|
|
563
|
+
continue;
|
|
564
|
+
for (const id of ids) {
|
|
565
|
+
const node = flow.named.get(id);
|
|
566
|
+
if (!node || seenName.has(node.name))
|
|
567
|
+
continue;
|
|
568
|
+
seenName.add(node.name);
|
|
569
|
+
out.push(node);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
return out.sort((a, b) => (flow.uniqueNamedNodeIds.has(b.id) ? 1 : 0) - (flow.uniqueNamedNodeIds.has(a.id) ? 1 : 0));
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* Bodies to scan when nothing connected, in the order worth scanning them.
|
|
576
|
+
*
|
|
577
|
+
* The outward walk starts at `from`, so a dispatch in `from`'s body is the one
|
|
578
|
+
* that stopped it; `to`'s body is scanned after, because a flow can equally
|
|
579
|
+
* break on the far side (the handler is reached by a bus nobody calls
|
|
580
|
+
* directly). A `?symbols=` question has no direction and scans what it named.
|
|
581
|
+
*/
|
|
582
|
+
function boundarySeeds(flow, from, to) {
|
|
583
|
+
if (from === null || to === null)
|
|
584
|
+
return [...flow.named.values()];
|
|
585
|
+
const pick = (token) => (flow.tokenNodes.get((0, named_symbol_flow_1.normalizeToken)(token)) ?? [])
|
|
586
|
+
.map((id) => flow.named.get(id))
|
|
587
|
+
.filter((n) => !!n);
|
|
588
|
+
return [...pick(from), ...pick(to)];
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* Why there is no strip, in the words that say what to do next.
|
|
592
|
+
*
|
|
593
|
+
* "Not connected" is a real answer about this index, not a failure — a flow
|
|
594
|
+
* that runs through a dynamic dispatch the resolver could not bridge genuinely
|
|
595
|
+
* has no static path, and saying so is the honest end of the search. CG-51
|
|
596
|
+
* turns this sentence into the boundary end cap that names the dispatch site.
|
|
597
|
+
*/
|
|
598
|
+
function noFlowReason(parsed, tokenCount, unresolved) {
|
|
599
|
+
if (unresolved.length > 0) {
|
|
600
|
+
return `${unresolved.join(' and ')} ${unresolved.length > 1 ? 'name' : 'names'} nothing in this index.`;
|
|
601
|
+
}
|
|
602
|
+
if (parsed.kind === 'directed') {
|
|
603
|
+
return (`No chain of calls reaches ${parsed.to} from ${parsed.from} within ${named_symbol_flow_1.DIRECTED_MAX_HOPS} hops. ` +
|
|
604
|
+
'The path may run through a dynamic dispatch — a callback, a registry, a reflective ' +
|
|
605
|
+
'call — that no static edge records.');
|
|
606
|
+
}
|
|
607
|
+
if (tokenCount < 2) {
|
|
608
|
+
return 'Name at least two symbols: a flow is a path between them.';
|
|
609
|
+
}
|
|
610
|
+
return 'Those symbols do not call one another, directly or through one intermediate.';
|
|
611
|
+
}
|
|
612
|
+
//# sourceMappingURL=flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/ui-server/api/flow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwOH,wCAkCC;AAaD,sCAcC;AAsVD,8BAsJC;AA7wBD,6DAAqG;AACrG,qEAIuC;AACvC,iFAK6C;AAC7C,4CAAoE;AACpE,uCAAiD;AACjD,6EAA6E;AAC7E,8DAA8D;AAC9D,+CAA+C;AAC/C,qCAAwF;AACxF,0CAAiD;AACjD,iCAQgB;AAChB,uCAAyB;AAEzB,6EAA6E;AAChE,QAAA,aAAa,GAAG,CAAC,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,oFAAoF;AACvE,QAAA,SAAS,GAAG,CAAC,CAAC;AA4K3B,MAAM,SAAS,GAA4C,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAE9F;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,KAAsB;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,4BAAc,EAAE,CAAC;YACpC,MAAM,IAAA,oBAAU,EACd,cAAc,OAAO,CAAC,MAAM,6CAA6C,4BAAc,IAAI,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACjC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAChB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAW,CAAC,IAAK,MAAgB;SACtD,CAAC,CAAC,CAAC;QACJ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAA,oBAAU,EAAC,uDAAuD,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACf,IAAI,IAAA,kCAAc,EAAC,IAAI,CAAC,KAAK,IAAA,kCAAc,EAAC,EAAE,CAAC,EAAE,CAAC;YAChD,MAAM,IAAA,oBAAU,EAAC,oEAAoE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAEvD,MAAM,IAAA,oBAAU,EACd,wBAAwB,EACxB,mFAAmF,CACpF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF;;;;;;GAMG;AACH,SAAgB,aAAa,CAAC,IAAU,EAAE,MAAe;IACvD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC;QAC/B,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,MAAe;IAC7C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAChF,OAAO;QACL,GAAG,IAAA,iBAAU,EAAC,IAAI,CAAC;QACnB,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;QAClC,MAAM;QACN,SAAS,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,GAAG,sBAAe;QAC9D,WAAW,EAAE,IAAI,CAAC,UAAU,KAAK,WAAW;KAC7C,CAAC;AACJ,CAAC;AAgBD,SAAS,QAAQ,CACf,EAAiB,EACjB,WAAmB,EACnB,KAA6B,EAC7B,QAAgB;IAEhB,MAAM,KAAK,GAAG,IAAA,sBAAa,EAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,MAAM,KAAK,GAAG,IAAA,wBAAe,EAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,KAAgB,CAAC;IACrB,IAAI,IAAA,yBAAgB,EAAC,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClE,KAAK,GAAG;YACN,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;YAC/B,KAAK,EAAE,IAAI;YACX,MAAM,EACJ,4EAA4E;gBAC5E,sFAAsF;SACzF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,IAAA,6BAAkB,EAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YACnE,KAAK,GAAG;gBACN,KAAK,EAAE,IAAA,mBAAU,EAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACrD,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;gBAC/B,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,KAAK;aACb,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,GAAG;gBACN,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;gBAC/B,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,kDAAkD;aAC3D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,SAAS,CACtB,EAAiB,EACjB,WAAmB,EACnB,KAA6B,EAC7B,IAAU,EACV,MAAc;IAEd,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,IAAA,sBAAa,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO;YACL,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,MAAM;YACZ,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,qBAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,qBAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,iFAAiF;IACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAc,EAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;QAC3E,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,QAAQ,EAAE,GAAG,KAAK,IAAI,QAAQ,IAAI,EAAE,EAAE;KACvC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI;QACJ,EAAE;QACF,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;QACrC,SAAS,EAAE;YACT,GAAG,WAAW;YACd,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;SAChD;QACD,KAAK,EAAE,KAAK;KACb,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,KAAK,UAAU,MAAM,CACnB,EAAiB,EACjB,WAAmB,EACnB,KAA6B,EAC7B,QAAc,EACd,IAAU;IAEV,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAA,oCAAoB,EAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/F,MAAM,MAAM,GAAG,MAAM,IAAA,6BAAa,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAA,uBAAO,EAAC,IAAI,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,0BAAU,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC;AAkBD,KAAK,UAAU,UAAU,CACvB,EAAiB,EACjB,WAAmB,EACnB,KAA6B,EAC7B,GAAsB,EACtB,QAAmE,EAAE;IAErE,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAW,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,2EAA2E;QAC3E,4EAA4E;QAC5E,0EAA0E;QAC1E,0CAA0C;QAC1C,IAAI,OAAO,GAA2B,IAAI,CAAC;QAC3C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAC1D,OAAO,GAAG;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpB,GAAG,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBACnE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpB,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtB,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YACpE,OAAO,GAAG;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;gBACpB,GAAG,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBACnE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;gBACxB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;gBAC1B,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;QACD,yEAAyE;QACzE,yEAAyE;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChF,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC;YAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;gBACrB,QAAQ,CAAC,KAAK,GAAG,GAAG,QAAQ,CAAC,KAAK,WAAW,IAAI,EAAE,CAAC;YACtD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,IAAA,gBAAS,EAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,MAAM,EAAE,MAAM,SAAS,CACrB,EAAE,EACF,WAAW,EACX,KAAK,EACL,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CACpD;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;IACnD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,EAAE;QACrE,IAAI;QACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;QAChC,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;KAChC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,6DAA6D;AAC7D,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB,0EAA0E;AAC1E,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,SAAS,cAAc,CAAC,CAAuB;IAC7C,OAAO,EAAE,IAAI,EAAE,IAAA,gBAAS,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,aAAa,CACpB,EAAiB,EACjB,IAAU,EACV,OAAgC,EAChC,MAAuB,EACvB,MAA2B;IAE3B,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,IAAI,kBAAkB;gBAAE,MAAM;YAC9C,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI;gBAClC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC;gBAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,IAAA,gBAAS,EAAC,CAAC,CAAC,IAAI,CAAC;oBACvB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;iBACf,CAAC,CAAC;gBACH,aAAa,EAAE,IAAI,CAAC,aAAa;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAA,2CAAiB,EAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO;QACL,IAAI,EAAE,IAAA,gBAAS,EAAC,IAAI,CAAC;QACrB,KAAK;QACL,SAAS,EAAE,IAAA,eAAQ,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC;QAChG,OAAO,EAAE,IAAA,eAAQ,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;QAC5F,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAS,CAAC;KACnD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,WAAW,CAClB,EAAiB,EACjB,IAAU,EACV,EAAQ;IAER,IAAI,IAAI,GAAgB,IAAI,CAAC;IAC7B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAAE,SAAS;QAChC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC;IACrF,CAAC;IACD,IAAI,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC/C,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;YAAE,SAAS;QAChC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,aAAa,CACpB,UAAyC,EACzC,KAAgC,EAChC,MAA2B,EAC3B,MAAyB;IAEzB,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC;YACP,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAA,gBAAS,EAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAS,CAAC,CAAC,CAAC,CAAC,IAAI;YAC5D,MAAM,EAAE,GAAG;iBACR,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC;iBAC7B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC1B,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7B,GAAG,CAAC,gBAAS,CAAC;SAClB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,EAAiB,EACjB,WAAmB,EACnB,KAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAA,kBAAQ,EAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,iBAAS,EAAE,OAAO,EAAE,iBAAS,EAAE,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE3C,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,EAAgB;QACvB,SAAS,EAAE,EAAyB;QACpC,UAAU,EAAE,EAAc;QAC1B,MAAM,EAAE,IAAqB;QAC7B,KAAK,EAAE;YACL,aAAa,EAAE,EAAE,CAAC,gBAAgB,EAAE,IAAI,IAAI;YAC5C,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,KAAK,EAAE,KAAK,CAAC,SAAS;SACvB;KACF,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,OAAO;YACL,GAAG,IAAI;YACP,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;YAC3D,KAAK;YACL,UAAU,EAAE,OAAO;YACnB,MAAM,EACJ,KAAK,CAAC,MAAM,GAAG,CAAC;gBACd,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,2FAA2F;YACjG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC;IAC5C,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACpE,MAAM,IAAI,GAAG,IAAA,0CAAsB,EACjC,EAAE,EACF,IAAI,EACJ,QAAQ;QACN,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;QAC7E,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAC3C,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1D,wEAAwE;QACxE,0EAA0E;QAC1E,sEAAsE;QACtE,6CAA6C;QAC7C,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,IAAI,QAAQ,GAA4B,IAAI,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAoB,CAAC,IAAI,CAAC;YAC1E,yEAAyE;YACzE,oDAAoD;YACpD,MAAM,OAAO,GAAG,IAAA,+CAAqB,EAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE;gBAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,kBAAkB;aAC7B,CAAC,CAAC;YACH,QAAQ,GAAG,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9D,CAAC;QACD,0EAA0E;QAC1E,wEAAwE;QACxE,4EAA4E;QAC5E,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAC1C,KAAK,CAAC,IAAI,CACR,MAAM,UAAU,CACd,EAAE,EACF,WAAW,EACX,KAAK,EACL,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxF,CAAC,CAAC,EACH,EAAE,QAAQ,EAAE,CACb,CACF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,6EAA6E;IAC7E,6EAA6E;IAC7E,8EAA8E;IAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,IAAA,+CAAqB,EAAC,EAAE,EAAE,KAAK,EAAE;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,kBAAkB;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YACxB,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,KAAK,CAAC,IAAI,CACR,MAAM,UAAU,CACd,EAAE,EACF,WAAW,EACX,KAAK,EACL,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EACxE;gBACE,QAAQ,EAAE,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtE,OAAO,EAAE,IAAI;aACd,CACF,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,KAAK,EAAE;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;YACnC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YAC/B,OAAO,EAAE,IAAI,CAAC,MAAM;SACrB;QACD,KAAK;QACL,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;QAC1E,UAAU;QACV,2EAA2E;QAC3E,6DAA6D;QAC7D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;QAC5F,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,cAAc,CACrB,IAA+C,EAC/C,MAA2B;IAE3B,MAAM,GAAG,GAAW,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAAE,SAAS;QACnE,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,aAAa,CACpB,IAA+C,EAC/C,IAAmB,EACnB,EAAiB;IAEjB,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,CAAC,KAAa,EAAU,EAAE,CACrC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAA,kCAAc,EAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;SAC/C,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC/B,MAAM,CAAC,CAAC,CAAC,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CACnB,MAAiB,EACjB,UAAkB,EAClB,UAA6B;IAE7B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,yBAAyB,CAAC;IAC1G,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,CACL,6BAA6B,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,IAAI,WAAW,qCAAiB,SAAS;YAC/F,qFAAqF;YACrF,qCAAqC,CACtC,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,2DAA2D,CAAC;IACrE,CAAC;IACD,OAAO,8EAA8E,CAAC;AACxF,CAAC"}
|