@yalehwang/archguard 0.1.31 → 0.1.32
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.md +106 -19
- package/assets/grammars/benchmarks.md +101 -0
- package/assets/grammars/checksums.json +8 -0
- package/{node_modules/tree-sitter/LICENSE → assets/grammars/licenses/tree-sitter-cpp.LICENSE} +2 -2
- package/{node_modules/node-gyp-build/LICENSE → assets/grammars/licenses/tree-sitter-go.LICENSE} +5 -5
- package/assets/grammars/licenses/tree-sitter-java.LICENSE +21 -0
- package/assets/grammars/licenses/tree-sitter-kotlin.LICENSE +21 -0
- package/assets/grammars/licenses/tree-sitter-python.LICENSE +21 -0
- package/assets/grammars/licenses/tree-sitter.LICENSE +21 -0
- package/assets/grammars/provenance.json +66 -0
- package/assets/grammars/tree-sitter-cpp.wasm +0 -0
- package/assets/grammars/tree-sitter-go.wasm +0 -0
- package/assets/grammars/tree-sitter-java.wasm +0 -0
- package/assets/grammars/tree-sitter-kotlin.wasm +0 -0
- package/assets/grammars/tree-sitter-python.wasm +0 -0
- package/assets/grammars/tree-sitter.wasm +0 -0
- package/dist/analysis/fitness/rule-types.d.ts +1 -33
- package/dist/analysis/fitness/rule-types.d.ts.map +1 -1
- package/dist/cli/analyze/run-analysis.d.ts +4 -0
- package/dist/cli/analyze/run-analysis.d.ts.map +1 -1
- package/dist/cli/analyze/run-analysis.js +63 -43
- package/dist/cli/analyze/run-analysis.js.map +1 -1
- package/dist/cli/cache/cache-manager.js +1 -1
- package/dist/cli/cache/cache-manager.js.map +1 -1
- package/dist/cli/mcp/analyze-tool.d.ts +2 -0
- package/dist/cli/mcp/analyze-tool.d.ts.map +1 -1
- package/dist/cli/mcp/analyze-tool.js +5 -0
- package/dist/cli/mcp/analyze-tool.js.map +1 -1
- package/dist/cli/mcp/mcp-server.d.ts +7 -2
- package/dist/cli/mcp/mcp-server.d.ts.map +1 -1
- package/dist/cli/mcp/mcp-server.js +37 -3
- package/dist/cli/mcp/mcp-server.js.map +1 -1
- package/dist/cli/processors/arch-json-provider-types.d.ts +5 -0
- package/dist/cli/processors/arch-json-provider-types.d.ts.map +1 -1
- package/dist/cli/processors/arch-json-provider.d.ts +5 -0
- package/dist/cli/processors/arch-json-provider.d.ts.map +1 -1
- package/dist/cli/processors/arch-json-provider.js +104 -55
- package/dist/cli/processors/arch-json-provider.js.map +1 -1
- package/dist/cli/processors/arch-json-utils.d.ts.map +1 -1
- package/dist/cli/processors/arch-json-utils.js +12 -3
- package/dist/cli/processors/arch-json-utils.js.map +1 -1
- package/dist/cli/processors/diagram-processor.d.ts +4 -0
- package/dist/cli/processors/diagram-processor.d.ts.map +1 -1
- package/dist/cli/processors/diagram-processor.js +2 -0
- package/dist/cli/processors/diagram-processor.js.map +1 -1
- package/dist/cli/processors/worker-pool-factory.d.ts +3 -0
- package/dist/cli/processors/worker-pool-factory.d.ts.map +1 -1
- package/dist/cli/processors/worker-pool-factory.js +9 -0
- package/dist/cli/processors/worker-pool-factory.js.map +1 -1
- package/dist/mermaid/generator.d.ts.map +1 -1
- package/dist/mermaid/generator.js +19 -1
- package/dist/mermaid/generator.js.map +1 -1
- package/dist/mermaid/renderer.d.ts.map +1 -1
- package/dist/mermaid/renderer.js +1 -1
- package/dist/mermaid/renderer.js.map +1 -1
- package/dist/mermaid/test-coverage-renderer.d.ts.map +1 -1
- package/dist/mermaid/test-coverage-renderer.js +18 -12
- package/dist/mermaid/test-coverage-renderer.js.map +1 -1
- package/dist/parser/archjson-aggregator.js +1 -1
- package/dist/parser/archjson-aggregator.js.map +1 -1
- package/dist/parser/parallel-parser.d.ts +10 -0
- package/dist/parser/parallel-parser.d.ts.map +1 -1
- package/dist/parser/parallel-parser.js +76 -35
- package/dist/parser/parallel-parser.js.map +1 -1
- package/dist/parser/parse-worker-pool.d.ts +59 -0
- package/dist/parser/parse-worker-pool.d.ts.map +1 -0
- package/dist/parser/parse-worker-pool.js +170 -0
- package/dist/parser/parse-worker-pool.js.map +1 -0
- package/dist/parser/parse-worker.d.ts +2 -0
- package/dist/parser/parse-worker.d.ts.map +1 -0
- package/dist/parser/parse-worker.js +71 -0
- package/dist/parser/parse-worker.js.map +1 -0
- package/dist/parser/process-parse-worker-pools.d.ts +18 -0
- package/dist/parser/process-parse-worker-pools.d.ts.map +1 -0
- package/dist/parser/process-parse-worker-pools.js +31 -0
- package/dist/parser/process-parse-worker-pools.js.map +1 -0
- package/dist/plugins/cpp/builders/class-builder.d.ts +2 -2
- package/dist/plugins/cpp/builders/class-builder.d.ts.map +1 -1
- package/dist/plugins/cpp/builders/class-builder.js.map +1 -1
- package/dist/plugins/cpp/index.d.ts +4 -1
- package/dist/plugins/cpp/index.d.ts.map +1 -1
- package/dist/plugins/cpp/index.js +11 -2
- package/dist/plugins/cpp/index.js.map +1 -1
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts +3 -2
- package/dist/plugins/cpp/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/cpp/tree-sitter-bridge.js +17 -15
- package/dist/plugins/cpp/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/golang/builders/function-builder.d.ts +4 -4
- package/dist/plugins/golang/builders/function-builder.d.ts.map +1 -1
- package/dist/plugins/golang/builders/function-builder.js.map +1 -1
- package/dist/plugins/golang/builders/goroutine-builder.d.ts +2 -2
- package/dist/plugins/golang/builders/goroutine-builder.d.ts.map +1 -1
- package/dist/plugins/golang/builders/goroutine-builder.js.map +1 -1
- package/dist/plugins/golang/builders/interface-builder.d.ts +4 -4
- package/dist/plugins/golang/builders/interface-builder.d.ts.map +1 -1
- package/dist/plugins/golang/builders/interface-builder.js.map +1 -1
- package/dist/plugins/golang/builders/node-utils.d.ts +3 -3
- package/dist/plugins/golang/builders/node-utils.d.ts.map +1 -1
- package/dist/plugins/golang/builders/node-utils.js.map +1 -1
- package/dist/plugins/golang/builders/struct-builder.d.ts +2 -2
- package/dist/plugins/golang/builders/struct-builder.d.ts.map +1 -1
- package/dist/plugins/golang/builders/struct-builder.js.map +1 -1
- package/dist/plugins/golang/go-parse-coordinator.d.ts +10 -2
- package/dist/plugins/golang/go-parse-coordinator.d.ts.map +1 -1
- package/dist/plugins/golang/go-parse-coordinator.js +44 -6
- package/dist/plugins/golang/go-parse-coordinator.js.map +1 -1
- package/dist/plugins/golang/gopls-client.d.ts +31 -2
- package/dist/plugins/golang/gopls-client.d.ts.map +1 -1
- package/dist/plugins/golang/gopls-client.js +230 -32
- package/dist/plugins/golang/gopls-client.js.map +1 -1
- package/dist/plugins/golang/gopls-interface-resolver.d.ts +14 -1
- package/dist/plugins/golang/gopls-interface-resolver.d.ts.map +1 -1
- package/dist/plugins/golang/gopls-interface-resolver.js +42 -11
- package/dist/plugins/golang/gopls-interface-resolver.js.map +1 -1
- package/dist/plugins/golang/index.d.ts +3 -1
- package/dist/plugins/golang/index.d.ts.map +1 -1
- package/dist/plugins/golang/index.js +17 -3
- package/dist/plugins/golang/index.js.map +1 -1
- package/dist/plugins/golang/interface-matcher.d.ts.map +1 -1
- package/dist/plugins/golang/interface-matcher.js +32 -30
- package/dist/plugins/golang/interface-matcher.js.map +1 -1
- package/dist/plugins/golang/tree-sitter-bridge.d.ts +3 -2
- package/dist/plugins/golang/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/golang/tree-sitter-bridge.js +25 -23
- package/dist/plugins/golang/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/java/index.d.ts +4 -0
- package/dist/plugins/java/index.d.ts.map +1 -1
- package/dist/plugins/java/index.js +12 -1
- package/dist/plugins/java/index.js.map +1 -1
- package/dist/plugins/java/tree-sitter-bridge.d.ts +3 -2
- package/dist/plugins/java/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/java/tree-sitter-bridge.js +33 -31
- package/dist/plugins/java/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/kotlin/builders/class-builder.d.ts +2 -1
- package/dist/plugins/kotlin/builders/class-builder.d.ts.map +1 -1
- package/dist/plugins/kotlin/builders/class-builder.js.map +1 -1
- package/dist/plugins/kotlin/builders/function-builder.d.ts +2 -1
- package/dist/plugins/kotlin/builders/function-builder.d.ts.map +1 -1
- package/dist/plugins/kotlin/builders/function-builder.js.map +1 -1
- package/dist/plugins/kotlin/index.d.ts +4 -1
- package/dist/plugins/kotlin/index.d.ts.map +1 -1
- package/dist/plugins/kotlin/index.js +12 -4
- package/dist/plugins/kotlin/index.js.map +1 -1
- package/dist/plugins/kotlin/tree-sitter-bridge.d.ts +3 -3
- package/dist/plugins/kotlin/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/kotlin/tree-sitter-bridge.js +6 -7
- package/dist/plugins/kotlin/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/python/index.d.ts +4 -0
- package/dist/plugins/python/index.d.ts.map +1 -1
- package/dist/plugins/python/index.js +12 -1
- package/dist/plugins/python/index.js.map +1 -1
- package/dist/plugins/python/tree-sitter-bridge.d.ts +3 -2
- package/dist/plugins/python/tree-sitter-bridge.d.ts.map +1 -1
- package/dist/plugins/python/tree-sitter-bridge.js +50 -48
- package/dist/plugins/python/tree-sitter-bridge.js.map +1 -1
- package/dist/plugins/shared/native-parser-backend.d.ts +33 -0
- package/dist/plugins/shared/native-parser-backend.d.ts.map +1 -0
- package/dist/plugins/shared/native-parser-backend.js +84 -0
- package/dist/plugins/shared/native-parser-backend.js.map +1 -0
- package/dist/plugins/shared/parser-backend.d.ts +13 -0
- package/dist/plugins/shared/parser-backend.d.ts.map +1 -0
- package/dist/plugins/shared/parser-backend.js +38 -0
- package/dist/plugins/shared/parser-backend.js.map +1 -0
- package/dist/plugins/shared/parser-runtime.d.ts +32 -0
- package/dist/plugins/shared/parser-runtime.d.ts.map +1 -0
- package/dist/plugins/shared/parser-runtime.js +152 -0
- package/dist/plugins/shared/parser-runtime.js.map +1 -0
- package/dist/plugins/shared/plugin-factory.d.ts +5 -0
- package/dist/plugins/shared/plugin-factory.d.ts.map +1 -0
- package/dist/plugins/shared/plugin-factory.js +27 -0
- package/dist/plugins/shared/plugin-factory.js.map +1 -0
- package/dist/plugins/shared/syntax-tree.d.ts +32 -0
- package/dist/plugins/shared/syntax-tree.d.ts.map +1 -0
- package/dist/plugins/shared/syntax-tree.js +2 -0
- package/dist/plugins/shared/syntax-tree.js.map +1 -0
- package/dist/plugins/shared/wasm-parser-backend.d.ts +18 -0
- package/dist/plugins/shared/wasm-parser-backend.d.ts.map +1 -0
- package/dist/plugins/shared/wasm-parser-backend.js +118 -0
- package/dist/plugins/shared/wasm-parser-backend.js.map +1 -0
- package/dist/plugins/typescript/builders/module-graph-builder.d.ts.map +1 -1
- package/dist/plugins/typescript/builders/module-graph-builder.js +2 -1
- package/dist/plugins/typescript/builders/module-graph-builder.js.map +1 -1
- package/dist/types/config-global.d.ts +7 -1
- package/dist/types/config-global.d.ts.map +1 -1
- package/dist/types/config.d.ts +1 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/fitness-rules.d.ts +34 -0
- package/dist/types/fitness-rules.d.ts.map +1 -0
- package/dist/types/fitness-rules.js +2 -0
- package/dist/types/fitness-rules.js.map +1 -0
- package/dist/types/parser-runtime.d.ts +4 -0
- package/dist/types/parser-runtime.d.ts.map +1 -0
- package/dist/types/parser-runtime.js +5 -0
- package/dist/types/parser-runtime.js.map +1 -0
- package/package.json +29 -16
- package/node_modules/node-addon-api/LICENSE.md +0 -9
- package/node_modules/node-addon-api/README.md +0 -95
- package/node_modules/node-addon-api/common.gypi +0 -21
- package/node_modules/node-addon-api/except.gypi +0 -25
- package/node_modules/node-addon-api/index.js +0 -14
- package/node_modules/node-addon-api/napi-inl.deprecated.h +0 -186
- package/node_modules/node-addon-api/napi-inl.h +0 -7033
- package/node_modules/node-addon-api/napi.h +0 -3309
- package/node_modules/node-addon-api/node_addon_api.gyp +0 -42
- package/node_modules/node-addon-api/node_api.gyp +0 -9
- package/node_modules/node-addon-api/noexcept.gypi +0 -26
- package/node_modules/node-addon-api/nothing.c +0 -0
- package/node_modules/node-addon-api/package-support.json +0 -21
- package/node_modules/node-addon-api/package.json +0 -480
- package/node_modules/node-addon-api/tools/README.md +0 -73
- package/node_modules/node-addon-api/tools/check-napi.js +0 -99
- package/node_modules/node-addon-api/tools/clang-format.js +0 -71
- package/node_modules/node-addon-api/tools/conversion.js +0 -301
- package/node_modules/node-gyp-build/README.md +0 -58
- package/node_modules/node-gyp-build/SECURITY.md +0 -5
- package/node_modules/node-gyp-build/bin.js +0 -84
- package/node_modules/node-gyp-build/build-test.js +0 -19
- package/node_modules/node-gyp-build/index.js +0 -6
- package/node_modules/node-gyp-build/node-gyp-build.js +0 -207
- package/node_modules/node-gyp-build/optional.js +0 -7
- package/node_modules/node-gyp-build/package.json +0 -43
- package/node_modules/tree-sitter/README.md +0 -128
- package/node_modules/tree-sitter/binding.gyp +0 -80
- package/node_modules/tree-sitter/index.js +0 -916
- package/node_modules/tree-sitter/package.json +0 -76
- package/node_modules/tree-sitter/prebuilds/linux-x64/node.napi.glibc.node +0 -0
- package/node_modules/tree-sitter/src/addon_data.h +0 -47
- package/node_modules/tree-sitter/src/binding.cc +0 -35
- package/node_modules/tree-sitter/src/conversions.cc +0 -140
- package/node_modules/tree-sitter/src/conversions.h +0 -22
- package/node_modules/tree-sitter/src/language.cc +0 -106
- package/node_modules/tree-sitter/src/language.h +0 -17
- package/node_modules/tree-sitter/src/logger.cc +0 -70
- package/node_modules/tree-sitter/src/logger.h +0 -19
- package/node_modules/tree-sitter/src/lookaheaditerator.cc +0 -122
- package/node_modules/tree-sitter/src/lookaheaditerator.h +0 -33
- package/node_modules/tree-sitter/src/node.cc +0 -1088
- package/node_modules/tree-sitter/src/node.h +0 -30
- package/node_modules/tree-sitter/src/parser.cc +0 -306
- package/node_modules/tree-sitter/src/parser.h +0 -35
- package/node_modules/tree-sitter/src/query.cc +0 -397
- package/node_modules/tree-sitter/src/query.h +0 -40
- package/node_modules/tree-sitter/src/tree.cc +0 -316
- package/node_modules/tree-sitter/src/tree.h +0 -45
- package/node_modules/tree-sitter/src/tree_cursor.cc +0 -213
- package/node_modules/tree-sitter/src/tree_cursor.h +0 -52
- package/node_modules/tree-sitter/tree-sitter.d.ts +0 -1042
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +0 -1478
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +0 -48
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +0 -41
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +0 -291
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +0 -68
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +0 -146
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +0 -11
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +0 -523
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +0 -36
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +0 -21
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +0 -293
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +0 -293
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +0 -52
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +0 -483
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +0 -54
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +0 -12
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +0 -875
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +0 -2293
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +0 -286
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +0 -48
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +0 -239
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +0 -4350
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +0 -34
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +0 -95
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +0 -911
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +0 -133
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +0 -1034
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +0 -399
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +0 -170
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +0 -31
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +0 -717
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +0 -48
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +0 -11
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +0 -1
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +0 -414
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +0 -29
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +0 -1
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +0 -448
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +0 -1
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +0 -1
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +0 -733
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +0 -881
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +0 -75
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +0 -24
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +0 -113
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +0 -1314
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +0 -1935
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +0 -31
- package/scripts/postinstall-tree-sitter.mjs +0 -28
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ParserInitializationError } from './parser-backend.js';
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const RUNTIME_MODULE = 'tree-sitter';
|
|
6
|
+
const GRAMMAR_MODULES = {
|
|
7
|
+
go: 'tree-sitter-go',
|
|
8
|
+
java: 'tree-sitter-java',
|
|
9
|
+
python: 'tree-sitter-python',
|
|
10
|
+
cpp: 'tree-sitter-cpp',
|
|
11
|
+
kotlin: '@tree-sitter-grammars/tree-sitter-kotlin',
|
|
12
|
+
};
|
|
13
|
+
export function nativeGrammarModule(language) {
|
|
14
|
+
return GRAMMAR_MODULES[language];
|
|
15
|
+
}
|
|
16
|
+
export function readNativeModuleRootEnv(env = process.env) {
|
|
17
|
+
const root = env.ARCHGUARD_NATIVE_MODULE_ROOT;
|
|
18
|
+
return root && root !== '' ? root : undefined;
|
|
19
|
+
}
|
|
20
|
+
function moduleDefault(module) {
|
|
21
|
+
return module.default ?? module;
|
|
22
|
+
}
|
|
23
|
+
export function defaultNativeLoaders(moduleRoot) {
|
|
24
|
+
const scopedRequire = moduleRoot
|
|
25
|
+
? createRequire(path.join(path.resolve(moduleRoot), 'package.json'))
|
|
26
|
+
: require;
|
|
27
|
+
return {
|
|
28
|
+
loadRuntime: () => moduleDefault(scopedRequire(RUNTIME_MODULE)),
|
|
29
|
+
loadGrammar: (language) => moduleDefault(scopedRequire(GRAMMAR_MODULES[language])),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export class NativeParserBackend {
|
|
33
|
+
runtime = 'native';
|
|
34
|
+
loaders;
|
|
35
|
+
constructor(options = {}) {
|
|
36
|
+
this.loaders = options.loaders ?? defaultNativeLoaders(readNativeModuleRootEnv());
|
|
37
|
+
}
|
|
38
|
+
async createSession(language) {
|
|
39
|
+
let parser;
|
|
40
|
+
try {
|
|
41
|
+
const Parser = this.loaders.loadRuntime();
|
|
42
|
+
parser = new Parser();
|
|
43
|
+
parser.setLanguage(this.loaders.loadGrammar(language));
|
|
44
|
+
return new NativeParserSession(language, parser);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
parser?.delete?.();
|
|
48
|
+
throw new ParserInitializationError(language, this.runtime, error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
class NativeParserSession {
|
|
53
|
+
language;
|
|
54
|
+
parser;
|
|
55
|
+
runtime = 'native';
|
|
56
|
+
disposed = false;
|
|
57
|
+
constructor(language, parser) {
|
|
58
|
+
this.language = language;
|
|
59
|
+
this.parser = parser;
|
|
60
|
+
}
|
|
61
|
+
parse(code) {
|
|
62
|
+
if (this.disposed)
|
|
63
|
+
throw new Error(`${this.language} parser session has been disposed`);
|
|
64
|
+
const tree = this.parser.parse(code);
|
|
65
|
+
let disposed = false;
|
|
66
|
+
return {
|
|
67
|
+
rootNode: tree.rootNode,
|
|
68
|
+
dispose() {
|
|
69
|
+
if (disposed)
|
|
70
|
+
return;
|
|
71
|
+
disposed = true;
|
|
72
|
+
tree.delete?.();
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
dispose() {
|
|
77
|
+
if (this.disposed)
|
|
78
|
+
return;
|
|
79
|
+
this.disposed = true;
|
|
80
|
+
this.parser.delete?.();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export const nativeParserBackend = new NativeParserBackend();
|
|
84
|
+
//# sourceMappingURL=native-parser-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-parser-backend.js","sourceRoot":"","sources":["../../../src/plugins/shared/native-parser-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ParserRuntimeKind, ParserSession } from './syntax-tree.js';
|
|
2
|
+
export type ParserLanguage = 'go' | 'java' | 'python' | 'cpp' | 'kotlin';
|
|
3
|
+
export interface ParserBackend {
|
|
4
|
+
readonly runtime: ParserRuntimeKind;
|
|
5
|
+
createSession(language: ParserLanguage): Promise<ParserSession>;
|
|
6
|
+
}
|
|
7
|
+
export declare class ParserInitializationError extends Error {
|
|
8
|
+
readonly language: ParserLanguage;
|
|
9
|
+
readonly backend: string;
|
|
10
|
+
constructor(language: ParserLanguage, backend: string, cause: unknown);
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveParserBackend(kind?: ParserRuntimeKind): Promise<ParserBackend>;
|
|
13
|
+
//# sourceMappingURL=parser-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-backend.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/parser-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACjE;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAEhD,QAAQ,CAAC,QAAQ,EAAE,cAAc;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM;gBADf,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,MAAM,EACxB,KAAK,EAAE,OAAO;CAUjB;AAkBD,wBAAsB,oBAAoB,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ3F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export class ParserInitializationError extends Error {
|
|
2
|
+
language;
|
|
3
|
+
backend;
|
|
4
|
+
constructor(language, backend, cause) {
|
|
5
|
+
super(`Failed to initialize ${language} parser with ${backend} backend: ${cause instanceof Error ? cause.message : String(cause)}`, { cause });
|
|
6
|
+
this.language = language;
|
|
7
|
+
this.backend = backend;
|
|
8
|
+
this.name = 'ParserInitializationError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export async function resolveParserBackend(kind) {
|
|
12
|
+
const selected = kind ?? readRuntimeEnvOverride() ?? readBackendEnvOverride() ?? 'native';
|
|
13
|
+
if (selected === 'wasm') {
|
|
14
|
+
const { wasmParserBackend } = await import('./wasm-parser-backend.js');
|
|
15
|
+
return wasmParserBackend;
|
|
16
|
+
}
|
|
17
|
+
const { nativeParserBackend } = await import('./native-parser-backend.js');
|
|
18
|
+
return nativeParserBackend;
|
|
19
|
+
}
|
|
20
|
+
function readRuntimeEnvOverride() {
|
|
21
|
+
const raw = process.env.ARCHGUARD_PARSER_RUNTIME;
|
|
22
|
+
if (raw === undefined || raw === '')
|
|
23
|
+
return undefined;
|
|
24
|
+
if (raw === 'native' || raw === 'wasm')
|
|
25
|
+
return raw;
|
|
26
|
+
if (raw === 'auto')
|
|
27
|
+
return undefined;
|
|
28
|
+
throw new Error(`Invalid ARCHGUARD_PARSER_RUNTIME value "${raw}" (expected "auto", "native", or "wasm")`);
|
|
29
|
+
}
|
|
30
|
+
function readBackendEnvOverride() {
|
|
31
|
+
const raw = process.env.ARCHGUARD_PARSER_BACKEND;
|
|
32
|
+
if (raw === undefined || raw === '')
|
|
33
|
+
return undefined;
|
|
34
|
+
if (raw === 'native' || raw === 'wasm')
|
|
35
|
+
return raw;
|
|
36
|
+
throw new Error(`Invalid ARCHGUARD_PARSER_BACKEND value "${raw}" (expected "native" or "wasm")`);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=parser-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-backend.js","sourceRoot":"","sources":["../../../src/plugins/shared/parser-backend.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAEvC;IACA;IAFX,YACW,QAAwB,EACxB,OAAe,EACxB,KAAc;QAEd,KAAK,CACH,wBAAwB,QAAQ,gBAAgB,OAAO,aACrD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,EACF,EAAE,KAAK,EAAE,CACV,CAAC;QATO,aAAQ,GAAR,QAAQ,CAAgB;QACxB,YAAO,GAAP,OAAO,CAAQ;QASxB,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAkBD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAwB;IACjE,MAAM,QAAQ,GAAG,IAAI,IAAI,sBAAsB,EAAE,IAAI,sBAAsB,EAAE,IAAI,QAAQ,CAAC;IAC1F,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACvE,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAC3E,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,sBAAsB;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACjD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IACnD,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACrC,MAAM,IAAI,KAAK,CACb,2CAA2C,GAAG,0CAA0C,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACjD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtD,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,GAAG,CAAC;IACnD,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,iCAAiC,CAAC,CAAC;AACnG,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ParserBackend, ParserLanguage } from './parser-backend.js';
|
|
2
|
+
import { type NativeModuleLoaders } from './native-parser-backend.js';
|
|
3
|
+
import type { ParserRuntimeKind } from './syntax-tree.js';
|
|
4
|
+
import { type ParserRuntimePolicy } from '../../types/parser-runtime.js';
|
|
5
|
+
export { defaultNativeLoaders, readNativeModuleRootEnv, type NativeModuleLoaders, } from './native-parser-backend.js';
|
|
6
|
+
export declare function probeNativeBinding(language: ParserLanguage, loaders?: NativeModuleLoaders): void;
|
|
7
|
+
export declare function readParserRuntimePolicy(env?: NodeJS.ProcessEnv): ParserRuntimePolicy;
|
|
8
|
+
export declare function hasParserRuntimeEnvOverride(env?: NodeJS.ProcessEnv): boolean;
|
|
9
|
+
export type ParserRuntimeChoiceSource = 'default' | 'env' | 'config' | 'explicit';
|
|
10
|
+
export interface ParserBackendSelection {
|
|
11
|
+
readonly language: ParserLanguage;
|
|
12
|
+
readonly policy: ParserRuntimePolicy;
|
|
13
|
+
readonly source: ParserRuntimeChoiceSource;
|
|
14
|
+
readonly runtime: ParserRuntimeKind;
|
|
15
|
+
readonly backend: ParserBackend;
|
|
16
|
+
readonly fallbackReason?: string;
|
|
17
|
+
readonly diagnostic: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SelectParserBackendOptions {
|
|
20
|
+
policy?: ParserRuntimePolicy;
|
|
21
|
+
policySource?: 'config' | 'explicit';
|
|
22
|
+
nativeLoaders?: NativeModuleLoaders;
|
|
23
|
+
nativeModuleRoot?: string;
|
|
24
|
+
onDiagnostic?: (line: string, selection: ParserBackendSelection) => void;
|
|
25
|
+
}
|
|
26
|
+
export declare function getParserRuntimeDiagnostics(): readonly string[];
|
|
27
|
+
export declare function runtimeDiagnosticVisible(verbose: boolean, selection: {
|
|
28
|
+
fallbackReason?: string;
|
|
29
|
+
}): boolean;
|
|
30
|
+
export declare function resetParserBackendSelectionCache(): void;
|
|
31
|
+
export declare function selectParserBackendFor(language: ParserLanguage, options?: SelectParserBackendOptions): Promise<ParserBackendSelection>;
|
|
32
|
+
//# sourceMappingURL=parser-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-runtime.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/parser-runtime.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,EAML,KAAK,mBAAmB,EAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAE5F,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,KAAK,mBAAmB,GACzB,MAAM,4BAA4B,CAAC;AAsBpC,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,mBAAqE,GAC7E,IAAI,CA6CN;AAGD,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,mBAAmB,CAmBjG;AAGD,wBAAgB,2BAA2B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEzF;AAGD,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAErC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAEhC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAEjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IAEzC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAE7B,YAAY,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAErC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAEpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC1E;AAMD,wBAAgB,2BAA2B,IAAI,SAAS,MAAM,EAAE,CAE/D;AAOD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAET;AAeD,wBAAgB,gCAAgC,IAAI,IAAI,CAIvD;AAQD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,sBAAsB,CAAC,CAuBjC"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { ParserInitializationError } from './parser-backend.js';
|
|
2
|
+
import { NativeParserBackend, defaultNativeLoaders, nativeGrammarModule, nativeParserBackend, readNativeModuleRootEnv, } from './native-parser-backend.js';
|
|
3
|
+
import { isParserRuntimePolicy } from '../../types/parser-runtime.js';
|
|
4
|
+
export { defaultNativeLoaders, readNativeModuleRootEnv, } from './native-parser-backend.js';
|
|
5
|
+
const PROBE_FIXTURES = {
|
|
6
|
+
go: { code: 'package main\n', rootType: 'source_file' },
|
|
7
|
+
java: { code: 'class A {}\n', rootType: 'program' },
|
|
8
|
+
python: { code: 'x = 1\n', rootType: 'module' },
|
|
9
|
+
cpp: { code: 'int main() { return 0; }\n', rootType: 'translation_unit' },
|
|
10
|
+
kotlin: { code: 'fun main() {}\n', rootType: 'source_file' },
|
|
11
|
+
};
|
|
12
|
+
function errorMessage(error) {
|
|
13
|
+
return error instanceof Error ? error.message : String(error);
|
|
14
|
+
}
|
|
15
|
+
export function probeNativeBinding(language, loaders = defaultNativeLoaders(readNativeModuleRootEnv())) {
|
|
16
|
+
let Runtime;
|
|
17
|
+
try {
|
|
18
|
+
Runtime = loaders.loadRuntime();
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw new Error(`cannot load native tree-sitter runtime ("tree-sitter"): ${errorMessage(error)}`);
|
|
22
|
+
}
|
|
23
|
+
let grammar;
|
|
24
|
+
try {
|
|
25
|
+
grammar = loaders.loadGrammar(language);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new Error(`cannot load native ${language} grammar ("${nativeGrammarModule(language)}"): ${errorMessage(error)}`);
|
|
29
|
+
}
|
|
30
|
+
const fixture = PROBE_FIXTURES[language];
|
|
31
|
+
let parser;
|
|
32
|
+
try {
|
|
33
|
+
parser = new Runtime();
|
|
34
|
+
parser.setLanguage(grammar);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
parser?.delete?.();
|
|
38
|
+
throw new Error(`cannot bind native ${language} grammar to the tree-sitter runtime (ABI incompatibility?): ${errorMessage(error)}`);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const tree = parser.parse(fixture.code);
|
|
42
|
+
const rootType = tree?.rootNode?.type;
|
|
43
|
+
if (rootType !== fixture.rootType) {
|
|
44
|
+
throw new Error(`probe parsed unexpected root node ${JSON.stringify(rootType)} ` +
|
|
45
|
+
`(expected "${fixture.rootType}") — grammar/runtime mismatch`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error(`native ${language} parse health check failed: ${errorMessage(error)}`);
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
parser.delete?.();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function readParserRuntimePolicy(env = process.env) {
|
|
56
|
+
const runtime = env.ARCHGUARD_PARSER_RUNTIME;
|
|
57
|
+
if (runtime !== undefined && runtime !== '') {
|
|
58
|
+
if (isParserRuntimePolicy(runtime))
|
|
59
|
+
return runtime;
|
|
60
|
+
throw new Error(`Invalid ARCHGUARD_PARSER_RUNTIME value "${runtime}" (expected "auto", "native", or "wasm")`);
|
|
61
|
+
}
|
|
62
|
+
const backend = env.ARCHGUARD_PARSER_BACKEND;
|
|
63
|
+
if (backend !== undefined && backend !== '') {
|
|
64
|
+
emitDeprecatedAliasWarning();
|
|
65
|
+
if (backend === 'native' || backend === 'wasm')
|
|
66
|
+
return backend;
|
|
67
|
+
throw new Error(`Invalid ARCHGUARD_PARSER_BACKEND value "${backend}" (expected "native" or "wasm")`);
|
|
68
|
+
}
|
|
69
|
+
return 'auto';
|
|
70
|
+
}
|
|
71
|
+
export function hasParserRuntimeEnvOverride(env = process.env) {
|
|
72
|
+
return Boolean(env.ARCHGUARD_PARSER_RUNTIME || env.ARCHGUARD_PARSER_BACKEND);
|
|
73
|
+
}
|
|
74
|
+
const selectionCache = new Map();
|
|
75
|
+
const diagnosticsLog = [];
|
|
76
|
+
export function getParserRuntimeDiagnostics() {
|
|
77
|
+
return diagnosticsLog;
|
|
78
|
+
}
|
|
79
|
+
export function runtimeDiagnosticVisible(verbose, selection) {
|
|
80
|
+
return verbose || selection.fallbackReason !== undefined;
|
|
81
|
+
}
|
|
82
|
+
let deprecatedAliasWarningEmitted = false;
|
|
83
|
+
function emitDeprecatedAliasWarning() {
|
|
84
|
+
if (deprecatedAliasWarningEmitted)
|
|
85
|
+
return;
|
|
86
|
+
deprecatedAliasWarningEmitted = true;
|
|
87
|
+
console.error('[parser-runtime] WARNING: ARCHGUARD_PARSER_BACKEND is deprecated and will be removed in a ' +
|
|
88
|
+
'future release; use the canonical ARCHGUARD_PARSER_RUNTIME (auto|native|wasm) instead.');
|
|
89
|
+
}
|
|
90
|
+
export function resetParserBackendSelectionCache() {
|
|
91
|
+
selectionCache.clear();
|
|
92
|
+
diagnosticsLog.length = 0;
|
|
93
|
+
deprecatedAliasWarningEmitted = false;
|
|
94
|
+
}
|
|
95
|
+
export async function selectParserBackendFor(language, options = {}) {
|
|
96
|
+
const policy = options.policy ?? readParserRuntimePolicy();
|
|
97
|
+
const source = options.policy !== undefined
|
|
98
|
+
? (options.policySource ?? 'explicit')
|
|
99
|
+
: hasParserRuntimeEnvOverride()
|
|
100
|
+
? 'env'
|
|
101
|
+
: 'default';
|
|
102
|
+
const cacheable = options.nativeLoaders === undefined && options.nativeModuleRoot === undefined;
|
|
103
|
+
if (!cacheable) {
|
|
104
|
+
return computeSelection(language, policy, options, source);
|
|
105
|
+
}
|
|
106
|
+
const key = `${policy}:${language}`;
|
|
107
|
+
const cached = selectionCache.get(key);
|
|
108
|
+
if (cached !== undefined) {
|
|
109
|
+
return cached;
|
|
110
|
+
}
|
|
111
|
+
const selection = computeSelection(language, policy, options, source);
|
|
112
|
+
selectionCache.set(key, selection);
|
|
113
|
+
selection.catch(() => selectionCache.delete(key));
|
|
114
|
+
return selection;
|
|
115
|
+
}
|
|
116
|
+
async function computeSelection(language, policy, options, source) {
|
|
117
|
+
if (policy === 'wasm') {
|
|
118
|
+
const { wasmParserBackend } = await import('./wasm-parser-backend.js');
|
|
119
|
+
return finishSelection({ language, policy, runtime: 'wasm', backend: wasmParserBackend }, source, options);
|
|
120
|
+
}
|
|
121
|
+
const moduleRoot = options.nativeModuleRoot ?? readNativeModuleRootEnv();
|
|
122
|
+
const loaders = options.nativeLoaders ?? (moduleRoot ? defaultNativeLoaders(moduleRoot) : undefined);
|
|
123
|
+
try {
|
|
124
|
+
probeNativeBinding(language, loaders ?? defaultNativeLoaders());
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const reason = errorMessage(error);
|
|
128
|
+
if (policy === 'native') {
|
|
129
|
+
throw new ParserInitializationError(language, 'native', new Error(`${reason}\n` +
|
|
130
|
+
`Native tree-sitter is required by policy (ARCHGUARD_PARSER_RUNTIME=native). ` +
|
|
131
|
+
`Install the optional native accelerator packages ("tree-sitter" and ` +
|
|
132
|
+
`"${nativeGrammarModule(language)}") into ArchGuard's own package scope, or set ` +
|
|
133
|
+
`ARCHGUARD_NATIVE_MODULE_ROOT to a trusted module root containing them, or relax ` +
|
|
134
|
+
`the policy to ARCHGUARD_PARSER_RUNTIME=auto|wasm.`));
|
|
135
|
+
}
|
|
136
|
+
const { wasmParserBackend } = await import('./wasm-parser-backend.js');
|
|
137
|
+
return finishSelection({ language, policy, runtime: 'wasm', backend: wasmParserBackend, fallbackReason: reason }, source, options);
|
|
138
|
+
}
|
|
139
|
+
const backend = loaders ? new NativeParserBackend({ loaders }) : nativeParserBackend;
|
|
140
|
+
return finishSelection({ language, policy, runtime: 'native', backend }, source, options);
|
|
141
|
+
}
|
|
142
|
+
function finishSelection(selection, source, options) {
|
|
143
|
+
const diagnostic = selection.fallbackReason
|
|
144
|
+
? `[parser-runtime] ${selection.language}: policy=${selection.policy} source=${source} -> ` +
|
|
145
|
+
`${selection.runtime} (native probe failed: ${selection.fallbackReason})`
|
|
146
|
+
: `[parser-runtime] ${selection.language}: policy=${selection.policy} source=${source} -> ${selection.runtime}`;
|
|
147
|
+
diagnosticsLog.push(diagnostic);
|
|
148
|
+
const full = { ...selection, source, diagnostic };
|
|
149
|
+
options.onDiagnostic?.(diagnostic, full);
|
|
150
|
+
return full;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=parser-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-runtime.js","sourceRoot":"","sources":["../../../src/plugins/shared/parser-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ILanguagePlugin } from '../../core/interfaces/language-plugin.js';
|
|
2
|
+
import type { ParserLanguage } from './parser-backend.js';
|
|
3
|
+
import { type SelectParserBackendOptions } from './parser-runtime.js';
|
|
4
|
+
export declare function createLanguagePlugin(language: ParserLanguage, options?: SelectParserBackendOptions): Promise<ILanguagePlugin>;
|
|
5
|
+
//# sourceMappingURL=plugin-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-factory.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/plugin-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAA0B,KAAK,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAG9F,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { selectParserBackendFor } from './parser-runtime.js';
|
|
2
|
+
export async function createLanguagePlugin(language, options = {}) {
|
|
3
|
+
const { backend } = await selectParserBackendFor(language, options);
|
|
4
|
+
switch (language) {
|
|
5
|
+
case 'go': {
|
|
6
|
+
const { GoAtlasPlugin } = await import('../../plugins/golang/atlas/index.js');
|
|
7
|
+
return new GoAtlasPlugin(backend);
|
|
8
|
+
}
|
|
9
|
+
case 'java': {
|
|
10
|
+
const { JavaPlugin } = await import('../../plugins/java/index.js');
|
|
11
|
+
return new JavaPlugin(backend);
|
|
12
|
+
}
|
|
13
|
+
case 'python': {
|
|
14
|
+
const { PythonPlugin } = await import('../../plugins/python/index.js');
|
|
15
|
+
return new PythonPlugin(backend);
|
|
16
|
+
}
|
|
17
|
+
case 'cpp': {
|
|
18
|
+
const { CppPlugin } = await import('../../plugins/cpp/index.js');
|
|
19
|
+
return new CppPlugin(backend);
|
|
20
|
+
}
|
|
21
|
+
case 'kotlin': {
|
|
22
|
+
const { KotlinPlugin } = await import('../../plugins/kotlin/index.js');
|
|
23
|
+
return new KotlinPlugin(backend);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=plugin-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-factory.js","sourceRoot":"","sources":["../../../src/plugins/shared/plugin-factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAmC,MAAM,qBAAqB,CAAC;AAG9F,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAwB,EACxB,UAAsC,EAAE;IAExC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC1E,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAC/D,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACnE,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YAC7D,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACnE,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type ParserRuntimeKind = 'native' | 'wasm';
|
|
2
|
+
export interface SyntaxPointLike {
|
|
3
|
+
readonly row: number;
|
|
4
|
+
readonly column: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SyntaxNodeLike {
|
|
7
|
+
readonly type: string;
|
|
8
|
+
readonly text: string;
|
|
9
|
+
readonly startIndex: number;
|
|
10
|
+
readonly endIndex: number;
|
|
11
|
+
readonly startPosition: SyntaxPointLike;
|
|
12
|
+
readonly endPosition: SyntaxPointLike;
|
|
13
|
+
readonly isNamed: boolean;
|
|
14
|
+
readonly parent: SyntaxNodeLike | null;
|
|
15
|
+
readonly children: SyntaxNodeLike[];
|
|
16
|
+
readonly namedChildren: SyntaxNodeLike[];
|
|
17
|
+
readonly namedChildCount: number;
|
|
18
|
+
namedChild(index: number): SyntaxNodeLike | null;
|
|
19
|
+
childForFieldName(name: string): SyntaxNodeLike | null;
|
|
20
|
+
descendantsOfType(type: string | string[]): SyntaxNodeLike[];
|
|
21
|
+
}
|
|
22
|
+
export interface SyntaxTreeLike {
|
|
23
|
+
readonly rootNode: SyntaxNodeLike;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
}
|
|
26
|
+
export interface ParserSession {
|
|
27
|
+
readonly language: string;
|
|
28
|
+
readonly runtime: ParserRuntimeKind;
|
|
29
|
+
parse(code: string): SyntaxTreeLike;
|
|
30
|
+
dispose(): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=syntax-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-tree.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/syntax-tree.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IACjD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IACvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IACpC,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-tree.js","sourceRoot":"","sources":["../../../src/plugins/shared/syntax-tree.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParserBackend, ParserLanguage } from './parser-backend.js';
|
|
2
|
+
import type { ParserSession } from './syntax-tree.js';
|
|
3
|
+
export interface WasmParserBackendOptions {
|
|
4
|
+
assetsDir?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function resetWasmParserRuntimeCache(): void;
|
|
7
|
+
export declare class WasmParserBackend implements ParserBackend {
|
|
8
|
+
readonly runtime: "wasm";
|
|
9
|
+
private readonly assetsDir;
|
|
10
|
+
private readonly cache;
|
|
11
|
+
constructor(options?: WasmParserBackendOptions);
|
|
12
|
+
get cachedLanguageCount(): number;
|
|
13
|
+
createSession(language: ParserLanguage): Promise<ParserSession>;
|
|
14
|
+
private initializeRuntime;
|
|
15
|
+
private loadLanguage;
|
|
16
|
+
}
|
|
17
|
+
export declare const wasmParserBackend: WasmParserBackend;
|
|
18
|
+
//# sourceMappingURL=wasm-parser-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-parser-backend.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/wasm-parser-backend.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAkC,MAAM,kBAAkB,CAAC;AAkDtF,MAAM,WAAW,wBAAwB;IAMvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmBD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAU;IAEnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;gBAE7B,OAAO,GAAE,wBAA6B;IAWlD,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAEK,aAAa,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAgBrE,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,YAAY;CAmBrB;AAiCD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { ParserInitializationError } from './parser-backend.js';
|
|
5
|
+
const GRAMMAR_WASM_FILES = {
|
|
6
|
+
go: 'tree-sitter-go.wasm',
|
|
7
|
+
java: 'tree-sitter-java.wasm',
|
|
8
|
+
python: 'tree-sitter-python.wasm',
|
|
9
|
+
cpp: 'tree-sitter-cpp.wasm',
|
|
10
|
+
kotlin: 'tree-sitter-kotlin.wasm',
|
|
11
|
+
};
|
|
12
|
+
const RUNTIME_WASM_FILE = 'tree-sitter.wasm';
|
|
13
|
+
function defaultAssetsDir() {
|
|
14
|
+
return fileURLToPath(new URL('../../../assets/grammars/', import.meta.url));
|
|
15
|
+
}
|
|
16
|
+
const runtimeCaches = new Map();
|
|
17
|
+
export function resetWasmParserRuntimeCache() {
|
|
18
|
+
runtimeCaches.clear();
|
|
19
|
+
}
|
|
20
|
+
export class WasmParserBackend {
|
|
21
|
+
runtime = 'wasm';
|
|
22
|
+
assetsDir;
|
|
23
|
+
cache;
|
|
24
|
+
constructor(options = {}) {
|
|
25
|
+
this.assetsDir = path.resolve(options.assetsDir ?? defaultAssetsDir());
|
|
26
|
+
let cache = runtimeCaches.get(this.assetsDir);
|
|
27
|
+
if (!cache) {
|
|
28
|
+
cache = { languagePromises: new Map() };
|
|
29
|
+
runtimeCaches.set(this.assetsDir, cache);
|
|
30
|
+
}
|
|
31
|
+
this.cache = cache;
|
|
32
|
+
}
|
|
33
|
+
get cachedLanguageCount() {
|
|
34
|
+
return this.cache.languagePromises.size;
|
|
35
|
+
}
|
|
36
|
+
async createSession(language) {
|
|
37
|
+
let parser;
|
|
38
|
+
try {
|
|
39
|
+
const wts = await this.initializeRuntime();
|
|
40
|
+
const loadedLanguage = await this.loadLanguage(wts, language);
|
|
41
|
+
parser = new wts.Parser();
|
|
42
|
+
parser.setLanguage(loadedLanguage);
|
|
43
|
+
return new WasmParserSession(language, parser);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (error instanceof ParserInitializationError)
|
|
47
|
+
throw error;
|
|
48
|
+
parser?.delete();
|
|
49
|
+
throw new ParserInitializationError(language, this.runtime, error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
initializeRuntime() {
|
|
53
|
+
if (this.cache.modulePromise)
|
|
54
|
+
return this.cache.modulePromise;
|
|
55
|
+
const initialized = (async () => {
|
|
56
|
+
const wts = (await import('web-tree-sitter'));
|
|
57
|
+
const runtimePath = path.join(this.assetsDir, RUNTIME_WASM_FILE);
|
|
58
|
+
const locateFile = existsSync(runtimePath) ? { locateFile: () => runtimePath } : undefined;
|
|
59
|
+
await wts.Parser.init(locateFile);
|
|
60
|
+
return wts;
|
|
61
|
+
})();
|
|
62
|
+
initialized.catch(() => {
|
|
63
|
+
if (this.cache.modulePromise === initialized)
|
|
64
|
+
this.cache.modulePromise = undefined;
|
|
65
|
+
});
|
|
66
|
+
this.cache.modulePromise ??= initialized;
|
|
67
|
+
return this.cache.modulePromise;
|
|
68
|
+
}
|
|
69
|
+
loadLanguage(wts, language) {
|
|
70
|
+
if (this.cache.languagePromises.has(language)) {
|
|
71
|
+
return this.cache.languagePromises.get(language);
|
|
72
|
+
}
|
|
73
|
+
const loaded = (async () => {
|
|
74
|
+
const grammarPath = path.join(this.assetsDir, GRAMMAR_WASM_FILES[language]);
|
|
75
|
+
if (!existsSync(grammarPath)) {
|
|
76
|
+
throw new Error(`bundled ${language} grammar WASM not found at ${grammarPath} ` +
|
|
77
|
+
`(rebuild with: node scripts/fetch-grammar-wasms.mjs --update)`);
|
|
78
|
+
}
|
|
79
|
+
return wts.Language.load(grammarPath);
|
|
80
|
+
})();
|
|
81
|
+
loaded.catch(() => this.cache.languagePromises.delete(language));
|
|
82
|
+
this.cache.languagePromises.set(language, loaded);
|
|
83
|
+
return loaded;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
class WasmParserSession {
|
|
87
|
+
language;
|
|
88
|
+
parser;
|
|
89
|
+
runtime = 'wasm';
|
|
90
|
+
disposed = false;
|
|
91
|
+
constructor(language, parser) {
|
|
92
|
+
this.language = language;
|
|
93
|
+
this.parser = parser;
|
|
94
|
+
}
|
|
95
|
+
parse(code) {
|
|
96
|
+
if (this.disposed)
|
|
97
|
+
throw new Error(`${this.language} parser session has been disposed`);
|
|
98
|
+
const tree = this.parser.parse(code);
|
|
99
|
+
let disposed = false;
|
|
100
|
+
return {
|
|
101
|
+
rootNode: tree.rootNode,
|
|
102
|
+
dispose() {
|
|
103
|
+
if (disposed)
|
|
104
|
+
return;
|
|
105
|
+
disposed = true;
|
|
106
|
+
tree.delete();
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
dispose() {
|
|
111
|
+
if (this.disposed)
|
|
112
|
+
return;
|
|
113
|
+
this.disposed = true;
|
|
114
|
+
this.parser.delete();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export const wasmParserBackend = new WasmParserBackend();
|
|
118
|
+
//# sourceMappingURL=wasm-parser-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-parser-backend.js","sourceRoot":"","sources":["../../../src/plugins/shared/wasm-parser-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-graph-builder.d.ts","sourceRoot":"","sources":["../../../../src/plugins/typescript/builders/module-graph-builder.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,qBAAa,kBAAkB;IAQ7B,KAAK,CACH,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,aAAa;
|
|
1
|
+
{"version":3,"file":"module-graph-builder.d.ts","sourceRoot":"","sources":["../../../../src/plugins/typescript/builders/module-graph-builder.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EACV,aAAa,EAId,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAQ/C,qBAAa,kBAAkB;IAQ7B,KAAK,CACH,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,aAAa;IAqLhB,OAAO,CAAC,YAAY;CAmErB"}
|
|
@@ -88,9 +88,10 @@ export class ModuleGraphBuilder {
|
|
|
88
88
|
entityStatsMap.set(moduleId, { classes: 0, interfaces: 0, functions: 0, enums: 0 });
|
|
89
89
|
}
|
|
90
90
|
for (const entity of entities) {
|
|
91
|
-
const
|
|
91
|
+
const rawDir = path
|
|
92
92
|
.dirname(entity.id.split('.').slice(0, -1).join('.'))
|
|
93
93
|
.replace(/\\/g, '/');
|
|
94
|
+
const entityDir = rawDir === '.' ? '' : rawDir;
|
|
94
95
|
const stats = entityStatsMap.get(entityDir);
|
|
95
96
|
if (stats) {
|
|
96
97
|
if (entity.type === 'class')
|