semantifold 0.3.0 → 0.5.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 (303) hide show
  1. package/README.md +61 -15
  2. package/build/index.d.ts +52 -2
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +60 -8
  5. package/build/src/artifact-path.d.ts +23 -1
  6. package/build/src/artifact-path.d.ts.map +1 -1
  7. package/build/src/artifact-path.js +45 -3
  8. package/build/src/artifacts.d.ts.map +1 -1
  9. package/build/src/artifacts.js +66 -1
  10. package/build/src/backends/android.d.ts +49 -0
  11. package/build/src/backends/android.d.ts.map +1 -0
  12. package/build/src/backends/android.js +1274 -0
  13. package/build/src/backends/c-validation.d.ts.map +1 -1
  14. package/build/src/backends/c-validation.js +7 -3
  15. package/build/src/backends/cpp-validation.d.ts.map +1 -1
  16. package/build/src/backends/cpp-validation.js +7 -3
  17. package/build/src/backends/csharp.js +7 -1
  18. package/build/src/backends/dart-runtime.d.ts +2 -0
  19. package/build/src/backends/dart-runtime.d.ts.map +1 -0
  20. package/build/src/backends/dart-runtime.js +41 -0
  21. package/build/src/backends/dart.d.ts +20 -0
  22. package/build/src/backends/dart.d.ts.map +1 -0
  23. package/build/src/backends/dart.js +321 -0
  24. package/build/src/backends/effects.d.ts +60 -0
  25. package/build/src/backends/effects.d.ts.map +1 -0
  26. package/build/src/backends/effects.js +746 -0
  27. package/build/src/backends/go.js +18 -4
  28. package/build/src/backends/identifiers.d.ts +36 -4
  29. package/build/src/backends/identifiers.d.ts.map +1 -1
  30. package/build/src/backends/identifiers.js +160 -10
  31. package/build/src/backends/index.d.ts.map +1 -1
  32. package/build/src/backends/index.js +27 -4
  33. package/build/src/backends/ios.d.ts +68 -0
  34. package/build/src/backends/ios.d.ts.map +1 -0
  35. package/build/src/backends/ios.js +1503 -0
  36. package/build/src/backends/java.d.ts.map +1 -1
  37. package/build/src/backends/java.js +429 -36
  38. package/build/src/backends/javascript.d.ts +6 -0
  39. package/build/src/backends/javascript.d.ts.map +1 -1
  40. package/build/src/backends/javascript.js +380 -24
  41. package/build/src/backends/kotlin-runtime.d.ts +3 -0
  42. package/build/src/backends/kotlin-runtime.d.ts.map +1 -0
  43. package/build/src/backends/kotlin-runtime.js +29 -0
  44. package/build/src/backends/kotlin.d.ts +33 -0
  45. package/build/src/backends/kotlin.d.ts.map +1 -0
  46. package/build/src/backends/kotlin.js +138 -0
  47. package/build/src/backends/native-validation.d.ts +2 -2
  48. package/build/src/backends/native-validation.d.ts.map +1 -1
  49. package/build/src/backends/native-validation.js +2 -2
  50. package/build/src/backends/ordered-expressions.d.ts.map +1 -1
  51. package/build/src/backends/ordered-expressions.js +39 -7
  52. package/build/src/backends/php-stdlib-support.d.ts +19 -0
  53. package/build/src/backends/php-stdlib-support.d.ts.map +1 -0
  54. package/build/src/backends/php-stdlib-support.js +227 -0
  55. package/build/src/backends/php.d.ts.map +1 -1
  56. package/build/src/backends/php.js +448 -33
  57. package/build/src/backends/program.d.ts +83 -0
  58. package/build/src/backends/program.d.ts.map +1 -0
  59. package/build/src/backends/program.js +1309 -0
  60. package/build/src/backends/python.js +7 -1
  61. package/build/src/backends/ruby.d.ts.map +1 -1
  62. package/build/src/backends/ruby.js +310 -24
  63. package/build/src/backends/rust-runtime.d.ts +7 -0
  64. package/build/src/backends/rust-runtime.d.ts.map +1 -0
  65. package/build/src/backends/rust-runtime.js +32 -0
  66. package/build/src/backends/rust-validation.d.ts +9 -0
  67. package/build/src/backends/rust-validation.d.ts.map +1 -0
  68. package/build/src/backends/rust-validation.js +78 -0
  69. package/build/src/backends/rust.d.ts +24 -0
  70. package/build/src/backends/rust.d.ts.map +1 -0
  71. package/build/src/backends/rust.js +344 -0
  72. package/build/src/backends/scalars.d.ts +14 -6
  73. package/build/src/backends/scalars.d.ts.map +1 -1
  74. package/build/src/backends/scalars.js +167 -17
  75. package/build/src/backends/shared.d.ts +23 -4
  76. package/build/src/backends/shared.d.ts.map +1 -1
  77. package/build/src/backends/shared.js +2174 -62
  78. package/build/src/backends/stdlib-support.d.ts +14 -0
  79. package/build/src/backends/stdlib-support.d.ts.map +1 -0
  80. package/build/src/backends/stdlib-support.js +237 -0
  81. package/build/src/backends/swift-runtime.d.ts +3 -0
  82. package/build/src/backends/swift-runtime.d.ts.map +1 -0
  83. package/build/src/backends/swift-runtime.js +14 -0
  84. package/build/src/backends/swift.d.ts +8 -0
  85. package/build/src/backends/swift.d.ts.map +1 -0
  86. package/build/src/backends/swift.js +127 -0
  87. package/build/src/backends/typescript.d.ts.map +1 -1
  88. package/build/src/backends/typescript.js +344 -24
  89. package/build/src/backends/wasm.d.ts +43 -0
  90. package/build/src/backends/wasm.d.ts.map +1 -0
  91. package/build/src/backends/wasm.js +2164 -0
  92. package/build/src/backends/writer.d.ts +255 -4
  93. package/build/src/backends/writer.d.ts.map +1 -1
  94. package/build/src/backends/writer.js +491 -3
  95. package/build/src/diagnostic.d.ts +4 -3
  96. package/build/src/diagnostic.d.ts.map +1 -1
  97. package/build/src/diagnostic.js +5 -3
  98. package/build/src/frontends/c.d.ts.map +1 -1
  99. package/build/src/frontends/c.js +5 -3
  100. package/build/src/frontends/cpp.d.ts.map +1 -1
  101. package/build/src/frontends/cpp.js +5 -3
  102. package/build/src/frontends/csharp.d.ts.map +1 -1
  103. package/build/src/frontends/csharp.js +7 -3
  104. package/build/src/frontends/dart.d.ts +10 -0
  105. package/build/src/frontends/dart.d.ts.map +1 -0
  106. package/build/src/frontends/dart.js +913 -0
  107. package/build/src/frontends/index.d.ts +3 -1
  108. package/build/src/frontends/index.d.ts.map +1 -1
  109. package/build/src/frontends/index.js +15 -5
  110. package/build/src/frontends/java.d.ts +110 -1
  111. package/build/src/frontends/java.d.ts.map +1 -1
  112. package/build/src/frontends/java.js +1725 -70
  113. package/build/src/frontends/javascript-typescript.d.ts +69 -1
  114. package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
  115. package/build/src/frontends/javascript-typescript.js +1825 -93
  116. package/build/src/frontends/kotlin.d.ts +10 -0
  117. package/build/src/frontends/kotlin.d.ts.map +1 -0
  118. package/build/src/frontends/kotlin.js +685 -0
  119. package/build/src/frontends/php.d.ts +118 -1
  120. package/build/src/frontends/php.d.ts.map +1 -1
  121. package/build/src/frontends/php.js +1583 -76
  122. package/build/src/frontends/program.d.ts +74 -0
  123. package/build/src/frontends/program.d.ts.map +1 -0
  124. package/build/src/frontends/program.js +989 -0
  125. package/build/src/frontends/ruby.d.ts +68 -1
  126. package/build/src/frontends/ruby.d.ts.map +1 -1
  127. package/build/src/frontends/ruby.js +1446 -101
  128. package/build/src/frontends/rust-parser.d.ts +11 -0
  129. package/build/src/frontends/rust-parser.d.ts.map +1 -0
  130. package/build/src/frontends/rust-parser.js +15 -0
  131. package/build/src/frontends/rust.d.ts +14 -0
  132. package/build/src/frontends/rust.d.ts.map +1 -0
  133. package/build/src/frontends/rust.js +715 -0
  134. package/build/src/frontends/scalars.d.ts +10 -0
  135. package/build/src/frontends/scalars.d.ts.map +1 -1
  136. package/build/src/frontends/scalars.js +28 -2
  137. package/build/src/frontends/swift.d.ts +10 -0
  138. package/build/src/frontends/swift.d.ts.map +1 -0
  139. package/build/src/frontends/swift.js +860 -0
  140. package/build/src/frontends/types.d.ts +186 -0
  141. package/build/src/frontends/types.d.ts.map +1 -0
  142. package/build/src/frontends/types.js +634 -0
  143. package/build/src/language-registry.d.ts +46 -4
  144. package/build/src/language-registry.d.ts.map +1 -1
  145. package/build/src/language-registry.js +177 -13
  146. package/build/src/mapping.d.ts +2 -2
  147. package/build/src/mapping.d.ts.map +1 -1
  148. package/build/src/mapping.js +31 -10
  149. package/build/src/semantic/capabilities.d.ts +66 -0
  150. package/build/src/semantic/capabilities.d.ts.map +1 -0
  151. package/build/src/semantic/capabilities.js +649 -0
  152. package/build/src/semantic/effects.d.ts +26 -0
  153. package/build/src/semantic/effects.d.ts.map +1 -0
  154. package/build/src/semantic/effects.js +764 -0
  155. package/build/src/semantic/generics.d.ts +23 -0
  156. package/build/src/semantic/generics.d.ts.map +1 -0
  157. package/build/src/semantic/generics.js +61 -0
  158. package/build/src/semantic/lifetime.d.ts +37 -0
  159. package/build/src/semantic/lifetime.d.ts.map +1 -0
  160. package/build/src/semantic/lifetime.js +527 -0
  161. package/build/src/semantic/provenance.d.ts +9 -2
  162. package/build/src/semantic/provenance.d.ts.map +1 -1
  163. package/build/src/semantic/provenance.js +462 -20
  164. package/build/src/semantic/scalars.d.ts +11 -0
  165. package/build/src/semantic/scalars.d.ts.map +1 -1
  166. package/build/src/semantic/scalars.js +16 -1
  167. package/build/src/semantic/stdlib.d.ts +254 -0
  168. package/build/src/semantic/stdlib.d.ts.map +1 -0
  169. package/build/src/semantic/stdlib.js +880 -0
  170. package/build/src/semantic/types.d.ts +3108 -178
  171. package/build/src/semantic/types.d.ts.map +1 -1
  172. package/build/src/semantic/types.js +730 -15
  173. package/build/src/semantic/validate.d.ts +85 -5
  174. package/build/src/semantic/validate.d.ts.map +1 -1
  175. package/build/src/semantic/validate.js +2576 -98
  176. package/build/src/stdlib-facades.d.ts +304 -0
  177. package/build/src/stdlib-facades.d.ts.map +1 -0
  178. package/build/src/stdlib-facades.js +1167 -0
  179. package/build/src/stdlib-negotiation.d.ts +69 -0
  180. package/build/src/stdlib-negotiation.d.ts.map +1 -0
  181. package/build/src/stdlib-negotiation.js +403 -0
  182. package/build/src/stdlib-providers.d.ts +72 -0
  183. package/build/src/stdlib-providers.d.ts.map +1 -0
  184. package/build/src/stdlib-providers.js +339 -0
  185. package/build/src/toolchains.d.ts +55 -1
  186. package/build/src/toolchains.d.ts.map +1 -1
  187. package/build/src/toolchains.js +15 -4
  188. package/docs/android.md +79 -0
  189. package/docs/architecture.md +47 -13
  190. package/docs/dart.md +60 -0
  191. package/docs/goals.md +3 -3
  192. package/docs/ios.md +121 -0
  193. package/docs/kotlin.md +42 -0
  194. package/docs/language-support.md +238 -26
  195. package/docs/multi-file-modules.md +52 -0
  196. package/docs/parser-qualification.md +121 -8
  197. package/docs/plans/2026-09-05-standard-library-portability.md +10 -10
  198. package/docs/rust.md +88 -0
  199. package/docs/source-maps.md +17 -7
  200. package/docs/specification.md +5 -0
  201. package/docs/standard-library-portability.md +39 -8
  202. package/docs/swift.md +44 -0
  203. package/docs/testing.md +381 -4
  204. package/docs/webassembly.md +52 -0
  205. package/index.js +66 -8
  206. package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +2 -2
  207. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/LICENSE +21 -0
  208. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/README.md +45 -0
  209. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/binding.gyp +30 -0
  210. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding.cc +20 -0
  211. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/binding_test.js +9 -0
  212. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.d.ts +28 -0
  213. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/bindings/node/index.js +11 -0
  214. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/grammar.js +1630 -0
  215. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/package.json +64 -0
  216. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-arm64/tree-sitter-rust.node +0 -0
  217. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/darwin-x64/tree-sitter-rust.node +0 -0
  218. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-arm64/tree-sitter-rust.node +0 -0
  219. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/linux-x64/tree-sitter-rust.node +0 -0
  220. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-arm64/tree-sitter-rust.node +0 -0
  221. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/prebuilds/win32-x64/tree-sitter-rust.node +0 -0
  222. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/highlights.scm +159 -0
  223. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/injections.scm +9 -0
  224. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/queries/tags.scm +60 -0
  225. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/grammar.json +9405 -0
  226. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/node-types.json +5399 -0
  227. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/parser.c +192569 -0
  228. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/scanner.c +393 -0
  229. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/alloc.h +54 -0
  230. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/array.h +290 -0
  231. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/src/tree_sitter/parser.h +266 -0
  232. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter-rust.wasm +0 -0
  233. package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-rust/tree-sitter.json +53 -0
  234. package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +3 -2
  235. package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +5 -4
  236. package/package.json +5 -2
  237. package/src/artifact-path.js +47 -2
  238. package/src/artifacts.js +67 -0
  239. package/src/backends/android.js +1370 -0
  240. package/src/backends/c-validation.js +6 -1
  241. package/src/backends/cpp-validation.js +6 -1
  242. package/src/backends/csharp.js +3 -0
  243. package/src/backends/dart-runtime.js +41 -0
  244. package/src/backends/dart.js +326 -0
  245. package/src/backends/effects.js +705 -0
  246. package/src/backends/go.js +14 -2
  247. package/src/backends/identifiers.js +166 -9
  248. package/src/backends/index.js +27 -2
  249. package/src/backends/ios.js +1612 -0
  250. package/src/backends/java.js +454 -36
  251. package/src/backends/javascript.js +389 -23
  252. package/src/backends/kotlin-runtime.js +29 -0
  253. package/src/backends/kotlin.js +144 -0
  254. package/src/backends/native-validation.js +1 -1
  255. package/src/backends/ordered-expressions.js +40 -6
  256. package/src/backends/php-stdlib-support.js +239 -0
  257. package/src/backends/php.js +469 -32
  258. package/src/backends/program.js +1408 -0
  259. package/src/backends/python.js +3 -0
  260. package/src/backends/ruby.js +326 -23
  261. package/src/backends/rust-runtime.js +34 -0
  262. package/src/backends/rust-validation.js +75 -0
  263. package/src/backends/rust.js +335 -0
  264. package/src/backends/scalars.js +141 -16
  265. package/src/backends/shared.js +2314 -115
  266. package/src/backends/stdlib-support.js +234 -0
  267. package/src/backends/swift-runtime.js +14 -0
  268. package/src/backends/swift.js +132 -0
  269. package/src/backends/typescript.js +349 -23
  270. package/src/backends/wasm.js +2208 -0
  271. package/src/backends/writer.js +545 -2
  272. package/src/diagnostic.js +4 -2
  273. package/src/frontends/c.js +4 -2
  274. package/src/frontends/cpp.js +4 -2
  275. package/src/frontends/csharp.js +4 -2
  276. package/src/frontends/dart.js +963 -0
  277. package/src/frontends/index.js +14 -4
  278. package/src/frontends/java.js +1977 -69
  279. package/src/frontends/javascript-typescript.js +2046 -102
  280. package/src/frontends/kotlin.js +713 -0
  281. package/src/frontends/php.js +1725 -79
  282. package/src/frontends/program.js +1062 -0
  283. package/src/frontends/ruby.js +1624 -98
  284. package/src/frontends/rust-parser.js +18 -0
  285. package/src/frontends/rust.js +714 -0
  286. package/src/frontends/scalars.js +31 -1
  287. package/src/frontends/swift.js +893 -0
  288. package/src/frontends/types.js +750 -0
  289. package/src/language-registry.js +182 -12
  290. package/src/mapping.js +33 -9
  291. package/src/semantic/capabilities.js +671 -0
  292. package/src/semantic/effects.js +737 -0
  293. package/src/semantic/generics.js +58 -0
  294. package/src/semantic/lifetime.js +517 -0
  295. package/src/semantic/provenance.js +412 -19
  296. package/src/semantic/scalars.js +17 -0
  297. package/src/semantic/stdlib.js +921 -0
  298. package/src/semantic/types.js +810 -14
  299. package/src/semantic/validate.js +2934 -209
  300. package/src/stdlib-facades.js +1211 -0
  301. package/src/stdlib-negotiation.js +446 -0
  302. package/src/stdlib-providers.js +377 -0
  303. package/src/toolchains.js +16 -3
@@ -0,0 +1,339 @@
1
+ // @ts-check
2
+ import { isDenseArray } from "./array.js";
3
+ import { isSafeArtifactPath } from "./artifact-path.js";
4
+ import { SemantifoldDiagnostic } from "./diagnostic.js";
5
+ import { languageRegistry } from "./language-registry.js";
6
+ import { listStdlibModules, parseStdlibVersion, parseStdlibVersionRange, protectedEntryName, resolveStdlibModule } from "./semantic/stdlib.js";
7
+ export { protectedEntryName } from "./semantic/stdlib.js";
8
+ /**
9
+ * @typedef StdlibProviderRecord
10
+ * @property {{mediaType: string, path: string}} artifact - Generated provider artifact declaration.
11
+ * @property {readonly {module: string, range: string}[]} dependencies - Canonical module dependencies with declared ranges.
12
+ * @property {string} identity - Stable provider identity rooted at the target.
13
+ * @property {Readonly<Record<string, string>>} nativeEntries - Operation to protected native entry name.
14
+ * @property {readonly {module: string, operations: string[], version: string}[]} provides - Exactly one provided canonical module.
15
+ * @property {string} runtimeProfile - Closed target runtime/provider profile.
16
+ * @property {string} target - Adopted target language identity.
17
+ */
18
+ /**
19
+ * @typedef StdlibProviderRegistry
20
+ * @property {readonly StdlibProviderRecord[]} records - Registered provider records in stable order.
21
+ * @property {{(target: string, module: string, version: string): readonly StdlibProviderRecord[]}} providersFor - Exact provider lookup.
22
+ */
23
+ const providerIdentityPrefix = "semantifold.provider.";
24
+ /** @type {Readonly<Record<string, string>>} */
25
+ const targetExtensions = Object.freeze({
26
+ javascript: "js",
27
+ java: "java",
28
+ php: "php",
29
+ ruby: "rb",
30
+ typescript: "ts"
31
+ });
32
+ const builtinProviderTargets = Object.freeze(["php", "ruby", "javascript", "typescript", "java"]);
33
+ const probeIdentity = "semantifold.task034.resource-probe";
34
+ const probeOperations = Object.freeze(["probeEffect", "probeAcquire", "probeRead", "probeClose", "probeTrace"]);
35
+ const recordKeys = Object.freeze(["artifact", "dependencies", "identity", "nativeEntries", "provides", "runtimeProfile", "target"]);
36
+ const task037ProviderModules = Object.freeze([
37
+ Object.freeze({ dependencies: [], identity: "semantifold.resource", operations: ["v1_close"] }),
38
+ Object.freeze({ dependencies: [{ module: "semantifold.resource", range: "1" }], identity: "semantifold.socket-client", operations: ["v1_connect"] }),
39
+ Object.freeze({ dependencies: [{ module: "semantifold.resource", range: "1" }], identity: "semantifold.text-stream", operations: ["v1_read_line"] }),
40
+ Object.freeze({ dependencies: [], identity: "semantifold.output", operations: ["v1_write_line"] })
41
+ ]);
42
+ /** @type {Readonly<Record<string, string>>} */
43
+ const legacyRuntimeProfiles = Object.freeze({
44
+ javascript: "node24-core-v1",
45
+ java: "java17-core-v1",
46
+ php: "php82-core-v1",
47
+ ruby: "ruby3-core-v1",
48
+ typescript: "node24-typescript7-core-v1"
49
+ });
50
+ /**
51
+ * Creates the versioned target host stdlib provider registry.
52
+ * @param {unknown} records - Ordered provider records; built-in providers by default.
53
+ * @returns {Readonly<StdlibProviderRegistry>} Frozen registry.
54
+ */
55
+ export function createStdlibProviderRegistry(records = builtinProviderRecords()) {
56
+ if (!isDenseArray(records))
57
+ invalidProvider("Provider records must be an ordered dense array.");
58
+ /** @type {StdlibProviderRecord[]} */
59
+ const validated = [];
60
+ /** @type {Set<string>} */
61
+ const identities = new Set();
62
+ for (const candidate of records) {
63
+ const record = validateProviderRecord(candidate);
64
+ if (identities.has(record.identity))
65
+ invalidProvider(`Duplicate stdlib provider identity '${record.identity}'.`);
66
+ identities.add(record.identity);
67
+ validated.push(record);
68
+ }
69
+ const frozenRecords = deepFreeze(validated);
70
+ return Object.freeze(/** @type {Readonly<StdlibProviderRegistry>} */ ({
71
+ records: frozenRecords,
72
+ providersFor(target, module, version) {
73
+ if (typeof target != "string" || typeof module != "string" || typeof version != "string")
74
+ return Object.freeze([]);
75
+ return Object.freeze(frozenRecords.filter((record) => record.target == target && record.provides[0].module == module && record.provides[0].version == version));
76
+ }
77
+ }));
78
+ }
79
+ /**
80
+ * Lists the built-in target host providers for the probe contract in stable target order.
81
+ * @returns {readonly StdlibProviderRecord[]} Frozen provider records.
82
+ */
83
+ export function listStdlibProviders() {
84
+ return builtinProviderRegistry().records;
85
+ }
86
+ /**
87
+ * Authoritative built-in provider lookup keyed by exact target, module, and version.
88
+ * @type {{providersFor(target: string, module: string, version: string): readonly StdlibProviderRecord[]}}
89
+ */
90
+ export const stdlibProviderRegistry = {
91
+ providersFor(target, module, version) {
92
+ return builtinProviderRegistry().providersFor(target, module, version);
93
+ }
94
+ };
95
+ /**
96
+ * Validates one provider record against the target roles and canonical contract registry.
97
+ * @param {unknown} candidate - Candidate record.
98
+ * @returns {StdlibProviderRecord} Detached frozen record.
99
+ */
100
+ function validateProviderRecord(candidate) {
101
+ if (!isPlainObject(candidate))
102
+ invalidProvider("Every stdlib provider record must be a plain object.");
103
+ if (Object.keys(candidate).sort().join(",") != recordKeys.join(",")) {
104
+ invalidProvider("Every stdlib provider record declares the exact provider record fields.");
105
+ }
106
+ const target = /** @type {string} */ (candidate.target);
107
+ if (typeof target != "string" || !providerTargetRegistered(target)) {
108
+ invalidProvider(`Stdlib provider target '${String(target)}' is not an adopted target host provider.`);
109
+ }
110
+ const identity = /** @type {string} */ (candidate.identity);
111
+ const identityPrefix = providerIdentityPrefix + target + ".";
112
+ if (typeof identity != "string" || !identity.startsWith(identityPrefix) || identity.length == identityPrefix.length) {
113
+ invalidProvider(`Stdlib provider identity '${String(identity)}' must be rooted at '${identityPrefix}'.`);
114
+ }
115
+ const provides = /** @type {unknown} */ (candidate.provides);
116
+ if (!isDenseArray(provides) || provides.length != 1)
117
+ invalidProvider("Every stdlib provider provides exactly one canonical module.");
118
+ const provision = /** @type {unknown} */ (provides[0]);
119
+ if (!isPlainObject(provision) || Object.keys(provision).sort().join(",") != "module,operations,version") {
120
+ invalidProvider("Every stdlib provider provision declares the exact provision fields.");
121
+ }
122
+ const module = /** @type {string} */ (provision.module);
123
+ if (typeof module != "string" || !/^[a-z][a-z0-9.-]*$/u.test(module)) {
124
+ invalidProvider(`Stdlib provider module '${String(module)}' is not a canonical identity.`);
125
+ }
126
+ const version = /** @type {string} */ (provision.version);
127
+ if (parseStdlibVersion(version) === null) {
128
+ throw new SemantifoldDiagnostic({
129
+ code: "STDLIB_VERSION_MALFORMED",
130
+ language: target,
131
+ message: `Stdlib provider version '${String(version)}' is not a strict semantic version.`
132
+ });
133
+ }
134
+ const operations = /** @type {unknown} */ (provision.operations);
135
+ if (!isDenseArray(operations) || operations.length == 0 || !operations.every((operation) => typeof operation == "string" && /^[A-Za-z_][A-Za-z0-9_]*$/u.test(operation)) ||
136
+ new Set(/** @type {string[]} */ (operations)).size != operations.length) {
137
+ invalidProvider(`Stdlib provider '${identity}' declares invalid operations.`);
138
+ }
139
+ const operationList = /** @type {string[]} */ (operations);
140
+ if (moduleKnown(module))
141
+ validateProvision(module, version, operationList);
142
+ const nativeEntries = /** @type {unknown} */ (candidate.nativeEntries);
143
+ if (!isPlainObject(nativeEntries) || Object.keys(nativeEntries).sort().join(",") !=
144
+ [...operationList].sort().join(",")) {
145
+ invalidProvider(`Stdlib provider '${identity}' native entries must match its operations exactly.`);
146
+ }
147
+ for (const operation of operationList) {
148
+ const expectedEntry = module == probeIdentity
149
+ ? protectedEntryName(target, operation)
150
+ : protectedEntryName(target, module, operation);
151
+ if ( /** @type {string} */(nativeEntries[operation]) != expectedEntry) {
152
+ invalidProvider(`Stdlib provider '${identity}' declares an invalid protected native entry.`);
153
+ }
154
+ }
155
+ const artifact = /** @type {unknown} */ (candidate.artifact);
156
+ if (!isPlainObject(artifact) || Object.keys(artifact).sort().join(",") != "mediaType,path") {
157
+ invalidProvider(`Stdlib provider '${identity}' declares an invalid artifact.`);
158
+ }
159
+ const mediaType = /** @type {string} */ (artifact.mediaType);
160
+ const path = /** @type {string} */ (artifact.path);
161
+ const derivedPath = `providers/${target}/${module.replaceAll(".", "/")}.${targetExtensions[target]}`;
162
+ if (typeof mediaType != "string" || mediaType.length == 0 || typeof path != "string" ||
163
+ path != derivedPath || !isSafeArtifactPath(path)) {
164
+ invalidProvider(`Stdlib provider '${identity}' artifact must be generated at '${derivedPath}'.`);
165
+ }
166
+ const dependencies = /** @type {unknown} */ (candidate.dependencies);
167
+ if (!isDenseArray(dependencies))
168
+ invalidProvider(`Stdlib provider '${identity}' dependencies must be a dense array.`);
169
+ /** @type {{module: string, range: string}[]} */
170
+ const validatedDependencies = [];
171
+ for (const dependency of dependencies) {
172
+ if (!isPlainObject(dependency) || Object.keys(dependency).sort().join(",") != "module,range") {
173
+ invalidProvider(`Stdlib provider '${identity}' declares an invalid dependency.`);
174
+ }
175
+ const dependencyModule = /** @type {string} */ (dependency.module);
176
+ const dependencyRange = /** @type {string} */ (dependency.range);
177
+ if (typeof dependencyModule != "string" || !/^[a-z][a-z0-9.-]*$/u.test(dependencyModule) ||
178
+ parseStdlibVersionRange(dependencyRange) === null) {
179
+ throw new SemantifoldDiagnostic({
180
+ code: "STDLIB_VERSION_MALFORMED",
181
+ language: target,
182
+ message: `Stdlib provider dependency range '${String(dependencyRange)}' is not a canonical version range.`
183
+ });
184
+ }
185
+ validatedDependencies.push({ module: dependencyModule, range: /** @type {string} */ (dependencyRange) });
186
+ }
187
+ const runtimeProfile = /** @type {string} */ (candidate.runtimeProfile);
188
+ if (typeof runtimeProfile != "string" || !/^[a-z][a-z0-9-]*-v[1-9][0-9]*$/u.test(runtimeProfile)) {
189
+ invalidProvider(`Stdlib provider '${identity}' declares an invalid runtime profile.`);
190
+ }
191
+ if (module != probeIdentity && (target != "php" || runtimeProfile != "php82-core-streams-v1")) {
192
+ invalidProvider(`Stdlib provider '${identity}' does not use the Task 037 PHP 8.2 core-streams profile.`);
193
+ }
194
+ return deepFreeze(/** @type {StdlibProviderRecord} */ ({
195
+ artifact: { mediaType, path },
196
+ dependencies: validatedDependencies,
197
+ identity,
198
+ nativeEntries: Object.freeze(Object.fromEntries(operationList.map((operation) => [
199
+ operation,
200
+ /** @type {string} */ (nativeEntries[operation])
201
+ ]))),
202
+ provides: [{ module, operations: operationList, version: /** @type {string} */ (version) }],
203
+ runtimeProfile,
204
+ target
205
+ }));
206
+ }
207
+ /**
208
+ * Checks the provisioned module version and operations against the canonical contract registry.
209
+ * @param {string} module - Canonical module identity.
210
+ * @param {string} version - Strict provider version.
211
+ * @param {string[]} operations - Provided operations.
212
+ * @returns {void}
213
+ */
214
+ function validateProvision(module, version, operations) {
215
+ const listed = listStdlibModules().find(({ identity }) => identity == module);
216
+ if (!listed || !listed.versions.includes(version)) {
217
+ invalidProvider(`Stdlib provider version '${version}' is not registered for module '${module}'.`);
218
+ }
219
+ const declared = new Set(resolveStdlibModule(module, version).operations.map(({ name }) => name));
220
+ for (const operation of operations) {
221
+ if (!declared.has(operation)) {
222
+ throw new SemantifoldDiagnostic({
223
+ code: "STDLIB_OPERATION_UNDECLARED",
224
+ language: module,
225
+ message: `Operation '${operation}' is not declared by canonical module '${module}'.`
226
+ });
227
+ }
228
+ }
229
+ }
230
+ /**
231
+ * Reports whether a target is registered with the provider role.
232
+ * @param {unknown} target - Candidate target identity.
233
+ * @returns {boolean} Whether the target adopts the provider role.
234
+ */
235
+ function providerTargetRegistered(target) {
236
+ if (typeof target != "string")
237
+ return false;
238
+ try {
239
+ return languageRegistry.record(target).provider === true;
240
+ }
241
+ catch {
242
+ return false;
243
+ }
244
+ }
245
+ /**
246
+ * Reports whether a module identity is known to the built-in canonical contract registry.
247
+ * @param {string} module - Canonical module identity.
248
+ * @returns {boolean} Whether the identity resolves.
249
+ */
250
+ function moduleKnown(module) {
251
+ try {
252
+ resolveStdlibModule(module);
253
+ return true;
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ }
259
+ /**
260
+ * Builds the built-in provider records for the adopted targets.
261
+ * @returns {unknown[]} Unvalidated built-in records.
262
+ */
263
+ function builtinProviderRecords() {
264
+ const probeProviders = builtinProviderTargets.map((target) => ({
265
+ artifact: {
266
+ mediaType: /** @type {string} */ (languageRegistry.record(target).mediaType),
267
+ path: `providers/${target}/${probeIdentity.replaceAll(".", "/")}.${targetExtensions[target]}`
268
+ },
269
+ dependencies: [],
270
+ identity: `semantifold.provider.${target}.${probeIdentity}`,
271
+ nativeEntries: Object.fromEntries(probeOperations.map((operation) => [operation, protectedEntryName(target, operation)])),
272
+ provides: [{ module: probeIdentity, operations: [...probeOperations], version: "1.0.0" }],
273
+ runtimeProfile: legacyRuntimeProfiles[target],
274
+ target
275
+ }));
276
+ const task037Providers = task037ProviderModules.map((module) => ({
277
+ artifact: {
278
+ mediaType: /** @type {string} */ (languageRegistry.record("php").mediaType),
279
+ path: `providers/php/${module.identity.replaceAll(".", "/")}.php`
280
+ },
281
+ dependencies: module.dependencies,
282
+ identity: `semantifold.provider.php.${module.identity}`,
283
+ nativeEntries: Object.fromEntries(module.operations.map((operation) => [
284
+ operation,
285
+ protectedEntryName("php", module.identity, operation)
286
+ ])),
287
+ provides: [{ module: module.identity, operations: module.operations, version: "1.0.0" }],
288
+ runtimeProfile: "php82-core-streams-v1",
289
+ target: "php"
290
+ }));
291
+ return [...probeProviders, ...task037Providers];
292
+ }
293
+ /** @type {Readonly<StdlibProviderRegistry> | null} */
294
+ let builtinProviderRegistryValue = null;
295
+ /**
296
+ * Lazily materializes the built-in provider registry after language-registry initialization.
297
+ * @returns {Readonly<StdlibProviderRegistry>} Built-in registry.
298
+ */
299
+ function builtinProviderRegistry() {
300
+ if (builtinProviderRegistryValue === null) {
301
+ builtinProviderRegistryValue = createStdlibProviderRegistry(builtinProviderRecords());
302
+ }
303
+ return builtinProviderRegistryValue;
304
+ }
305
+ /**
306
+ * Throws a normalized provider-registry diagnostic.
307
+ * @param {string} message - Failure detail.
308
+ * @returns {never} Always throws.
309
+ */
310
+ function invalidProvider(message) {
311
+ throw new SemantifoldDiagnostic({ code: "STDLIB_PROVIDER_INVALID", language: "stdlib", message });
312
+ }
313
+ /**
314
+ * Checks for an ordinary string-keyed object.
315
+ * @param {unknown} value - Candidate value.
316
+ * @returns {value is Record<string, unknown>} Whether the value is a plain object.
317
+ */
318
+ function isPlainObject(value) {
319
+ if (typeof value != "object" || value === null)
320
+ return false;
321
+ const prototype = Object.getPrototypeOf(value);
322
+ return prototype === Object.prototype || prototype === null;
323
+ }
324
+ /**
325
+ * Deep-freezes a detached value.
326
+ * @template T
327
+ * @param {T} value - Detached value.
328
+ * @returns {Readonly<T>} Frozen value.
329
+ */
330
+ function deepFreeze(value) {
331
+ if (typeof value != "object" || value === null || Object.isFrozen(value))
332
+ return /** @type {Readonly<T>} */ (value);
333
+ Object.freeze(value);
334
+ for (const property of Object.getOwnPropertyNames(value)) {
335
+ deepFreeze(/** @type {unknown} */ (/** @type {Record<string, unknown>} */ (value)[property]));
336
+ }
337
+ return /** @type {Readonly<T>} */ (value);
338
+ }
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RkbGliLXByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGRsaWItcHJvdmlkZXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3JELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3JELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3ZELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ3BCLE1BQU0sc0JBQXNCLENBQUE7QUFFN0IsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFFdkQ7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7R0FJRztBQUVILE1BQU0sc0JBQXNCLEdBQUcsdUJBQXVCLENBQUE7QUFDdEQsK0NBQStDO0FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNyQyxVQUFVLEVBQUUsSUFBSTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLElBQUk7SUFDVixVQUFVLEVBQUUsSUFBSTtDQUNqQixDQUFDLENBQUE7QUFDRixNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNqRyxNQUFNLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQTtBQUMxRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLGNBQWMsRUFBRSxX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LENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNuSCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRXBCLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUUsc0NBQXNDLENBQUMsQ0FBQyxLQUFLLENBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakcsQ0FBQztJQUNELE9BQU8sMEJBQTBCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aXNEZW5zZUFycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiXG5pbXBvcnQge2lzU2FmZUFydGlmYWN0UGF0aH0gZnJvbSBcIi4vYXJ0aWZhY3QtcGF0aC5qc1wiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpY30gZnJvbSBcIi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xhbmd1YWdlUmVnaXN0cnl9IGZyb20gXCIuL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7XG4gIGxpc3RTdGRsaWJNb2R1bGVzLFxuICBwYXJzZVN0ZGxpYlZlcnNpb24sXG4gIHBhcnNlU3RkbGliVmVyc2lvblJhbmdlLFxuICBwcm90ZWN0ZWRFbnRyeU5hbWUsXG4gIHJlc29sdmVTdGRsaWJNb2R1bGVcbn0gZnJvbSBcIi4vc2VtYW50aWMvc3RkbGliLmpzXCJcblxuZXhwb3J0IHtwcm90ZWN0ZWRFbnRyeU5hbWV9IGZyb20gXCIuL3NlbWFudGljL3N0ZGxpYi5qc1wiXG5cbi8qKlxuICogQHR5cGVkZWYgU3RkbGliUHJvdmlkZXJSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7e21lZGlhVHlwZTogc3RyaW5nLCBwYXRoOiBzdHJpbmd9fSBhcnRpZmFjdCAtIEdlbmVyYXRlZCBwcm92aWRlciBhcnRpZmFjdCBkZWNsYXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkge21vZHVsZTogc3RyaW5nLCByYW5nZTogc3RyaW5nfVtdfSBkZXBlbmRlbmNpZXMgLSBDYW5vbmljYWwgbW9kdWxlIGRlcGVuZGVuY2llcyB3aXRoIGRlY2xhcmVkIHJhbmdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGVudGl0eSAtIFN0YWJsZSBwcm92aWRlciBpZGVudGl0eSByb290ZWQgYXQgdGhlIHRhcmdldC5cbiAqIEBwcm9wZXJ0eSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59IG5hdGl2ZUVudHJpZXMgLSBPcGVyYXRpb24gdG8gcHJvdGVjdGVkIG5hdGl2ZSBlbnRyeSBuYW1lLlxuICogQHByb3BlcnR5IHtyZWFkb25seSB7bW9kdWxlOiBzdHJpbmcsIG9wZXJhdGlvbnM6IHN0cmluZ1tdLCB2ZXJzaW9uOiBzdHJpbmd9W119IHByb3ZpZGVzIC0gRXhhY3RseSBvbmUgcHJvdmlkZWQgY2Fub25pY2FsIG1vZHVsZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBydW50aW1lUHJvZmlsZSAtIENsb3NlZCB0YXJnZXQgcnVudGltZS9wcm92aWRlciBwcm9maWxlLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRhcmdldCAtIEFkb3B0ZWQgdGFyZ2V0IGxhbmd1YWdlIGlkZW50aXR5LlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3RkbGliUHJvdmlkZXJSZWdpc3RyeVxuICogQHByb3BlcnR5IHtyZWFkb25seSBTdGRsaWJQcm92aWRlclJlY29yZFtdfSByZWNvcmRzIC0gUmVnaXN0ZXJlZCBwcm92aWRlciByZWNvcmRzIGluIHN0YWJsZSBvcmRlci5cbiAqIEBwcm9wZXJ0eSB7eyh0YXJnZXQ6IHN0cmluZywgbW9kdWxlOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHJlYWRvbmx5IFN0ZGxpYlByb3ZpZGVyUmVjb3JkW119fSBwcm92aWRlcnNGb3IgLSBFeGFjdCBwcm92aWRlciBsb29rdXAuXG4gKi9cblxuY29uc3QgcHJvdmlkZXJJZGVudGl0eVByZWZpeCA9IFwic2VtYW50aWZvbGQucHJvdmlkZXIuXCJcbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCB0YXJnZXRFeHRlbnNpb25zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGphdmFzY3JpcHQ6IFwianNcIixcbiAgamF2YTogXCJqYXZhXCIsXG4gIHBocDogXCJwaHBcIixcbiAgcnVieTogXCJyYlwiLFxuICB0eXBlc2NyaXB0OiBcInRzXCJcbn0pXG5jb25zdCBidWlsdGluUHJvdmlkZXJUYXJnZXRzID0gT2JqZWN0LmZyZWV6ZShbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgcHJvYmVJZGVudGl0eSA9IFwic2VtYW50aWZvbGQudGFzazAzNC5yZXNvdXJjZS1wcm9iZVwiXG5jb25zdCBwcm9iZU9wZXJhdGlvbnMgPSBPYmplY3QuZnJlZXplKFtcInByb2JlRWZmZWN0XCIsIFwicHJvYmVBY3F1aXJlXCIsIFwicHJvYmVSZWFkXCIsIFwicHJvYmVDbG9zZVwiLCBcInByb2JlVHJhY2VcIl0pXG5jb25zdCByZWNvcmRLZXlzID0gT2JqZWN0LmZyZWV6ZShbXCJhcnRpZmFjdFwiLCBcImRlcGVuZGVuY2llc1wiLCBcImlkZW50aXR5XCIsIFwibmF0aXZlRW50cmllc1wiLCBcInByb3ZpZGVzXCIsIFwicnVudGltZVByb2ZpbGVcIiwgXCJ0YXJnZXRcIl0pXG5jb25zdCB0YXNrMDM3UHJvdmlkZXJNb2R1bGVzID0gT2JqZWN0LmZyZWV6ZShbXG4gIE9iamVjdC5mcmVlemUoe2RlcGVuZGVuY2llczogW10sIGlkZW50aXR5OiBcInNlbWFudGlmb2xkLnJlc291cmNlXCIsIG9wZXJhdGlvbnM6IFtcInYxX2Nsb3NlXCJdfSksXG4gIE9iamVjdC5mcmVlemUoe2RlcGVuZGVuY2llczogW3ttb2R1bGU6IFwic2VtYW50aWZvbGQucmVzb3VyY2VcIiwgcmFuZ2U6IFwiMVwifV0sIGlkZW50aXR5OiBcInNlbWFudGlmb2xkLnNvY2tldC1jbGllbnRcIiwgb3BlcmF0aW9uczogW1widjFfY29ubmVjdFwiXX0pLFxuICBPYmplY3QuZnJlZXplKHtkZXBlbmRlbmNpZXM6IFt7bW9kdWxlOiBcInNlbWFudGlmb2xkLnJlc291cmNlXCIsIHJhbmdlOiBcIjFcIn1dLCBpZGVudGl0eTogXCJzZW1hbnRpZm9sZC50ZXh0LXN0cmVhbVwiLCBvcGVyYXRpb25zOiBbXCJ2MV9yZWFkX2xpbmVcIl19KSxcbiAgT2JqZWN0LmZyZWV6ZSh7ZGVwZW5kZW5jaWVzOiBbXSwgaWRlbnRpdHk6IFwic2VtYW50aWZvbGQub3V0cHV0XCIsIG9wZXJhdGlvbnM6IFtcInYxX3dyaXRlX2xpbmVcIl19KVxuXSlcbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nPj59ICovXG5jb25zdCBsZWdhY3lSdW50aW1lUHJvZmlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgamF2YXNjcmlwdDogXCJub2RlMjQtY29yZS12MVwiLFxuICBqYXZhOiBcImphdmExNy1jb3JlLXYxXCIsXG4gIHBocDogXCJwaHA4Mi1jb3JlLXYxXCIsXG4gIHJ1Ynk6IFwicnVieTMtY29yZS12MVwiLFxuICB0eXBlc2NyaXB0OiBcIm5vZGUyNC10eXBlc2NyaXB0Ny1jb3JlLXYxXCJcbn0pXG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdmVyc2lvbmVkIHRhcmdldCBob3N0IHN0ZGxpYiBwcm92aWRlciByZWdpc3RyeS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcmVjb3JkcyAtIE9yZGVyZWQgcHJvdmlkZXIgcmVjb3JkczsgYnVpbHQtaW4gcHJvdmlkZXJzIGJ5IGRlZmF1bHQuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8U3RkbGliUHJvdmlkZXJSZWdpc3RyeT59IEZyb3plbiByZWdpc3RyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0ZGxpYlByb3ZpZGVyUmVnaXN0cnkocmVjb3JkcyA9IGJ1aWx0aW5Qcm92aWRlclJlY29yZHMoKSkge1xuICBpZiAoIWlzRGVuc2VBcnJheShyZWNvcmRzKSkgaW52YWxpZFByb3ZpZGVyKFwiUHJvdmlkZXIgcmVjb3JkcyBtdXN0IGJlIGFuIG9yZGVyZWQgZGVuc2UgYXJyYXkuXCIpXG5cbiAgLyoqIEB0eXBlIHtTdGRsaWJQcm92aWRlclJlY29yZFtdfSAqL1xuICBjb25zdCB2YWxpZGF0ZWQgPSBbXVxuICAvKiogQHR5cGUge1NldDxzdHJpbmc+fSAqL1xuICBjb25zdCBpZGVudGl0aWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgcmVjb3Jkcykge1xuICAgIGNvbnN0IHJlY29yZCA9IHZhbGlkYXRlUHJvdmlkZXJSZWNvcmQoY2FuZGlkYXRlKVxuXG4gICAgaWYgKGlkZW50aXRpZXMuaGFzKHJlY29yZC5pZGVudGl0eSkpIGludmFsaWRQcm92aWRlcihgRHVwbGljYXRlIHN0ZGxpYiBwcm92aWRlciBpZGVudGl0eSAnJHtyZWNvcmQuaWRlbnRpdHl9Jy5gKVxuICAgIGlkZW50aXRpZXMuYWRkKHJlY29yZC5pZGVudGl0eSlcbiAgICB2YWxpZGF0ZWQucHVzaChyZWNvcmQpXG4gIH1cbiAgY29uc3QgZnJvemVuUmVjb3JkcyA9IGRlZXBGcmVlemUodmFsaWRhdGVkKVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKC8qKiBAdHlwZSB7UmVhZG9ubHk8U3RkbGliUHJvdmlkZXJSZWdpc3RyeT59ICovICh7XG4gICAgcmVjb3JkczogZnJvemVuUmVjb3JkcyxcbiAgICBwcm92aWRlcnNGb3IodGFyZ2V0LCBtb2R1bGUsIHZlcnNpb24pIHtcbiAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1vZHVsZSAhPSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2ZXJzaW9uICE9IFwic3RyaW5nXCIpIHJldHVybiBPYmplY3QuZnJlZXplKFtdKVxuICAgICAgcmV0dXJuIE9iamVjdC5mcmVlemUoZnJvemVuUmVjb3Jkcy5maWx0ZXIoKHJlY29yZCkgPT5cbiAgICAgICAgcmVjb3JkLnRhcmdldCA9PSB0YXJnZXQgJiYgcmVjb3JkLnByb3ZpZGVzWzBdLm1vZHVsZSA9PSBtb2R1bGUgJiYgcmVjb3JkLnByb3ZpZGVzWzBdLnZlcnNpb24gPT0gdmVyc2lvbikpXG4gICAgfVxuICB9KSlcbn1cblxuLyoqXG4gKiBMaXN0cyB0aGUgYnVpbHQtaW4gdGFyZ2V0IGhvc3QgcHJvdmlkZXJzIGZvciB0aGUgcHJvYmUgY29udHJhY3QgaW4gc3RhYmxlIHRhcmdldCBvcmRlci5cbiAqIEByZXR1cm5zIHtyZWFkb25seSBTdGRsaWJQcm92aWRlclJlY29yZFtdfSBGcm96ZW4gcHJvdmlkZXIgcmVjb3Jkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RTdGRsaWJQcm92aWRlcnMoKSB7XG4gIHJldHVybiBidWlsdGluUHJvdmlkZXJSZWdpc3RyeSgpLnJlY29yZHNcbn1cblxuLyoqXG4gKiBBdXRob3JpdGF0aXZlIGJ1aWx0LWluIHByb3ZpZGVyIGxvb2t1cCBrZXllZCBieSBleGFjdCB0YXJnZXQsIG1vZHVsZSwgYW5kIHZlcnNpb24uXG4gKiBAdHlwZSB7e3Byb3ZpZGVyc0Zvcih0YXJnZXQ6IHN0cmluZywgbW9kdWxlOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IHJlYWRvbmx5IFN0ZGxpYlByb3ZpZGVyUmVjb3JkW119fVxuICovXG5leHBvcnQgY29uc3Qgc3RkbGliUHJvdmlkZXJSZWdpc3RyeSA9IHtcbiAgcHJvdmlkZXJzRm9yKHRhcmdldCwgbW9kdWxlLCB2ZXJzaW9uKSB7XG4gICAgcmV0dXJuIGJ1aWx0aW5Qcm92aWRlclJlZ2lzdHJ5KCkucHJvdmlkZXJzRm9yKHRhcmdldCwgbW9kdWxlLCB2ZXJzaW9uKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBwcm92aWRlciByZWNvcmQgYWdhaW5zdCB0aGUgdGFyZ2V0IHJvbGVzIGFuZCBjYW5vbmljYWwgY29udHJhY3QgcmVnaXN0cnkuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIENhbmRpZGF0ZSByZWNvcmQuXG4gKiBAcmV0dXJucyB7U3RkbGliUHJvdmlkZXJSZWNvcmR9IERldGFjaGVkIGZyb3plbiByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvdmlkZXJSZWNvcmQoY2FuZGlkYXRlKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUpKSBpbnZhbGlkUHJvdmlkZXIoXCJFdmVyeSBzdGRsaWIgcHJvdmlkZXIgcmVjb3JkIG11c3QgYmUgYSBwbGFpbiBvYmplY3QuXCIpXG4gIGlmIChPYmplY3Qua2V5cyhjYW5kaWRhdGUpLnNvcnQoKS5qb2luKFwiLFwiKSAhPSByZWNvcmRLZXlzLmpvaW4oXCIsXCIpKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKFwiRXZlcnkgc3RkbGliIHByb3ZpZGVyIHJlY29yZCBkZWNsYXJlcyB0aGUgZXhhY3QgcHJvdmlkZXIgcmVjb3JkIGZpZWxkcy5cIilcbiAgfVxuICBjb25zdCB0YXJnZXQgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNhbmRpZGF0ZS50YXJnZXQpXG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgIT0gXCJzdHJpbmdcIiB8fCAhcHJvdmlkZXJUYXJnZXRSZWdpc3RlcmVkKHRhcmdldCkpIHtcbiAgICBpbnZhbGlkUHJvdmlkZXIoYFN0ZGxpYiBwcm92aWRlciB0YXJnZXQgJyR7U3RyaW5nKHRhcmdldCl9JyBpcyBub3QgYW4gYWRvcHRlZCB0YXJnZXQgaG9zdCBwcm92aWRlci5gKVxuICB9XG4gIGNvbnN0IGlkZW50aXR5ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChjYW5kaWRhdGUuaWRlbnRpdHkpXG4gIGNvbnN0IGlkZW50aXR5UHJlZml4ID0gcHJvdmlkZXJJZGVudGl0eVByZWZpeCArIHRhcmdldCArIFwiLlwiXG5cbiAgaWYgKHR5cGVvZiBpZGVudGl0eSAhPSBcInN0cmluZ1wiIHx8ICFpZGVudGl0eS5zdGFydHNXaXRoKGlkZW50aXR5UHJlZml4KSB8fCBpZGVudGl0eS5sZW5ndGggPT0gaWRlbnRpdHlQcmVmaXgubGVuZ3RoKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgaWRlbnRpdHkgJyR7U3RyaW5nKGlkZW50aXR5KX0nIG11c3QgYmUgcm9vdGVkIGF0ICcke2lkZW50aXR5UHJlZml4fScuYClcbiAgfVxuICBjb25zdCBwcm92aWRlcyA9IC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNhbmRpZGF0ZS5wcm92aWRlcylcblxuICBpZiAoIWlzRGVuc2VBcnJheShwcm92aWRlcykgfHwgcHJvdmlkZXMubGVuZ3RoICE9IDEpIGludmFsaWRQcm92aWRlcihcIkV2ZXJ5IHN0ZGxpYiBwcm92aWRlciBwcm92aWRlcyBleGFjdGx5IG9uZSBjYW5vbmljYWwgbW9kdWxlLlwiKVxuICBjb25zdCBwcm92aXNpb24gPSAvKiogQHR5cGUge3Vua25vd259ICovIChwcm92aWRlc1swXSlcblxuICBpZiAoIWlzUGxhaW5PYmplY3QocHJvdmlzaW9uKSB8fCBPYmplY3Qua2V5cyhwcm92aXNpb24pLnNvcnQoKS5qb2luKFwiLFwiKSAhPSBcIm1vZHVsZSxvcGVyYXRpb25zLHZlcnNpb25cIikge1xuICAgIGludmFsaWRQcm92aWRlcihcIkV2ZXJ5IHN0ZGxpYiBwcm92aWRlciBwcm92aXNpb24gZGVjbGFyZXMgdGhlIGV4YWN0IHByb3Zpc2lvbiBmaWVsZHMuXCIpXG4gIH1cbiAgY29uc3QgbW9kdWxlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwcm92aXNpb24ubW9kdWxlKVxuXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9IFwic3RyaW5nXCIgfHwgIS9eW2Etel1bYS16MC05Li1dKiQvdS50ZXN0KG1vZHVsZSkpIHtcbiAgICBpbnZhbGlkUHJvdmlkZXIoYFN0ZGxpYiBwcm92aWRlciBtb2R1bGUgJyR7U3RyaW5nKG1vZHVsZSl9JyBpcyBub3QgYSBjYW5vbmljYWwgaWRlbnRpdHkuYClcbiAgfVxuICBjb25zdCB2ZXJzaW9uID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChwcm92aXNpb24udmVyc2lvbilcblxuICBpZiAocGFyc2VTdGRsaWJWZXJzaW9uKHZlcnNpb24pID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIlNURExJQl9WRVJTSU9OX01BTEZPUk1FRFwiLFxuICAgICAgbGFuZ3VhZ2U6IHRhcmdldCxcbiAgICAgIG1lc3NhZ2U6IGBTdGRsaWIgcHJvdmlkZXIgdmVyc2lvbiAnJHtTdHJpbmcodmVyc2lvbil9JyBpcyBub3QgYSBzdHJpY3Qgc2VtYW50aWMgdmVyc2lvbi5gXG4gICAgfSlcbiAgfVxuICBjb25zdCBvcGVyYXRpb25zID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAocHJvdmlzaW9uLm9wZXJhdGlvbnMpXG5cbiAgaWYgKCFpc0RlbnNlQXJyYXkob3BlcmF0aW9ucykgfHwgb3BlcmF0aW9ucy5sZW5ndGggPT0gMCB8fCAhb3BlcmF0aW9ucy5ldmVyeSgob3BlcmF0aW9uKSA9PlxuICAgIHR5cGVvZiBvcGVyYXRpb24gPT0gXCJzdHJpbmdcIiAmJiAvXltBLVphLXpfXVtBLVphLXowLTlfXSokL3UudGVzdChvcGVyYXRpb24pKSB8fFxuICAgIG5ldyBTZXQoLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8gKG9wZXJhdGlvbnMpKS5zaXplICE9IG9wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgJyR7aWRlbnRpdHl9JyBkZWNsYXJlcyBpbnZhbGlkIG9wZXJhdGlvbnMuYClcbiAgfVxuICBjb25zdCBvcGVyYXRpb25MaXN0ID0gLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8gKG9wZXJhdGlvbnMpXG5cbiAgaWYgKG1vZHVsZUtub3duKG1vZHVsZSkpIHZhbGlkYXRlUHJvdmlzaW9uKG1vZHVsZSwgdmVyc2lvbiwgb3BlcmF0aW9uTGlzdClcbiAgY29uc3QgbmF0aXZlRW50cmllcyA9IC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gKGNhbmRpZGF0ZS5uYXRpdmVFbnRyaWVzKVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChuYXRpdmVFbnRyaWVzKSB8fCBPYmplY3Qua2V5cyhuYXRpdmVFbnRyaWVzKS5zb3J0KCkuam9pbihcIixcIikgIT1cbiAgICBbLi4ub3BlcmF0aW9uTGlzdF0uc29ydCgpLmpvaW4oXCIsXCIpKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgJyR7aWRlbnRpdHl9JyBuYXRpdmUgZW50cmllcyBtdXN0IG1hdGNoIGl0cyBvcGVyYXRpb25zIGV4YWN0bHkuYClcbiAgfVxuICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25MaXN0KSB7XG4gICAgY29uc3QgZXhwZWN0ZWRFbnRyeSA9IG1vZHVsZSA9PSBwcm9iZUlkZW50aXR5XG4gICAgICA/IHByb3RlY3RlZEVudHJ5TmFtZSh0YXJnZXQsIG9wZXJhdGlvbilcbiAgICAgIDogcHJvdGVjdGVkRW50cnlOYW1lKHRhcmdldCwgbW9kdWxlLCBvcGVyYXRpb24pXG5cbiAgICBpZiAoLyoqIEB0eXBlIHtzdHJpbmd9ICovIChuYXRpdmVFbnRyaWVzW29wZXJhdGlvbl0pICE9IGV4cGVjdGVkRW50cnkpIHtcbiAgICAgIGludmFsaWRQcm92aWRlcihgU3RkbGliIHByb3ZpZGVyICcke2lkZW50aXR5fScgZGVjbGFyZXMgYW4gaW52YWxpZCBwcm90ZWN0ZWQgbmF0aXZlIGVudHJ5LmApXG4gICAgfVxuICB9XG4gIGNvbnN0IGFydGlmYWN0ID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY2FuZGlkYXRlLmFydGlmYWN0KVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChhcnRpZmFjdCkgfHwgT2JqZWN0LmtleXMoYXJ0aWZhY3QpLnNvcnQoKS5qb2luKFwiLFwiKSAhPSBcIm1lZGlhVHlwZSxwYXRoXCIpIHtcbiAgICBpbnZhbGlkUHJvdmlkZXIoYFN0ZGxpYiBwcm92aWRlciAnJHtpZGVudGl0eX0nIGRlY2xhcmVzIGFuIGludmFsaWQgYXJ0aWZhY3QuYClcbiAgfVxuICBjb25zdCBtZWRpYVR5cGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGFydGlmYWN0Lm1lZGlhVHlwZSlcbiAgY29uc3QgcGF0aCA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYXJ0aWZhY3QucGF0aClcbiAgY29uc3QgZGVyaXZlZFBhdGggPSBgcHJvdmlkZXJzLyR7dGFyZ2V0fS8ke21vZHVsZS5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIil9LiR7dGFyZ2V0RXh0ZW5zaW9uc1t0YXJnZXRdfWBcblxuICBpZiAodHlwZW9mIG1lZGlhVHlwZSAhPSBcInN0cmluZ1wiIHx8IG1lZGlhVHlwZS5sZW5ndGggPT0gMCB8fCB0eXBlb2YgcGF0aCAhPSBcInN0cmluZ1wiIHx8XG4gICAgcGF0aCAhPSBkZXJpdmVkUGF0aCB8fCAhaXNTYWZlQXJ0aWZhY3RQYXRoKHBhdGgpKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgJyR7aWRlbnRpdHl9JyBhcnRpZmFjdCBtdXN0IGJlIGdlbmVyYXRlZCBhdCAnJHtkZXJpdmVkUGF0aH0nLmApXG4gIH1cbiAgY29uc3QgZGVwZW5kZW5jaWVzID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoY2FuZGlkYXRlLmRlcGVuZGVuY2llcylcblxuICBpZiAoIWlzRGVuc2VBcnJheShkZXBlbmRlbmNpZXMpKSBpbnZhbGlkUHJvdmlkZXIoYFN0ZGxpYiBwcm92aWRlciAnJHtpZGVudGl0eX0nIGRlcGVuZGVuY2llcyBtdXN0IGJlIGEgZGVuc2UgYXJyYXkuYClcbiAgLyoqIEB0eXBlIHt7bW9kdWxlOiBzdHJpbmcsIHJhbmdlOiBzdHJpbmd9W119ICovXG4gIGNvbnN0IHZhbGlkYXRlZERlcGVuZGVuY2llcyA9IFtdXG5cbiAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIGRlcGVuZGVuY2llcykge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChkZXBlbmRlbmN5KSB8fCBPYmplY3Qua2V5cyhkZXBlbmRlbmN5KS5zb3J0KCkuam9pbihcIixcIikgIT0gXCJtb2R1bGUscmFuZ2VcIikge1xuICAgICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgJyR7aWRlbnRpdHl9JyBkZWNsYXJlcyBhbiBpbnZhbGlkIGRlcGVuZGVuY3kuYClcbiAgICB9XG4gICAgY29uc3QgZGVwZW5kZW5jeU1vZHVsZSA9IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVwZW5kZW5jeS5tb2R1bGUpXG4gICAgY29uc3QgZGVwZW5kZW5jeVJhbmdlID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChkZXBlbmRlbmN5LnJhbmdlKVxuXG4gICAgaWYgKHR5cGVvZiBkZXBlbmRlbmN5TW9kdWxlICE9IFwic3RyaW5nXCIgfHwgIS9eW2Etel1bYS16MC05Li1dKiQvdS50ZXN0KGRlcGVuZGVuY3lNb2R1bGUpIHx8XG4gICAgICBwYXJzZVN0ZGxpYlZlcnNpb25SYW5nZShkZXBlbmRlbmN5UmFuZ2UpID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgY29kZTogXCJTVERMSUJfVkVSU0lPTl9NQUxGT1JNRURcIixcbiAgICAgICAgbGFuZ3VhZ2U6IHRhcmdldCxcbiAgICAgICAgbWVzc2FnZTogYFN0ZGxpYiBwcm92aWRlciBkZXBlbmRlbmN5IHJhbmdlICcke1N0cmluZyhkZXBlbmRlbmN5UmFuZ2UpfScgaXMgbm90IGEgY2Fub25pY2FsIHZlcnNpb24gcmFuZ2UuYFxuICAgICAgfSlcbiAgICB9XG4gICAgdmFsaWRhdGVkRGVwZW5kZW5jaWVzLnB1c2goe21vZHVsZTogZGVwZW5kZW5jeU1vZHVsZSwgcmFuZ2U6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoZGVwZW5kZW5jeVJhbmdlKX0pXG4gIH1cbiAgY29uc3QgcnVudGltZVByb2ZpbGUgPSAvKiogQHR5cGUge3N0cmluZ30gKi8gKGNhbmRpZGF0ZS5ydW50aW1lUHJvZmlsZSlcblxuICBpZiAodHlwZW9mIHJ1bnRpbWVQcm9maWxlICE9IFwic3RyaW5nXCIgfHwgIS9eW2Etel1bYS16MC05LV0qLXZbMS05XVswLTldKiQvdS50ZXN0KHJ1bnRpbWVQcm9maWxlKSkge1xuICAgIGludmFsaWRQcm92aWRlcihgU3RkbGliIHByb3ZpZGVyICcke2lkZW50aXR5fScgZGVjbGFyZXMgYW4gaW52YWxpZCBydW50aW1lIHByb2ZpbGUuYClcbiAgfVxuICBpZiAobW9kdWxlICE9IHByb2JlSWRlbnRpdHkgJiYgKHRhcmdldCAhPSBcInBocFwiIHx8IHJ1bnRpbWVQcm9maWxlICE9IFwicGhwODItY29yZS1zdHJlYW1zLXYxXCIpKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgJyR7aWRlbnRpdHl9JyBkb2VzIG5vdCB1c2UgdGhlIFRhc2sgMDM3IFBIUCA4LjIgY29yZS1zdHJlYW1zIHByb2ZpbGUuYClcbiAgfVxuICByZXR1cm4gZGVlcEZyZWV6ZSgvKiogQHR5cGUge1N0ZGxpYlByb3ZpZGVyUmVjb3JkfSAqLyAoe1xuICAgIGFydGlmYWN0OiB7bWVkaWFUeXBlLCBwYXRofSxcbiAgICBkZXBlbmRlbmNpZXM6IHZhbGlkYXRlZERlcGVuZGVuY2llcyxcbiAgICBpZGVudGl0eSxcbiAgICBuYXRpdmVFbnRyaWVzOiBPYmplY3QuZnJlZXplKE9iamVjdC5mcm9tRW50cmllcyhvcGVyYXRpb25MaXN0Lm1hcCgob3BlcmF0aW9uKSA9PiBbXG4gICAgICBvcGVyYXRpb24sXG4gICAgICAvKiogQHR5cGUge3N0cmluZ30gKi8gKG5hdGl2ZUVudHJpZXNbb3BlcmF0aW9uXSlcbiAgICBdKSkpLFxuICAgIHByb3ZpZGVzOiBbe21vZHVsZSwgb3BlcmF0aW9uczogb3BlcmF0aW9uTGlzdCwgdmVyc2lvbjogLyoqIEB0eXBlIHtzdHJpbmd9ICovICh2ZXJzaW9uKX1dLFxuICAgIHJ1bnRpbWVQcm9maWxlLFxuICAgIHRhcmdldFxuICB9KSlcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIHByb3Zpc2lvbmVkIG1vZHVsZSB2ZXJzaW9uIGFuZCBvcGVyYXRpb25zIGFnYWluc3QgdGhlIGNhbm9uaWNhbCBjb250cmFjdCByZWdpc3RyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGUgLSBDYW5vbmljYWwgbW9kdWxlIGlkZW50aXR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHZlcnNpb24gLSBTdHJpY3QgcHJvdmlkZXIgdmVyc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nW119IG9wZXJhdGlvbnMgLSBQcm92aWRlZCBvcGVyYXRpb25zLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvdmlzaW9uKG1vZHVsZSwgdmVyc2lvbiwgb3BlcmF0aW9ucykge1xuICBjb25zdCBsaXN0ZWQgPSBsaXN0U3RkbGliTW9kdWxlcygpLmZpbmQoKHtpZGVudGl0eX0pID0+IGlkZW50aXR5ID09IG1vZHVsZSlcblxuICBpZiAoIWxpc3RlZCB8fCAhbGlzdGVkLnZlcnNpb25zLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgaW52YWxpZFByb3ZpZGVyKGBTdGRsaWIgcHJvdmlkZXIgdmVyc2lvbiAnJHt2ZXJzaW9ufScgaXMgbm90IHJlZ2lzdGVyZWQgZm9yIG1vZHVsZSAnJHttb2R1bGV9Jy5gKVxuICB9XG4gIGNvbnN0IGRlY2xhcmVkID0gbmV3IFNldChyZXNvbHZlU3RkbGliTW9kdWxlKG1vZHVsZSwgdmVyc2lvbikub3BlcmF0aW9ucy5tYXAoKHtuYW1lfSkgPT4gbmFtZSkpXG5cbiAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgIGlmICghZGVjbGFyZWQuaGFzKG9wZXJhdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgICBjb2RlOiBcIlNURExJQl9PUEVSQVRJT05fVU5ERUNMQVJFRFwiLFxuICAgICAgICBsYW5ndWFnZTogbW9kdWxlLFxuICAgICAgICBtZXNzYWdlOiBgT3BlcmF0aW9uICcke29wZXJhdGlvbn0nIGlzIG5vdCBkZWNsYXJlZCBieSBjYW5vbmljYWwgbW9kdWxlICcke21vZHVsZX0nLmBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgdGFyZ2V0IGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvdmlkZXIgcm9sZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0IC0gQ2FuZGlkYXRlIHRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSB0YXJnZXQgYWRvcHRzIHRoZSBwcm92aWRlciByb2xlLlxuICovXG5mdW5jdGlvbiBwcm92aWRlclRhcmdldFJlZ2lzdGVyZWQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0ICE9IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZVxuICB0cnkge1xuICAgIHJldHVybiBsYW5ndWFnZVJlZ2lzdHJ5LnJlY29yZCh0YXJnZXQpLnByb3ZpZGVyID09PSB0cnVlXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgbW9kdWxlIGlkZW50aXR5IGlzIGtub3duIHRvIHRoZSBidWlsdC1pbiBjYW5vbmljYWwgY29udHJhY3QgcmVnaXN0cnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlIC0gQ2Fub25pY2FsIG1vZHVsZSBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBpZGVudGl0eSByZXNvbHZlcy5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlS25vd24obW9kdWxlKSB7XG4gIHRyeSB7XG4gICAgcmVzb2x2ZVN0ZGxpYk1vZHVsZShtb2R1bGUpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGJ1aWx0LWluIHByb3ZpZGVyIHJlY29yZHMgZm9yIHRoZSBhZG9wdGVkIHRhcmdldHMuXG4gKiBAcmV0dXJucyB7dW5rbm93bltdfSBVbnZhbGlkYXRlZCBidWlsdC1pbiByZWNvcmRzLlxuICovXG5mdW5jdGlvbiBidWlsdGluUHJvdmlkZXJSZWNvcmRzKCkge1xuICBjb25zdCBwcm9iZVByb3ZpZGVycyA9IGJ1aWx0aW5Qcm92aWRlclRhcmdldHMubWFwKCh0YXJnZXQpID0+ICh7XG4gICAgYXJ0aWZhY3Q6IHtcbiAgICAgIG1lZGlhVHlwZTogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChsYW5ndWFnZVJlZ2lzdHJ5LnJlY29yZCh0YXJnZXQpLm1lZGlhVHlwZSksXG4gICAgICBwYXRoOiBgcHJvdmlkZXJzLyR7dGFyZ2V0fS8ke3Byb2JlSWRlbnRpdHkucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpfS4ke3RhcmdldEV4dGVuc2lvbnNbdGFyZ2V0XX1gXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFtdLFxuICAgIGlkZW50aXR5OiBgc2VtYW50aWZvbGQucHJvdmlkZXIuJHt0YXJnZXR9LiR7cHJvYmVJZGVudGl0eX1gLFxuICAgIG5hdGl2ZUVudHJpZXM6IE9iamVjdC5mcm9tRW50cmllcyhwcm9iZU9wZXJhdGlvbnMubWFwKChvcGVyYXRpb24pID0+IFtvcGVyYXRpb24sIHByb3RlY3RlZEVudHJ5TmFtZSh0YXJnZXQsIG9wZXJhdGlvbildKSksXG4gICAgcHJvdmlkZXM6IFt7bW9kdWxlOiBwcm9iZUlkZW50aXR5LCBvcGVyYXRpb25zOiBbLi4ucHJvYmVPcGVyYXRpb25zXSwgdmVyc2lvbjogXCIxLjAuMFwifV0sXG4gICAgcnVudGltZVByb2ZpbGU6IGxlZ2FjeVJ1bnRpbWVQcm9maWxlc1t0YXJnZXRdLFxuICAgIHRhcmdldFxuICB9KSlcbiAgY29uc3QgdGFzazAzN1Byb3ZpZGVycyA9IHRhc2swMzdQcm92aWRlck1vZHVsZXMubWFwKChtb2R1bGUpID0+ICh7XG4gICAgYXJ0aWZhY3Q6IHtcbiAgICAgIG1lZGlhVHlwZTogLyoqIEB0eXBlIHtzdHJpbmd9ICovIChsYW5ndWFnZVJlZ2lzdHJ5LnJlY29yZChcInBocFwiKS5tZWRpYVR5cGUpLFxuICAgICAgcGF0aDogYHByb3ZpZGVycy9waHAvJHttb2R1bGUuaWRlbnRpdHkucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpfS5waHBgXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IG1vZHVsZS5kZXBlbmRlbmNpZXMsXG4gICAgaWRlbnRpdHk6IGBzZW1hbnRpZm9sZC5wcm92aWRlci5waHAuJHttb2R1bGUuaWRlbnRpdHl9YCxcbiAgICBuYXRpdmVFbnRyaWVzOiBPYmplY3QuZnJvbUVudHJpZXMobW9kdWxlLm9wZXJhdGlvbnMubWFwKChvcGVyYXRpb24pID0+IFtcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIHByb3RlY3RlZEVudHJ5TmFtZShcInBocFwiLCBtb2R1bGUuaWRlbnRpdHksIG9wZXJhdGlvbilcbiAgICBdKSksXG4gICAgcHJvdmlkZXM6IFt7bW9kdWxlOiBtb2R1bGUuaWRlbnRpdHksIG9wZXJhdGlvbnM6IG1vZHVsZS5vcGVyYXRpb25zLCB2ZXJzaW9uOiBcIjEuMC4wXCJ9XSxcbiAgICBydW50aW1lUHJvZmlsZTogXCJwaHA4Mi1jb3JlLXN0cmVhbXMtdjFcIixcbiAgICB0YXJnZXQ6IFwicGhwXCJcbiAgfSkpXG5cbiAgcmV0dXJuIFsuLi5wcm9iZVByb3ZpZGVycywgLi4udGFzazAzN1Byb3ZpZGVyc11cbn1cblxuLyoqIEB0eXBlIHtSZWFkb25seTxTdGRsaWJQcm92aWRlclJlZ2lzdHJ5PiB8IG51bGx9ICovXG5sZXQgYnVpbHRpblByb3ZpZGVyUmVnaXN0cnlWYWx1ZSA9IG51bGxcblxuLyoqXG4gKiBMYXppbHkgbWF0ZXJpYWxpemVzIHRoZSBidWlsdC1pbiBwcm92aWRlciByZWdpc3RyeSBhZnRlciBsYW5ndWFnZS1yZWdpc3RyeSBpbml0aWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxTdGRsaWJQcm92aWRlclJlZ2lzdHJ5Pn0gQnVpbHQtaW4gcmVnaXN0cnkuXG4gKi9cbmZ1bmN0aW9uIGJ1aWx0aW5Qcm92aWRlclJlZ2lzdHJ5KCkge1xuICBpZiAoYnVpbHRpblByb3ZpZGVyUmVnaXN0cnlWYWx1ZSA9PT0gbnVsbCkge1xuICAgIGJ1aWx0aW5Qcm92aWRlclJlZ2lzdHJ5VmFsdWUgPSBjcmVhdGVTdGRsaWJQcm92aWRlclJlZ2lzdHJ5KGJ1aWx0aW5Qcm92aWRlclJlY29yZHMoKSlcbiAgfVxuICByZXR1cm4gYnVpbHRpblByb3ZpZGVyUmVnaXN0cnlWYWx1ZVxufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgcHJvdmlkZXItcmVnaXN0cnkgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRQcm92aWRlcihtZXNzYWdlKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiU1RETElCX1BST1ZJREVSX0lOVkFMSURcIiwgbGFuZ3VhZ2U6IFwic3RkbGliXCIsIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgYW4gb3JkaW5hcnkgc3RyaW5nLWtleWVkIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IHByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSlcblxuICByZXR1cm4gcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvdHlwZSA9PT0gbnVsbFxufVxuXG4vKipcbiAqIERlZXAtZnJlZXplcyBhIGRldGFjaGVkIHZhbHVlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWUgLSBEZXRhY2hlZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxUPn0gRnJvemVuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gLyoqIEB0eXBlIHtSZWFkb25seTxUPn0gKi8gKHZhbHVlKVxuICBPYmplY3QuZnJlZXplKHZhbHVlKVxuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpKSB7XG4gICAgZGVlcEZyZWV6ZSgvKiogQHR5cGUge3Vua25vd259ICovICgoLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHZhbHVlKSlbcHJvcGVydHldKSlcbiAgfVxuICByZXR1cm4gLyoqIEB0eXBlIHtSZWFkb25seTxUPn0gKi8gKHZhbHVlKVxufVxuIl19
@@ -1,10 +1,22 @@
1
1
  export declare const canonicalToolchains: {
2
+ dart: {
3
+ canonicalCommand: string;
4
+ overrideEnvironmentVariable: string;
5
+ supportedVersion: RegExp;
6
+ versionArguments: string[];
7
+ };
2
8
  php: {
3
9
  canonicalCommand: string;
4
10
  overrideEnvironmentVariable: string;
5
11
  supportedVersion: RegExp;
6
12
  versionArguments: string[];
7
13
  };
14
+ php82: {
15
+ canonicalCommand: string;
16
+ overrideEnvironmentVariable: string;
17
+ supportedVersion: RegExp;
18
+ versionArguments: string[];
19
+ };
8
20
  ruby: {
9
21
  canonicalCommand: string;
10
22
  overrideEnvironmentVariable: string;
@@ -35,6 +47,18 @@ export declare const canonicalToolchains: {
35
47
  supportedVersion: RegExp;
36
48
  versionArguments: string[];
37
49
  };
50
+ java25: {
51
+ canonicalCommand: string;
52
+ overrideEnvironmentVariable: string;
53
+ supportedVersion: RegExp;
54
+ versionArguments: string[];
55
+ };
56
+ kotlinc: {
57
+ canonicalCommand: string;
58
+ overrideEnvironmentVariable: string;
59
+ supportedVersion: RegExp;
60
+ versionArguments: string[];
61
+ };
38
62
  python: {
39
63
  canonicalCommand: string;
40
64
  overrideEnvironmentVariable: string;
@@ -65,6 +89,36 @@ export declare const canonicalToolchains: {
65
89
  supportedVersion: RegExp;
66
90
  versionArguments: string[];
67
91
  };
92
+ rustc: {
93
+ canonicalCommand: string;
94
+ overrideEnvironmentVariable: string;
95
+ supportedVersion: RegExp;
96
+ versionArguments: string[];
97
+ };
98
+ cargo: {
99
+ canonicalCommand: string;
100
+ overrideEnvironmentVariable: string;
101
+ supportedVersion: RegExp;
102
+ versionArguments: string[];
103
+ };
104
+ swiftc: {
105
+ canonicalCommand: string;
106
+ overrideEnvironmentVariable: string;
107
+ supportedVersion: RegExp;
108
+ versionArguments: string[];
109
+ };
110
+ "wasm-validate": {
111
+ canonicalCommand: string;
112
+ overrideEnvironmentVariable: string;
113
+ supportedVersion: RegExp;
114
+ versionArguments: string[];
115
+ };
116
+ chromium: {
117
+ canonicalCommand: string;
118
+ overrideEnvironmentVariable: string;
119
+ supportedVersion: RegExp;
120
+ versionArguments: string[];
121
+ };
68
122
  };
69
123
  /**
70
124
  * Discovers one repository-declared canonical toolchain.
@@ -84,7 +138,7 @@ export declare function discoverCanonicalToolchain(id: keyof typeof canonicalToo
84
138
  * @param {Readonly<Record<string, string | undefined>>} [input.environment] - Explicit discovery environment.
85
139
  * @param {string} input.id - Toolchain ID.
86
140
  * @param {string} [input.override] - Configured absolute executable path.
87
- * @param {RegExp} [input.supportedVersion] - Full captured-output version policy.
141
+ * @param {RegExp} [input.supportedVersion] - Full selected-stream version policy.
88
142
  * @param {number} [input.timeoutMs] - Version command timeout.
89
143
  * @param {string[]} input.versionArguments - Exact version argument array.
90
144
  * @returns {Promise<import("./semantic/types.js").DiscoveredToolchain>} Discovered tool.
@@ -1 +1 @@
1
- {"version":3,"file":"toolchains.d.ts","sourceRoot":"","sources":["../../src/toolchains.js"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB;;0BAsKA,MAAM;qCAA+B,MAAM;0BAAoB,MAAM;0BAAoB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA1J/H,CAAA;AAEF;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAJxC,MAAM,OAAO,mBAI2B,EAAE,OAAO,AAHzD,CACA,EADQ;IAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAG5C,GAFpD,OAAO,CAAC,OAAO,qBAAqB,EAAE,mBAAmB,CAAC,CA+BtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAT1C;IAAsB,gBAAgB,EAA9B,MAAM,CACd;IAA6D,WAAW,AAAxE,CACA,EADQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CACpD;IAAsB,EAAE,EAAhB,MAAM,CACd;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAAuB,gBAAgB,AAAvC,CACA,EADQ,MAAM,CACd;IAAuB,SAAS,AAAhC,CACA,EADQ,MAAM,CACd;IAAwB,gBAAgB,EAAhC,MAAM,EAAE,CAChB;CAE0C,GAFhC,OAAO,CAAC,OAAO,qBAAqB,EAAE,mBAAmB,CAAC,CAiGtE;AA+HD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,GAHzC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAGqB,GAF9D,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqB5C"}
1
+ {"version":3,"file":"toolchains.d.ts","sourceRoot":"","sources":["../../src/toolchains.js"],"names":[],"mappings":"AAYA,eAAO,MAAM,mBAAmB;;0BAmLA,MAAM;qCAA+B,MAAM;0BAAoB,MAAM;0BAAoB,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA5J/H,CAAA;AAEF;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,EAAE,EAJxC,MAAM,OAAO,mBAI2B,EAAE,OAAO,AAHzD,CACA,EADQ;IAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAG5C,GAFpD,OAAO,CAAC,OAAO,qBAAqB,EAAE,mBAAmB,CAAC,CA+BtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAT1C;IAAsB,gBAAgB,EAA9B,MAAM,CACd;IAA6D,WAAW,AAAxE,CACA,EADQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CACpD;IAAsB,EAAE,EAAhB,MAAM,CACd;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAAuB,gBAAgB,AAAvC,CACA,EADQ,MAAM,CACd;IAAuB,SAAS,AAAhC,CACA,EADQ,MAAM,CACd;IAAwB,gBAAgB,EAAhC,MAAM,EAAE,CAChB;CAE0C,GAFhC,OAAO,CAAC,OAAO,qBAAqB,EAAE,mBAAmB,CAAC,CAmGtE;AA+HD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,GAHzC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAGqB,GAF9D,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAqB5C"}