semantifold 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/README.md +42 -10
  2. package/build/index.d.ts +32 -3
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +99 -4
  5. package/build/src/acceptance.d.ts +32 -0
  6. package/build/src/acceptance.d.ts.map +1 -0
  7. package/build/src/acceptance.js +358 -0
  8. package/build/src/array.d.ts +7 -0
  9. package/build/src/array.d.ts.map +1 -0
  10. package/build/src/array.js +18 -0
  11. package/build/src/artifact-path.d.ts +13 -0
  12. package/build/src/artifact-path.d.ts.map +1 -0
  13. package/build/src/artifact-path.js +30 -0
  14. package/build/src/artifacts.d.ts +7 -0
  15. package/build/src/artifacts.d.ts.map +1 -0
  16. package/build/src/artifacts.js +389 -0
  17. package/build/src/backends/c-runtime.d.ts +3 -0
  18. package/build/src/backends/c-runtime.d.ts.map +1 -0
  19. package/build/src/backends/c-runtime.js +151 -0
  20. package/build/src/backends/c-validation.d.ts +12 -0
  21. package/build/src/backends/c-validation.d.ts.map +1 -0
  22. package/build/src/backends/c-validation.js +85 -0
  23. package/build/src/backends/c.d.ts +31 -0
  24. package/build/src/backends/c.d.ts.map +1 -0
  25. package/build/src/backends/c.js +308 -0
  26. package/build/src/backends/cpp-runtime.d.ts +3 -0
  27. package/build/src/backends/cpp-runtime.d.ts.map +1 -0
  28. package/build/src/backends/cpp-runtime.js +99 -0
  29. package/build/src/backends/cpp-validation.d.ts +9 -0
  30. package/build/src/backends/cpp-validation.d.ts.map +1 -0
  31. package/build/src/backends/cpp-validation.js +74 -0
  32. package/build/src/backends/cpp.d.ts +16 -0
  33. package/build/src/backends/cpp.d.ts.map +1 -0
  34. package/build/src/backends/cpp.js +285 -0
  35. package/build/src/backends/csharp.d.ts +20 -0
  36. package/build/src/backends/csharp.d.ts.map +1 -0
  37. package/build/src/backends/csharp.js +259 -0
  38. package/build/src/backends/go.d.ts +20 -0
  39. package/build/src/backends/go.d.ts.map +1 -0
  40. package/build/src/backends/go.js +374 -0
  41. package/build/src/backends/identifiers.d.ts +12 -0
  42. package/build/src/backends/identifiers.d.ts.map +1 -1
  43. package/build/src/backends/identifiers.js +79 -2
  44. package/build/src/backends/index.d.ts.map +1 -1
  45. package/build/src/backends/index.js +27 -37
  46. package/build/src/backends/native-validation.d.ts +9 -0
  47. package/build/src/backends/native-validation.d.ts.map +1 -0
  48. package/build/src/backends/native-validation.js +59 -0
  49. package/build/src/backends/ordered-expressions.d.ts +74 -0
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -0
  51. package/build/src/backends/ordered-expressions.js +159 -0
  52. package/build/src/backends/python.d.ts +8 -0
  53. package/build/src/backends/python.d.ts.map +1 -0
  54. package/build/src/backends/python.js +162 -0
  55. package/build/src/backends/scalars.d.ts.map +1 -1
  56. package/build/src/backends/scalars.js +8 -2
  57. package/build/src/backends/shared.d.ts.map +1 -1
  58. package/build/src/backends/shared.js +67 -19
  59. package/build/src/binary-mapping.d.ts +32 -0
  60. package/build/src/binary-mapping.d.ts.map +1 -0
  61. package/build/src/binary-mapping.js +285 -0
  62. package/build/src/diagnostic.d.ts +36 -4
  63. package/build/src/diagnostic.d.ts.map +1 -1
  64. package/build/src/diagnostic.js +42 -3
  65. package/build/src/frontends/c-parser.d.ts +20 -0
  66. package/build/src/frontends/c-parser.d.ts.map +1 -0
  67. package/build/src/frontends/c-parser.js +14 -0
  68. package/build/src/frontends/c.d.ts +220 -0
  69. package/build/src/frontends/c.d.ts.map +1 -0
  70. package/build/src/frontends/c.js +750 -0
  71. package/build/src/frontends/cpp-parser.d.ts +11 -0
  72. package/build/src/frontends/cpp-parser.d.ts.map +1 -0
  73. package/build/src/frontends/cpp-parser.js +15 -0
  74. package/build/src/frontends/cpp.d.ts +227 -0
  75. package/build/src/frontends/cpp.d.ts.map +1 -0
  76. package/build/src/frontends/cpp.js +784 -0
  77. package/build/src/frontends/csharp.d.ts +14 -0
  78. package/build/src/frontends/csharp.d.ts.map +1 -0
  79. package/build/src/frontends/csharp.js +708 -0
  80. package/build/src/frontends/go.d.ts +15 -0
  81. package/build/src/frontends/go.d.ts.map +1 -0
  82. package/build/src/frontends/go.js +712 -0
  83. package/build/src/frontends/index.d.ts.map +1 -1
  84. package/build/src/frontends/index.js +5 -23
  85. package/build/src/frontends/python.d.ts +14 -0
  86. package/build/src/frontends/python.d.ts.map +1 -0
  87. package/build/src/frontends/python.js +615 -0
  88. package/build/src/frontends/scalars.d.ts.map +1 -1
  89. package/build/src/frontends/scalars.js +21 -1
  90. package/build/src/language-registry.d.ts +113 -0
  91. package/build/src/language-registry.d.ts.map +1 -0
  92. package/build/src/language-registry.js +421 -0
  93. package/build/src/mapping.js +3 -2
  94. package/build/src/semantic/location.d.ts +7 -0
  95. package/build/src/semantic/location.d.ts.map +1 -1
  96. package/build/src/semantic/location.js +10 -1
  97. package/build/src/semantic/provenance.js +3 -3
  98. package/build/src/semantic/types.d.ts +399 -2
  99. package/build/src/semantic/types.d.ts.map +1 -1
  100. package/build/src/semantic/types.js +110 -2
  101. package/build/src/subprocess.d.ts +38 -0
  102. package/build/src/subprocess.d.ts.map +1 -0
  103. package/build/src/subprocess.js +233 -0
  104. package/build/src/timeout.d.ts +8 -0
  105. package/build/src/timeout.d.ts.map +1 -0
  106. package/build/src/timeout.js +11 -0
  107. package/build/src/toolchains.d.ts +107 -0
  108. package/build/src/toolchains.d.ts.map +1 -0
  109. package/build/src/toolchains.js +417 -0
  110. package/docs/architecture.md +23 -5
  111. package/docs/c.md +60 -0
  112. package/docs/cpp.md +61 -0
  113. package/docs/goals.md +4 -2
  114. package/docs/language-support.md +46 -6
  115. package/docs/parser-qualification.md +219 -0
  116. package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
  117. package/docs/source-maps.md +38 -5
  118. package/docs/standard-library-portability.md +190 -0
  119. package/docs/testing.md +131 -3
  120. package/index.js +109 -4
  121. package/node_modules/node-addon-api/LICENSE.md +9 -0
  122. package/node_modules/node-addon-api/README.md +95 -0
  123. package/node_modules/node-addon-api/common.gypi +21 -0
  124. package/node_modules/node-addon-api/except.gypi +25 -0
  125. package/node_modules/node-addon-api/index.js +14 -0
  126. package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  127. package/node_modules/node-addon-api/napi-inl.h +7250 -0
  128. package/node_modules/node-addon-api/napi.h +3463 -0
  129. package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
  130. package/node_modules/node-addon-api/node_api.gyp +9 -0
  131. package/node_modules/node-addon-api/noexcept.gypi +26 -0
  132. package/node_modules/node-addon-api/nothing.c +0 -0
  133. package/node_modules/node-addon-api/package-support.json +21 -0
  134. package/node_modules/node-addon-api/package.json +481 -0
  135. package/node_modules/node-addon-api/tools/README.md +73 -0
  136. package/node_modules/node-addon-api/tools/check-napi.js +99 -0
  137. package/node_modules/node-addon-api/tools/clang-format.js +71 -0
  138. package/node_modules/node-addon-api/tools/conversion.js +301 -0
  139. package/node_modules/node-gyp-build/LICENSE +21 -0
  140. package/node_modules/node-gyp-build/README.md +58 -0
  141. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  142. package/node_modules/node-gyp-build/bin.js +84 -0
  143. package/node_modules/node-gyp-build/build-test.js +19 -0
  144. package/node_modules/node-gyp-build/index.js +6 -0
  145. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  146. package/node_modules/node-gyp-build/optional.js +7 -0
  147. package/node_modules/node-gyp-build/package.json +43 -0
  148. package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
  149. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
  150. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
  151. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
  152. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
  153. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
  154. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
  155. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  156. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  157. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  158. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  159. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
  160. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
  161. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
  162. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
  163. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
  164. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
  165. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
  166. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
  167. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  168. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  169. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
  170. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
  171. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
  172. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
  173. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
  174. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
  175. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
  176. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
  177. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  178. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  179. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
  180. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
  181. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  182. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  183. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
  184. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  185. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  186. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  187. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
  188. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  189. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  190. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
  191. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
  192. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  193. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
  194. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
  195. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
  196. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
  197. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
  198. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
  199. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
  200. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
  201. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  202. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  203. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
  204. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  205. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
  236. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
  237. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
  238. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
  239. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
  240. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
  241. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
  242. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
  243. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
  244. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
  245. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
  246. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
  247. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
  248. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
  249. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
  250. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
  251. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
  252. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
  253. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
  254. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
  255. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
  256. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
  257. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
  258. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
  259. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
  260. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
  261. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
  262. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
  263. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
  264. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
  265. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
  266. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
  267. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
  268. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
  269. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
  270. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
  271. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
  272. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
  273. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
  274. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
  275. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
  276. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
  277. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
  278. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
  279. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
  280. package/node_modules/tree-sitter/LICENSE +21 -0
  281. package/node_modules/tree-sitter/README.md +128 -0
  282. package/node_modules/tree-sitter/binding.gyp +88 -0
  283. package/node_modules/tree-sitter/index.js +950 -0
  284. package/node_modules/tree-sitter/package.json +76 -0
  285. package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
  286. package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
  287. package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
  288. package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
  289. package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
  290. package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
  291. package/node_modules/tree-sitter/src/addon_data.h +47 -0
  292. package/node_modules/tree-sitter/src/binding.cc +35 -0
  293. package/node_modules/tree-sitter/src/conversions.cc +140 -0
  294. package/node_modules/tree-sitter/src/conversions.h +22 -0
  295. package/node_modules/tree-sitter/src/language.cc +105 -0
  296. package/node_modules/tree-sitter/src/language.h +17 -0
  297. package/node_modules/tree-sitter/src/logger.cc +70 -0
  298. package/node_modules/tree-sitter/src/logger.h +19 -0
  299. package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
  300. package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
  301. package/node_modules/tree-sitter/src/node.cc +1088 -0
  302. package/node_modules/tree-sitter/src/node.h +30 -0
  303. package/node_modules/tree-sitter/src/parser.cc +332 -0
  304. package/node_modules/tree-sitter/src/parser.h +35 -0
  305. package/node_modules/tree-sitter/src/query.cc +425 -0
  306. package/node_modules/tree-sitter/src/query.h +40 -0
  307. package/node_modules/tree-sitter/src/tree.cc +316 -0
  308. package/node_modules/tree-sitter/src/tree.h +45 -0
  309. package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
  310. package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
  311. package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
  312. package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
  313. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
  314. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
  315. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
  316. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
  317. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
  318. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
  319. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
  320. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
  321. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
  322. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
  323. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
  324. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
  325. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
  326. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
  327. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
  328. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
  329. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
  330. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
  331. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
  332. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
  333. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
  334. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
  335. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
  336. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
  337. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
  338. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
  339. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
  340. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
  341. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
  342. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
  343. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
  344. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
  345. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
  346. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
  347. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
  348. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
  349. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
  350. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
  351. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
  352. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
  353. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
  354. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
  355. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
  356. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
  357. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
  358. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
  359. package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
  360. package/package.json +24 -6
  361. package/src/acceptance.js +380 -0
  362. package/src/array.js +19 -0
  363. package/src/artifact-path.js +34 -0
  364. package/src/artifacts.js +420 -0
  365. package/src/backends/c-runtime.js +151 -0
  366. package/src/backends/c-validation.js +83 -0
  367. package/src/backends/c.js +308 -0
  368. package/src/backends/cpp-runtime.js +99 -0
  369. package/src/backends/cpp-validation.js +70 -0
  370. package/src/backends/cpp.js +285 -0
  371. package/src/backends/csharp.js +270 -0
  372. package/src/backends/go.js +383 -0
  373. package/src/backends/identifiers.js +80 -1
  374. package/src/backends/index.js +23 -32
  375. package/src/backends/native-validation.js +64 -0
  376. package/src/backends/ordered-expressions.js +161 -0
  377. package/src/backends/python.js +175 -0
  378. package/src/backends/scalars.js +8 -1
  379. package/src/backends/shared.js +64 -17
  380. package/src/binary-mapping.js +305 -0
  381. package/src/diagnostic.js +34 -2
  382. package/src/frontends/c-parser.js +17 -0
  383. package/src/frontends/c.js +780 -0
  384. package/src/frontends/cpp-parser.js +18 -0
  385. package/src/frontends/cpp.js +816 -0
  386. package/src/frontends/csharp.js +759 -0
  387. package/src/frontends/go.js +770 -0
  388. package/src/frontends/index.js +5 -20
  389. package/src/frontends/python.js +689 -0
  390. package/src/frontends/scalars.js +20 -0
  391. package/src/language-registry.js +454 -0
  392. package/src/mapping.js +2 -1
  393. package/src/semantic/location.js +10 -0
  394. package/src/semantic/provenance.js +2 -2
  395. package/src/semantic/types.js +124 -1
  396. package/src/subprocess.js +232 -0
  397. package/src/timeout.js +12 -0
  398. package/src/toolchains.js +448 -0
  399. package/tsconfig.json +1 -0
@@ -1,11 +1,45 @@
1
1
  // @ts-check
2
2
 
3
- /** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java"} SemanticLanguage */
3
+ /** @typedef {"php" | "ruby" | "javascript" | "typescript" | "java" | "python" | "csharp" | "go" | "c" | "cpp"} SemanticLanguage */
4
4
  /** @typedef {"integer" | "boolean" | "string"} SemanticTypeName */
5
5
  /** @typedef {"IntegerNegate" | "BooleanNot"} SemanticUnaryOperation */
6
6
  /** @typedef {"IntegerAdd" | "IntegerSubtract" | "IntegerMultiply" | "BooleanAnd" | "BooleanOr" | "IntegerEqual" | "IntegerNotEqual" | "BooleanEqual" | "BooleanNotEqual" | "StringEqual" | "StringNotEqual" | "IntegerLessThan" | "IntegerLessThanOrEqual" | "IntegerGreaterThan" | "IntegerGreaterThanOrEqual" | "StringConcat"} SemanticBinaryOperation */
7
7
  /** @typedef {"function" | "parameter" | "local"} SemanticSymbolKind */
8
8
  /** @typedef {"declaration" | "read" | "write" | "call"} SemanticSymbolRole */
9
+ /** @typedef {"parse" | "generate" | "restore" | "compile" | "link" | "validate" | "instantiate" | "execute"} AcceptanceStage */
10
+ /** @typedef {"entry" | "source" | "manifest" | "support" | "mapping" | "resource" | "loader"} GeneratedArtifactRole */
11
+
12
+ /**
13
+ * @typedef LanguageRoleCapabilities
14
+ * @property {boolean} frontend - Parser adapter availability.
15
+ * @property {boolean} textBackend - Single- or multi-file text backend availability.
16
+ * @property {boolean} binaryBackend - Binary backend availability.
17
+ * @property {boolean} applicationBackend - Application-artifact backend availability.
18
+ * @property {boolean} interoperability - Interoperability bridge availability.
19
+ */
20
+
21
+ /**
22
+ * @typedef LanguageMappingCapabilities
23
+ * @property {boolean} richText - Authoritative rich text mappings.
24
+ * @property {boolean} sourceMapV3 - Source Map v3 projection.
25
+ * @property {boolean} binaryRanges - Byte-coordinate binary/resource mappings.
26
+ */
27
+
28
+ /**
29
+ * @typedef LanguageAcceptanceCapabilities
30
+ * @property {readonly AcceptanceStage[]} stages - Applicable ordered acceptance stages.
31
+ * @property {readonly string[]} toolchains - Required canonical toolchain IDs.
32
+ */
33
+
34
+ /**
35
+ * @typedef LanguageCapabilities
36
+ * @property {string} id - Stable registry identity.
37
+ * @property {Readonly<LanguageRoleCapabilities>} roles - Independently registered roles.
38
+ * @property {"single" | "multiple"} artifactMultiplicity - Target artifact multiplicity.
39
+ * @property {boolean} roundTrip - Whether frontend/backend round-trip acceptance is declared.
40
+ * @property {Readonly<LanguageMappingCapabilities>} mapping - Mapping forms.
41
+ * @property {Readonly<LanguageAcceptanceCapabilities>} acceptance - Stages and toolchains.
42
+ */
9
43
 
10
44
  /**
11
45
  * @typedef SourcePoint
@@ -60,6 +94,24 @@
60
94
 
61
95
  /** @typedef {SourceOrigin | DerivedOrigin | SyntheticOrigin} SemanticOrigin */
62
96
 
97
+ /**
98
+ * @typedef GeneratedByteRange
99
+ * @property {{start: number, end: number}} generated - Half-open generated byte offsets.
100
+ * @property {SemanticOrigin} origin - Semantic or explicit synthetic provenance.
101
+ * @property {string} [nodeId] - Originating semantic node identity.
102
+ * @property {string} [symbolId] - Originating semantic symbol identity.
103
+ * @property {string} [role] - Semantic or binary-region role.
104
+ */
105
+
106
+ /**
107
+ * @typedef SemantifoldByteMapping
108
+ * @property {"SemantifoldByteMapping"} schema - Schema discriminator.
109
+ * @property {1} version - Schema version.
110
+ * @property {"bytes"} coordinateSystem - Generated offsets are bytes, never text columns.
111
+ * @property {{path: string, byteLength: number}} generated - Generated artifact identity.
112
+ * @property {readonly GeneratedByteRange[]} ranges - Ordered non-overlapping ranges.
113
+ */
114
+
63
115
  /**
64
116
  * @typedef SemanticNodeSourceProvenance
65
117
  * @property {"SemantifoldNodeProvenance"} schema - Association discriminator.
@@ -147,6 +199,77 @@
147
199
  * @property {string} sourceMapFilename - Default external Source Map filename.
148
200
  */
149
201
 
202
+ /**
203
+ * @typedef TextArtifactProvenance
204
+ * @property {"text"} kind - Rich text provenance discriminator.
205
+ * @property {SemantifoldMapping} mapping - Authoritative range mapping.
206
+ * @property {import("@jridgewell/gen-mapping").EncodedSourceMap} sourceMap - Interoperable projection.
207
+ * @property {string} [sourceMapFilename] - Logical Source Map sidecar path.
208
+ */
209
+
210
+ /**
211
+ * @typedef ByteArtifactProvenance
212
+ * @property {"bytes"} kind - Byte provenance discriminator.
213
+ * @property {SemantifoldByteMapping} mapping - Authoritative byte ranges.
214
+ */
215
+
216
+ /**
217
+ * @typedef ArtifactSyntheticProvenance
218
+ * @property {"synthetic"} kind - Synthetic artifact discriminator.
219
+ * @property {string} reason - Explicit target-scaffolding reason.
220
+ * @property {readonly RelatedOrigin[]} relatedOrigins - Related semantic source ranges.
221
+ */
222
+
223
+ /** @typedef {TextArtifactProvenance | ByteArtifactProvenance | ArtifactSyntheticProvenance} ArtifactProvenance */
224
+
225
+ /**
226
+ * @typedef GeneratedSetArtifact
227
+ * @property {string} path - Unique safe relative POSIX path.
228
+ * @property {"text" | "binary"} contentKind - Content representation.
229
+ * @property {string | Uint8Array} content - Text or a detached copy of the exact generated bytes on every binary read.
230
+ * @property {string} mediaType - Artifact media type.
231
+ * @property {GeneratedArtifactRole} role - Artifact role; exactly one set artifact is entry.
232
+ * @property {"generated"} ownership - Task-015 ownership contract.
233
+ * @property {ArtifactProvenance} provenance - Text, byte-range, or synthetic provenance.
234
+ */
235
+
236
+ /**
237
+ * @typedef GeneratedArtifactSet
238
+ * @property {"GeneratedArtifactSet"} schema - Schema discriminator.
239
+ * @property {1} version - Schema version.
240
+ * @property {string} target - Stable language or target ID.
241
+ * @property {string} entry - Path of the sole declared entry artifact.
242
+ * @property {readonly GeneratedSetArtifact[]} artifacts - Deterministic artifact order.
243
+ */
244
+
245
+ /**
246
+ * @typedef DiscoveredToolchain
247
+ * @property {string} id - Toolchain ID.
248
+ * @property {string} command - Documented canonical command.
249
+ * @property {string} executable - Exact absolute executable path.
250
+ * @property {"override" | "canonical"} source - Resolution route.
251
+ * @property {string} version - First captured version line.
252
+ * @property {string} versionOutput - Complete captured version output.
253
+ * @property {readonly string[]} versionArguments - Exact version argument array.
254
+ */
255
+
256
+ /**
257
+ * @typedef AcceptanceStageResult
258
+ * @property {AcceptanceStage} stage - Completed stage.
259
+ * @property {string} executable - Exact executable used.
260
+ * @property {readonly string[]} arguments - Exact argument array used.
261
+ * @property {string} version - Discovered tool version.
262
+ * @property {string} stdout - Captured standard output.
263
+ * @property {string} stderr - Captured standard error.
264
+ */
265
+
266
+ /**
267
+ * @typedef AcceptanceResult
268
+ * @property {string} target - Target identity.
269
+ * @property {string} directory - Removed isolated project directory identity.
270
+ * @property {readonly AcceptanceStageResult[]} stages - Ordered completed stages.
271
+ */
272
+
150
273
  /**
151
274
  * @typedef TypeReference
152
275
  * @property {"TypeReference"} kind - Node discriminator.
@@ -0,0 +1,232 @@
1
+ // @ts-check
2
+
3
+ import {spawn} from "node:child_process"
4
+ import {StringDecoder} from "node:string_decoder"
5
+
6
+ const forcedTerminationGraceMs = 250
7
+ const retainedPipeGraceMs = 250
8
+ const deadlineFailures = new WeakSet()
9
+
10
+ /**
11
+ * Executes one exact file while owning its complete bounded lifecycle.
12
+ * @param {object} input - Process request.
13
+ * @param {readonly string[]} input.arguments - Exact argument array.
14
+ * @param {string} [input.cwd] - Working directory.
15
+ * @param {Readonly<Record<string, string>>} input.environment - Exact environment.
16
+ * @param {string} input.executable - Exact executable path.
17
+ * @param {number} input.maxBuffer - Maximum bytes captured per output stream.
18
+ * @param {number} input.timeoutMs - Deadline before termination begins.
19
+ * @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
20
+ */
21
+ export function executeFileWithDeadline(input) {
22
+ return executeFileWithDeadlineUsing(input, registerChildSpawn)
23
+ }
24
+
25
+ /**
26
+ * Creates an executor whose spawn observation belongs only to that executor instance.
27
+ * @param {object} dependencies - Internal lifecycle dependencies.
28
+ * @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} dependencies.registerSpawnListener - Registers deadline initialization.
29
+ * @returns {typeof executeFileWithDeadline} Owned subprocess executor.
30
+ */
31
+ export function createExecuteFileWithDeadline({registerSpawnListener}) {
32
+ return (input) => executeFileWithDeadlineUsing(input, registerSpawnListener)
33
+ }
34
+
35
+ /**
36
+ * Executes with exact instance-owned spawn observation.
37
+ * @param {Parameters<typeof executeFileWithDeadline>[0]} input - Process request.
38
+ * @param {(child: import("node:child_process").ChildProcess, listener: () => void) => void} registerSpawnListener - Registers deadline initialization.
39
+ * @returns {Promise<{stderr: string, stdout: string}>} Output after the owned process group closes.
40
+ */
41
+ function executeFileWithDeadlineUsing({arguments: processArguments, cwd, environment, executable, maxBuffer, timeoutMs}, registerSpawnListener) {
42
+ if (process.platform == "win32") {
43
+ return Promise.reject(Object.assign(new Error("Owned process-tree termination is unavailable on this platform."), {
44
+ code: "ENOTSUP",
45
+ stderr: "",
46
+ stdout: ""
47
+ }))
48
+ }
49
+
50
+ return new Promise((resolve, reject) => {
51
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
52
+ let deadlineTimer
53
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
54
+ let forceTimer
55
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
56
+ let pipeTimer
57
+ /** @type {Error | undefined} */
58
+ let launchError
59
+ let deadlineExceeded = false
60
+ let outputExceeded = false
61
+ let settled = false
62
+ const stderr = outputCapture(maxBuffer, () => terminateForOutputLimit())
63
+ const stdout = outputCapture(maxBuffer, () => terminateForOutputLimit())
64
+ const child = spawn(executable, [...processArguments], {
65
+ cwd,
66
+ detached: true,
67
+ env: environment,
68
+ stdio: ["ignore", "pipe", "pipe"]
69
+ })
70
+ const processGroupId = child.pid
71
+
72
+ child.stderr.on("data", stderr.receive)
73
+ child.stdout.on("data", stdout.receive)
74
+ child.once("error", (error) => {
75
+ launchError = error
76
+ })
77
+ registerSpawnListener(child, () => {
78
+ if (processGroupId == undefined || !verifyOwnedProcessGroup(processGroupId)) {
79
+ launchError = Object.assign(new Error("Spawned subprocess did not establish its required process group."), {code: "ENOTSUP"})
80
+ child.kill("SIGKILL")
81
+ return
82
+ }
83
+
84
+ deadlineTimer = setTimeout(() => {
85
+ if (settled) return
86
+ deadlineExceeded = true
87
+ beginTermination(processGroupId)
88
+ }, timeoutMs)
89
+ })
90
+ child.once("close", (code, signal) => {
91
+ settled = true
92
+ if (deadlineTimer != undefined) clearTimeout(deadlineTimer)
93
+ if (forceTimer != undefined) clearTimeout(forceTimer)
94
+ if (pipeTimer != undefined) clearTimeout(pipeTimer)
95
+ const capturedStderr = stderr.finish()
96
+ const capturedStdout = stdout.finish()
97
+
98
+ if (launchError) {
99
+ reject(Object.assign(launchError, {stderr: capturedStderr, stdout: capturedStdout}))
100
+ } else if (outputExceeded) {
101
+ reject(Object.assign(new Error(`Subprocess exceeded its ${maxBuffer}-byte output capture limit.`), {
102
+ code: "ERR_CHILD_PROCESS_STDIO_MAXBUFFER",
103
+ signal,
104
+ stderr: capturedStderr,
105
+ stdout: capturedStdout
106
+ }))
107
+ } else if (deadlineExceeded) {
108
+ const timeoutError = Object.assign(new Error("Subprocess exceeded its owned deadline."), {
109
+ code,
110
+ signal,
111
+ stderr: capturedStderr,
112
+ stdout: capturedStdout
113
+ })
114
+
115
+ deadlineFailures.add(timeoutError)
116
+ reject(timeoutError)
117
+ } else if (code != 0 || signal != null) {
118
+ reject(Object.assign(new Error("Subprocess failed after launch."), {
119
+ code,
120
+ signal,
121
+ stderr: capturedStderr,
122
+ stdout: capturedStdout
123
+ }))
124
+ } else resolve({stderr: capturedStderr, stdout: capturedStdout})
125
+ })
126
+
127
+ /** Begins bounded termination after output capture crosses its limit. */
128
+ function terminateForOutputLimit() {
129
+ if (outputExceeded || settled) return
130
+ outputExceeded = true
131
+ if (processGroupId != undefined) beginTermination(processGroupId)
132
+ }
133
+
134
+ /**
135
+ * Signals the owned group now and escalates if its inherited pipes remain open.
136
+ * @param {number} ownedGroupId - Spawn-verified process-group identity.
137
+ */
138
+ function beginTermination(ownedGroupId) {
139
+ signalOwnedProcessGroup(ownedGroupId, "SIGTERM")
140
+ if (!settled && forceTimer == undefined) {
141
+ forceTimer = setTimeout(() => {
142
+ if (settled) return
143
+ signalOwnedProcessGroup(ownedGroupId, "SIGKILL")
144
+ pipeTimer = setTimeout(() => {
145
+ if (settled) return
146
+ child.stdout.destroy()
147
+ child.stderr.destroy()
148
+ }, retainedPipeGraceMs)
149
+ }, forcedTerminationGraceMs)
150
+ }
151
+ }
152
+ })
153
+ }
154
+
155
+ /**
156
+ * Registers production deadline initialization on the child's real spawn event.
157
+ * @param {import("node:child_process").ChildProcess} child - Exact spawned child.
158
+ * @param {() => void} listener - Deadline initialization.
159
+ */
160
+ function registerChildSpawn(child, listener) {
161
+ child.once("spawn", listener)
162
+ }
163
+
164
+ /**
165
+ * Creates one byte-bounded UTF-8 stream capture.
166
+ * @param {number} maximumBytes - Maximum captured bytes.
167
+ * @param {() => void} onExceeded - First-overflow callback.
168
+ * @returns {{finish: () => string, receive: (chunk: Buffer) => void}} Capture callbacks.
169
+ */
170
+ function outputCapture(maximumBytes, onExceeded) {
171
+ const decoder = new StringDecoder("utf8")
172
+ let byteLength = 0
173
+ let content = ""
174
+ let exceeded = false
175
+
176
+ return {
177
+ finish() {
178
+ return content + decoder.end()
179
+ },
180
+ receive(chunk) {
181
+ if (exceeded) return
182
+ const remaining = maximumBytes - byteLength
183
+
184
+ if (chunk.length > remaining) {
185
+ if (remaining > 0) content += decoder.write(chunk.subarray(0, remaining))
186
+ exceeded = true
187
+ onExceeded()
188
+ return
189
+ }
190
+ byteLength += chunk.length
191
+ content += decoder.write(chunk)
192
+ }
193
+ }
194
+ }
195
+
196
+ /**
197
+ * Verifies that the spawned child is the live leader of its distinct POSIX group.
198
+ * @param {number} processGroupId - Spawn-returned child PID and required group ID.
199
+ * @returns {boolean} Whether the owned group exists.
200
+ */
201
+ function verifyOwnedProcessGroup(processGroupId) {
202
+ try {
203
+ process.kill(-processGroupId, 0)
204
+ return true
205
+ } catch (error) {
206
+ if (error instanceof Error && "code" in error && error.code == "ESRCH") return false
207
+ throw error
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Signals only the verified process group created for the exact spawned child.
213
+ * @param {number} processGroupId - Spawn-returned child PID and POSIX process-group ID.
214
+ * @param {"SIGKILL" | "SIGTERM"} signal - Lifecycle signal.
215
+ * @returns {void}
216
+ */
217
+ function signalOwnedProcessGroup(processGroupId, signal) {
218
+ try {
219
+ process.kill(-processGroupId, signal)
220
+ } catch (error) {
221
+ if (!(error instanceof Error && "code" in error && error.code == "ESRCH")) throw error
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Reports whether this module's deadline timer initiated termination.
227
+ * @param {unknown} error - Subprocess failure.
228
+ * @returns {boolean} Whether the failure belongs to an owned deadline.
229
+ */
230
+ export function exceededOwnedDeadline(error) {
231
+ return typeof error == "object" && error != null && deadlineFailures.has(error)
232
+ }
package/src/timeout.js ADDED
@@ -0,0 +1,12 @@
1
+ // @ts-check
2
+
3
+ export const maximumTimeoutMs = 2_147_483_647
4
+
5
+ /**
6
+ * Checks whether a public subprocess timeout fits one exact Node timer.
7
+ * @param {unknown} value - Candidate timeout.
8
+ * @returns {value is number} Whether the timeout is a supported positive integer.
9
+ */
10
+ export function isSupportedTimeoutMs(value) {
11
+ return typeof value == "number" && Number.isSafeInteger(value) && value > 0 && value <= maximumTimeoutMs
12
+ }