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,389 @@
1
+ // @ts-check
2
+ import { decodedMappings, encodedMappings, presortedDecodedMap, TraceMap } from "@jridgewell/trace-mapping";
3
+ import { isDenseArray } from "./array.js";
4
+ import { isSafeArtifactPath, isValidFilenameMetadata } from "./artifact-path.js";
5
+ import { finalizeByteMapping } from "./binary-mapping.js";
6
+ import { SemantifoldDiagnostic } from "./diagnostic.js";
7
+ import { finalizeMapping, toSourceMapV3 } from "./mapping.js";
8
+ import { isSourceRangeOrdered } from "./semantic/location.js";
9
+ import { hasOnlyUnicodeScalars } from "./semantic/scalars.js";
10
+ const artifactRoles = new Set(["entry", "source", "manifest", "support", "mapping", "resource", "loader"]);
11
+ const mediaTypePattern = /^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+(?:;[\u0020-\u007e]+)?$/u;
12
+ /**
13
+ * Transactionally validates and constructs one deterministic generated artifact set.
14
+ * @param {unknown} candidate - Artifact-set fields.
15
+ * @returns {import("./semantic/types.js").GeneratedArtifactSet} Detached immutable set.
16
+ */
17
+ export function createGeneratedArtifactSet(candidate) {
18
+ try {
19
+ if (!isPlainObject(candidate) || typeof candidate.target != "string" || candidate.target.length == 0 ||
20
+ !/^[a-z][a-z0-9-]*$/u.test(candidate.target)) {
21
+ invalidArtifactSet("Artifact set requires a stable lowercase target ID.", targetOf(candidate));
22
+ }
23
+ if (!isDenseArray(candidate.artifacts) || candidate.artifacts.length == 0) {
24
+ invalidArtifactSet("Artifact set requires a non-empty ordered artifact array.", candidate.target);
25
+ }
26
+ const target = candidate.target;
27
+ const paths = new Set();
28
+ const directoryPaths = new Set();
29
+ /** @type {string[]} */
30
+ const entryPaths = [];
31
+ /** @type {import("./semantic/types.js").GeneratedSetArtifact[]} */
32
+ const artifacts = [];
33
+ for (let index = 0; index < candidate.artifacts.length; index += 1) {
34
+ const artifact = candidate.artifacts[index];
35
+ if (!isPlainObject(artifact))
36
+ invalidArtifactSet(`Artifact ${index} must be a plain object.`, target);
37
+ const artifactPath = artifact.path;
38
+ const mediaType = artifact.mediaType;
39
+ const role = artifact.role;
40
+ const contentKind = artifact.contentKind;
41
+ if (!isSafeArtifactPath(artifactPath))
42
+ invalidArtifactSet(`Artifact ${index} has an unsafe path.`, target);
43
+ if (paths.has(artifactPath))
44
+ invalidArtifactSet(`Duplicate artifact path '${artifactPath}'.`, target);
45
+ if (directoryPaths.has(artifactPath)) {
46
+ invalidArtifactSet(`Artifact path '${artifactPath}' collides with a required directory.`, target);
47
+ }
48
+ const parentPaths = artifactDirectoryPaths(artifactPath);
49
+ for (const parentPath of parentPaths) {
50
+ if (paths.has(parentPath)) {
51
+ invalidArtifactSet(`Artifact path '${artifactPath}' descends from artifact file '${parentPath}'.`, target);
52
+ }
53
+ }
54
+ paths.add(artifactPath);
55
+ for (const parentPath of parentPaths)
56
+ directoryPaths.add(parentPath);
57
+ if (typeof mediaType != "string" || !mediaTypePattern.test(mediaType) || /[\r\n]/u.test(mediaType)) {
58
+ invalidArtifactSet(`Artifact '${artifactPath}' has an invalid media type.`, target);
59
+ }
60
+ if (typeof role != "string" || !artifactRoles.has(role))
61
+ invalidArtifactSet(`Artifact '${artifactPath}' has an invalid role.`, target);
62
+ if (artifact.ownership != "generated")
63
+ invalidArtifactSet(`Artifact '${artifactPath}' must have generated ownership.`, target);
64
+ if (role == "entry") {
65
+ if (entryPaths.length > 0)
66
+ invalidArtifactSet("Artifact set must declare exactly one entry artifact.", target);
67
+ entryPaths.push(artifactPath);
68
+ }
69
+ const contentValue = artifact.content;
70
+ /** @type {string | Uint8Array} */
71
+ let content;
72
+ if (contentKind == "text") {
73
+ if (typeof contentValue != "string" || contentValue.length == 0 || !hasOnlyUnicodeScalars(contentValue)) {
74
+ invalidArtifactSet(`Text artifact '${artifactPath}' requires non-empty string content.`, target);
75
+ }
76
+ content = contentValue;
77
+ }
78
+ else if (contentKind == "binary") {
79
+ if (!(contentValue instanceof Uint8Array) || contentValue.byteLength == 0) {
80
+ invalidArtifactSet(`Binary artifact '${artifactPath}' requires non-empty bytes.`, target);
81
+ }
82
+ content = new Uint8Array(contentValue);
83
+ }
84
+ else
85
+ invalidArtifactSet(`Artifact '${artifactPath}' has an invalid content kind.`, target);
86
+ const provenance = validateArtifactProvenance(artifact.provenance, contentKind, artifactPath, content, target);
87
+ artifacts.push(/** @type {import("./semantic/types.js").GeneratedSetArtifact} */ (freezeArtifact({
88
+ content,
89
+ contentKind,
90
+ mediaType,
91
+ ownership: /** @type {const} */ ("generated"),
92
+ path: artifactPath,
93
+ provenance,
94
+ role
95
+ })));
96
+ }
97
+ if (entryPaths.length != 1)
98
+ invalidArtifactSet("Artifact set must declare exactly one entry artifact.", candidate.target);
99
+ return Object.freeze({
100
+ artifacts: Object.freeze(artifacts),
101
+ entry: entryPaths[0],
102
+ schema: /** @type {const} */ ("GeneratedArtifactSet"),
103
+ target,
104
+ version: /** @type {const} */ (1)
105
+ });
106
+ }
107
+ catch (error) {
108
+ if (error instanceof SemantifoldDiagnostic && error.code == "INVALID_ARTIFACT_SET")
109
+ throw error;
110
+ return invalidArtifactSet("Artifact-set validation failed.", targetOf(candidate), error);
111
+ }
112
+ }
113
+ /**
114
+ * Validates artifact-level text, byte, or synthetic provenance.
115
+ * @param {unknown} value - Provenance candidate.
116
+ * @param {unknown} contentKind - Validated artifact content kind.
117
+ * @param {string} artifactPath - Validated artifact path.
118
+ * @param {string | Uint8Array} content - Detached artifact content.
119
+ * @param {string} target - Artifact target.
120
+ * @returns {import("./semantic/types.js").ArtifactProvenance} Validated provenance.
121
+ */
122
+ function validateArtifactProvenance(value, contentKind, artifactPath, content, target) {
123
+ if (!isPlainObject(value))
124
+ invalidArtifactSet(`Artifact '${artifactPath}' requires provenance.`, target);
125
+ if (value.kind == "synthetic") {
126
+ if (typeof value.reason != "string" || value.reason.length == 0 || !isDenseArray(value.relatedOrigins)) {
127
+ invalidArtifactSet(`Synthetic artifact '${artifactPath}' requires an explicit reason and related origins.`, target);
128
+ }
129
+ if (contentKind == "binary") {
130
+ invalidArtifactSet(`Binary artifact '${artifactPath}' requires byte-range provenance.`, target);
131
+ }
132
+ /** @type {import("./semantic/types.js").RelatedOrigin[]} */
133
+ const relatedOrigins = [];
134
+ for (let index = 0; index < value.relatedOrigins.length; index += 1) {
135
+ relatedOrigins.push(validateRelatedOrigin(value.relatedOrigins[index], artifactPath, index, target));
136
+ }
137
+ return Object.freeze({ kind: /** @type {const} */ ("synthetic"), reason: value.reason, relatedOrigins: Object.freeze(relatedOrigins) });
138
+ }
139
+ if (value.kind == "text") {
140
+ const mappingCandidate = value.mapping;
141
+ if (contentKind != "text" || !isPlainObject(mappingCandidate) || mappingCandidate.schema != "SemantifoldMapping" ||
142
+ !isPlainObject(mappingCandidate.generated) || mappingCandidate.generated.filename != artifactPath ||
143
+ mappingCandidate.generated.content != content || !isPlainObject(value.sourceMap)) {
144
+ invalidArtifactSet(`Text artifact '${artifactPath}' has mismatched rich or Source Map provenance.`, target);
145
+ }
146
+ if (value.sourceMapFilename !== undefined && !isValidFilenameMetadata(value.sourceMapFilename)) {
147
+ invalidArtifactSet(`Text artifact '${artifactPath}' has invalid Source Map filename metadata.`, target);
148
+ }
149
+ const mapping = finalizeMapping(mappingCandidate);
150
+ const sourceMap = validateSourceMap(value.sourceMap, artifactPath, target);
151
+ const projectedSourceMap = toSourceMapV3(mapping);
152
+ if (!sameJsonValue(sourceMap, projectedSourceMap)) {
153
+ invalidArtifactSet(`Text artifact '${artifactPath}' has Source Map provenance that contradicts its rich mapping.`, target);
154
+ }
155
+ return Object.freeze({
156
+ kind: /** @type {const} */ ("text"),
157
+ mapping,
158
+ sourceMap,
159
+ sourceMapFilename: value.sourceMapFilename
160
+ });
161
+ }
162
+ if (value.kind == "bytes") {
163
+ if (contentKind != "binary")
164
+ invalidArtifactSet(`Byte provenance requires binary content for '${artifactPath}'.`, target);
165
+ const mapping = finalizeByteMapping(value.mapping);
166
+ if (mapping.generated.path != artifactPath || mapping.generated.byteLength != /** @type {Uint8Array} */ (content).byteLength) {
167
+ invalidArtifactSet(`Byte provenance does not match artifact '${artifactPath}'.`, target);
168
+ }
169
+ return Object.freeze({ kind: /** @type {const} */ ("bytes"), mapping });
170
+ }
171
+ return invalidArtifactSet(`Artifact '${artifactPath}' has an unknown provenance kind.`, target);
172
+ }
173
+ /**
174
+ * Freezes one validated artifact record.
175
+ * @param {Record<string, unknown>} artifact - Validated fields.
176
+ * @returns {Readonly<Record<string, unknown>>} Frozen record.
177
+ */
178
+ function freezeArtifact(artifact) {
179
+ if (artifact.contentKind == "binary" && artifact.content instanceof Uint8Array) {
180
+ const content = artifact.content;
181
+ Object.defineProperty(artifact, "content", {
182
+ configurable: false,
183
+ enumerable: true,
184
+ get() {
185
+ return new Uint8Array(content);
186
+ }
187
+ });
188
+ }
189
+ return Object.freeze(artifact);
190
+ }
191
+ /**
192
+ * Lists every directory a safe relative POSIX artifact path requires.
193
+ * @param {string} artifactPath - Validated artifact path.
194
+ * @returns {string[]} Ordered parent directory paths.
195
+ */
196
+ function artifactDirectoryPaths(artifactPath) {
197
+ const parts = artifactPath.split("/");
198
+ /** @type {string[]} */
199
+ const directories = [];
200
+ for (let index = 1; index < parts.length; index += 1)
201
+ directories.push(parts.slice(0, index).join("/"));
202
+ return directories;
203
+ }
204
+ /**
205
+ * Throws a normalized artifact-set diagnostic.
206
+ * @param {string} message - Failure detail.
207
+ * @param {string} target - Artifact target.
208
+ * @param {unknown} [error] - Preserved validation cause.
209
+ * @returns {never} Always throws.
210
+ */
211
+ function invalidArtifactSet(message, target, error) {
212
+ throw new SemantifoldDiagnostic({
213
+ cause: error instanceof Error ? error : undefined,
214
+ code: "INVALID_ARTIFACT_SET",
215
+ language: target,
216
+ message
217
+ });
218
+ }
219
+ /**
220
+ * Derives a safe diagnostic identity from an unknown request.
221
+ * @param {unknown} value - Candidate set.
222
+ * @returns {string} Diagnostic identity.
223
+ */
224
+ function targetOf(value) {
225
+ return isPlainObject(value) && typeof value.target == "string" && value.target.length > 0 ? value.target : "artifact";
226
+ }
227
+ /**
228
+ * Checks for an ordinary string-keyed object.
229
+ * @param {unknown} value - Candidate value.
230
+ * @returns {value is Record<string, unknown>} Whether the value is a plain object.
231
+ */
232
+ function isPlainObject(value) {
233
+ return typeof value == "object" && value != null && !Array.isArray(value) && Object.getPrototypeOf(value) == Object.prototype;
234
+ }
235
+ /**
236
+ * Validates an artifact-level related origin without interpreting source offsets as generated bytes.
237
+ * @param {unknown} value - Related-origin candidate.
238
+ * @param {string} artifactPath - Owning artifact path.
239
+ * @param {number} index - Origin index.
240
+ * @param {string} target - Artifact target.
241
+ * @returns {import("./semantic/types.js").RelatedOrigin} Detached related origin.
242
+ */
243
+ function validateRelatedOrigin(value, artifactPath, index, target) {
244
+ if (!isPlainObject(value) || typeof value.sourceId != "string" || value.sourceId.length == 0 ||
245
+ !isPlainObject(value.location) || typeof value.location.filename != "string" || value.location.filename.length == 0 ||
246
+ !validSourcePoint(value.location.start) || !validSourcePoint(value.location.end) ||
247
+ value.location.end.offset < value.location.start.offset || !isSourceRangeOrdered(value.location.start, value.location.end)) {
248
+ invalidArtifactSet(`Artifact '${artifactPath}' has malformed related origin ${index}.`, target);
249
+ }
250
+ return deepFreeze({
251
+ location: {
252
+ end: { ...value.location.end },
253
+ filename: value.location.filename,
254
+ start: { ...value.location.start }
255
+ },
256
+ sourceId: value.sourceId,
257
+ ...(optionalString(value.nodeId, "nodeId", artifactPath, index, target)),
258
+ ...(optionalString(value.symbolId, "symbolId", artifactPath, index, target)),
259
+ ...(optionalString(value.role, "role", artifactPath, index, target))
260
+ });
261
+ }
262
+ /**
263
+ * Validates one optional related-origin string field.
264
+ * @param {unknown} value - Candidate value.
265
+ * @param {string} property - Property name.
266
+ * @param {string} artifactPath - Owning artifact path.
267
+ * @param {number} index - Origin index.
268
+ * @param {string} target - Artifact target.
269
+ * @returns {Record<string, string>} Present validated property or an empty record.
270
+ */
271
+ function optionalString(value, property, artifactPath, index, target) {
272
+ if (value === undefined)
273
+ return {};
274
+ if (typeof value != "string" || value.length == 0) {
275
+ invalidArtifactSet(`Artifact '${artifactPath}' has invalid ${property} in related origin ${index}.`, target);
276
+ }
277
+ return { [property]: value };
278
+ }
279
+ /**
280
+ * Checks one UTF-16 source point.
281
+ * @param {unknown} value - Candidate point.
282
+ * @returns {value is import("./semantic/types.js").SourcePoint} Whether the point is structurally valid.
283
+ */
284
+ function validSourcePoint(value) {
285
+ return isPlainObject(value) && typeof value.line == "number" && Number.isSafeInteger(value.line) && value.line > 0 &&
286
+ typeof value.column == "number" && Number.isSafeInteger(value.column) && value.column > 0 &&
287
+ typeof value.offset == "number" && Number.isSafeInteger(value.offset) && value.offset >= 0;
288
+ }
289
+ /**
290
+ * Validates and detaches the Source Map v3 projection carried by a text artifact.
291
+ * @param {unknown} value - Source Map candidate.
292
+ * @param {string} artifactPath - Owning artifact path.
293
+ * @param {string} target - Artifact target.
294
+ * @returns {import("@jridgewell/gen-mapping").EncodedSourceMap} Detached Source Map.
295
+ */
296
+ function validateSourceMap(value, artifactPath, target) {
297
+ if (!isPlainObject(value) || value.version != 3 || value.file != artifactPath || typeof value.mappings != "string" ||
298
+ !isDenseArray(value.names) || !value.names.every((name) => typeof name == "string") ||
299
+ !isDenseArray(value.sources) || !value.sources.every((source) => typeof source == "string") ||
300
+ (value.sourcesContent !== undefined && (!isDenseArray(value.sourcesContent) ||
301
+ !value.sourcesContent.every((source) => source == null || typeof source == "string")))) {
302
+ invalidArtifactSet(`Text artifact '${artifactPath}' has malformed Source Map v3 provenance.`, target);
303
+ }
304
+ validateEncodedSourceMapMappings(
305
+ /** @type {import("@jridgewell/trace-mapping").EncodedSourceMap} */ ( /** @type {unknown} */(value)), artifactPath, target);
306
+ const detached = /** @type {unknown} */ (structuredClone(value));
307
+ return deepFreeze(/** @type {import("@jridgewell/gen-mapping").EncodedSourceMap} */ (detached));
308
+ }
309
+ /**
310
+ * Decodes and validates the Source Map payload with the installed mapping implementation.
311
+ * @param {import("@jridgewell/trace-mapping").EncodedSourceMap} sourceMap - Structurally validated map.
312
+ * @param {string} artifactPath - Owning artifact path.
313
+ * @param {string} target - Artifact target.
314
+ * @returns {void}
315
+ */
316
+ function validateEncodedSourceMapMappings(sourceMap, artifactPath, target) {
317
+ /** @type {Readonly<import("@jridgewell/trace-mapping").SourceMapSegment[][]>} */
318
+ let decoded;
319
+ let canonicalMappings;
320
+ try {
321
+ decoded = decodedMappings(new TraceMap(sourceMap));
322
+ const decodedMap = /** @type {import("@jridgewell/trace-mapping").DecodedSourceMap} */ ({
323
+ ...sourceMap,
324
+ mappings: structuredClone(decoded)
325
+ });
326
+ canonicalMappings = encodedMappings(presortedDecodedMap(decodedMap));
327
+ }
328
+ catch (error) {
329
+ invalidArtifactSet(`Text artifact '${artifactPath}' has invalid encoded Source Map mappings.`, target, error);
330
+ }
331
+ if (canonicalMappings != sourceMap.mappings ||
332
+ !validDecodedSourceMapMappings(decoded, sourceMap.sources.length, sourceMap.names.length)) {
333
+ invalidArtifactSet(`Text artifact '${artifactPath}' has invalid encoded Source Map mappings.`, target);
334
+ }
335
+ }
336
+ /**
337
+ * Validates decoded Source Map segment shape and referenced indices.
338
+ * @param {Readonly<import("@jridgewell/trace-mapping").SourceMapSegment[][]>} lines - Decoded mapping lines.
339
+ * @param {number} sourceCount - Declared source count.
340
+ * @param {number} nameCount - Declared name count.
341
+ * @returns {boolean} Whether every segment is semantically valid.
342
+ */
343
+ function validDecodedSourceMapMappings(lines, sourceCount, nameCount) {
344
+ return lines.every((line) => line.every((segment) => {
345
+ if (segment.length != 1 && segment.length != 4 && segment.length != 5)
346
+ return false;
347
+ if (!segment.every((field) => Number.isSafeInteger(field) && field >= 0))
348
+ return false;
349
+ if (segment.length == 1)
350
+ return true;
351
+ if (segment[1] >= sourceCount)
352
+ return false;
353
+ return segment.length == 4 || segment[4] < nameCount;
354
+ }));
355
+ }
356
+ /**
357
+ * Compares detached JSON values without depending on caller object-key order.
358
+ * @param {unknown} left - First JSON value.
359
+ * @param {unknown} right - Second JSON value.
360
+ * @returns {boolean} Whether both values are structurally identical.
361
+ */
362
+ function sameJsonValue(left, right) {
363
+ if (left === right)
364
+ return true;
365
+ if (Array.isArray(left) || Array.isArray(right)) {
366
+ return Array.isArray(left) && Array.isArray(right) && left.length == right.length &&
367
+ left.every((entry, index) => sameJsonValue(entry, right[index]));
368
+ }
369
+ if (!isPlainObject(left) || !isPlainObject(right))
370
+ return false;
371
+ const leftKeys = Object.keys(left);
372
+ const rightKeys = Object.keys(right);
373
+ return leftKeys.length == rightKeys.length &&
374
+ leftKeys.every((key) => Object.hasOwn(right, key) && sameJsonValue(left[key], right[key]));
375
+ }
376
+ /**
377
+ * Deeply freezes a detached JSON value.
378
+ * @template T
379
+ * @param {T} value - Detached value.
380
+ * @returns {T} Frozen value.
381
+ */
382
+ function deepFreeze(value) {
383
+ if (!value || typeof value != "object" || Object.isFrozen(value))
384
+ return value;
385
+ for (const nested of Object.values(value))
386
+ deepFreeze(nested);
387
+ return Object.freeze(value);
388
+ }
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FydGlmYWN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDekcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUcsTUFBTSxnQkFBZ0IsR0FBRyx1RUFBdUUsQ0FBQTtBQUVoRzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFNBQVM7SUFDbEQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDbEcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0s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Ozs7R0FLRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUs7SUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU5RSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVjb2RlZE1hcHBpbmdzLCBlbmNvZGVkTWFwcGluZ3MsIHByZXNvcnRlZERlY29kZWRNYXAsIFRyYWNlTWFwfSBmcm9tIFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtpc1NhZmVBcnRpZmFjdFBhdGgsIGlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhfSBmcm9tIFwiLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7ZmluYWxpemVCeXRlTWFwcGluZ30gZnJvbSBcIi4vYmluYXJ5LW1hcHBpbmcuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuL21hcHBpbmcuanNcIlxuaW1wb3J0IHtpc1NvdXJjZVJhbmdlT3JkZXJlZH0gZnJvbSBcIi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuL3NlbWFudGljL3NjYWxhcnMuanNcIlxuXG5jb25zdCBhcnRpZmFjdFJvbGVzID0gbmV3IFNldChbXCJlbnRyeVwiLCBcInNvdXJjZVwiLCBcIm1hbmlmZXN0XCIsIFwic3VwcG9ydFwiLCBcIm1hcHBpbmdcIiwgXCJyZXNvdXJjZVwiLCBcImxvYWRlclwiXSlcbmNvbnN0IG1lZGlhVHlwZVBhdHRlcm4gPSAvXltBLVphLXowLTkhIyQmXl8uKy1dK1xcL1tBLVphLXowLTkhIyQmXl8uKy1dKyg/OjtbXFx1MDAyMC1cXHUwMDdlXSspPyQvdVxuXG4vKipcbiAqIFRyYW5zYWN0aW9uYWxseSB2YWxpZGF0ZXMgYW5kIGNvbnN0cnVjdHMgb25lIGRldGVybWluaXN0aWMgZ2VuZXJhdGVkIGFydGlmYWN0IHNldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gQXJ0aWZhY3Qtc2V0IGZpZWxkcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBEZXRhY2hlZCBpbW11dGFibGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQoY2FuZGlkYXRlKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkgfHwgdHlwZW9mIGNhbmRpZGF0ZS50YXJnZXQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUudGFyZ2V0Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAhL15bYS16XVthLXowLTktXSokL3UudGVzdChjYW5kaWRhdGUudGFyZ2V0KSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qgc2V0IHJlcXVpcmVzIGEgc3RhYmxlIGxvd2VyY2FzZSB0YXJnZXQgSUQuXCIsIHRhcmdldE9mKGNhbmRpZGF0ZSkpXG4gICAgfVxuICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcnRpZmFjdHMpIHx8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoID09IDApIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCByZXF1aXJlcyBhIG5vbi1lbXB0eSBvcmRlcmVkIGFydGlmYWN0IGFycmF5LlwiLCBjYW5kaWRhdGUudGFyZ2V0KVxuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBjYW5kaWRhdGUudGFyZ2V0XG5cbiAgICBjb25zdCBwYXRocyA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IGRpcmVjdG9yeVBhdGhzID0gbmV3IFNldCgpXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICBjb25zdCBlbnRyeVBhdGhzID0gW11cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gKi9cbiAgICBjb25zdCBhcnRpZmFjdHMgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBhcnRpZmFjdCA9IGNhbmRpZGF0ZS5hcnRpZmFjdHNbaW5kZXhdXG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChhcnRpZmFjdCkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJHtpbmRleH0gbXVzdCBiZSBhIHBsYWluIG9iamVjdC5gLCB0YXJnZXQpXG4gICAgICBjb25zdCBhcnRpZmFjdFBhdGggPSBhcnRpZmFjdC5wYXRoXG4gICAgICBjb25zdCBtZWRpYVR5cGUgPSBhcnRpZmFjdC5tZWRpYVR5cGVcbiAgICAgIGNvbnN0IHJvbGUgPSBhcnRpZmFjdC5yb2xlXG4gICAgICBjb25zdCBjb250ZW50S2luZCA9IGFydGlmYWN0LmNvbnRlbnRLaW5kXG5cbiAgICAgIGlmICghaXNTYWZlQXJ0aWZhY3RQYXRoKGFydGlmYWN0UGF0aCkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJHtpbmRleH0gaGFzIGFuIHVuc2FmZSBwYXRoLmAsIHRhcmdldClcbiAgICAgIGlmIChwYXRocy5oYXMoYXJ0aWZhY3RQYXRoKSkgaW52YWxpZEFydGlmYWN0U2V0KGBEdXBsaWNhdGUgYXJ0aWZhY3QgcGF0aCAnJHthcnRpZmFjdFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgICBpZiAoZGlyZWN0b3J5UGF0aHMuaGFzKGFydGlmYWN0UGF0aCkpIHtcbiAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCBwYXRoICcke2FydGlmYWN0UGF0aH0nIGNvbGxpZGVzIHdpdGggYSByZXF1aXJlZCBkaXJlY3RvcnkuYCwgdGFyZ2V0KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGF0aHMgPSBhcnRpZmFjdERpcmVjdG9yeVBhdGhzKGFydGlmYWN0UGF0aClcblxuICAgICAgZm9yIChjb25zdCBwYXJlbnRQYXRoIG9mIHBhcmVudFBhdGhzKSB7XG4gICAgICAgIGlmIChwYXRocy5oYXMocGFyZW50UGF0aCkpIHtcbiAgICAgICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0IHBhdGggJyR7YXJ0aWZhY3RQYXRofScgZGVzY2VuZHMgZnJvbSBhcnRpZmFjdCBmaWxlICcke3BhcmVudFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhdGhzLmFkZChhcnRpZmFjdFBhdGgpXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudFBhdGggb2YgcGFyZW50UGF0aHMpIGRpcmVjdG9yeVBhdGhzLmFkZChwYXJlbnRQYXRoKVxuICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUgIT0gXCJzdHJpbmdcIiB8fCAhbWVkaWFUeXBlUGF0dGVybi50ZXN0KG1lZGlhVHlwZSkgfHwgL1tcXHJcXG5dL3UudGVzdChtZWRpYVR5cGUpKSB7XG4gICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgbWVkaWEgdHlwZS5gLCB0YXJnZXQpXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RSb2xlcy5oYXMocm9sZSkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgcm9sZS5gLCB0YXJnZXQpXG4gICAgICBpZiAoYXJ0aWZhY3Qub3duZXJzaGlwICE9IFwiZ2VuZXJhdGVkXCIpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgbXVzdCBoYXZlIGdlbmVyYXRlZCBvd25lcnNoaXAuYCwgdGFyZ2V0KVxuICAgICAgaWYgKHJvbGUgPT0gXCJlbnRyeVwiKSB7XG4gICAgICAgIGlmIChlbnRyeVBhdGhzLmxlbmd0aCA+IDApIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCBtdXN0IGRlY2xhcmUgZXhhY3RseSBvbmUgZW50cnkgYXJ0aWZhY3QuXCIsIHRhcmdldClcbiAgICAgICAgZW50cnlQYXRocy5wdXNoKGFydGlmYWN0UGF0aClcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFZhbHVlID0gYXJ0aWZhY3QuY29udGVudFxuICAgICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBVaW50OEFycmF5fSAqL1xuICAgICAgbGV0IGNvbnRlbnRcblxuICAgICAgaWYgKGNvbnRlbnRLaW5kID09IFwidGV4dFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudFZhbHVlICE9IFwic3RyaW5nXCIgfHwgY29udGVudFZhbHVlLmxlbmd0aCA9PSAwIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMoY29udGVudFZhbHVlKSkge1xuICAgICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyByZXF1aXJlcyBub24tZW1wdHkgc3RyaW5nIGNvbnRlbnQuYCwgdGFyZ2V0KVxuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50VmFsdWVcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIikge1xuICAgICAgICBpZiAoIShjb250ZW50VmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBjb250ZW50VmFsdWUuYnl0ZUxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCaW5hcnkgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgbm9uLWVtcHR5IGJ5dGVzLmAsIHRhcmdldClcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50ID0gbmV3IFVpbnQ4QXJyYXkoY29udGVudFZhbHVlKVxuICAgICAgfSBlbHNlIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgY29udGVudCBraW5kLmAsIHRhcmdldClcblxuICAgICAgY29uc3QgcHJvdmVuYW5jZSA9IHZhbGlkYXRlQXJ0aWZhY3RQcm92ZW5hbmNlKGFydGlmYWN0LnByb3ZlbmFuY2UsIGNvbnRlbnRLaW5kLCBhcnRpZmFjdFBhdGgsIGNvbnRlbnQsIHRhcmdldClcblxuICAgICAgYXJ0aWZhY3RzLnB1c2goLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0fSAqLyAoZnJlZXplQXJ0aWZhY3Qoe1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjb250ZW50S2luZCxcbiAgICAgICAgbWVkaWFUeXBlLFxuICAgICAgICBvd25lcnNoaXA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcImdlbmVyYXRlZFwiKSxcbiAgICAgICAgcGF0aDogYXJ0aWZhY3RQYXRoLFxuICAgICAgICBwcm92ZW5hbmNlLFxuICAgICAgICByb2xlXG4gICAgICB9KSkpXG4gICAgfVxuXG4gICAgaWYgKGVudHJ5UGF0aHMubGVuZ3RoICE9IDEpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCBtdXN0IGRlY2xhcmUgZXhhY3RseSBvbmUgZW50cnkgYXJ0aWZhY3QuXCIsIGNhbmRpZGF0ZS50YXJnZXQpXG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBhcnRpZmFjdHM6IE9iamVjdC5mcmVlemUoYXJ0aWZhY3RzKSxcbiAgICAgIGVudHJ5OiBlbnRyeVBhdGhzWzBdLFxuICAgICAgc2NoZW1hOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJHZW5lcmF0ZWRBcnRpZmFjdFNldFwiKSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHZlcnNpb246IC8qKiBAdHlwZSB7Y29uc3R9ICovICgxKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiKSB0aHJvdyBlcnJvclxuXG4gICAgcmV0dXJuIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCB2YWxpZGF0aW9uIGZhaWxlZC5cIiwgdGFyZ2V0T2YoY2FuZGlkYXRlKSwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYXJ0aWZhY3QtbGV2ZWwgdGV4dCwgYnl0ZSwgb3Igc3ludGhldGljIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUHJvdmVuYW5jZSBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3Vua25vd259IGNvbnRlbnRLaW5kIC0gVmFsaWRhdGVkIGFydGlmYWN0IGNvbnRlbnQga2luZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBWYWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gY29udGVudCAtIERldGFjaGVkIGFydGlmYWN0IGNvbnRlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQXJ0aWZhY3RQcm92ZW5hbmNlfSBWYWxpZGF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBcnRpZmFjdFByb3ZlbmFuY2UodmFsdWUsIGNvbnRlbnRLaW5kLCBhcnRpZmFjdFBhdGgsIGNvbnRlbnQsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIHJlcXVpcmVzIHByb3ZlbmFuY2UuYCwgdGFyZ2V0KVxuXG4gIGlmICh2YWx1ZS5raW5kID09IFwic3ludGhldGljXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlLnJlYXNvbiAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLnJlYXNvbi5sZW5ndGggPT0gMCB8fCAhaXNEZW5zZUFycmF5KHZhbHVlLnJlbGF0ZWRPcmlnaW5zKSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBTeW50aGV0aWMgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgYW4gZXhwbGljaXQgcmVhc29uIGFuZCByZWxhdGVkIG9yaWdpbnMuYCwgdGFyZ2V0KVxuICAgIH1cbiAgICBpZiAoY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIikge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCaW5hcnkgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgYnl0ZS1yYW5nZSBwcm92ZW5hbmNlLmAsIHRhcmdldClcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi9cbiAgICBjb25zdCByZWxhdGVkT3JpZ2lucyA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUucmVsYXRlZE9yaWdpbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICByZWxhdGVkT3JpZ2lucy5wdXNoKHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZS5yZWxhdGVkT3JpZ2luc1tpbmRleF0sIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInN5bnRoZXRpY1wiKSwgcmVhc29uOiB2YWx1ZS5yZWFzb24sIHJlbGF0ZWRPcmlnaW5zOiBPYmplY3QuZnJlZXplKHJlbGF0ZWRPcmlnaW5zKX0pXG4gIH1cblxuICBpZiAodmFsdWUua2luZCA9PSBcInRleHRcIikge1xuICAgIGNvbnN0IG1hcHBpbmdDYW5kaWRhdGUgPSB2YWx1ZS5tYXBwaW5nXG5cbiAgICBpZiAoY29udGVudEtpbmQgIT0gXCJ0ZXh0XCIgfHwgIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZSkgfHwgbWFwcGluZ0NhbmRpZGF0ZS5zY2hlbWEgIT0gXCJTZW1hbnRpZm9sZE1hcHBpbmdcIiB8fFxuICAgICAgIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZS5nZW5lcmF0ZWQpIHx8IG1hcHBpbmdDYW5kaWRhdGUuZ2VuZXJhdGVkLmZpbGVuYW1lICE9IGFydGlmYWN0UGF0aCB8fFxuICAgICAgbWFwcGluZ0NhbmRpZGF0ZS5nZW5lcmF0ZWQuY29udGVudCAhPSBjb250ZW50IHx8ICFpc1BsYWluT2JqZWN0KHZhbHVlLnNvdXJjZU1hcCkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgbWlzbWF0Y2hlZCByaWNoIG9yIFNvdXJjZSBNYXAgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gICAgfVxuICAgIGlmICh2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YSh2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZSkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgaW52YWxpZCBTb3VyY2UgTWFwIGZpbGVuYW1lIG1ldGFkYXRhLmAsIHRhcmdldClcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyhtYXBwaW5nQ2FuZGlkYXRlKVxuICAgIGNvbnN0IHNvdXJjZU1hcCA9IHZhbGlkYXRlU291cmNlTWFwKHZhbHVlLnNvdXJjZU1hcCwgYXJ0aWZhY3RQYXRoLCB0YXJnZXQpXG4gICAgY29uc3QgcHJvamVjdGVkU291cmNlTWFwID0gdG9Tb3VyY2VNYXBWMyhtYXBwaW5nKVxuXG4gICAgaWYgKCFzYW1lSnNvblZhbHVlKHNvdXJjZU1hcCwgcHJvamVjdGVkU291cmNlTWFwKSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBUZXh0IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBTb3VyY2UgTWFwIHByb3ZlbmFuY2UgdGhhdCBjb250cmFkaWN0cyBpdHMgcmljaCBtYXBwaW5nLmAsIHRhcmdldClcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ0ZXh0XCIpLFxuICAgICAgbWFwcGluZyxcbiAgICAgIHNvdXJjZU1hcCxcbiAgICAgIHNvdXJjZU1hcEZpbGVuYW1lOiB2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZVxuICAgIH0pXG4gIH1cblxuICBpZiAodmFsdWUua2luZCA9PSBcImJ5dGVzXCIpIHtcbiAgICBpZiAoY29udGVudEtpbmQgIT0gXCJiaW5hcnlcIikgaW52YWxpZEFydGlmYWN0U2V0KGBCeXRlIHByb3ZlbmFuY2UgcmVxdWlyZXMgYmluYXJ5IGNvbnRlbnQgZm9yICcke2FydGlmYWN0UGF0aH0nLmAsIHRhcmdldClcbiAgICBjb25zdCBtYXBwaW5nID0gZmluYWxpemVCeXRlTWFwcGluZyh2YWx1ZS5tYXBwaW5nKVxuXG4gICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkLnBhdGggIT0gYXJ0aWZhY3RQYXRoIHx8IG1hcHBpbmcuZ2VuZXJhdGVkLmJ5dGVMZW5ndGggIT0gLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqLyAoY29udGVudCkuYnl0ZUxlbmd0aCkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCeXRlIHByb3ZlbmFuY2UgZG9lcyBub3QgbWF0Y2ggYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScuYCwgdGFyZ2V0KVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJieXRlc1wiKSwgbWFwcGluZ30pXG4gIH1cblxuICByZXR1cm4gaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgYW4gdW5rbm93biBwcm92ZW5hbmNlIGtpbmQuYCwgdGFyZ2V0KVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgb25lIHZhbGlkYXRlZCBhcnRpZmFjdCByZWNvcmQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBhcnRpZmFjdCAtIFZhbGlkYXRlZCBmaWVsZHMuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+fSBGcm96ZW4gcmVjb3JkLlxuICovXG5mdW5jdGlvbiBmcmVlemVBcnRpZmFjdChhcnRpZmFjdCkge1xuICBpZiAoYXJ0aWZhY3QuY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIiAmJiBhcnRpZmFjdC5jb250ZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhcnRpZmFjdC5jb250ZW50XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJ0aWZhY3QsIFwiY29udGVudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNvbnRlbnQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKGFydGlmYWN0KVxufVxuXG4vKipcbiAqIExpc3RzIGV2ZXJ5IGRpcmVjdG9yeSBhIHNhZmUgcmVsYXRpdmUgUE9TSVggYXJ0aWZhY3QgcGF0aCByZXF1aXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBWYWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gT3JkZXJlZCBwYXJlbnQgZGlyZWN0b3J5IHBhdGhzLlxuICovXG5mdW5jdGlvbiBhcnRpZmFjdERpcmVjdG9yeVBhdGhzKGFydGlmYWN0UGF0aCkge1xuICBjb25zdCBwYXJ0cyA9IGFydGlmYWN0UGF0aC5zcGxpdChcIi9cIilcbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4ICs9IDEpIGRpcmVjdG9yaWVzLnB1c2gocGFydHMuc2xpY2UoMCwgaW5kZXgpLmpvaW4oXCIvXCIpKVxuXG4gIHJldHVybiBkaXJlY3Rvcmllc1xufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgYXJ0aWZhY3Qtc2V0IGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEZhaWx1cmUgZGV0YWlsLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gW2Vycm9yXSAtIFByZXNlcnZlZCB2YWxpZGF0aW9uIGNhdXNlLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkQXJ0aWZhY3RTZXQobWVzc2FnZSwgdGFyZ2V0LCBlcnJvcikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICBsYW5ndWFnZTogdGFyZ2V0LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEgc2FmZSBkaWFnbm9zdGljIGlkZW50aXR5IGZyb20gYW4gdW5rbm93biByZXF1ZXN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEaWFnbm9zdGljIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiB0YXJnZXRPZih2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLnRhcmdldCA9PSBcInN0cmluZ1wiICYmIHZhbHVlLnRhcmdldC5sZW5ndGggPiAwID8gdmFsdWUudGFyZ2V0IDogXCJhcnRpZmFjdFwiXG59XG5cbi8qKlxuICogQ2hlY2tzIGZvciBhbiBvcmRpbmFyeSBzdHJpbmcta2V5ZWQgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gV2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT0gT2JqZWN0LnByb3RvdHlwZVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbiBhcnRpZmFjdC1sZXZlbCByZWxhdGVkIG9yaWdpbiB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2Ugb2Zmc2V0cyBhcyBnZW5lcmF0ZWQgYnl0ZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmVsYXRlZC1vcmlnaW4gY2FuZGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFydGlmYWN0UGF0aCAtIE93bmluZyBhcnRpZmFjdCBwYXRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gT3JpZ2luIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW59IERldGFjaGVkIHJlbGF0ZWQgb3JpZ2luLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlbGF0ZWRPcmlnaW4odmFsdWUsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZS5zb3VyY2VJZCAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLnNvdXJjZUlkLmxlbmd0aCA9PSAwIHx8XG4gICAgIWlzUGxhaW5PYmplY3QodmFsdWUubG9jYXRpb24pIHx8IHR5cGVvZiB2YWx1ZS5sb2NhdGlvbi5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLmxvY2F0aW9uLmZpbGVuYW1lLmxlbmd0aCA9PSAwIHx8XG4gICAgIXZhbGlkU291cmNlUG9pbnQodmFsdWUubG9jYXRpb24uc3RhcnQpIHx8ICF2YWxpZFNvdXJjZVBvaW50KHZhbHVlLmxvY2F0aW9uLmVuZCkgfHxcbiAgICB2YWx1ZS5sb2NhdGlvbi5lbmQub2Zmc2V0IDwgdmFsdWUubG9jYXRpb24uc3RhcnQub2Zmc2V0IHx8ICFpc1NvdXJjZVJhbmdlT3JkZXJlZCh2YWx1ZS5sb2NhdGlvbi5zdGFydCwgdmFsdWUubG9jYXRpb24uZW5kKSkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIG1hbGZvcm1lZCByZWxhdGVkIG9yaWdpbiAke2luZGV4fS5gLCB0YXJnZXQpXG4gIH1cblxuICByZXR1cm4gZGVlcEZyZWV6ZSh7XG4gICAgbG9jYXRpb246IHtcbiAgICAgIGVuZDogey4uLnZhbHVlLmxvY2F0aW9uLmVuZH0sXG4gICAgICBmaWxlbmFtZTogdmFsdWUubG9jYXRpb24uZmlsZW5hbWUsXG4gICAgICBzdGFydDogey4uLnZhbHVlLmxvY2F0aW9uLnN0YXJ0fVxuICAgIH0sXG4gICAgc291cmNlSWQ6IHZhbHVlLnNvdXJjZUlkLFxuICAgIC4uLihvcHRpb25hbFN0cmluZyh2YWx1ZS5ub2RlSWQsIFwibm9kZUlkXCIsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpLFxuICAgIC4uLihvcHRpb25hbFN0cmluZyh2YWx1ZS5zeW1ib2xJZCwgXCJzeW1ib2xJZFwiLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpKSxcbiAgICAuLi4ob3B0aW9uYWxTdHJpbmcodmFsdWUucm9sZSwgXCJyb2xlXCIsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpXG4gIH0pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBvcHRpb25hbCByZWxhdGVkLW9yaWdpbiBzdHJpbmcgZmllbGQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gUHJvcGVydHkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE9yaWdpbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gUHJlc2VudCB2YWxpZGF0ZWQgcHJvcGVydHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbFN0cmluZyh2YWx1ZSwgcHJvcGVydHksIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgJHtwcm9wZXJ0eX0gaW4gcmVsYXRlZCBvcmlnaW4gJHtpbmRleH0uYCwgdGFyZ2V0KVxuICB9XG5cbiAgcmV0dXJuIHtbcHJvcGVydHldOiB2YWx1ZX1cbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIFVURi0xNiBzb3VyY2UgcG9pbnQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHBvaW50LlxuICogQHJldHVybnMge3ZhbHVlIGlzIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlUG9pbnR9IFdoZXRoZXIgdGhlIHBvaW50IGlzIHN0cnVjdHVyYWxseSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRTb3VyY2VQb2ludCh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLmxpbmUgPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZS5saW5lKSAmJiB2YWx1ZS5saW5lID4gMCAmJlxuICAgIHR5cGVvZiB2YWx1ZS5jb2x1bW4gPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZS5jb2x1bW4pICYmIHZhbHVlLmNvbHVtbiA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUub2Zmc2V0ID09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUub2Zmc2V0KSAmJiB2YWx1ZS5vZmZzZXQgPj0gMFxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgZGV0YWNoZXMgdGhlIFNvdXJjZSBNYXAgdjMgcHJvamVjdGlvbiBjYXJyaWVkIGJ5IGEgdGV4dCBhcnRpZmFjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBTb3VyY2UgTWFwIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gRGV0YWNoZWQgU291cmNlIE1hcC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTb3VyY2VNYXAodmFsdWUsIGFydGlmYWN0UGF0aCwgdGFyZ2V0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgdmFsdWUudmVyc2lvbiAhPSAzIHx8IHZhbHVlLmZpbGUgIT0gYXJ0aWZhY3RQYXRoIHx8IHR5cGVvZiB2YWx1ZS5tYXBwaW5ncyAhPSBcInN0cmluZ1wiIHx8XG4gICAgIWlzRGVuc2VBcnJheSh2YWx1ZS5uYW1lcykgfHwgIXZhbHVlLm5hbWVzLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKSB8fFxuICAgICFpc0RlbnNlQXJyYXkodmFsdWUuc291cmNlcykgfHwgIXZhbHVlLnNvdXJjZXMuZXZlcnkoKHNvdXJjZSkgPT4gdHlwZW9mIHNvdXJjZSA9PSBcInN0cmluZ1wiKSB8fFxuICAgICh2YWx1ZS5zb3VyY2VzQ29udGVudCAhPT0gdW5kZWZpbmVkICYmICghaXNEZW5zZUFycmF5KHZhbHVlLnNvdXJjZXNDb250ZW50KSB8fFxuICAgICAgIXZhbHVlLnNvdXJjZXNDb250ZW50LmV2ZXJ5KChzb3VyY2UpID0+IHNvdXJjZSA9PSBudWxsIHx8IHR5cGVvZiBzb3VyY2UgPT0gXCJzdHJpbmdcIikpKSkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgbWFsZm9ybWVkIFNvdXJjZSBNYXAgdjMgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gIH1cbiAgdmFsaWRhdGVFbmNvZGVkU291cmNlTWFwTWFwcGluZ3MoXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh2YWx1ZSkpLFxuICAgIGFydGlmYWN0UGF0aCxcbiAgICB0YXJnZXRcbiAgKVxuXG4gIGNvbnN0IGRldGFjaGVkID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc3RydWN0dXJlZENsb25lKHZhbHVlKSlcblxuICByZXR1cm4gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9ICovIChkZXRhY2hlZCkpXG59XG5cbi8qKlxuICogRGVjb2RlcyBhbmQgdmFsaWRhdGVzIHRoZSBTb3VyY2UgTWFwIHBheWxvYWQgd2l0aCB0aGUgaW5zdGFsbGVkIG1hcHBpbmcgaW1wbGVtZW50YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gc291cmNlTWFwIC0gU3RydWN0dXJhbGx5IHZhbGlkYXRlZCBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gT3duaW5nIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRW5jb2RlZFNvdXJjZU1hcE1hcHBpbmdzKHNvdXJjZU1hcCwgYXJ0aWZhY3RQYXRoLCB0YXJnZXQpIHtcbiAgLyoqIEB0eXBlIHtSZWFkb25seTxpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLlNvdXJjZU1hcFNlZ21lbnRbXVtdPn0gKi9cbiAgbGV0IGRlY29kZWRcbiAgbGV0IGNhbm9uaWNhbE1hcHBpbmdzXG5cbiAgdHJ5IHtcbiAgICBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG5ldyBUcmFjZU1hcChzb3VyY2VNYXApKVxuICAgIGNvbnN0IGRlY29kZWRNYXAgPSAvKiogQHR5cGUge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmdcIikuRGVjb2RlZFNvdXJjZU1hcH0gKi8gKHtcbiAgICAgIC4uLnNvdXJjZU1hcCxcbiAgICAgIG1hcHBpbmdzOiBzdHJ1Y3R1cmVkQ2xvbmUoZGVjb2RlZClcbiAgICB9KVxuXG4gICAgY2Fub25pY2FsTWFwcGluZ3MgPSBlbmNvZGVkTWFwcGluZ3MocHJlc29ydGVkRGVjb2RlZE1hcChkZWNvZGVkTWFwKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgZW5jb2RlZCBTb3VyY2UgTWFwIG1hcHBpbmdzLmAsIHRhcmdldCwgZXJyb3IpXG4gIH1cblxuICBpZiAoY2Fub25pY2FsTWFwcGluZ3MgIT0gc291cmNlTWFwLm1hcHBpbmdzIHx8XG4gICAgIXZhbGlkRGVjb2RlZFNvdXJjZU1hcE1hcHBpbmdzKGRlY29kZWQsIHNvdXJjZU1hcC5zb3VyY2VzLmxlbmd0aCwgc291cmNlTWFwLm5hbWVzLmxlbmd0aCkpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgZW5jb2RlZCBTb3VyY2UgTWFwIG1hcHBpbmdzLmAsIHRhcmdldClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBkZWNvZGVkIFNvdXJjZSBNYXAgc2VnbWVudCBzaGFwZSBhbmQgcmVmZXJlbmNlZCBpbmRpY2VzLlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLlNvdXJjZU1hcFNlZ21lbnRbXVtdPn0gbGluZXMgLSBEZWNvZGVkIG1hcHBpbmcgbGluZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gc291cmNlQ291bnQgLSBEZWNsYXJlZCBzb3VyY2UgY291bnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbmFtZUNvdW50IC0gRGVjbGFyZWQgbmFtZSBjb3VudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGV2ZXJ5IHNlZ21lbnQgaXMgc2VtYW50aWNhbGx5IHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZERlY29kZWRTb3VyY2VNYXBNYXBwaW5ncyhsaW5lcywgc291cmNlQ291bnQsIG5hbWVDb3VudCkge1xuICByZXR1cm4gbGluZXMuZXZlcnkoKGxpbmUpID0+IGxpbmUuZXZlcnkoKHNlZ21lbnQpID0+IHtcbiAgICBpZiAoc2VnbWVudC5sZW5ndGggIT0gMSAmJiBzZWdtZW50Lmxlbmd0aCAhPSA0ICYmIHNlZ21lbnQubGVuZ3RoICE9IDUpIHJldHVybiBmYWxzZVxuICAgIGlmICghc2VnbWVudC5ldmVyeSgoZmllbGQpID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKGZpZWxkKSAmJiBmaWVsZCA+PSAwKSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNlZ21lbnQubGVuZ3RoID09IDEpIHJldHVybiB0cnVlXG4gICAgaWYgKHNlZ21lbnRbMV0gPj0gc291cmNlQ291bnQpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID09IDQgfHwgc2VnbWVudFs0XSA8IG5hbWVDb3VudFxuICB9KSlcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBkZXRhY2hlZCBKU09OIHZhbHVlcyB3aXRob3V0IGRlcGVuZGluZyBvbiBjYWxsZXIgb2JqZWN0LWtleSBvcmRlci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbGVmdCAtIEZpcnN0IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHJpZ2h0IC0gU2Vjb25kIEpTT04gdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBib3RoIHZhbHVlcyBhcmUgc3RydWN0dXJhbGx5IGlkZW50aWNhbC5cbiAqL1xuZnVuY3Rpb24gc2FtZUpzb25WYWx1ZShsZWZ0LCByaWdodCkge1xuICBpZiAobGVmdCA9PT0gcmlnaHQpIHJldHVybiB0cnVlXG4gIGlmIChBcnJheS5pc0FycmF5KGxlZnQpIHx8IEFycmF5LmlzQXJyYXkocmlnaHQpKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobGVmdCkgJiYgQXJyYXkuaXNBcnJheShyaWdodCkgJiYgbGVmdC5sZW5ndGggPT0gcmlnaHQubGVuZ3RoICYmXG4gICAgICBsZWZ0LmV2ZXJ5KChlbnRyeSwgaW5kZXgpID0+IHNhbWVKc29uVmFsdWUoZW50cnksIHJpZ2h0W2luZGV4XSkpXG4gIH1cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGxlZnQpIHx8ICFpc1BsYWluT2JqZWN0KHJpZ2h0KSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGxlZnRLZXlzID0gT2JqZWN0LmtleXMobGVmdClcbiAgY29uc3QgcmlnaHRLZXlzID0gT2JqZWN0LmtleXMocmlnaHQpXG5cbiAgcmV0dXJuIGxlZnRLZXlzLmxlbmd0aCA9PSByaWdodEtleXMubGVuZ3RoICYmXG4gICAgbGVmdEtleXMuZXZlcnkoKGtleSkgPT4gT2JqZWN0Lmhhc093bihyaWdodCwga2V5KSAmJiBzYW1lSnNvblZhbHVlKGxlZnRba2V5XSwgcmlnaHRba2V5XSkpXG59XG5cbi8qKlxuICogRGVlcGx5IGZyZWV6ZXMgYSBkZXRhY2hlZCBKU09OIHZhbHVlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWUgLSBEZXRhY2hlZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtUfSBGcm96ZW4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGRlZXBGcmVlemUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuICBmb3IgKGNvbnN0IG5lc3RlZCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkgZGVlcEZyZWV6ZShuZXN0ZWQpXG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUodmFsdWUpXG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ /** Canonical C17 support header; native ownership never enters semantic IR. */
2
+ export declare const cRuntimeHeader = "#ifndef SEMANTIFOLD_RUNTIME_H\n#define SEMANTIFOLD_RUNTIME_H\n\n#include <stdbool.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n_Static_assert(CHAR_BIT == 8, \"Semantifold requires eight-bit bytes\");\n_Static_assert(sizeof(int64_t) == 8, \"Semantifold requires exact int64_t\");\n_Static_assert(sizeof(size_t) == 8 && PTRDIFF_MAX == INT64_MAX, \"Semantifold requires the qualified 64-bit ABI\");\n\ntypedef struct {\n const unsigned char *data;\n size_t length;\n} SemantifoldString;\n\n#define SEMANTIFOLD_STRING(literal) ((SemantifoldString){(const unsigned char *)(literal), sizeof(literal) - 1})\n\ntypedef struct SemantifoldAllocation {\n struct SemantifoldAllocation *next;\n unsigned char data[];\n} SemantifoldAllocation;\n\n_Static_assert(sizeof(SemantifoldAllocation) == 8, \"Semantifold requires the qualified arena metadata size\");\n\nstatic SemantifoldAllocation *semantifold_arena = NULL;\nstatic size_t semantifold_arena_bytes = 0;\n\nstatic inline void semantifold_cleanup(void) {\n while (semantifold_arena != NULL) {\n SemantifoldAllocation *allocation = semantifold_arena;\n semantifold_arena = allocation->next;\n free(allocation);\n }\n semantifold_arena_bytes = 0;\n}\n\n_Noreturn static inline void semantifold_fatal(const char *message, size_t length) {\n semantifold_cleanup();\n (void)fwrite(message, 1, length, stderr);\n exit(70);\n}\n\nstatic inline int64_t semantifold_integer_add(int64_t left, int64_t right) {\n int64_t result;\n if (__builtin_add_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\nstatic inline int64_t semantifold_integer_subtract(int64_t left, int64_t right) {\n int64_t result;\n if (__builtin_sub_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\nstatic inline int64_t semantifold_integer_multiply(int64_t left, int64_t right) {\n int64_t result;\n if (__builtin_mul_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\nstatic inline int64_t semantifold_integer_negate(int64_t value) {\n return semantifold_integer_subtract(INT64_C(0), value);\n}\n\nstatic inline size_t semantifold_allocation_size(size_t left, size_t right) {\n const size_t maximum = (size_t)PTRDIFF_MAX;\n if (left > maximum || right > maximum - left ||\n left + right > maximum - sizeof(SemantifoldAllocation)) {\n semantifold_fatal(\"semantifold: allocation size\\n\", sizeof(\"semantifold: allocation size\\n\") - 1);\n }\n const size_t size = sizeof(SemantifoldAllocation) + left + right;\n if (semantifold_arena_bytes > maximum - size) {\n semantifold_fatal(\"semantifold: allocation size\\n\", sizeof(\"semantifold: allocation size\\n\") - 1);\n }\n return size;\n}\n\nstatic inline SemantifoldString semantifold_string_concat(SemantifoldString left, SemantifoldString right) {\n const size_t size = semantifold_allocation_size(left.length, right.length);\n SemantifoldAllocation *allocation = malloc(size);\n if (allocation == NULL) {\n semantifold_fatal(\"semantifold: allocation failure\\n\", sizeof(\"semantifold: allocation failure\\n\") - 1);\n }\n allocation->next = semantifold_arena;\n semantifold_arena = allocation;\n semantifold_arena_bytes += size;\n if (left.length != 0) (void)memcpy(allocation->data, left.data, left.length);\n if (right.length != 0) (void)memcpy(allocation->data + left.length, right.data, right.length);\n return (SemantifoldString){allocation->data, left.length + right.length};\n}\n\nstatic inline bool semantifold_string_equal(SemantifoldString left, SemantifoldString right) {\n return left.length == right.length && (left.length == 0 || memcmp(left.data, right.data, left.length) == 0);\n}\n\nstatic inline bool semantifold_string_not_equal(SemantifoldString left, SemantifoldString right) {\n return !semantifold_string_equal(left, right);\n}\n\nstatic inline void semantifold_write(const unsigned char *data, size_t length) {\n if (length != 0 && fwrite(data, 1, length, stdout) != length) {\n semantifold_fatal(\"semantifold: output failure\\n\", sizeof(\"semantifold: output failure\\n\") - 1);\n }\n}\n\nstatic inline void semantifold_newline(void) {\n semantifold_write((const unsigned char *)\"\\n\", 1);\n if (fflush(stdout) != 0) semantifold_fatal(\"semantifold: output failure\\n\", sizeof(\"semantifold: output failure\\n\") - 1);\n}\n\nstatic inline void semantifold_print_string(SemantifoldString value) {\n semantifold_write(value.data, value.length);\n semantifold_newline();\n}\n\nstatic inline void semantifold_print_boolean(bool value) {\n if (value) semantifold_write((const unsigned char *)\"true\", 4);\n else semantifold_write((const unsigned char *)\"false\", 5);\n semantifold_newline();\n}\n\nstatic inline void semantifold_print_integer(int64_t value) {\n unsigned char digits[20];\n size_t position = sizeof(digits);\n uint64_t magnitude = (uint64_t)value;\n if (value < 0) magnitude = UINT64_C(0) - magnitude;\n do {\n digits[--position] = (unsigned char)(UINT64_C(48) + magnitude % UINT64_C(10));\n magnitude /= UINT64_C(10);\n } while (magnitude != 0);\n if (value < 0) digits[--position] = (unsigned char)45;\n semantifold_write(digits + position, sizeof(digits) - position);\n semantifold_newline();\n}\n\n#endif\n";
3
+ //# sourceMappingURL=c-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c-runtime.d.ts","sourceRoot":"","sources":["../../../src/backends/c-runtime.js"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,eAAO,MAAM,cAAc,2sLAmJ1B,CAAA"}