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
@@ -0,0 +1,31 @@
1
+ #ifndef TREE_SITTER_WASM_H_
2
+ #define TREE_SITTER_WASM_H_
3
+
4
+ #ifdef __cplusplus
5
+ extern "C" {
6
+ #endif
7
+
8
+ #include "tree_sitter/api.h"
9
+ #include "./parser.h"
10
+
11
+ bool ts_wasm_store_start(TSWasmStore *self, TSLexer *lexer, const TSLanguage *language);
12
+ void ts_wasm_store_reset(TSWasmStore *self);
13
+ bool ts_wasm_store_has_error(const TSWasmStore *self);
14
+
15
+ bool ts_wasm_store_call_lex_main(TSWasmStore *self, TSStateId state);
16
+ bool ts_wasm_store_call_lex_keyword(TSWasmStore *self, TSStateId state);
17
+
18
+ uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *self);
19
+ void ts_wasm_store_call_scanner_destroy(TSWasmStore *self, uint32_t scanner_address);
20
+ bool ts_wasm_store_call_scanner_scan(TSWasmStore *self, uint32_t scanner_address, uint32_t valid_tokens_ix);
21
+ uint32_t ts_wasm_store_call_scanner_serialize(TSWasmStore *self, uint32_t scanner_address, char *buffer);
22
+ void ts_wasm_store_call_scanner_deserialize(TSWasmStore *self, uint32_t scanner, const char *buffer, unsigned length);
23
+
24
+ void ts_wasm_language_retain(const TSLanguage *self);
25
+ void ts_wasm_language_release(const TSLanguage *self);
26
+
27
+ #ifdef __cplusplus
28
+ }
29
+ #endif
30
+
31
+ #endif // TREE_SITTER_WASM_H_
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semantifold",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "Language-neutral semantic code analysis, transformation, generation, and execution toolkit",
5
5
  "type": "module",
6
6
  "main": "build/index.js",
@@ -20,14 +20,19 @@
20
20
  "src/**",
21
21
  "tsconfig.json"
22
22
  ],
23
+ "workspaces": [
24
+ "packages/tree-sitter-legacy"
25
+ ],
23
26
  "scripts": {
24
27
  "all-checks": "npm run lint && npm test",
25
- "build": "node scripts/clean-build.js && tsc",
28
+ "build": "node scripts/clean-build.js && tsc && npm run build --workspace=semantifold-tree-sitter-legacy-workspace",
26
29
  "eslint": "eslint --max-warnings 0 .",
27
- "lint": "npm run eslint && npm run typecheck",
28
- "prepack": "npm run build",
30
+ "lint": "npm run verify:legacy-runtime && npm run eslint && npm run typecheck",
31
+ "prepack": "npm run verify:legacy-runtime && npm run build",
32
+ "pretest": "npm run verify:legacy-runtime && npm run build --workspace=semantifold-tree-sitter-legacy-workspace",
29
33
  "test": "velocious-test spec",
30
- "typecheck": "tsc --noEmit"
34
+ "typecheck": "tsc --noEmit && npm run typecheck --workspace=semantifold-tree-sitter-legacy-workspace",
35
+ "verify:legacy-runtime": "node scripts/verify-legacy-runtime.js"
31
36
  },
32
37
  "engines": {
33
38
  "node": ">=24"
@@ -51,7 +56,19 @@
51
56
  "@lezer/java": "^1.1.3",
52
57
  "@ruby/prism": "^1.9.0",
53
58
  "comment-parser": "^1.4.1",
54
- "php-parser": "^3.7.0"
59
+ "php-parser": "^3.7.0",
60
+ "semantifold-tree-sitter-legacy-internal": "file:packages/tree-sitter-legacy/runtime",
61
+ "tree-sitter": "0.25.1",
62
+ "tree-sitter-c-sharp": "0.23.5",
63
+ "tree-sitter-go": "0.25.0",
64
+ "tree-sitter-python": "0.25.0"
65
+ },
66
+ "bundleDependencies": [
67
+ "semantifold-tree-sitter-legacy-internal",
68
+ "tree-sitter"
69
+ ],
70
+ "acceptDependencies": {
71
+ "semantifold-tree-sitter-legacy-internal": "0.1.0"
55
72
  },
56
73
  "devDependencies": {
57
74
  "@eslint/js": "^10.0.1",
@@ -63,6 +80,7 @@
63
80
  "eslint-plugin-jsdoc-inline-type-casts": "https://github.com/kaspernj/eslint-plugin-jsdoc-inline-type-casts/archive/441b6c5ca335a115a75d9f050134357ddb0a61d1.tar.gz",
64
81
  "eslint-plugin-jsdoc-tag-lines": "^1.0.1",
65
82
  "globals": "^17.0.0",
83
+ "semantifold-tree-sitter-legacy-workspace": "0.1.0",
66
84
  "typescript": "^7.0.0",
67
85
  "yaml": "^2.9.0"
68
86
  }
@@ -0,0 +1,380 @@
1
+ // @ts-check
2
+
3
+ import {mkdir, mkdtemp, rm, writeFile} from "node:fs/promises"
4
+ import os from "node:os"
5
+ import path from "node:path"
6
+ import {isDenseArray} from "./array.js"
7
+ import {createGeneratedArtifactSet} from "./artifacts.js"
8
+ import {SemantifoldDiagnostic} from "./diagnostic.js"
9
+ import {exceededOwnedDeadline, executeFileWithDeadline} from "./subprocess.js"
10
+ import {isSupportedTimeoutMs, maximumTimeoutMs} from "./timeout.js"
11
+ import {deterministicEnvironment} from "./toolchains.js"
12
+
13
+ const acceptanceMaxBuffer = 16 * 1024 * 1024
14
+ const launchErrorCodes = new Set([
15
+ "E2BIG", "EACCES", "EAGAIN", "ELOOP", "EMFILE", "ENAMETOOLONG", "ENFILE", "ENOENT", "ENOEXEC", "ENOMEM", "ENOTDIR", "ENOTSUP", "EPERM", "ETXTBSY"
16
+ ])
17
+ const orderedStages = Object.freeze(["parse", "generate", "restore", "compile", "link", "validate", "instantiate", "execute"])
18
+ const stageIndexes = new Map(orderedStages.map((stage, index) => [stage, index]))
19
+
20
+ /**
21
+ * Materializes one artifact set and runs ordered acceptance stages without a shell.
22
+ * @param {object} input - Acceptance request.
23
+ * @param {import("./semantic/types.js").GeneratedArtifactSet} input.artifacts - Complete input artifacts.
24
+ * @param {Readonly<Record<string, string | undefined>>} [input.environment] - Explicit process environment.
25
+ * @param {{arguments: string[], stage: import("./semantic/types.js").AcceptanceStage, tool: import("./semantic/types.js").DiscoveredToolchain}[]} input.stages - Ordered stages.
26
+ * @param {string} input.target - Target identity.
27
+ * @param {number} [input.timeoutMs] - Per-stage timeout.
28
+ * @returns {Promise<import("./semantic/types.js").AcceptanceResult>} Captured results after cleanup.
29
+ */
30
+ export async function runAcceptanceStages(input) {
31
+ return await runAcceptanceStagesWithDependencies(input, rm)
32
+ }
33
+
34
+ /**
35
+ * Creates an acceptance runner with instance-owned cleanup behavior.
36
+ * @param {object} dependencies - Internal runner dependencies.
37
+ * @param {typeof rm} dependencies.removeDirectory - Isolated-directory removal operation.
38
+ * @returns {typeof runAcceptanceStages} Acceptance runner.
39
+ */
40
+ export function createAcceptanceRunner({removeDirectory}) {
41
+ return async (input) => await runAcceptanceStagesWithDependencies(input, removeDirectory)
42
+ }
43
+
44
+ /**
45
+ * Runs acceptance with exact instance-owned dependencies.
46
+ * @param {Parameters<typeof runAcceptanceStages>[0]} input - Acceptance request.
47
+ * @param {typeof rm} removeDirectory - Isolated-directory removal operation.
48
+ * @returns {ReturnType<typeof runAcceptanceStages>} Captured results after cleanup.
49
+ */
50
+ async function runAcceptanceStagesWithDependencies(input, removeDirectory) {
51
+ if (!isPlainObject(input)) invalidRunner("Acceptance requires a request object.", "acceptance")
52
+ const artifacts = /** @type {import("./semantic/types.js").GeneratedArtifactSet} */ (input.artifacts)
53
+ const environment = /** @type {Readonly<Record<string, string | undefined>>} */ (
54
+ input.environment === undefined ? {PATH: process.env.PATH} : input.environment)
55
+ const stages = /** @type {{arguments: string[], stage: import("./semantic/types.js").AcceptanceStage, tool: import("./semantic/types.js").DiscoveredToolchain}[]} */ (input.stages)
56
+ const target = /** @type {string} */ (input.target)
57
+ const timeoutMs = /** @type {number} */ (input.timeoutMs === undefined ? 10_000 : input.timeoutMs)
58
+ const request = validateRequest({artifacts, environment, stages, target, timeoutMs})
59
+ const directory = await createAcceptanceDirectory(request.target)
60
+ /** @type {unknown} */
61
+ let primaryFailure
62
+ /** @type {import("./semantic/types.js").AcceptanceResult | undefined} */
63
+ let result
64
+ let primaryFailed = false
65
+
66
+ try {
67
+ await materializeArtifacts(request.artifacts, directory, request.target)
68
+
69
+ /** @type {import("./semantic/types.js").AcceptanceStageResult[]} */
70
+ const results = []
71
+
72
+ for (const stage of request.stages) {
73
+ try {
74
+ const result = await executeFileWithDeadline({
75
+ arguments: stage.arguments,
76
+ cwd: directory,
77
+ environment: request.environment,
78
+ executable: stage.tool.executable,
79
+ maxBuffer: acceptanceMaxBuffer,
80
+ timeoutMs: request.timeoutMs
81
+ })
82
+
83
+ results.push(Object.freeze({
84
+ arguments: Object.freeze([...stage.arguments]),
85
+ executable: stage.tool.executable,
86
+ stage: stage.stage,
87
+ stderr: result.stderr,
88
+ stdout: result.stdout,
89
+ version: stage.tool.version
90
+ }))
91
+ } catch (error) {
92
+ throw processDiagnostic(error, stage, request.target, request.timeoutMs)
93
+ }
94
+ }
95
+
96
+ result = Object.freeze({directory, stages: Object.freeze(results), target: request.target})
97
+ } catch (error) {
98
+ primaryFailed = true
99
+ primaryFailure = error
100
+ }
101
+
102
+ /** @type {unknown} */
103
+ let cleanupFailure
104
+ let cleanupFailed = false
105
+
106
+ try {
107
+ await removeAcceptanceDirectory(directory, request.target, removeDirectory)
108
+ } catch (error) {
109
+ cleanupFailed = true
110
+ cleanupFailure = error
111
+ }
112
+
113
+ if (primaryFailed && cleanupFailed && primaryFailure instanceof Error) {
114
+ throw preservePrimaryFailure(primaryFailure, cleanupFailure, request.target)
115
+ }
116
+ if (primaryFailed) throw primaryFailure
117
+ if (cleanupFailed) throw cleanupFailure
118
+
119
+ return /** @type {import("./semantic/types.js").AcceptanceResult} */ (result)
120
+ }
121
+
122
+ /**
123
+ * Validates and detaches a staged acceptance request before filesystem mutation.
124
+ * @param {{
125
+ * artifacts: import("./semantic/types.js").GeneratedArtifactSet,
126
+ * environment: Readonly<Record<string, string | undefined>>,
127
+ * stages: {arguments: string[], stage: import("./semantic/types.js").AcceptanceStage, tool: import("./semantic/types.js").DiscoveredToolchain}[],
128
+ * target: string,
129
+ * timeoutMs: number
130
+ * }} input - Candidate request.
131
+ * @returns {{
132
+ * artifacts: import("./semantic/types.js").GeneratedArtifactSet,
133
+ * environment: Readonly<Record<string, string>>,
134
+ * stages: {arguments: string[], stage: import("./semantic/types.js").AcceptanceStage, tool: Readonly<{executable: string, version: string}>}[],
135
+ * target: string,
136
+ * timeoutMs: number
137
+ * }} Validated request.
138
+ */
139
+ function validateRequest(input) {
140
+ try {
141
+ if (typeof input.target != "string" || input.target.length == 0 || !isSupportedTimeoutMs(input.timeoutMs) ||
142
+ !isDenseArray(input.stages) || input.stages.length == 0) {
143
+ invalidRunner(`Acceptance requires a target, timeout from 1 through ${maximumTimeoutMs}ms, and non-empty ordered stages.`, input.target)
144
+ }
145
+ const artifacts = createGeneratedArtifactSet(input.artifacts)
146
+
147
+ if (artifacts.target != input.target) invalidRunner("Acceptance target must match the generated artifact-set target.", input.target)
148
+ const environment = deterministicEnvironment(input.environment)
149
+ let previousIndex = -1
150
+ const seen = new Set()
151
+ /** @type {{arguments: string[], stage: import("./semantic/types.js").AcceptanceStage, tool: Readonly<{executable: string, version: string}>}[]} */
152
+ const stages = []
153
+
154
+ for (let stagePosition = 0; stagePosition < input.stages.length; stagePosition += 1) {
155
+ const stage = input.stages[stagePosition]
156
+
157
+ if (!isPlainObject(stage)) invalidRunner("Acceptance stages must be distinct known stage records.", input.target)
158
+ const stageName = stage.stage
159
+
160
+ if (typeof stageName != "string" || !stageIndexes.has(stageName) || seen.has(stageName)) {
161
+ invalidRunner("Acceptance stages must be distinct known stage records.", input.target)
162
+ }
163
+ const index = /** @type {number} */ (stageIndexes.get(stageName))
164
+
165
+ if (index < previousIndex) invalidRunner("Acceptance stages must follow parse-to-execute order.", input.target)
166
+ previousIndex = index
167
+ seen.add(stageName)
168
+ const argumentCandidate = stage.arguments
169
+ const stageArguments = isDenseArray(argumentCandidate) ? [...argumentCandidate] : undefined
170
+ const toolCandidate = stage.tool
171
+ const tool = isPlainObject(toolCandidate) ? Object.freeze({
172
+ executable: toolCandidate.executable,
173
+ id: toolCandidate.id,
174
+ source: toolCandidate.source,
175
+ version: toolCandidate.version
176
+ }) : undefined
177
+
178
+ if (stageArguments == undefined || !stageArguments.every((argument) => typeof argument == "string" && !argument.includes("\0")) ||
179
+ !isTool(tool)) invalidRunner(`Acceptance stage '${stageName}' has an invalid tool or argument array.`, input.target)
180
+
181
+ stages.push(Object.freeze({arguments: stageArguments, stage: stageName, tool}))
182
+ }
183
+
184
+ return {artifacts, environment, stages, target: input.target, timeoutMs: input.timeoutMs}
185
+ } catch (error) {
186
+ if (error instanceof SemantifoldDiagnostic && error.code == "INVALID_ACCEPTANCE_RUNNER") throw error
187
+ if (error instanceof SemantifoldDiagnostic) {
188
+ throw new SemantifoldDiagnostic({
189
+ cause: error,
190
+ code: "INVALID_ACCEPTANCE_RUNNER",
191
+ language: typeof input.target == "string" ? input.target : "acceptance",
192
+ message: `Acceptance runner input is invalid: ${error.detail}`
193
+ })
194
+ }
195
+
196
+ return invalidRunner("Acceptance runner input is invalid.", typeof input.target == "string" ? input.target : "acceptance", error)
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Normalizes a subprocess failure with exact stage and toolchain context.
202
+ * @param {unknown} error - Subprocess rejection.
203
+ * @param {{arguments: string[], stage: string, tool: Readonly<{executable: string, version: string}>}} stage - Failed stage.
204
+ * @param {string} target - Acceptance target.
205
+ * @param {number} timeoutMs - Configured stage timeout.
206
+ * @returns {SemantifoldDiagnostic} Normalized failure.
207
+ */
208
+ function processDiagnostic(error, stage, target, timeoutMs) {
209
+ const fields = processErrorFields(error)
210
+ const outputLimited = fields.nativeCode == "ERR_CHILD_PROCESS_STDIO_MAXBUFFER"
211
+ const timedOut = !outputLimited && exceededOwnedDeadline(error)
212
+ const launchFailure = fields.nativeCode != undefined && launchErrorCodes.has(fields.nativeCode)
213
+ const signaled = !outputLimited && !timedOut && fields.signal != undefined
214
+ const code = outputLimited ? "ACCEPTANCE_OUTPUT_LIMIT" : timedOut ? "ACCEPTANCE_TIMEOUT" : launchFailure ? "ACCEPTANCE_LAUNCH_FAILURE" : signaled
215
+ ? "ACCEPTANCE_SIGNAL"
216
+ : "ACCEPTANCE_NONZERO_EXIT"
217
+ const reason = outputLimited ? `exceeded the ${acceptanceMaxBuffer}-byte output capture limit (${fields.nativeCode})` : timedOut
218
+ ? `timed out after ${timeoutMs}ms` : launchFailure
219
+ ? `could not launch (${fields.nativeCode})`
220
+ : signaled ? `terminated by signal ${fields.signal}`
221
+ : fields.exitCode != undefined ? `exited nonzero (${fields.exitCode})`
222
+ : `failed after launch (${fields.nativeCode ?? "unknown"})`
223
+
224
+ return new SemantifoldDiagnostic({
225
+ cause: outputLimited ? undefined : error instanceof Error ? error : undefined,
226
+ code,
227
+ executable: stage.tool.executable,
228
+ exitCode: fields.exitCode,
229
+ language: target,
230
+ message: `Acceptance stage '${stage.stage}' ${reason} using '${stage.tool.executable}' (${stage.tool.version}).`,
231
+ signal: fields.signal,
232
+ stage: stage.stage,
233
+ stderr: fields.stderr,
234
+ stdout: fields.stdout,
235
+ version: stage.tool.version
236
+ })
237
+ }
238
+
239
+ /**
240
+ * Narrows the stable fields of an opaque child-process failure.
241
+ * @param {unknown} error - Process rejection.
242
+ * @returns {{exitCode: number | undefined, nativeCode: string | undefined, signal: string | undefined, stderr: string, stdout: string}} Stable fields.
243
+ */
244
+ function processErrorFields(error) {
245
+ if (!error || typeof error != "object") return {exitCode: undefined, nativeCode: undefined, signal: undefined, stderr: "", stdout: ""}
246
+ const value = /** @type {Record<string, unknown>} */ (error)
247
+ const nativeCode = typeof value.code == "string" ? value.code : undefined
248
+ const outputLimited = nativeCode == "ERR_CHILD_PROCESS_STDIO_MAXBUFFER"
249
+
250
+ return {
251
+ exitCode: typeof value.code == "number" ? value.code : undefined,
252
+ nativeCode,
253
+ signal: typeof value.signal == "string" ? value.signal : undefined,
254
+ stderr: !outputLimited && typeof value.stderr == "string" ? value.stderr : "",
255
+ stdout: !outputLimited && typeof value.stdout == "string" ? value.stdout : ""
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Checks the discovered-tool fields consumed by the runner.
261
+ * @param {unknown} value - Candidate tool.
262
+ * @returns {value is import("./semantic/types.js").DiscoveredToolchain} Whether the tool contract is present.
263
+ */
264
+ function isTool(value) {
265
+ return isPlainObject(value) && typeof value.id == "string" && typeof value.executable == "string" && path.isAbsolute(value.executable) &&
266
+ !value.executable.includes("\0") && typeof value.version == "string" && value.version.length > 0 &&
267
+ (value.source == "canonical" || value.source == "override")
268
+ }
269
+
270
+ /**
271
+ * Keeps the primary acceptance error while recording bounded cleanup evidence in its cause chain.
272
+ * @param {Error} primaryFailure - Original materialization or stage failure.
273
+ * @param {unknown} cleanupFailure - Cleanup rejection.
274
+ * @param {string} target - Acceptance target.
275
+ * @returns {Error} The original primary error with structured cleanup evidence.
276
+ */
277
+ function preservePrimaryFailure(primaryFailure, cleanupFailure, target) {
278
+ const cleanupEvidence = new SemantifoldDiagnostic({
279
+ code: "ACCEPTANCE_CLEANUP_FAILURE",
280
+ language: cleanupFailure instanceof SemantifoldDiagnostic ? cleanupFailure.language : target,
281
+ message: "Isolated acceptance-directory cleanup failed after the primary acceptance failure."
282
+ })
283
+ const causes = primaryFailure.cause instanceof Error ? [primaryFailure.cause, cleanupEvidence] : [cleanupEvidence]
284
+
285
+ Object.defineProperty(primaryFailure, "cause", {
286
+ configurable: true,
287
+ value: new AggregateError(causes, "Acceptance failed and isolated-directory cleanup also failed."),
288
+ writable: true
289
+ })
290
+
291
+ return primaryFailure
292
+ }
293
+
294
+ /**
295
+ * Throws a normalized runner-configuration diagnostic.
296
+ * @param {string} message - Failure detail.
297
+ * @param {unknown} target - Candidate target identity.
298
+ * @param {unknown} [error] - Preserved cause.
299
+ * @returns {never} Always throws.
300
+ */
301
+ function invalidRunner(message, target, error) {
302
+ throw new SemantifoldDiagnostic({
303
+ cause: error instanceof Error ? error : undefined,
304
+ code: "INVALID_ACCEPTANCE_RUNNER",
305
+ language: typeof target == "string" && target.length > 0 ? target : "acceptance",
306
+ message
307
+ })
308
+ }
309
+
310
+ /**
311
+ * Checks for an ordinary string-keyed object.
312
+ * @param {unknown} value - Candidate value.
313
+ * @returns {value is Record<string, unknown>} Whether the value is a plain object.
314
+ */
315
+ function isPlainObject(value) {
316
+ return typeof value == "object" && value != null && !Array.isArray(value) && Object.getPrototypeOf(value) == Object.prototype
317
+ }
318
+
319
+ /**
320
+ * Removes the isolated acceptance directory with a normalized failure.
321
+ * @param {string} directory - Exact temporary directory.
322
+ * @param {string} target - Acceptance target.
323
+ * @param {typeof rm} removeDirectory - Instance-owned removal operation.
324
+ * @returns {Promise<void>} Cleanup completion.
325
+ */
326
+ async function removeAcceptanceDirectory(directory, target, removeDirectory) {
327
+ try {
328
+ await removeDirectory(directory, {force: true, recursive: true})
329
+ } catch (error) {
330
+ throw new SemantifoldDiagnostic({
331
+ cause: error instanceof Error ? error : undefined,
332
+ code: "ACCEPTANCE_CLEANUP_FAILURE",
333
+ language: target,
334
+ message: `Failed to remove isolated acceptance directory '${directory}'.`
335
+ })
336
+ }
337
+ }
338
+
339
+ /**
340
+ * Creates one isolated acceptance directory with a normalized setup failure.
341
+ * @param {string} target - Acceptance target.
342
+ * @returns {Promise<string>} Exact temporary directory.
343
+ */
344
+ async function createAcceptanceDirectory(target) {
345
+ try {
346
+ return await mkdtemp(path.join(os.tmpdir(), "semantifold-acceptance-"))
347
+ } catch (error) {
348
+ throw new SemantifoldDiagnostic({
349
+ cause: error instanceof Error ? error : undefined,
350
+ code: "ACCEPTANCE_SETUP_FAILURE",
351
+ language: target,
352
+ message: "Failed to create an isolated acceptance directory."
353
+ })
354
+ }
355
+ }
356
+
357
+ /**
358
+ * Writes only the already-validated generated artifacts into the isolated directory.
359
+ * @param {import("./semantic/types.js").GeneratedArtifactSet} artifacts - Complete validated set.
360
+ * @param {string} directory - Exact temporary directory.
361
+ * @param {string} target - Acceptance target.
362
+ * @returns {Promise<void>} Materialization completion.
363
+ */
364
+ async function materializeArtifacts(artifacts, directory, target) {
365
+ for (const artifact of artifacts.artifacts) {
366
+ const filename = path.join(directory, ...artifact.path.split("/"))
367
+
368
+ try {
369
+ await mkdir(path.dirname(filename), {recursive: true})
370
+ await writeFile(filename, artifact.content)
371
+ } catch (error) {
372
+ throw new SemantifoldDiagnostic({
373
+ cause: error instanceof Error ? error : undefined,
374
+ code: "ACCEPTANCE_MATERIALIZATION_FAILURE",
375
+ language: target,
376
+ message: `Failed to materialize generated artifact '${artifact.path}'.`
377
+ })
378
+ }
379
+ }
380
+ }
package/src/array.js ADDED
@@ -0,0 +1,19 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * Checks that every index below an array's length is an own property.
5
+ * @param {unknown} value - Candidate ordered array.
6
+ * @returns {value is unknown[]} Whether the value is a dense array.
7
+ */
8
+ export function isDenseArray(value) {
9
+ if (!Array.isArray(value)) return false
10
+ let indexedProperties = 0
11
+
12
+ for (const property of Object.getOwnPropertyNames(value)) {
13
+ const index = Number(property)
14
+
15
+ if (Number.isInteger(index) && index >= 0 && index < value.length && String(index) == property) indexedProperties += 1
16
+ }
17
+
18
+ return indexedProperties == value.length
19
+ }
@@ -0,0 +1,34 @@
1
+ // @ts-check
2
+
3
+ import {hasOnlyUnicodeScalars} from "./semantic/scalars.js"
4
+
5
+ const lineTerminatorPattern = /[\n\r\u2028\u2029]/u
6
+
7
+ /**
8
+ * Validates filename metadata without imposing artifact-set path semantics.
9
+ * @param {unknown} value - Candidate filename.
10
+ * @returns {value is string} Whether the value is a non-empty single-line string.
11
+ */
12
+ export function isValidFilenameMetadata(value) {
13
+ return typeof value == "string" && value.length > 0 && !lineTerminatorPattern.test(value)
14
+ }
15
+
16
+ /**
17
+ * Validates a safe relative POSIX artifact path.
18
+ * @param {unknown} value - Candidate path.
19
+ * @returns {value is string} Whether the value is safe.
20
+ */
21
+ export function isSafeArtifactPath(value) {
22
+ if (typeof value != "string" || value.length == 0 || value.includes("\\") || value.includes("\0") ||
23
+ !hasOnlyUnicodeScalars(value)) return false
24
+ if (value.startsWith("/") || /^[A-Za-z]:/u.test(value)) return false
25
+
26
+ const parts = value.split("/")
27
+
28
+ return parts.every((part) => part.length > 0 && part != "." && part != ".." &&
29
+ [...part].every((character) => {
30
+ const codePoint = character.codePointAt(0)
31
+
32
+ return codePoint != undefined && codePoint > 31 && codePoint != 127
33
+ }))
34
+ }