@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.
Files changed (298) hide show
  1. package/README.md +106 -19
  2. package/assets/grammars/benchmarks.md +101 -0
  3. package/assets/grammars/checksums.json +8 -0
  4. package/{node_modules/tree-sitter/LICENSE → assets/grammars/licenses/tree-sitter-cpp.LICENSE} +2 -2
  5. package/{node_modules/node-gyp-build/LICENSE → assets/grammars/licenses/tree-sitter-go.LICENSE} +5 -5
  6. package/assets/grammars/licenses/tree-sitter-java.LICENSE +21 -0
  7. package/assets/grammars/licenses/tree-sitter-kotlin.LICENSE +21 -0
  8. package/assets/grammars/licenses/tree-sitter-python.LICENSE +21 -0
  9. package/assets/grammars/licenses/tree-sitter.LICENSE +21 -0
  10. package/assets/grammars/provenance.json +66 -0
  11. package/assets/grammars/tree-sitter-cpp.wasm +0 -0
  12. package/assets/grammars/tree-sitter-go.wasm +0 -0
  13. package/assets/grammars/tree-sitter-java.wasm +0 -0
  14. package/assets/grammars/tree-sitter-kotlin.wasm +0 -0
  15. package/assets/grammars/tree-sitter-python.wasm +0 -0
  16. package/assets/grammars/tree-sitter.wasm +0 -0
  17. package/dist/analysis/fitness/rule-types.d.ts +1 -33
  18. package/dist/analysis/fitness/rule-types.d.ts.map +1 -1
  19. package/dist/cli/analyze/run-analysis.d.ts +4 -0
  20. package/dist/cli/analyze/run-analysis.d.ts.map +1 -1
  21. package/dist/cli/analyze/run-analysis.js +63 -43
  22. package/dist/cli/analyze/run-analysis.js.map +1 -1
  23. package/dist/cli/cache/cache-manager.js +1 -1
  24. package/dist/cli/cache/cache-manager.js.map +1 -1
  25. package/dist/cli/mcp/analyze-tool.d.ts +2 -0
  26. package/dist/cli/mcp/analyze-tool.d.ts.map +1 -1
  27. package/dist/cli/mcp/analyze-tool.js +5 -0
  28. package/dist/cli/mcp/analyze-tool.js.map +1 -1
  29. package/dist/cli/mcp/mcp-server.d.ts +7 -2
  30. package/dist/cli/mcp/mcp-server.d.ts.map +1 -1
  31. package/dist/cli/mcp/mcp-server.js +37 -3
  32. package/dist/cli/mcp/mcp-server.js.map +1 -1
  33. package/dist/cli/processors/arch-json-provider-types.d.ts +5 -0
  34. package/dist/cli/processors/arch-json-provider-types.d.ts.map +1 -1
  35. package/dist/cli/processors/arch-json-provider.d.ts +5 -0
  36. package/dist/cli/processors/arch-json-provider.d.ts.map +1 -1
  37. package/dist/cli/processors/arch-json-provider.js +104 -55
  38. package/dist/cli/processors/arch-json-provider.js.map +1 -1
  39. package/dist/cli/processors/arch-json-utils.d.ts.map +1 -1
  40. package/dist/cli/processors/arch-json-utils.js +12 -3
  41. package/dist/cli/processors/arch-json-utils.js.map +1 -1
  42. package/dist/cli/processors/diagram-processor.d.ts +4 -0
  43. package/dist/cli/processors/diagram-processor.d.ts.map +1 -1
  44. package/dist/cli/processors/diagram-processor.js +2 -0
  45. package/dist/cli/processors/diagram-processor.js.map +1 -1
  46. package/dist/cli/processors/worker-pool-factory.d.ts +3 -0
  47. package/dist/cli/processors/worker-pool-factory.d.ts.map +1 -1
  48. package/dist/cli/processors/worker-pool-factory.js +9 -0
  49. package/dist/cli/processors/worker-pool-factory.js.map +1 -1
  50. package/dist/mermaid/generator.d.ts.map +1 -1
  51. package/dist/mermaid/generator.js +19 -1
  52. package/dist/mermaid/generator.js.map +1 -1
  53. package/dist/mermaid/renderer.d.ts.map +1 -1
  54. package/dist/mermaid/renderer.js +1 -1
  55. package/dist/mermaid/renderer.js.map +1 -1
  56. package/dist/mermaid/test-coverage-renderer.d.ts.map +1 -1
  57. package/dist/mermaid/test-coverage-renderer.js +18 -12
  58. package/dist/mermaid/test-coverage-renderer.js.map +1 -1
  59. package/dist/parser/archjson-aggregator.js +1 -1
  60. package/dist/parser/archjson-aggregator.js.map +1 -1
  61. package/dist/parser/parallel-parser.d.ts +10 -0
  62. package/dist/parser/parallel-parser.d.ts.map +1 -1
  63. package/dist/parser/parallel-parser.js +76 -35
  64. package/dist/parser/parallel-parser.js.map +1 -1
  65. package/dist/parser/parse-worker-pool.d.ts +59 -0
  66. package/dist/parser/parse-worker-pool.d.ts.map +1 -0
  67. package/dist/parser/parse-worker-pool.js +170 -0
  68. package/dist/parser/parse-worker-pool.js.map +1 -0
  69. package/dist/parser/parse-worker.d.ts +2 -0
  70. package/dist/parser/parse-worker.d.ts.map +1 -0
  71. package/dist/parser/parse-worker.js +71 -0
  72. package/dist/parser/parse-worker.js.map +1 -0
  73. package/dist/parser/process-parse-worker-pools.d.ts +18 -0
  74. package/dist/parser/process-parse-worker-pools.d.ts.map +1 -0
  75. package/dist/parser/process-parse-worker-pools.js +31 -0
  76. package/dist/parser/process-parse-worker-pools.js.map +1 -0
  77. package/dist/plugins/cpp/builders/class-builder.d.ts +2 -2
  78. package/dist/plugins/cpp/builders/class-builder.d.ts.map +1 -1
  79. package/dist/plugins/cpp/builders/class-builder.js.map +1 -1
  80. package/dist/plugins/cpp/index.d.ts +4 -1
  81. package/dist/plugins/cpp/index.d.ts.map +1 -1
  82. package/dist/plugins/cpp/index.js +11 -2
  83. package/dist/plugins/cpp/index.js.map +1 -1
  84. package/dist/plugins/cpp/tree-sitter-bridge.d.ts +3 -2
  85. package/dist/plugins/cpp/tree-sitter-bridge.d.ts.map +1 -1
  86. package/dist/plugins/cpp/tree-sitter-bridge.js +17 -15
  87. package/dist/plugins/cpp/tree-sitter-bridge.js.map +1 -1
  88. package/dist/plugins/golang/builders/function-builder.d.ts +4 -4
  89. package/dist/plugins/golang/builders/function-builder.d.ts.map +1 -1
  90. package/dist/plugins/golang/builders/function-builder.js.map +1 -1
  91. package/dist/plugins/golang/builders/goroutine-builder.d.ts +2 -2
  92. package/dist/plugins/golang/builders/goroutine-builder.d.ts.map +1 -1
  93. package/dist/plugins/golang/builders/goroutine-builder.js.map +1 -1
  94. package/dist/plugins/golang/builders/interface-builder.d.ts +4 -4
  95. package/dist/plugins/golang/builders/interface-builder.d.ts.map +1 -1
  96. package/dist/plugins/golang/builders/interface-builder.js.map +1 -1
  97. package/dist/plugins/golang/builders/node-utils.d.ts +3 -3
  98. package/dist/plugins/golang/builders/node-utils.d.ts.map +1 -1
  99. package/dist/plugins/golang/builders/node-utils.js.map +1 -1
  100. package/dist/plugins/golang/builders/struct-builder.d.ts +2 -2
  101. package/dist/plugins/golang/builders/struct-builder.d.ts.map +1 -1
  102. package/dist/plugins/golang/builders/struct-builder.js.map +1 -1
  103. package/dist/plugins/golang/go-parse-coordinator.d.ts +10 -2
  104. package/dist/plugins/golang/go-parse-coordinator.d.ts.map +1 -1
  105. package/dist/plugins/golang/go-parse-coordinator.js +44 -6
  106. package/dist/plugins/golang/go-parse-coordinator.js.map +1 -1
  107. package/dist/plugins/golang/gopls-client.d.ts +31 -2
  108. package/dist/plugins/golang/gopls-client.d.ts.map +1 -1
  109. package/dist/plugins/golang/gopls-client.js +230 -32
  110. package/dist/plugins/golang/gopls-client.js.map +1 -1
  111. package/dist/plugins/golang/gopls-interface-resolver.d.ts +14 -1
  112. package/dist/plugins/golang/gopls-interface-resolver.d.ts.map +1 -1
  113. package/dist/plugins/golang/gopls-interface-resolver.js +42 -11
  114. package/dist/plugins/golang/gopls-interface-resolver.js.map +1 -1
  115. package/dist/plugins/golang/index.d.ts +3 -1
  116. package/dist/plugins/golang/index.d.ts.map +1 -1
  117. package/dist/plugins/golang/index.js +17 -3
  118. package/dist/plugins/golang/index.js.map +1 -1
  119. package/dist/plugins/golang/interface-matcher.d.ts.map +1 -1
  120. package/dist/plugins/golang/interface-matcher.js +32 -30
  121. package/dist/plugins/golang/interface-matcher.js.map +1 -1
  122. package/dist/plugins/golang/tree-sitter-bridge.d.ts +3 -2
  123. package/dist/plugins/golang/tree-sitter-bridge.d.ts.map +1 -1
  124. package/dist/plugins/golang/tree-sitter-bridge.js +25 -23
  125. package/dist/plugins/golang/tree-sitter-bridge.js.map +1 -1
  126. package/dist/plugins/java/index.d.ts +4 -0
  127. package/dist/plugins/java/index.d.ts.map +1 -1
  128. package/dist/plugins/java/index.js +12 -1
  129. package/dist/plugins/java/index.js.map +1 -1
  130. package/dist/plugins/java/tree-sitter-bridge.d.ts +3 -2
  131. package/dist/plugins/java/tree-sitter-bridge.d.ts.map +1 -1
  132. package/dist/plugins/java/tree-sitter-bridge.js +33 -31
  133. package/dist/plugins/java/tree-sitter-bridge.js.map +1 -1
  134. package/dist/plugins/kotlin/builders/class-builder.d.ts +2 -1
  135. package/dist/plugins/kotlin/builders/class-builder.d.ts.map +1 -1
  136. package/dist/plugins/kotlin/builders/class-builder.js.map +1 -1
  137. package/dist/plugins/kotlin/builders/function-builder.d.ts +2 -1
  138. package/dist/plugins/kotlin/builders/function-builder.d.ts.map +1 -1
  139. package/dist/plugins/kotlin/builders/function-builder.js.map +1 -1
  140. package/dist/plugins/kotlin/index.d.ts +4 -1
  141. package/dist/plugins/kotlin/index.d.ts.map +1 -1
  142. package/dist/plugins/kotlin/index.js +12 -4
  143. package/dist/plugins/kotlin/index.js.map +1 -1
  144. package/dist/plugins/kotlin/tree-sitter-bridge.d.ts +3 -3
  145. package/dist/plugins/kotlin/tree-sitter-bridge.d.ts.map +1 -1
  146. package/dist/plugins/kotlin/tree-sitter-bridge.js +6 -7
  147. package/dist/plugins/kotlin/tree-sitter-bridge.js.map +1 -1
  148. package/dist/plugins/python/index.d.ts +4 -0
  149. package/dist/plugins/python/index.d.ts.map +1 -1
  150. package/dist/plugins/python/index.js +12 -1
  151. package/dist/plugins/python/index.js.map +1 -1
  152. package/dist/plugins/python/tree-sitter-bridge.d.ts +3 -2
  153. package/dist/plugins/python/tree-sitter-bridge.d.ts.map +1 -1
  154. package/dist/plugins/python/tree-sitter-bridge.js +50 -48
  155. package/dist/plugins/python/tree-sitter-bridge.js.map +1 -1
  156. package/dist/plugins/shared/native-parser-backend.d.ts +33 -0
  157. package/dist/plugins/shared/native-parser-backend.d.ts.map +1 -0
  158. package/dist/plugins/shared/native-parser-backend.js +84 -0
  159. package/dist/plugins/shared/native-parser-backend.js.map +1 -0
  160. package/dist/plugins/shared/parser-backend.d.ts +13 -0
  161. package/dist/plugins/shared/parser-backend.d.ts.map +1 -0
  162. package/dist/plugins/shared/parser-backend.js +38 -0
  163. package/dist/plugins/shared/parser-backend.js.map +1 -0
  164. package/dist/plugins/shared/parser-runtime.d.ts +32 -0
  165. package/dist/plugins/shared/parser-runtime.d.ts.map +1 -0
  166. package/dist/plugins/shared/parser-runtime.js +152 -0
  167. package/dist/plugins/shared/parser-runtime.js.map +1 -0
  168. package/dist/plugins/shared/plugin-factory.d.ts +5 -0
  169. package/dist/plugins/shared/plugin-factory.d.ts.map +1 -0
  170. package/dist/plugins/shared/plugin-factory.js +27 -0
  171. package/dist/plugins/shared/plugin-factory.js.map +1 -0
  172. package/dist/plugins/shared/syntax-tree.d.ts +32 -0
  173. package/dist/plugins/shared/syntax-tree.d.ts.map +1 -0
  174. package/dist/plugins/shared/syntax-tree.js +2 -0
  175. package/dist/plugins/shared/syntax-tree.js.map +1 -0
  176. package/dist/plugins/shared/wasm-parser-backend.d.ts +18 -0
  177. package/dist/plugins/shared/wasm-parser-backend.d.ts.map +1 -0
  178. package/dist/plugins/shared/wasm-parser-backend.js +118 -0
  179. package/dist/plugins/shared/wasm-parser-backend.js.map +1 -0
  180. package/dist/plugins/typescript/builders/module-graph-builder.d.ts.map +1 -1
  181. package/dist/plugins/typescript/builders/module-graph-builder.js +2 -1
  182. package/dist/plugins/typescript/builders/module-graph-builder.js.map +1 -1
  183. package/dist/types/config-global.d.ts +7 -1
  184. package/dist/types/config-global.d.ts.map +1 -1
  185. package/dist/types/config.d.ts +1 -0
  186. package/dist/types/config.d.ts.map +1 -1
  187. package/dist/types/config.js +1 -0
  188. package/dist/types/config.js.map +1 -1
  189. package/dist/types/fitness-rules.d.ts +34 -0
  190. package/dist/types/fitness-rules.d.ts.map +1 -0
  191. package/dist/types/fitness-rules.js +2 -0
  192. package/dist/types/fitness-rules.js.map +1 -0
  193. package/dist/types/parser-runtime.d.ts +4 -0
  194. package/dist/types/parser-runtime.d.ts.map +1 -0
  195. package/dist/types/parser-runtime.js +5 -0
  196. package/dist/types/parser-runtime.js.map +1 -0
  197. package/package.json +29 -16
  198. package/node_modules/node-addon-api/LICENSE.md +0 -9
  199. package/node_modules/node-addon-api/README.md +0 -95
  200. package/node_modules/node-addon-api/common.gypi +0 -21
  201. package/node_modules/node-addon-api/except.gypi +0 -25
  202. package/node_modules/node-addon-api/index.js +0 -14
  203. package/node_modules/node-addon-api/napi-inl.deprecated.h +0 -186
  204. package/node_modules/node-addon-api/napi-inl.h +0 -7033
  205. package/node_modules/node-addon-api/napi.h +0 -3309
  206. package/node_modules/node-addon-api/node_addon_api.gyp +0 -42
  207. package/node_modules/node-addon-api/node_api.gyp +0 -9
  208. package/node_modules/node-addon-api/noexcept.gypi +0 -26
  209. package/node_modules/node-addon-api/nothing.c +0 -0
  210. package/node_modules/node-addon-api/package-support.json +0 -21
  211. package/node_modules/node-addon-api/package.json +0 -480
  212. package/node_modules/node-addon-api/tools/README.md +0 -73
  213. package/node_modules/node-addon-api/tools/check-napi.js +0 -99
  214. package/node_modules/node-addon-api/tools/clang-format.js +0 -71
  215. package/node_modules/node-addon-api/tools/conversion.js +0 -301
  216. package/node_modules/node-gyp-build/README.md +0 -58
  217. package/node_modules/node-gyp-build/SECURITY.md +0 -5
  218. package/node_modules/node-gyp-build/bin.js +0 -84
  219. package/node_modules/node-gyp-build/build-test.js +0 -19
  220. package/node_modules/node-gyp-build/index.js +0 -6
  221. package/node_modules/node-gyp-build/node-gyp-build.js +0 -207
  222. package/node_modules/node-gyp-build/optional.js +0 -7
  223. package/node_modules/node-gyp-build/package.json +0 -43
  224. package/node_modules/tree-sitter/README.md +0 -128
  225. package/node_modules/tree-sitter/binding.gyp +0 -80
  226. package/node_modules/tree-sitter/index.js +0 -916
  227. package/node_modules/tree-sitter/package.json +0 -76
  228. package/node_modules/tree-sitter/prebuilds/linux-x64/node.napi.glibc.node +0 -0
  229. package/node_modules/tree-sitter/src/addon_data.h +0 -47
  230. package/node_modules/tree-sitter/src/binding.cc +0 -35
  231. package/node_modules/tree-sitter/src/conversions.cc +0 -140
  232. package/node_modules/tree-sitter/src/conversions.h +0 -22
  233. package/node_modules/tree-sitter/src/language.cc +0 -106
  234. package/node_modules/tree-sitter/src/language.h +0 -17
  235. package/node_modules/tree-sitter/src/logger.cc +0 -70
  236. package/node_modules/tree-sitter/src/logger.h +0 -19
  237. package/node_modules/tree-sitter/src/lookaheaditerator.cc +0 -122
  238. package/node_modules/tree-sitter/src/lookaheaditerator.h +0 -33
  239. package/node_modules/tree-sitter/src/node.cc +0 -1088
  240. package/node_modules/tree-sitter/src/node.h +0 -30
  241. package/node_modules/tree-sitter/src/parser.cc +0 -306
  242. package/node_modules/tree-sitter/src/parser.h +0 -35
  243. package/node_modules/tree-sitter/src/query.cc +0 -397
  244. package/node_modules/tree-sitter/src/query.h +0 -40
  245. package/node_modules/tree-sitter/src/tree.cc +0 -316
  246. package/node_modules/tree-sitter/src/tree.h +0 -45
  247. package/node_modules/tree-sitter/src/tree_cursor.cc +0 -213
  248. package/node_modules/tree-sitter/src/tree_cursor.h +0 -52
  249. package/node_modules/tree-sitter/tree-sitter.d.ts +0 -1042
  250. package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +0 -1478
  251. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +0 -48
  252. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +0 -41
  253. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +0 -291
  254. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +0 -68
  255. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +0 -146
  256. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +0 -11
  257. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +0 -523
  258. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +0 -36
  259. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +0 -21
  260. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +0 -293
  261. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +0 -293
  262. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +0 -52
  263. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +0 -483
  264. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +0 -54
  265. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +0 -12
  266. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +0 -875
  267. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +0 -2293
  268. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +0 -286
  269. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +0 -48
  270. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +0 -239
  271. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +0 -4350
  272. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +0 -34
  273. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +0 -95
  274. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +0 -911
  275. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +0 -133
  276. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +0 -1034
  277. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +0 -399
  278. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +0 -170
  279. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +0 -31
  280. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +0 -717
  281. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +0 -48
  282. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +0 -11
  283. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +0 -1
  284. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +0 -414
  285. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +0 -29
  286. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +0 -1
  287. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +0 -448
  288. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +0 -1
  289. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +0 -1
  290. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +0 -733
  291. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +0 -881
  292. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +0 -75
  293. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +0 -24
  294. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +0 -113
  295. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +0 -1314
  296. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +0 -1935
  297. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +0 -31
  298. 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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,cAAc,GAAG,aAAa,CAAC;AAErC,MAAM,eAAe,GAAmC;IACtD,EAAE,EAAE,gBAAgB;IACpB,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,oBAAoB;IAC5B,GAAG,EAAE,iBAAiB;IACtB,MAAM,EAAE,0CAA0C;CACnD,CAAC;AAGF,MAAM,UAAU,mBAAmB,CAAC,QAAwB;IAC1D,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AA2BD,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,MAAM,IAAI,GAAG,GAAG,CAAC,4BAA4B,CAAC;IAC9C,OAAO,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAI,MAA2B;IACnD,OAAQ,MAA0B,CAAC,OAAO,IAAK,MAAY,CAAC;AAC9D,CAAC;AASD,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,MAAM,aAAa,GAAG,UAAU;QAC9B,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC;IACZ,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAChB,aAAa,CACX,aAAa,CAAC,cAAc,CAA0B,CACxB;QAClC,WAAW,EAAE,CAAC,QAAwB,EAAE,EAAE,CACxC,aAAa,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAA0B,CAAC;KACnF,CAAC;AACJ,CAAC;AAyBD,MAAM,OAAO,mBAAmB;IACrB,OAAO,GAAG,QAAiB,CAAC;IAEpB,OAAO,CAAsB;IAE9C,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,oBAAoB,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAwB;QAC1C,IAAI,MAAgC,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAkC,CAAC;YAC1E,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACtB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YACvD,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YACnB,MAAM,IAAI,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;CACF;AAED,MAAM,mBAAmB;IAKZ;IACQ;IALV,OAAO,GAAG,QAAiB,CAAC;IAC7B,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACW,QAAwB,EAChB,MAAoB;QAD5B,aAAQ,GAAR,QAAQ,CAAgB;QAChB,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEJ,KAAK,CAAC,IAAY;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,mCAAmC,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO;gBACL,IAAI,QAAQ;oBAAE,OAAO;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,CAAC;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=syntax-tree.js.map
@@ -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;IAoLhB,OAAO,CAAC,YAAY;CAmErB"}
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 entityDir = path
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')