effect 4.0.6 → 4.1.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 (978) hide show
  1. package/README.md +1 -1
  2. package/dist/Arbitrary.d.ts +10 -2
  3. package/dist/Arbitrary.d.ts.map +1 -1
  4. package/dist/Arbitrary.js +2 -1
  5. package/dist/Arbitrary.js.map +1 -1
  6. package/dist/BigDecimal.d.ts.map +1 -1
  7. package/dist/BigDecimal.js +3 -0
  8. package/dist/BigDecimal.js.map +1 -1
  9. package/dist/Channel.d.ts +12 -6
  10. package/dist/Channel.d.ts.map +1 -1
  11. package/dist/Channel.js +30 -9
  12. package/dist/Channel.js.map +1 -1
  13. package/dist/Config.d.ts +7 -1
  14. package/dist/Config.d.ts.map +1 -1
  15. package/dist/Config.js.map +1 -1
  16. package/dist/Context.d.ts +18 -1
  17. package/dist/Context.d.ts.map +1 -1
  18. package/dist/Context.js +27 -8
  19. package/dist/Context.js.map +1 -1
  20. package/dist/Cron.d.ts +81 -11
  21. package/dist/Cron.d.ts.map +1 -1
  22. package/dist/Cron.js +101 -26
  23. package/dist/Cron.js.map +1 -1
  24. package/dist/Data.d.ts +54 -235
  25. package/dist/Data.d.ts.map +1 -1
  26. package/dist/Data.js.map +1 -1
  27. package/dist/Duration.d.ts +78 -0
  28. package/dist/Duration.d.ts.map +1 -1
  29. package/dist/Duration.js +123 -0
  30. package/dist/Duration.js.map +1 -1
  31. package/dist/Effect.d.ts +165 -8
  32. package/dist/Effect.d.ts.map +1 -1
  33. package/dist/Effect.js +12 -2
  34. package/dist/Effect.js.map +1 -1
  35. package/dist/Equal.d.ts.map +1 -1
  36. package/dist/Equal.js +8 -1
  37. package/dist/Equal.js.map +1 -1
  38. package/dist/Exit.d.ts +3 -3
  39. package/dist/Exit.d.ts.map +1 -1
  40. package/dist/Exit.js.map +1 -1
  41. package/dist/FileSystem.d.ts +59 -4
  42. package/dist/FileSystem.d.ts.map +1 -1
  43. package/dist/FileSystem.js +9 -2
  44. package/dist/FileSystem.js.map +1 -1
  45. package/dist/Formatter.d.ts.map +1 -1
  46. package/dist/Formatter.js +27 -13
  47. package/dist/Formatter.js.map +1 -1
  48. package/dist/Glob.d.ts +165 -0
  49. package/dist/Glob.d.ts.map +1 -0
  50. package/dist/Glob.js +127 -0
  51. package/dist/Glob.js.map +1 -0
  52. package/dist/Hash.d.ts.map +1 -1
  53. package/dist/Hash.js +4 -1
  54. package/dist/Hash.js.map +1 -1
  55. package/dist/JsonPatch.js +4 -0
  56. package/dist/JsonPatch.js.map +1 -1
  57. package/dist/JsonSchema.d.ts.map +1 -1
  58. package/dist/JsonSchema.js +13 -40
  59. package/dist/JsonSchema.js.map +1 -1
  60. package/dist/Match.d.ts +86 -0
  61. package/dist/Match.d.ts.map +1 -1
  62. package/dist/Match.js +72 -0
  63. package/dist/Match.js.map +1 -1
  64. package/dist/Metric.d.ts +3 -3
  65. package/dist/MutableList.d.ts +5 -2
  66. package/dist/MutableList.d.ts.map +1 -1
  67. package/dist/MutableList.js +7 -5
  68. package/dist/MutableList.js.map +1 -1
  69. package/dist/MutableRef.d.ts.map +1 -1
  70. package/dist/MutableRef.js +7 -0
  71. package/dist/MutableRef.js.map +1 -1
  72. package/dist/PartitionedSemaphore.d.ts +2 -1
  73. package/dist/PartitionedSemaphore.d.ts.map +1 -1
  74. package/dist/PartitionedSemaphore.js +22 -12
  75. package/dist/PartitionedSemaphore.js.map +1 -1
  76. package/dist/Pool.d.ts +51 -0
  77. package/dist/Pool.d.ts.map +1 -1
  78. package/dist/Pool.js +136 -36
  79. package/dist/Pool.js.map +1 -1
  80. package/dist/PubSub.d.ts.map +1 -1
  81. package/dist/PubSub.js +5 -6
  82. package/dist/PubSub.js.map +1 -1
  83. package/dist/Random.d.ts.map +1 -1
  84. package/dist/Random.js +3 -3
  85. package/dist/Random.js.map +1 -1
  86. package/dist/RcMap.d.ts.map +1 -1
  87. package/dist/RcMap.js +8 -2
  88. package/dist/RcMap.js.map +1 -1
  89. package/dist/Ref.d.ts.map +1 -1
  90. package/dist/Ref.js +8 -0
  91. package/dist/Ref.js.map +1 -1
  92. package/dist/Schedule.d.ts +18 -1
  93. package/dist/Schedule.d.ts.map +1 -1
  94. package/dist/Schedule.js +8 -3
  95. package/dist/Schedule.js.map +1 -1
  96. package/dist/Schema.d.ts +690 -49
  97. package/dist/Schema.d.ts.map +1 -1
  98. package/dist/Schema.js +687 -28
  99. package/dist/Schema.js.map +1 -1
  100. package/dist/SchemaAST.d.ts +4 -2
  101. package/dist/SchemaAST.d.ts.map +1 -1
  102. package/dist/SchemaAST.js +14 -17
  103. package/dist/SchemaAST.js.map +1 -1
  104. package/dist/SchemaGetter.d.ts +6 -1
  105. package/dist/SchemaGetter.d.ts.map +1 -1
  106. package/dist/SchemaGetter.js +22 -11
  107. package/dist/SchemaGetter.js.map +1 -1
  108. package/dist/SchemaParser.d.ts.map +1 -1
  109. package/dist/SchemaParser.js +48 -22
  110. package/dist/SchemaParser.js.map +1 -1
  111. package/dist/SchemaRepresentation.d.ts +33 -10
  112. package/dist/SchemaRepresentation.d.ts.map +1 -1
  113. package/dist/SchemaRepresentation.js +39 -13
  114. package/dist/SchemaRepresentation.js.map +1 -1
  115. package/dist/SchemaTransformation.d.ts +12 -4
  116. package/dist/SchemaTransformation.d.ts.map +1 -1
  117. package/dist/SchemaTransformation.js +15 -5
  118. package/dist/SchemaTransformation.js.map +1 -1
  119. package/dist/ScopedCache.d.ts.map +1 -1
  120. package/dist/ScopedCache.js +5 -7
  121. package/dist/ScopedCache.js.map +1 -1
  122. package/dist/Semaphore.d.ts +130 -0
  123. package/dist/Semaphore.d.ts.map +1 -1
  124. package/dist/Semaphore.js +94 -35
  125. package/dist/Semaphore.js.map +1 -1
  126. package/dist/Sink.d.ts.map +1 -1
  127. package/dist/Sink.js +7 -2
  128. package/dist/Sink.js.map +1 -1
  129. package/dist/Stream.d.ts +13 -4
  130. package/dist/Stream.d.ts.map +1 -1
  131. package/dist/Stream.js +31 -10
  132. package/dist/Stream.js.map +1 -1
  133. package/dist/String.d.ts +3 -0
  134. package/dist/String.d.ts.map +1 -1
  135. package/dist/String.js +3 -0
  136. package/dist/String.js.map +1 -1
  137. package/dist/Terminal.d.ts +18 -1
  138. package/dist/Terminal.d.ts.map +1 -1
  139. package/dist/Terminal.js +1 -1
  140. package/dist/Terminal.js.map +1 -1
  141. package/dist/Tracer.d.ts +11 -1
  142. package/dist/Tracer.d.ts.map +1 -1
  143. package/dist/Tracer.js +6 -1
  144. package/dist/Tracer.js.map +1 -1
  145. package/dist/ai/AiError.d.ts +43 -116
  146. package/dist/ai/AiError.d.ts.map +1 -1
  147. package/dist/ai/AiError.js +53 -72
  148. package/dist/ai/AiError.js.map +1 -1
  149. package/dist/ai/Decision.d.ts +196 -15
  150. package/dist/ai/Decision.d.ts.map +1 -1
  151. package/dist/ai/Decision.js +130 -0
  152. package/dist/ai/Decision.js.map +1 -1
  153. package/dist/ai/DecisionModel.d.ts +54 -13
  154. package/dist/ai/DecisionModel.d.ts.map +1 -1
  155. package/dist/ai/DecisionModel.js +123 -12
  156. package/dist/ai/DecisionModel.js.map +1 -1
  157. package/dist/ai/LanguageModel.d.ts.map +1 -1
  158. package/dist/ai/LanguageModel.js +9 -0
  159. package/dist/ai/LanguageModel.js.map +1 -1
  160. package/dist/ai/McpSchema.d.ts +110 -110
  161. package/dist/ai/McpSchema.d.ts.map +1 -1
  162. package/dist/ai/McpServer.d.ts +630 -29
  163. package/dist/ai/McpServer.d.ts.map +1 -1
  164. package/dist/ai/McpServer.js +583 -131
  165. package/dist/ai/McpServer.js.map +1 -1
  166. package/dist/ai/McpTest.d.ts +130 -0
  167. package/dist/ai/McpTest.d.ts.map +1 -0
  168. package/dist/ai/McpTest.js +237 -0
  169. package/dist/ai/McpTest.js.map +1 -0
  170. package/dist/ai/Prompt.d.ts +52 -0
  171. package/dist/ai/Prompt.d.ts.map +1 -1
  172. package/dist/ai/Prompt.js +38 -0
  173. package/dist/ai/Prompt.js.map +1 -1
  174. package/dist/ai/Response.d.ts +17 -28
  175. package/dist/ai/Response.d.ts.map +1 -1
  176. package/dist/ai/Response.js +5 -10
  177. package/dist/ai/Response.js.map +1 -1
  178. package/dist/ai/Tool.d.ts +43 -1
  179. package/dist/ai/Tool.d.ts.map +1 -1
  180. package/dist/ai/Tool.js +5 -2
  181. package/dist/ai/Tool.js.map +1 -1
  182. package/dist/ai/Toolkit.d.ts.map +1 -1
  183. package/dist/ai/Toolkit.js +8 -1
  184. package/dist/ai/Toolkit.js.map +1 -1
  185. package/dist/ai/index.d.ts +5 -0
  186. package/dist/ai/index.d.ts.map +1 -1
  187. package/dist/ai/index.js +5 -0
  188. package/dist/ai/index.js.map +1 -1
  189. package/dist/ai/internal/mcpCore.js +17 -12
  190. package/dist/ai/internal/mcpCore.js.map +1 -1
  191. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  192. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  193. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  194. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  195. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  196. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  197. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  198. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  199. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  200. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  201. package/dist/ai/internal/mcpProtocol.js +13 -0
  202. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  203. package/dist/ai/internal/mcpRuntime.js +5 -3
  204. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  205. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  206. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  207. package/dist/cli/Argument.d.ts +21 -0
  208. package/dist/cli/Argument.d.ts.map +1 -1
  209. package/dist/cli/Argument.js +7 -0
  210. package/dist/cli/Argument.js.map +1 -1
  211. package/dist/cli/CliError.d.ts +78 -0
  212. package/dist/cli/CliError.d.ts.map +1 -1
  213. package/dist/cli/CliError.js +65 -3
  214. package/dist/cli/CliError.js.map +1 -1
  215. package/dist/cli/CliOutput.d.ts +220 -7
  216. package/dist/cli/CliOutput.d.ts.map +1 -1
  217. package/dist/cli/CliOutput.js +156 -43
  218. package/dist/cli/CliOutput.js.map +1 -1
  219. package/dist/cli/Command.d.ts +47 -16
  220. package/dist/cli/Command.d.ts.map +1 -1
  221. package/dist/cli/Command.js +67 -29
  222. package/dist/cli/Command.js.map +1 -1
  223. package/dist/cli/Completions.d.ts +58 -0
  224. package/dist/cli/Completions.d.ts.map +1 -1
  225. package/dist/cli/Completions.js +49 -9
  226. package/dist/cli/Completions.js.map +1 -1
  227. package/dist/cli/Flag.d.ts +122 -0
  228. package/dist/cli/Flag.d.ts.map +1 -1
  229. package/dist/cli/Flag.js +42 -0
  230. package/dist/cli/Flag.js.map +1 -1
  231. package/dist/cli/GlobalFlag.d.ts.map +1 -1
  232. package/dist/cli/GlobalFlag.js +15 -7
  233. package/dist/cli/GlobalFlag.js.map +1 -1
  234. package/dist/cli/HelpDoc.d.ts +15 -1
  235. package/dist/cli/HelpDoc.d.ts.map +1 -1
  236. package/dist/cli/Param.d.ts +15 -0
  237. package/dist/cli/Param.d.ts.map +1 -1
  238. package/dist/cli/Param.js +23 -2
  239. package/dist/cli/Param.js.map +1 -1
  240. package/dist/cli/Primitive.d.ts +14 -0
  241. package/dist/cli/Primitive.d.ts.map +1 -1
  242. package/dist/cli/Primitive.js +15 -1
  243. package/dist/cli/Primitive.js.map +1 -1
  244. package/dist/cli/Prompt.d.ts +1 -0
  245. package/dist/cli/Prompt.d.ts.map +1 -1
  246. package/dist/cli/Prompt.js +1 -0
  247. package/dist/cli/Prompt.js.map +1 -1
  248. package/dist/cli/TerminalCapabilities.d.ts +3 -2
  249. package/dist/cli/TerminalCapabilities.d.ts.map +1 -1
  250. package/dist/cli/TerminalCapabilities.js +3 -1
  251. package/dist/cli/TerminalCapabilities.js.map +1 -1
  252. package/dist/cli/internal/completions/bash.js +73 -27
  253. package/dist/cli/internal/completions/bash.js.map +1 -1
  254. package/dist/cli/internal/help.d.ts.map +1 -1
  255. package/dist/cli/internal/help.js +17 -10
  256. package/dist/cli/internal/help.js.map +1 -1
  257. package/dist/cluster/ClusterWorkflowEngine.d.ts.map +1 -1
  258. package/dist/cluster/ClusterWorkflowEngine.js +45 -10
  259. package/dist/cluster/ClusterWorkflowEngine.js.map +1 -1
  260. package/dist/cluster/MessageStorage.d.ts +23 -45
  261. package/dist/cluster/MessageStorage.d.ts.map +1 -1
  262. package/dist/cluster/MessageStorage.js +6 -7
  263. package/dist/cluster/MessageStorage.js.map +1 -1
  264. package/dist/cluster/Sharding.d.ts.map +1 -1
  265. package/dist/cluster/Sharding.js +151 -49
  266. package/dist/cluster/Sharding.js.map +1 -1
  267. package/dist/cluster/ShardingConfig.d.ts +76 -0
  268. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  269. package/dist/cluster/ShardingConfig.js +4 -0
  270. package/dist/cluster/ShardingConfig.js.map +1 -1
  271. package/dist/cluster/SingleRunner.d.ts +3 -3
  272. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  273. package/dist/cluster/SingleRunner.js +1 -1
  274. package/dist/cluster/Snowflake.d.ts.map +1 -1
  275. package/dist/cluster/Snowflake.js +3 -7
  276. package/dist/cluster/Snowflake.js.map +1 -1
  277. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  278. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  279. package/dist/cluster/SqlMessageStorage.js +34 -7
  280. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  281. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  282. package/dist/cluster/SqlRunnerStorage.js +109 -46
  283. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  284. package/dist/cluster/internal/entityManager.js +54 -20
  285. package/dist/cluster/internal/entityManager.js.map +1 -1
  286. package/dist/crypto/Aead.d.ts +322 -0
  287. package/dist/crypto/Aead.d.ts.map +1 -0
  288. package/dist/crypto/Aead.js +331 -0
  289. package/dist/crypto/Aead.js.map +1 -0
  290. package/dist/crypto/Cipher.d.ts +235 -0
  291. package/dist/crypto/Cipher.d.ts.map +1 -0
  292. package/dist/crypto/Cipher.js +233 -0
  293. package/dist/crypto/Cipher.js.map +1 -0
  294. package/dist/crypto/CryptoError.d.ts +212 -0
  295. package/dist/crypto/CryptoError.d.ts.map +1 -0
  296. package/dist/crypto/CryptoError.js +202 -0
  297. package/dist/crypto/CryptoError.js.map +1 -0
  298. package/dist/crypto/Digest.d.ts +143 -0
  299. package/dist/crypto/Digest.d.ts.map +1 -0
  300. package/dist/crypto/Digest.js +146 -0
  301. package/dist/crypto/Digest.js.map +1 -0
  302. package/dist/crypto/Kdf.d.ts +220 -0
  303. package/dist/crypto/Kdf.d.ts.map +1 -0
  304. package/dist/crypto/Kdf.js +212 -0
  305. package/dist/crypto/Kdf.js.map +1 -0
  306. package/dist/crypto/KeyAgreement.d.ts +323 -0
  307. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  308. package/dist/crypto/KeyAgreement.js +303 -0
  309. package/dist/crypto/KeyAgreement.js.map +1 -0
  310. package/dist/crypto/KeyFormat.d.ts +309 -0
  311. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  312. package/dist/crypto/KeyFormat.js +556 -0
  313. package/dist/crypto/KeyFormat.js.map +1 -0
  314. package/dist/crypto/KeyWrap.d.ts +389 -0
  315. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  316. package/dist/crypto/KeyWrap.js +381 -0
  317. package/dist/crypto/KeyWrap.js.map +1 -0
  318. package/dist/crypto/Mac.d.ts +277 -0
  319. package/dist/crypto/Mac.d.ts.map +1 -0
  320. package/dist/crypto/Mac.js +288 -0
  321. package/dist/crypto/Mac.js.map +1 -0
  322. package/dist/crypto/SecureRandom.d.ts +340 -0
  323. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  324. package/dist/crypto/SecureRandom.js +257 -0
  325. package/dist/crypto/SecureRandom.js.map +1 -0
  326. package/dist/crypto/Signature.d.ts +448 -0
  327. package/dist/crypto/Signature.d.ts.map +1 -0
  328. package/dist/crypto/Signature.js +484 -0
  329. package/dist/crypto/Signature.js.map +1 -0
  330. package/dist/crypto/WebCrypto.d.ts +61 -0
  331. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  332. package/dist/crypto/WebCrypto.js +63 -0
  333. package/dist/crypto/WebCrypto.js.map +1 -0
  334. package/dist/crypto/index.d.ts +65 -0
  335. package/dist/crypto/index.d.ts.map +1 -0
  336. package/dist/crypto/index.js +66 -0
  337. package/dist/crypto/index.js.map +1 -0
  338. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  339. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  340. package/dist/crypto/internal/asymmetric.js +210 -0
  341. package/dist/crypto/internal/asymmetric.js.map +1 -0
  342. package/dist/crypto/internal/chacha.d.ts +46 -0
  343. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  344. package/dist/crypto/internal/chacha.js +885 -0
  345. package/dist/crypto/internal/chacha.js.map +1 -0
  346. package/dist/crypto/internal/der.d.ts +6 -0
  347. package/dist/crypto/internal/der.d.ts.map +1 -0
  348. package/dist/crypto/internal/der.js +86 -0
  349. package/dist/crypto/internal/der.js.map +1 -0
  350. package/dist/crypto/internal/digest.d.ts +2 -0
  351. package/dist/crypto/internal/digest.d.ts.map +1 -0
  352. package/dist/crypto/internal/digest.js +15 -0
  353. package/dist/crypto/internal/digest.js.map +1 -0
  354. package/dist/crypto/internal/key.d.ts +2 -0
  355. package/dist/crypto/internal/key.d.ts.map +1 -0
  356. package/dist/crypto/internal/key.js +170 -0
  357. package/dist/crypto/internal/key.js.map +1 -0
  358. package/dist/crypto/internal/md5.d.ts +39 -0
  359. package/dist/crypto/internal/md5.d.ts.map +1 -0
  360. package/dist/crypto/internal/md5.js +179 -0
  361. package/dist/crypto/internal/md5.js.map +1 -0
  362. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  363. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  364. package/dist/crypto/internal/webCrypto.js +111 -0
  365. package/dist/crypto/internal/webCrypto.js.map +1 -0
  366. package/dist/devtools/DevToolsClient.d.ts.map +1 -1
  367. package/dist/devtools/DevToolsClient.js +2 -0
  368. package/dist/devtools/DevToolsClient.js.map +1 -1
  369. package/dist/encoding/Base64.js +36 -0
  370. package/dist/encoding/Base64.js.map +1 -1
  371. package/dist/encoding/Base64Url.d.ts.map +1 -1
  372. package/dist/encoding/Base64Url.js +3 -2
  373. package/dist/encoding/Base64Url.js.map +1 -1
  374. package/dist/encoding/Csv.d.ts +608 -0
  375. package/dist/encoding/Csv.d.ts.map +1 -0
  376. package/dist/encoding/Csv.js +718 -0
  377. package/dist/encoding/Csv.js.map +1 -0
  378. package/dist/encoding/Hex.d.ts +3 -2
  379. package/dist/encoding/Hex.d.ts.map +1 -1
  380. package/dist/encoding/Hex.js +3 -2
  381. package/dist/encoding/Hex.js.map +1 -1
  382. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  383. package/dist/encoding/SchemaBinary.js +42 -4
  384. package/dist/encoding/SchemaBinary.js.map +1 -1
  385. package/dist/encoding/Sse.d.ts.map +1 -1
  386. package/dist/encoding/Sse.js +3 -3
  387. package/dist/encoding/Sse.js.map +1 -1
  388. package/dist/encoding/Toml.d.ts +17 -3
  389. package/dist/encoding/Toml.d.ts.map +1 -1
  390. package/dist/encoding/Toml.js +124 -31
  391. package/dist/encoding/Toml.js.map +1 -1
  392. package/dist/encoding/Yaml.d.ts +8 -1
  393. package/dist/encoding/Yaml.d.ts.map +1 -1
  394. package/dist/encoding/Yaml.js +54 -18
  395. package/dist/encoding/Yaml.js.map +1 -1
  396. package/dist/encoding/index.d.ts +5 -0
  397. package/dist/encoding/index.d.ts.map +1 -1
  398. package/dist/encoding/index.js +5 -0
  399. package/dist/encoding/index.js.map +1 -1
  400. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  401. package/dist/eventlog/EventJournal.js +6 -3
  402. package/dist/eventlog/EventJournal.js.map +1 -1
  403. package/dist/eventlog/EventLog.d.ts +119 -4
  404. package/dist/eventlog/EventLog.d.ts.map +1 -1
  405. package/dist/eventlog/EventLog.js +200 -12
  406. package/dist/eventlog/EventLog.js.map +1 -1
  407. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  408. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  409. package/dist/eventlog/EventLogEncryption.js +83 -64
  410. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  411. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  412. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  413. package/dist/eventlog/EventLogMessage.js +217 -1
  414. package/dist/eventlog/EventLogMessage.js.map +1 -1
  415. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  416. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  417. package/dist/eventlog/EventLogRemote.js +186 -16
  418. package/dist/eventlog/EventLogRemote.js.map +1 -1
  419. package/dist/eventlog/EventLogServer.d.ts +3 -0
  420. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  421. package/dist/eventlog/EventLogServer.js +18 -10
  422. package/dist/eventlog/EventLogServer.js.map +1 -1
  423. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  424. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  425. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  426. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  427. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  428. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  429. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  430. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  431. package/dist/eventlog/EventRow.d.ts +4 -0
  432. package/dist/eventlog/EventRow.d.ts.map +1 -1
  433. package/dist/eventlog/EventRow.js +12 -2
  434. package/dist/eventlog/EventRow.js.map +1 -1
  435. package/dist/eventlog/SqlEventJournal.d.ts.map +1 -1
  436. package/dist/eventlog/SqlEventJournal.js +47 -27
  437. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  438. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  439. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  440. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  441. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  442. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  443. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  444. package/dist/eventlog/internal/batches.d.ts +12 -0
  445. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  446. package/dist/eventlog/internal/batches.js +26 -0
  447. package/dist/eventlog/internal/batches.js.map +1 -0
  448. package/dist/eventlog/internal/compaction.d.ts +38 -0
  449. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  450. package/dist/eventlog/internal/compaction.js +33 -0
  451. package/dist/eventlog/internal/compaction.js.map +1 -0
  452. package/dist/eventlog/internal/conflicts.d.ts +0 -1
  453. package/dist/eventlog/internal/conflicts.d.ts.map +1 -1
  454. package/dist/eventlog/internal/conflicts.js +0 -3
  455. package/dist/eventlog/internal/conflicts.js.map +1 -1
  456. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  457. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  458. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  459. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  460. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  461. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  462. package/dist/http/Cookies.d.ts +172 -0
  463. package/dist/http/Cookies.d.ts.map +1 -1
  464. package/dist/http/Cookies.js +153 -10
  465. package/dist/http/Cookies.js.map +1 -1
  466. package/dist/http/FetchHttpClient.d.ts +26 -2
  467. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  468. package/dist/http/FetchHttpClient.js +78 -15
  469. package/dist/http/FetchHttpClient.js.map +1 -1
  470. package/dist/http/HttpClient.d.ts +502 -8
  471. package/dist/http/HttpClient.d.ts.map +1 -1
  472. package/dist/http/HttpClient.js +296 -12
  473. package/dist/http/HttpClient.js.map +1 -1
  474. package/dist/http/HttpClientError.d.ts +8 -1
  475. package/dist/http/HttpClientError.d.ts.map +1 -1
  476. package/dist/http/HttpClientError.js +37 -1
  477. package/dist/http/HttpClientError.js.map +1 -1
  478. package/dist/http/HttpClientRequest.d.ts +9 -5
  479. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  480. package/dist/http/HttpClientRequest.js +3 -4
  481. package/dist/http/HttpClientRequest.js.map +1 -1
  482. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  483. package/dist/http/HttpClientResponse.js +3 -2
  484. package/dist/http/HttpClientResponse.js.map +1 -1
  485. package/dist/http/HttpMethod.d.ts +7 -1
  486. package/dist/http/HttpMethod.d.ts.map +1 -1
  487. package/dist/http/HttpMethod.js +3 -8
  488. package/dist/http/HttpMethod.js.map +1 -1
  489. package/dist/http/HttpMiddleware.d.ts +1 -1
  490. package/dist/http/HttpMiddleware.d.ts.map +1 -1
  491. package/dist/http/HttpMiddleware.js +14 -16
  492. package/dist/http/HttpMiddleware.js.map +1 -1
  493. package/dist/http/HttpRouter.d.ts.map +1 -1
  494. package/dist/http/HttpRouter.js +2 -1
  495. package/dist/http/HttpRouter.js.map +1 -1
  496. package/dist/http/HttpServerError.js +2 -2
  497. package/dist/http/HttpServerError.js.map +1 -1
  498. package/dist/http/HttpServerRequest.d.ts +11 -3
  499. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  500. package/dist/http/HttpServerRequest.js +77 -25
  501. package/dist/http/HttpServerRequest.js.map +1 -1
  502. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  503. package/dist/http/HttpServerResponse.js +3 -2
  504. package/dist/http/HttpServerResponse.js.map +1 -1
  505. package/dist/http/HttpStaticServer.d.ts.map +1 -1
  506. package/dist/http/HttpStaticServer.js +48 -21
  507. package/dist/http/HttpStaticServer.js.map +1 -1
  508. package/dist/http/HttpTraceContext.d.ts +2 -1
  509. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  510. package/dist/http/HttpTraceContext.js +7 -5
  511. package/dist/http/HttpTraceContext.js.map +1 -1
  512. package/dist/http/MultipartParser/internal/contentType.js +3 -3
  513. package/dist/http/ProblemDetails.d.ts +96 -0
  514. package/dist/http/ProblemDetails.d.ts.map +1 -0
  515. package/dist/http/ProblemDetails.js +98 -0
  516. package/dist/http/ProblemDetails.js.map +1 -0
  517. package/dist/http/UrlParams.d.ts +3 -1
  518. package/dist/http/UrlParams.d.ts.map +1 -1
  519. package/dist/http/UrlParams.js +4 -2
  520. package/dist/http/UrlParams.js.map +1 -1
  521. package/dist/http/index.d.ts +5 -0
  522. package/dist/http/index.d.ts.map +1 -1
  523. package/dist/http/index.js +5 -0
  524. package/dist/http/index.js.map +1 -1
  525. package/dist/http/internal/compression.js +4 -5
  526. package/dist/http/internal/compression.js.map +1 -1
  527. package/dist/http/internal/decompression.js +6 -2
  528. package/dist/http/internal/decompression.js.map +1 -1
  529. package/dist/http/internal/httpBody.js +8 -1
  530. package/dist/http/internal/httpBody.js.map +1 -1
  531. package/dist/http/internal/urlParams.js +33 -0
  532. package/dist/http/internal/urlParams.js.map +1 -1
  533. package/dist/http-api/HttpApi.d.ts +3 -6
  534. package/dist/http-api/HttpApi.d.ts.map +1 -1
  535. package/dist/http-api/HttpApi.js +3 -6
  536. package/dist/http-api/HttpApi.js.map +1 -1
  537. package/dist/http-api/HttpApiBuilder.d.ts.map +1 -1
  538. package/dist/http-api/HttpApiBuilder.js +43 -13
  539. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  540. package/dist/http-api/HttpApiClient.d.ts +140 -7
  541. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  542. package/dist/http-api/HttpApiClient.js +193 -44
  543. package/dist/http-api/HttpApiClient.js.map +1 -1
  544. package/dist/http-api/HttpApiEndpoint.d.ts +24 -7
  545. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  546. package/dist/http-api/HttpApiEndpoint.js +123 -32
  547. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  548. package/dist/http-api/HttpApiError.d.ts +185 -13
  549. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  550. package/dist/http-api/HttpApiError.js +128 -0
  551. package/dist/http-api/HttpApiError.js.map +1 -1
  552. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  553. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  554. package/dist/http-api/HttpApiMiddleware.js +85 -1
  555. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  556. package/dist/http-api/HttpApiSchema.d.ts +142 -33
  557. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  558. package/dist/http-api/HttpApiSchema.js +123 -59
  559. package/dist/http-api/HttpApiSchema.js.map +1 -1
  560. package/dist/http-api/HttpApiTest.d.ts.map +1 -1
  561. package/dist/http-api/HttpApiTest.js +3 -2
  562. package/dist/http-api/HttpApiTest.js.map +1 -1
  563. package/dist/http-api/OpenApi.d.ts.map +1 -1
  564. package/dist/http-api/OpenApi.js +25 -16
  565. package/dist/http-api/OpenApi.js.map +1 -1
  566. package/dist/http-api/internal/toCodecHttpProperties.d.ts +2 -0
  567. package/dist/http-api/internal/toCodecHttpProperties.d.ts.map +1 -0
  568. package/dist/http-api/internal/toCodecHttpProperties.js +38 -0
  569. package/dist/http-api/internal/toCodecHttpProperties.js.map +1 -0
  570. package/dist/index.d.ts +5 -5
  571. package/dist/index.d.ts.map +1 -1
  572. package/dist/index.js +5 -5
  573. package/dist/index.js.map +1 -1
  574. package/dist/internal/arbitrary/runner.d.ts.map +1 -1
  575. package/dist/internal/arbitrary/runner.js +120 -44
  576. package/dist/internal/arbitrary/runner.js.map +1 -1
  577. package/dist/internal/core.js +2 -0
  578. package/dist/internal/core.js.map +1 -1
  579. package/dist/internal/effect.js +46 -27
  580. package/dist/internal/effect.js.map +1 -1
  581. package/dist/internal/equal.js +14 -0
  582. package/dist/internal/equal.js.map +1 -1
  583. package/dist/internal/glob.d.ts +2 -0
  584. package/dist/internal/glob.d.ts.map +1 -0
  585. package/dist/internal/glob.js +630 -0
  586. package/dist/internal/glob.js.map +1 -0
  587. package/dist/internal/jsonSchema.d.ts +2 -0
  588. package/dist/internal/jsonSchema.d.ts.map +1 -0
  589. package/dist/internal/jsonSchema.js +28 -0
  590. package/dist/internal/jsonSchema.js.map +1 -0
  591. package/dist/internal/matcher.js +11 -1
  592. package/dist/internal/matcher.js.map +1 -1
  593. package/dist/internal/persistence.js +9 -0
  594. package/dist/internal/persistence.js.map +1 -1
  595. package/dist/internal/rcRef.js +4 -1
  596. package/dist/internal/rcRef.js.map +1 -1
  597. package/dist/internal/schema/compilerRegistry.js +4 -1
  598. package/dist/internal/schema/compilerRegistry.js.map +1 -1
  599. package/dist/internal/schema/content.d.ts +2 -0
  600. package/dist/internal/schema/content.d.ts.map +1 -0
  601. package/dist/internal/schema/content.js +13 -0
  602. package/dist/internal/schema/content.js.map +1 -0
  603. package/dist/internal/schema/fromJsonSchemaDocument.js +173 -185
  604. package/dist/internal/schema/fromJsonSchemaDocument.js.map +1 -1
  605. package/dist/internal/schema/fromRepresentation.js +2 -1
  606. package/dist/internal/schema/fromRepresentation.js.map +1 -1
  607. package/dist/internal/schema/standardSchema.js +8 -2
  608. package/dist/internal/schema/standardSchema.js.map +1 -1
  609. package/dist/internal/schema/toCodeDocument.js +9 -6
  610. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  611. package/dist/internal/schema/toCodec.js +21 -24
  612. package/dist/internal/schema/toCodec.js.map +1 -1
  613. package/dist/internal/schema/toJsonSchemaDocument.js +205 -140
  614. package/dist/internal/schema/toJsonSchemaDocument.js.map +1 -1
  615. package/dist/internal/schema/toRepresentation.js +107 -129
  616. package/dist/internal/schema/toRepresentation.js.map +1 -1
  617. package/dist/internal/sql.d.ts +2 -0
  618. package/dist/internal/sql.d.ts.map +1 -0
  619. package/dist/internal/sql.js +13 -0
  620. package/dist/internal/sql.js.map +1 -0
  621. package/dist/internal/trie.js +42 -13
  622. package/dist/internal/trie.js.map +1 -1
  623. package/dist/internal/ulid.js +41 -0
  624. package/dist/internal/ulid.js.map +1 -1
  625. package/dist/internal/uuid.js +52 -8
  626. package/dist/internal/uuid.js.map +1 -1
  627. package/dist/internal/version.js +1 -1
  628. package/dist/observability/Otlp.d.ts +15 -4
  629. package/dist/observability/Otlp.d.ts.map +1 -1
  630. package/dist/observability/Otlp.js +10 -0
  631. package/dist/observability/Otlp.js.map +1 -1
  632. package/dist/observability/OtlpProxy.d.ts +154 -0
  633. package/dist/observability/OtlpProxy.d.ts.map +1 -0
  634. package/dist/observability/OtlpProxy.js +235 -0
  635. package/dist/observability/OtlpProxy.js.map +1 -0
  636. package/dist/observability/OtlpResource.d.ts +7 -0
  637. package/dist/observability/OtlpResource.d.ts.map +1 -1
  638. package/dist/observability/OtlpResource.js +11 -1
  639. package/dist/observability/OtlpResource.js.map +1 -1
  640. package/dist/observability/OtlpTracer.d.ts.map +1 -1
  641. package/dist/observability/OtlpTracer.js +4 -0
  642. package/dist/observability/OtlpTracer.js.map +1 -1
  643. package/dist/observability/index.d.ts +5 -0
  644. package/dist/observability/index.d.ts.map +1 -1
  645. package/dist/observability/index.js +5 -0
  646. package/dist/observability/index.js.map +1 -1
  647. package/dist/persistence/CircuitBreaker.d.ts +897 -0
  648. package/dist/persistence/CircuitBreaker.d.ts.map +1 -0
  649. package/dist/persistence/CircuitBreaker.js +1165 -0
  650. package/dist/persistence/CircuitBreaker.js.map +1 -0
  651. package/dist/persistence/KeyValueStore.d.ts +47 -2
  652. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  653. package/dist/persistence/KeyValueStore.js +129 -18
  654. package/dist/persistence/KeyValueStore.js.map +1 -1
  655. package/dist/persistence/PersistedQueue.d.ts +9 -0
  656. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  657. package/dist/persistence/PersistedQueue.js +94 -52
  658. package/dist/persistence/PersistedQueue.js.map +1 -1
  659. package/dist/persistence/Persistence.d.ts +10 -4
  660. package/dist/persistence/Persistence.d.ts.map +1 -1
  661. package/dist/persistence/Persistence.js +18 -11
  662. package/dist/persistence/Persistence.js.map +1 -1
  663. package/dist/persistence/Redis.d.ts +78 -2
  664. package/dist/persistence/Redis.d.ts.map +1 -1
  665. package/dist/persistence/Redis.js +62 -7
  666. package/dist/persistence/Redis.js.map +1 -1
  667. package/dist/persistence/index.d.ts +5 -0
  668. package/dist/persistence/index.d.ts.map +1 -1
  669. package/dist/persistence/index.js +5 -0
  670. package/dist/persistence/index.js.map +1 -1
  671. package/dist/process/ChildProcess.d.ts +237 -71
  672. package/dist/process/ChildProcess.d.ts.map +1 -1
  673. package/dist/process/ChildProcess.js +56 -158
  674. package/dist/process/ChildProcess.js.map +1 -1
  675. package/dist/process/ChildProcessSpawner.d.ts +35 -0
  676. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  677. package/dist/process/ChildProcessSpawner.js +5 -2
  678. package/dist/process/ChildProcessSpawner.js.map +1 -1
  679. package/dist/process/CommandLine.d.ts +294 -0
  680. package/dist/process/CommandLine.d.ts.map +1 -0
  681. package/dist/process/CommandLine.js +481 -0
  682. package/dist/process/CommandLine.js.map +1 -0
  683. package/dist/process/index.d.ts +5 -0
  684. package/dist/process/index.d.ts.map +1 -1
  685. package/dist/process/index.js +5 -0
  686. package/dist/process/index.js.map +1 -1
  687. package/dist/reactivity/AsyncResult.d.ts +1 -1
  688. package/dist/reactivity/AsyncResult.d.ts.map +1 -1
  689. package/dist/reactivity/Atom.d.ts +2 -1
  690. package/dist/reactivity/Atom.d.ts.map +1 -1
  691. package/dist/reactivity/Atom.js +3 -4
  692. package/dist/reactivity/Atom.js.map +1 -1
  693. package/dist/reactivity/AtomRegistry.js.map +1 -1
  694. package/dist/rpc/RpcClient.d.ts +16 -1
  695. package/dist/rpc/RpcClient.d.ts.map +1 -1
  696. package/dist/rpc/RpcClient.js +59 -24
  697. package/dist/rpc/RpcClient.js.map +1 -1
  698. package/dist/rpc/RpcMessage.d.ts +10 -1
  699. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  700. package/dist/rpc/RpcMessage.js +1 -0
  701. package/dist/rpc/RpcMessage.js.map +1 -1
  702. package/dist/rpc/RpcSerialization.d.ts +14 -0
  703. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  704. package/dist/rpc/RpcSerialization.js +26 -8
  705. package/dist/rpc/RpcSerialization.js.map +1 -1
  706. package/dist/rpc/RpcServer.d.ts +31 -0
  707. package/dist/rpc/RpcServer.d.ts.map +1 -1
  708. package/dist/rpc/RpcServer.js +139 -56
  709. package/dist/rpc/RpcServer.js.map +1 -1
  710. package/dist/rpc/RpcTest.d.ts +1 -0
  711. package/dist/rpc/RpcTest.d.ts.map +1 -1
  712. package/dist/rpc/RpcTest.js +1 -0
  713. package/dist/rpc/RpcTest.js.map +1 -1
  714. package/dist/schema/Model.d.ts +14 -0
  715. package/dist/schema/Model.d.ts.map +1 -1
  716. package/dist/schema/Model.js +18 -3
  717. package/dist/schema/Model.js.map +1 -1
  718. package/dist/sql/Migrator.d.ts +2 -20
  719. package/dist/sql/Migrator.d.ts.map +1 -1
  720. package/dist/sql/Migrator.js +13 -55
  721. package/dist/sql/Migrator.js.map +1 -1
  722. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  723. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  724. package/dist/sql/MigratorFileSystem.js +57 -0
  725. package/dist/sql/MigratorFileSystem.js.map +1 -0
  726. package/dist/sql/SqlClient.d.ts +9 -4
  727. package/dist/sql/SqlClient.d.ts.map +1 -1
  728. package/dist/sql/SqlClient.js +13 -10
  729. package/dist/sql/SqlClient.js.map +1 -1
  730. package/dist/sql/SqlResolver.d.ts +4 -0
  731. package/dist/sql/SqlResolver.d.ts.map +1 -1
  732. package/dist/sql/SqlResolver.js +18 -4
  733. package/dist/sql/SqlResolver.js.map +1 -1
  734. package/dist/sql/Statement.d.ts +27 -6
  735. package/dist/sql/Statement.d.ts.map +1 -1
  736. package/dist/sql/Statement.js +21 -15
  737. package/dist/sql/Statement.js.map +1 -1
  738. package/dist/sql/index.js +1 -1
  739. package/dist/testing/index.d.ts +0 -5
  740. package/dist/testing/index.d.ts.map +1 -1
  741. package/dist/testing/index.js +0 -5
  742. package/dist/testing/index.js.map +1 -1
  743. package/dist/workflow/DurableDeferred.d.ts.map +1 -1
  744. package/dist/workflow/DurableDeferred.js +21 -2
  745. package/dist/workflow/DurableDeferred.js.map +1 -1
  746. package/dist/workflow/internal/crypto.js +9 -8
  747. package/dist/workflow/internal/crypto.js.map +1 -1
  748. package/package.json +3 -1
  749. package/src/Arbitrary.ts +10 -2
  750. package/src/BigDecimal.ts +3 -0
  751. package/src/Channel.ts +64 -29
  752. package/src/Config.ts +7 -1
  753. package/src/Context.ts +34 -10
  754. package/src/Cron.ts +178 -29
  755. package/src/Data.ts +60 -265
  756. package/src/Duration.ts +140 -0
  757. package/src/Effect.ts +915 -86
  758. package/src/Equal.ts +8 -1
  759. package/src/Exit.ts +3 -3
  760. package/src/FileSystem.ts +65 -4
  761. package/src/Formatter.ts +28 -13
  762. package/src/Glob.ts +205 -0
  763. package/src/Hash.ts +4 -1
  764. package/src/JsonPatch.ts +4 -0
  765. package/src/JsonSchema.ts +12 -40
  766. package/src/Match.ts +127 -0
  767. package/src/Metric.ts +3 -3
  768. package/src/MutableList.ts +7 -5
  769. package/src/MutableRef.ts +8 -1
  770. package/src/PartitionedSemaphore.ts +24 -13
  771. package/src/Pool.ts +182 -52
  772. package/src/PubSub.ts +5 -6
  773. package/src/Random.ts +3 -3
  774. package/src/RcMap.ts +5 -1
  775. package/src/Ref.ts +8 -0
  776. package/src/Schedule.ts +27 -4
  777. package/src/Schema.ts +1237 -87
  778. package/src/SchemaAST.ts +20 -20
  779. package/src/SchemaGetter.ts +27 -11
  780. package/src/SchemaParser.ts +51 -18
  781. package/src/SchemaRepresentation.ts +50 -34
  782. package/src/SchemaTransformation.ts +17 -5
  783. package/src/ScopedCache.ts +5 -9
  784. package/src/Semaphore.ts +208 -40
  785. package/src/Sink.ts +15 -2
  786. package/src/Stream.ts +48 -22
  787. package/src/String.ts +3 -0
  788. package/src/Terminal.ts +19 -1
  789. package/src/Tracer.ts +15 -1
  790. package/src/ai/AiError.ts +56 -80
  791. package/src/ai/Decision.ts +257 -6
  792. package/src/ai/DecisionModel.ts +171 -28
  793. package/src/ai/LanguageModel.ts +9 -0
  794. package/src/ai/McpServer.ts +1283 -299
  795. package/src/ai/McpTest.ts +380 -0
  796. package/src/ai/Prompt.ts +65 -0
  797. package/src/ai/Response.ts +36 -31
  798. package/src/ai/Tool.ts +65 -10
  799. package/src/ai/Toolkit.ts +4 -1
  800. package/src/ai/index.ts +6 -0
  801. package/src/ai/internal/mcpCore.ts +78 -44
  802. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  803. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  804. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  805. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  806. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  807. package/src/ai/internal/mcpProtocol.ts +29 -0
  808. package/src/ai/internal/mcpRuntime.ts +9 -5
  809. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  810. package/src/cli/Argument.ts +21 -0
  811. package/src/cli/CliError.ts +90 -3
  812. package/src/cli/CliOutput.ts +300 -55
  813. package/src/cli/Command.ts +76 -41
  814. package/src/cli/Completions.ts +51 -0
  815. package/src/cli/Flag.ts +122 -0
  816. package/src/cli/GlobalFlag.ts +6 -7
  817. package/src/cli/HelpDoc.ts +18 -1
  818. package/src/cli/Param.ts +35 -6
  819. package/src/cli/Primitive.ts +16 -1
  820. package/src/cli/Prompt.ts +1 -0
  821. package/src/cli/TerminalCapabilities.ts +6 -3
  822. package/src/cli/internal/completions/bash.ts +79 -29
  823. package/src/cli/internal/help.ts +21 -9
  824. package/src/cluster/ClusterWorkflowEngine.ts +46 -16
  825. package/src/cluster/MessageStorage.ts +19 -14
  826. package/src/cluster/Sharding.ts +176 -47
  827. package/src/cluster/ShardingConfig.ts +43 -0
  828. package/src/cluster/SingleRunner.ts +3 -3
  829. package/src/cluster/Snowflake.ts +3 -7
  830. package/src/cluster/SqlMessageStorage.ts +49 -17
  831. package/src/cluster/SqlRunnerStorage.ts +143 -70
  832. package/src/cluster/internal/entityManager.ts +75 -22
  833. package/src/crypto/Aead.ts +517 -0
  834. package/src/crypto/Cipher.ts +326 -0
  835. package/src/crypto/CryptoError.ts +242 -0
  836. package/src/crypto/Digest.ts +167 -0
  837. package/src/crypto/Kdf.ts +315 -0
  838. package/src/crypto/KeyAgreement.ts +489 -0
  839. package/src/crypto/KeyFormat.ts +712 -0
  840. package/src/crypto/KeyWrap.ts +639 -0
  841. package/src/crypto/Mac.ts +386 -0
  842. package/src/crypto/SecureRandom.ts +459 -0
  843. package/src/crypto/Signature.ts +673 -0
  844. package/src/crypto/WebCrypto.ts +64 -0
  845. package/src/crypto/index.ts +78 -0
  846. package/src/crypto/internal/asymmetric.ts +329 -0
  847. package/src/crypto/internal/chacha.ts +1088 -0
  848. package/src/crypto/internal/der.ts +110 -0
  849. package/src/crypto/internal/digest.ts +16 -0
  850. package/src/crypto/internal/key.ts +235 -0
  851. package/src/crypto/internal/md5.ts +170 -0
  852. package/src/crypto/internal/webCrypto.ts +150 -0
  853. package/src/devtools/DevToolsClient.ts +2 -0
  854. package/src/encoding/Base64.ts +38 -0
  855. package/src/encoding/Base64Url.ts +5 -2
  856. package/src/encoding/Csv.ts +1298 -0
  857. package/src/encoding/Hex.ts +3 -2
  858. package/src/encoding/SchemaBinary.ts +40 -4
  859. package/src/encoding/Sse.ts +4 -3
  860. package/src/encoding/Toml.ts +117 -35
  861. package/src/encoding/Yaml.ts +61 -18
  862. package/src/encoding/index.ts +6 -0
  863. package/src/eventlog/EventJournal.ts +4 -3
  864. package/src/eventlog/EventLog.ts +340 -15
  865. package/src/eventlog/EventLogEncryption.ts +118 -110
  866. package/src/eventlog/EventLogMessage.ts +273 -1
  867. package/src/eventlog/EventLogRemote.ts +367 -23
  868. package/src/eventlog/EventLogServer.ts +23 -8
  869. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  870. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  871. package/src/eventlog/EventRow.ts +12 -3
  872. package/src/eventlog/SqlEventJournal.ts +68 -45
  873. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  874. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  875. package/src/eventlog/internal/batches.ts +30 -0
  876. package/src/eventlog/internal/compaction.ts +64 -0
  877. package/src/eventlog/internal/conflicts.ts +0 -4
  878. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  879. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  880. package/src/http/Cookies.ts +291 -12
  881. package/src/http/FetchHttpClient.ts +88 -16
  882. package/src/http/HttpClient.ts +636 -29
  883. package/src/http/HttpClientError.ts +35 -1
  884. package/src/http/HttpClientRequest.ts +21 -10
  885. package/src/http/HttpClientResponse.ts +3 -2
  886. package/src/http/HttpMethod.ts +10 -2
  887. package/src/http/HttpMiddleware.ts +15 -18
  888. package/src/http/HttpRouter.ts +2 -1
  889. package/src/http/HttpServerError.ts +2 -2
  890. package/src/http/HttpServerRequest.ts +101 -30
  891. package/src/http/HttpServerResponse.ts +3 -2
  892. package/src/http/HttpStaticServer.ts +51 -22
  893. package/src/http/HttpTraceContext.ts +7 -4
  894. package/src/http/MultipartParser/internal/contentType.ts +3 -3
  895. package/src/http/ProblemDetails.ts +149 -0
  896. package/src/http/UrlParams.ts +6 -1
  897. package/src/http/index.ts +6 -0
  898. package/src/http/internal/compression.ts +4 -5
  899. package/src/http/internal/decompression.ts +10 -4
  900. package/src/http/internal/httpBody.ts +10 -2
  901. package/src/http/internal/urlParams.ts +37 -0
  902. package/src/http-api/HttpApi.ts +3 -6
  903. package/src/http-api/HttpApiBuilder.ts +61 -19
  904. package/src/http-api/HttpApiClient.ts +284 -72
  905. package/src/http-api/HttpApiEndpoint.ts +135 -35
  906. package/src/http-api/HttpApiError.ts +250 -0
  907. package/src/http-api/HttpApiMiddleware.ts +95 -1
  908. package/src/http-api/HttpApiSchema.ts +236 -52
  909. package/src/http-api/HttpApiTest.ts +3 -2
  910. package/src/http-api/OpenApi.ts +20 -17
  911. package/src/http-api/internal/toCodecHttpProperties.ts +56 -0
  912. package/src/index.ts +6 -6
  913. package/src/internal/arbitrary/runner.ts +133 -36
  914. package/src/internal/core.ts +2 -0
  915. package/src/internal/effect.ts +58 -34
  916. package/src/internal/equal.ts +17 -0
  917. package/src/internal/glob.ts +736 -0
  918. package/src/internal/jsonSchema.ts +27 -0
  919. package/src/internal/matcher.ts +18 -1
  920. package/src/internal/persistence.ts +11 -0
  921. package/src/internal/rcRef.ts +4 -1
  922. package/src/internal/schema/compilerRegistry.ts +6 -1
  923. package/src/internal/schema/content.ts +18 -0
  924. package/src/internal/schema/fromJsonSchemaDocument.ts +228 -190
  925. package/src/internal/schema/fromRepresentation.ts +2 -1
  926. package/src/internal/schema/standardSchema.ts +2 -2
  927. package/src/internal/schema/toCodeDocument.ts +11 -7
  928. package/src/internal/schema/toCodec.ts +26 -22
  929. package/src/internal/schema/toJsonSchemaDocument.ts +189 -167
  930. package/src/internal/schema/toRepresentation.ts +122 -140
  931. package/src/internal/sql.ts +14 -0
  932. package/src/internal/trie.ts +43 -14
  933. package/src/internal/ulid.ts +44 -0
  934. package/src/internal/uuid.ts +57 -16
  935. package/src/internal/version.ts +1 -1
  936. package/src/observability/Otlp.ts +21 -4
  937. package/src/observability/OtlpProxy.ts +314 -0
  938. package/src/observability/OtlpResource.ts +9 -1
  939. package/src/observability/OtlpTracer.ts +4 -0
  940. package/src/observability/index.ts +6 -0
  941. package/src/persistence/CircuitBreaker.ts +1678 -0
  942. package/src/persistence/KeyValueStore.ts +219 -22
  943. package/src/persistence/PersistedQueue.ts +128 -59
  944. package/src/persistence/Persistence.ts +20 -13
  945. package/src/persistence/Redis.ts +129 -8
  946. package/src/persistence/index.ts +6 -0
  947. package/src/process/ChildProcess.ts +285 -264
  948. package/src/process/ChildProcessSpawner.ts +46 -2
  949. package/src/process/CommandLine.ts +630 -0
  950. package/src/process/index.ts +6 -0
  951. package/src/reactivity/AsyncResult.ts +1 -1
  952. package/src/reactivity/Atom.ts +5 -5
  953. package/src/reactivity/AtomRegistry.ts +1 -1
  954. package/src/rpc/RpcClient.ts +75 -36
  955. package/src/rpc/RpcMessage.ts +10 -1
  956. package/src/rpc/RpcSerialization.ts +35 -9
  957. package/src/rpc/RpcServer.ts +176 -63
  958. package/src/rpc/RpcTest.ts +3 -0
  959. package/src/schema/Model.ts +26 -3
  960. package/src/sql/Migrator.ts +15 -69
  961. package/src/sql/MigratorFileSystem.ts +71 -0
  962. package/src/sql/SqlClient.ts +13 -20
  963. package/src/sql/SqlResolver.ts +23 -9
  964. package/src/sql/Statement.ts +38 -9
  965. package/src/sql/index.ts +1 -1
  966. package/src/testing/index.ts +0 -6
  967. package/src/workflow/DurableDeferred.ts +23 -6
  968. package/src/workflow/internal/crypto.ts +15 -11
  969. package/dist/Crypto.d.ts +0 -244
  970. package/dist/Crypto.d.ts.map +0 -1
  971. package/dist/Crypto.js +0 -139
  972. package/dist/Crypto.js.map +0 -1
  973. package/dist/testing/TestCrypto.d.ts +0 -73
  974. package/dist/testing/TestCrypto.d.ts.map +0 -1
  975. package/dist/testing/TestCrypto.js +0 -87
  976. package/dist/testing/TestCrypto.js.map +0 -1
  977. package/src/Crypto.ts +0 -347
  978. package/src/testing/TestCrypto.ts +0 -94
@@ -17,10 +17,13 @@ import * as Effectable from "../Effectable.ts"
17
17
  import { dual } from "../Function.ts"
18
18
  import type * as PlatformError from "../PlatformError.ts"
19
19
  import * as Predicate from "../Predicate.ts"
20
+ import type * as Redacted from "../Redacted.ts"
21
+ import * as Result from "../Result.ts"
20
22
  import type * as Scope from "../Scope.ts"
21
23
  import type * as Sink from "../Sink.ts"
22
24
  import type * as Stream from "../Stream.ts"
23
25
  import { type ChildProcessHandle, ChildProcessSpawner } from "./ChildProcessSpawner.ts"
26
+ import * as CommandLine from "./CommandLine.ts"
24
27
 
25
28
  const TypeId = "~effect/process/ChildProcess"
26
29
 
@@ -51,7 +54,7 @@ export interface StandardCommand extends
51
54
  {
52
55
  readonly _tag: "StandardCommand"
53
56
  readonly command: string
54
- readonly args: ReadonlyArray<string>
57
+ readonly args: ReadonlyArray<CommandLine.Word>
55
58
  readonly options: CommandOptions
56
59
  }
57
60
 
@@ -144,7 +147,8 @@ export interface PipeOptions {
144
147
  * **Details**
145
148
  *
146
149
  * - `"stdin"` (default): Pipe to stdin of the destination
147
- * - `"fd3"`, `"fd4"`, etc.: Pipe to a custom file descriptor
150
+ * - `"fd3"`, `"fd4"`, etc.: Pipe to a custom file descriptor. A descriptor
151
+ * configured as `"duplex"` stays duplex.
148
152
  */
149
153
  readonly to?: PipeToOption | undefined
150
154
  }
@@ -319,10 +323,17 @@ export interface StdoutConfig {
319
323
  * Can be a string indicating how the operating system should configure the
320
324
  * pipe established between the child process `stdout` and the parent process.
321
325
  *
322
- * A `Sink` can also be passed, which will receive all elements produced by
323
- * the `stdout` of the child process.
326
+ * A `Sink` can also be passed. The output is transduced through the sink as
327
+ * `handle.stdout` is consumed, and `handle.stdout` emits the results produced by
328
+ * the sink instead of the raw output.
324
329
  *
325
330
  * Defaults to "pipe".
331
+ *
332
+ * **Gotchas**
333
+ *
334
+ * A `Sink` only receives data while `handle.stdout` is being consumed. If
335
+ * it is never consumed, the sink receives nothing and a child process that
336
+ * writes more than the pipe buffer can block before it exits.
326
337
  */
327
338
  readonly stream?: CommandOutput | undefined
328
339
  }
@@ -343,10 +354,17 @@ export interface StderrConfig {
343
354
  * Can be a string indicating how the operating system should configure the
344
355
  * pipe established between the child process `stderr` and the parent process.
345
356
  *
346
- * A `Sink` can also be passed, which will receive all elements produced by
347
- * the `stderr` of the child process.
357
+ * A `Sink` can also be passed. The output is transduced through the sink as
358
+ * `handle.stderr` is consumed, and `handle.stderr` emits the results produced by
359
+ * the sink instead of the raw output.
348
360
  *
349
361
  * Defaults to "pipe".
362
+ *
363
+ * **Gotchas**
364
+ *
365
+ * A `Sink` only receives data while `handle.stderr` is being consumed. If
366
+ * it is never consumed, the sink receives nothing and a child process that
367
+ * writes more than the pipe buffer can block before it exits.
350
368
  */
351
369
  readonly stream?: CommandOutput | undefined
352
370
  }
@@ -382,6 +400,35 @@ export type AdditionalFdConfig =
382
400
  /**
383
401
  * For output file descriptors, an optional sink which receives data from
384
402
  * the file descriptor.
403
+ *
404
+ * **Details**
405
+ *
406
+ * The data is transduced through the sink as `handle.getOutputFd(fd)` is
407
+ * consumed, and that stream emits the results produced by the sink
408
+ * instead of the raw output.
409
+ *
410
+ * **Gotchas**
411
+ *
412
+ * The sink only receives data while `handle.getOutputFd(fd)` is being
413
+ * consumed. If it is never consumed, the sink receives nothing and a child
414
+ * process that writes more than the pipe buffer can block before it exits.
415
+ */
416
+ readonly sink?: Sink.Sink<Uint8Array, Uint8Array, never, PlatformError.PlatformError> | undefined
417
+ }
418
+ | {
419
+ /**
420
+ * The direction of data flow for this file descriptor.
421
+ * - "duplex": Data flows in both directions over the same file descriptor
422
+ * (writable and readable by parent)
423
+ */
424
+ readonly type: "duplex"
425
+ /**
426
+ * An optional stream to write into the file descriptor. The write side is
427
+ * ended when the stream completes.
428
+ */
429
+ readonly stream?: Stream.Stream<Uint8Array, PlatformError.PlatformError> | undefined
430
+ /**
431
+ * An optional sink which receives data read from the file descriptor.
385
432
  */
386
433
  readonly sink?: Sink.Sink<Uint8Array, Uint8Array, never, PlatformError.PlatformError> | undefined
387
434
  }
@@ -405,14 +452,18 @@ export interface CommandOptions extends KillOptions {
405
452
  *
406
453
  * If `extendEnv` is set to `true`, the value of `env` will be merged with
407
454
  * the value of `globalThis.process.env`, prioritizing the values in `env`
408
- * when conflicts exist.
455
+ * when conflicts exist. A variable set to `undefined` is then removed from
456
+ * the child environment.
457
+ *
458
+ * `Redacted` values are passed to the child unchanged and are never shown in
459
+ * errors.
409
460
  *
410
461
  * **Gotchas**
411
462
  *
412
463
  * Without `extendEnv: true`, providing `env` replaces the inherited child
413
464
  * environment. The child will not receive `PATH` unless `env` includes it.
414
465
  */
415
- readonly env?: Record<string, string | undefined> | undefined
466
+ readonly env?: Record<string, string | Redacted.Redacted<string> | undefined> | undefined
416
467
  /**
417
468
  * If set to `true`, the child process uses both the values in `env` as well
418
469
  * as the values in `globalThis.process.env`, prioritizing the values in `env`
@@ -426,17 +477,45 @@ export interface CommandOptions extends KillOptions {
426
477
  */
427
478
  readonly extendEnv?: boolean | undefined
428
479
  /**
429
- * If set to `true`, runs the command inside of a shell, defaulting to `/bin/sh`
430
- * on UNIX systems and `cmd.exe` on Windows.
480
+ * If set to `true`, runs the command as a script inside of a shell,
481
+ * defaulting to `/bin/sh` on UNIX systems and `cmd.exe` on Windows.
431
482
  *
432
483
  * **Details**
433
484
  *
434
485
  * Can also be set to a string representing the absolute path to a shell to
435
- * use on the system.
486
+ * use on the system. The command is the whole script; build it with
487
+ * `CommandLine.join` or `CommandLine.quote` when it contains values.
488
+ *
489
+ * This is also the way to run a command configured as shell text, such as
490
+ * the `EDITOR` environment variable. The setting is trusted shell text and
491
+ * runs as written, so use it as the start of the script and quote the values
492
+ * that follow it. Name a POSIX shell, because `shell: true` runs `cmd.exe` on
493
+ * Windows, which POSIX quoting does not protect.
436
494
  *
437
495
  * **Gotchas**
438
496
  *
439
- * It is generally disadvised to use this option.
497
+ * - Running a command with both `shell` and arguments fails with a
498
+ * `BadArgument` error, because shells would join the arguments into the
499
+ * script without quoting them.
500
+ * - On Windows the script runs in `cmd.exe`, which no `CommandLine` format
501
+ * quotes for. `CommandLine.join` with `format: "windows"` is only safe for
502
+ * arguments without `%`, `^`, `&`, `|`, `<` or `>`.
503
+ * - It is generally disadvised to use this option.
504
+ *
505
+ * **Example** (Running a configured editor)
506
+ *
507
+ * ```ts import.meta.vitest
508
+ * import { Result } from "effect"
509
+ * import { ChildProcess, CommandLine } from "effect/process"
510
+ *
511
+ * const editor = "code --wait" // for example, process.env.EDITOR
512
+ * const file = "notes from today.txt"
513
+ *
514
+ * const command = ChildProcess.make(`${editor} ${Result.getOrThrow(CommandLine.quote(file))}`, {
515
+ * shell: "/bin/sh"
516
+ * })
517
+ * command.command // => "code --wait 'notes from today.txt'"
518
+ * ```
440
519
  */
441
520
  readonly shell?: boolean | string | undefined
442
521
  /**
@@ -482,11 +561,21 @@ export interface CommandOptions extends KillOptions {
482
561
  *
483
562
  * **Details**
484
563
  *
485
- * Keys must be in the format `"fd3"`, `"fd4"`, etc. with a file descriptor
486
- * index >= 3.
564
+ * Keys use the descriptor index: `"fd3"`, `"fd4"`, etc. (index >= 3).
565
+ *
566
+ * For `"duplex"`, use `getInputFd` to write and `getOutputFd` to read the same
567
+ * descriptor. `pipeTo` preserves duplex targets, replacing only their input.
568
+ *
569
+ * Duplex request/response and half-close are verified on Linux with Node.js
570
+ * and raw Deno `node:child_process` (not Effect's spawner). The same behavior
571
+ * is expected on macOS; Windows request/response is expected but unverified.
572
+ * Half-close is unsupported on Windows and Bun: keep the input open until
573
+ * all responses are read. Bun extra descriptors on Windows are unverified.
574
+ * Native `DenoChildProcessSpawner` does not support additional descriptors.
487
575
  *
488
- * The file descriptor index is determined by the numeric suffix (i.e. `fd3`
489
- * has a file descriptor index of 3).
576
+ * Node.js and Deno children can use `new net.Socket({ fd: 3 })`. Deno children
577
+ * cannot use `node:fs` on the raw descriptor; Bun children cannot use
578
+ * `net.Socket` on it.
490
579
  *
491
580
  * **Example** (Configuring additional file descriptors)
492
581
  *
@@ -506,31 +595,23 @@ export interface CommandOptions extends KillOptions {
506
595
  * fd3: { type: "input" }
507
596
  * }
508
597
  * })
509
- * const result = [cmd1.options.additionalFds?.fd3?.type, cmd2.options.additionalFds?.fd3?.type]
510
- * result // => ["output", "input"]
598
+ * // Duplex fd3 - write and read over the same descriptor
599
+ * const cmd3 = ChildProcess.make("my-program", [], {
600
+ * additionalFds: {
601
+ * fd3: { type: "duplex" }
602
+ * }
603
+ * })
604
+ * const result = [
605
+ * cmd1.options.additionalFds?.fd3?.type,
606
+ * cmd2.options.additionalFds?.fd3?.type,
607
+ * cmd3.options.additionalFds?.fd3?.type
608
+ * ]
609
+ * result // => ["output", "input", "duplex"]
511
610
  * ```
512
611
  */
513
612
  readonly additionalFds?: Record<`fd${number}`, AdditionalFdConfig> | undefined
514
613
  }
515
614
 
516
- /**
517
- * Valid template expression item types.
518
- *
519
- * @stability unstable
520
- * @category models
521
- * @since 4.0.0
522
- */
523
- export type TemplateExpressionItem = string | number | boolean
524
-
525
- /**
526
- * Template expression type for interpolated values.
527
- *
528
- * @stability unstable
529
- * @category models
530
- * @since 4.0.0
531
- */
532
- export type TemplateExpression = TemplateExpressionItem | ReadonlyArray<TemplateExpressionItem>
533
-
534
615
  // =============================================================================
535
616
  // Constructors
536
617
  // =============================================================================
@@ -574,7 +655,7 @@ export const isPipedCommand = (command: Command): command is PipedCommand => com
574
655
 
575
656
  const makeStandardCommand = (
576
657
  command: string,
577
- args: ReadonlyArray<string>,
658
+ args: ReadonlyArray<CommandLine.Word>,
578
659
  options: CommandOptions
579
660
  ): StandardCommand =>
580
661
  Object.assign(Object.create(Proto), {
@@ -606,16 +687,33 @@ const makePipedCommand = (
606
687
  * 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
607
688
  * 3. Array form: `make("npm", ["run", "build"], options?)`
608
689
  *
609
- * Template literals are not parsed until execution time, allowing parsing
610
- * errors to flow through Effect's error channel.
690
+ * Templates are split with `CommandLine.template`: quotes group words, each
691
+ * `${}` value is one literal argument, and an argument that contains a
692
+ * `Redacted` value stays `Redacted`. Arguments in the array form can be
693
+ * `Redacted` too.
694
+ *
695
+ * With the `shell` option, the template text is the shell script and is kept
696
+ * as written.
697
+ *
698
+ * **Gotchas**
699
+ *
700
+ * - A template is parsed when `make` is called. Shell syntax such as `|`,
701
+ * `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
702
+ * pass the value with `${}`.
703
+ * - A template with the `shell` option cannot contain `${}` values, because
704
+ * their quoting depends on the shell. Build the script with
705
+ * `CommandLine.quote` and pass it as a string.
706
+ * - The program name, the first word, cannot be `Redacted`.
707
+ * - A NUL character in the command, an argument or an `env` value fails with
708
+ * a `BadArgument` error when the command is spawned.
611
709
  *
612
710
  * **Example** (Creating commands)
613
711
  *
614
712
  * ```ts import.meta.vitest
615
713
  * import { ChildProcess } from "effect/process"
616
714
  *
617
- * // Template literal form
618
- * const cmd1 = ChildProcess.make`echo "hello"`
715
+ * // Template literal form; quotes group words
716
+ * const cmd1 = ChildProcess.make`echo "hello world"`
619
717
  *
620
718
  * // With options
621
719
  * const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
@@ -623,7 +721,7 @@ const makePipedCommand = (
623
721
  * // Array form
624
722
  * const cmd3 = ChildProcess.make("git", ["status"])
625
723
  *
626
- * const result = [cmd1.command, cmd2.options.cwd, cmd3.args[0]] // => ["echo", "/tmp", "status"]
724
+ * const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
627
725
  * ```
628
726
  *
629
727
  * @stability unstable
@@ -641,16 +739,33 @@ export const make: {
641
739
  * 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
642
740
  * 3. Array form: `make("npm", ["run", "build"], options?)`
643
741
  *
644
- * Template literals are not parsed until execution time, allowing parsing
645
- * errors to flow through Effect's error channel.
742
+ * Templates are split with `CommandLine.template`: quotes group words, each
743
+ * `${}` value is one literal argument, and an argument that contains a
744
+ * `Redacted` value stays `Redacted`. Arguments in the array form can be
745
+ * `Redacted` too.
746
+ *
747
+ * With the `shell` option, the template text is the shell script and is kept
748
+ * as written.
749
+ *
750
+ * **Gotchas**
751
+ *
752
+ * - A template is parsed when `make` is called. Shell syntax such as `|`,
753
+ * `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
754
+ * pass the value with `${}`.
755
+ * - A template with the `shell` option cannot contain `${}` values, because
756
+ * their quoting depends on the shell. Build the script with
757
+ * `CommandLine.quote` and pass it as a string.
758
+ * - The program name, the first word, cannot be `Redacted`.
759
+ * - A NUL character in the command, an argument or an `env` value fails with
760
+ * a `BadArgument` error when the command is spawned.
646
761
  *
647
762
  * **Example** (Creating commands)
648
763
  *
649
764
  * ```ts import.meta.vitest
650
765
  * import { ChildProcess } from "effect/process"
651
766
  *
652
- * // Template literal form
653
- * const cmd1 = ChildProcess.make`echo "hello"`
767
+ * // Template literal form; quotes group words
768
+ * const cmd1 = ChildProcess.make`echo "hello world"`
654
769
  *
655
770
  * // With options
656
771
  * const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
@@ -658,7 +773,7 @@ export const make: {
658
773
  * // Array form
659
774
  * const cmd3 = ChildProcess.make("git", ["status"])
660
775
  *
661
- * const result = [cmd1.command, cmd2.options.cwd, cmd3.args[0]] // => ["echo", "/tmp", "status"]
776
+ * const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
662
777
  * ```
663
778
  *
664
779
  * @stability unstable
@@ -676,16 +791,33 @@ export const make: {
676
791
  * 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
677
792
  * 3. Array form: `make("npm", ["run", "build"], options?)`
678
793
  *
679
- * Template literals are not parsed until execution time, allowing parsing
680
- * errors to flow through Effect's error channel.
794
+ * Templates are split with `CommandLine.template`: quotes group words, each
795
+ * `${}` value is one literal argument, and an argument that contains a
796
+ * `Redacted` value stays `Redacted`. Arguments in the array form can be
797
+ * `Redacted` too.
798
+ *
799
+ * With the `shell` option, the template text is the shell script and is kept
800
+ * as written.
801
+ *
802
+ * **Gotchas**
803
+ *
804
+ * - A template is parsed when `make` is called. Shell syntax such as `|`,
805
+ * `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
806
+ * pass the value with `${}`.
807
+ * - A template with the `shell` option cannot contain `${}` values, because
808
+ * their quoting depends on the shell. Build the script with
809
+ * `CommandLine.quote` and pass it as a string.
810
+ * - The program name, the first word, cannot be `Redacted`.
811
+ * - A NUL character in the command, an argument or an `env` value fails with
812
+ * a `BadArgument` error when the command is spawned.
681
813
  *
682
814
  * **Example** (Creating commands)
683
815
  *
684
816
  * ```ts import.meta.vitest
685
817
  * import { ChildProcess } from "effect/process"
686
818
  *
687
- * // Template literal form
688
- * const cmd1 = ChildProcess.make`echo "hello"`
819
+ * // Template literal form; quotes group words
820
+ * const cmd1 = ChildProcess.make`echo "hello world"`
689
821
  *
690
822
  * // With options
691
823
  * const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
@@ -693,14 +825,18 @@ export const make: {
693
825
  * // Array form
694
826
  * const cmd3 = ChildProcess.make("git", ["status"])
695
827
  *
696
- * const result = [cmd1.command, cmd2.options.cwd, cmd3.args[0]] // => ["echo", "/tmp", "status"]
828
+ * const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
697
829
  * ```
698
830
  *
699
831
  * @stability unstable
700
832
  * @category constructors
701
833
  * @since 4.0.0
702
834
  */
703
- (command: string, args: ReadonlyArray<string>, options?: CommandOptions): StandardCommand
835
+ (
836
+ command: string,
837
+ args: ReadonlyArray<CommandLine.Word>,
838
+ options?: CommandOptions
839
+ ): StandardCommand
704
840
  /**
705
841
  * Create a command from a template literal, options + template, or array form.
706
842
  *
@@ -711,16 +847,33 @@ export const make: {
711
847
  * 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
712
848
  * 3. Array form: `make("npm", ["run", "build"], options?)`
713
849
  *
714
- * Template literals are not parsed until execution time, allowing parsing
715
- * errors to flow through Effect's error channel.
850
+ * Templates are split with `CommandLine.template`: quotes group words, each
851
+ * `${}` value is one literal argument, and an argument that contains a
852
+ * `Redacted` value stays `Redacted`. Arguments in the array form can be
853
+ * `Redacted` too.
854
+ *
855
+ * With the `shell` option, the template text is the shell script and is kept
856
+ * as written.
857
+ *
858
+ * **Gotchas**
859
+ *
860
+ * - A template is parsed when `make` is called. Shell syntax such as `|`,
861
+ * `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
862
+ * pass the value with `${}`.
863
+ * - A template with the `shell` option cannot contain `${}` values, because
864
+ * their quoting depends on the shell. Build the script with
865
+ * `CommandLine.quote` and pass it as a string.
866
+ * - The program name, the first word, cannot be `Redacted`.
867
+ * - A NUL character in the command, an argument or an `env` value fails with
868
+ * a `BadArgument` error when the command is spawned.
716
869
  *
717
870
  * **Example** (Creating commands)
718
871
  *
719
872
  * ```ts import.meta.vitest
720
873
  * import { ChildProcess } from "effect/process"
721
874
  *
722
- * // Template literal form
723
- * const cmd1 = ChildProcess.make`echo "hello"`
875
+ * // Template literal form; quotes group words
876
+ * const cmd1 = ChildProcess.make`echo "hello world"`
724
877
  *
725
878
  * // With options
726
879
  * const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
@@ -728,7 +881,7 @@ export const make: {
728
881
  * // Array form
729
882
  * const cmd3 = ChildProcess.make("git", ["status"])
730
883
  *
731
- * const result = [cmd1.command, cmd2.options.cwd, cmd3.args[0]] // => ["echo", "/tmp", "status"]
884
+ * const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
732
885
  * ```
733
886
  *
734
887
  * @stability unstable
@@ -737,7 +890,7 @@ export const make: {
737
890
  */
738
891
  (options: CommandOptions): (
739
892
  templates: TemplateStringsArray,
740
- ...expressions: ReadonlyArray<TemplateExpression>
893
+ ...expressions: ReadonlyArray<CommandLine.TemplateExpression>
741
894
  ) => StandardCommand
742
895
  /**
743
896
  * Create a command from a template literal, options + template, or array form.
@@ -749,16 +902,33 @@ export const make: {
749
902
  * 2. Options + template literal: `make({ cwd: "/app" })\`npm run build\``
750
903
  * 3. Array form: `make("npm", ["run", "build"], options?)`
751
904
  *
752
- * Template literals are not parsed until execution time, allowing parsing
753
- * errors to flow through Effect's error channel.
905
+ * Templates are split with `CommandLine.template`: quotes group words, each
906
+ * `${}` value is one literal argument, and an argument that contains a
907
+ * `Redacted` value stays `Redacted`. Arguments in the array form can be
908
+ * `Redacted` too.
909
+ *
910
+ * With the `shell` option, the template text is the shell script and is kept
911
+ * as written.
912
+ *
913
+ * **Gotchas**
914
+ *
915
+ * - A template is parsed when `make` is called. Shell syntax such as `|`,
916
+ * `$HOME`, `*` or `~` throws a `CommandLine.CommandLineError`: quote it, or
917
+ * pass the value with `${}`.
918
+ * - A template with the `shell` option cannot contain `${}` values, because
919
+ * their quoting depends on the shell. Build the script with
920
+ * `CommandLine.quote` and pass it as a string.
921
+ * - The program name, the first word, cannot be `Redacted`.
922
+ * - A NUL character in the command, an argument or an `env` value fails with
923
+ * a `BadArgument` error when the command is spawned.
754
924
  *
755
925
  * **Example** (Creating commands)
756
926
  *
757
927
  * ```ts import.meta.vitest
758
928
  * import { ChildProcess } from "effect/process"
759
929
  *
760
- * // Template literal form
761
- * const cmd1 = ChildProcess.make`echo "hello"`
930
+ * // Template literal form; quotes group words
931
+ * const cmd1 = ChildProcess.make`echo "hello world"`
762
932
  *
763
933
  * // With options
764
934
  * const cmd2 = ChildProcess.make({ cwd: "/tmp" })`ls -la`
@@ -766,7 +936,7 @@ export const make: {
766
936
  * // Array form
767
937
  * const cmd3 = ChildProcess.make("git", ["status"])
768
938
  *
769
- * const result = [cmd1.command, cmd2.options.cwd, cmd3.args[0]] // => ["echo", "/tmp", "status"]
939
+ * const result = [cmd1.args[0], cmd2.options.cwd, cmd3.args[0]] // => ["hello world", "/tmp", "status"]
770
940
  * ```
771
941
  *
772
942
  * @stability unstable
@@ -775,14 +945,14 @@ export const make: {
775
945
  */
776
946
  (
777
947
  templates: TemplateStringsArray,
778
- ...expressions: ReadonlyArray<TemplateExpression>
948
+ ...expressions: ReadonlyArray<CommandLine.TemplateExpression>
779
949
  ): StandardCommand
780
950
  } = function make(...args: Array<unknown>): any {
781
951
  // Template literal form: make`command`
782
952
  if (isTemplateString(args[0])) {
783
- const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<TemplateExpression>]
784
- const tokens = parseTemplates(templates, expressions)
785
- return makeStandardCommand(tokens[0] ?? "", tokens.slice(1), {})
953
+ const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<CommandLine.TemplateExpression>]
954
+ const [command, cmdArgs] = parseTemplate(templates, expressions)
955
+ return makeStandardCommand(command, cmdArgs, {})
786
956
  }
787
957
 
788
958
  // Options form: make({ cwd: "/tmp" })`command`
@@ -790,10 +960,13 @@ export const make: {
790
960
  const options = args[0] as CommandOptions
791
961
  return function(
792
962
  templates: TemplateStringsArray,
793
- ...expressions: ReadonlyArray<TemplateExpression>
963
+ ...expressions: ReadonlyArray<CommandLine.TemplateExpression>
794
964
  ): StandardCommand {
795
- const tokens = parseTemplates(templates, expressions)
796
- return makeStandardCommand(tokens[0] ?? "", tokens.slice(1), options)
965
+ if (options.shell !== undefined && options.shell !== false) {
966
+ return makeStandardCommand(shellScript(templates, expressions), [], options)
967
+ }
968
+ const [command, cmdArgs] = parseTemplate(templates, expressions)
969
+ return makeStandardCommand(command, cmdArgs, options)
797
970
  }
798
971
  }
799
972
 
@@ -806,7 +979,7 @@ export const make: {
806
979
  // Standard form with arguments: make("command", ["arg1", "arg2"], options?)
807
980
  const [command, cmdArgs = [], options = {}] = args as [
808
981
  string,
809
- ReadonlyArray<string>?,
982
+ ReadonlyArray<CommandLine.Word>?,
810
983
  CommandOptions?
811
984
  ]
812
985
  return makeStandardCommand(command, cmdArgs, options)
@@ -940,7 +1113,7 @@ export const pipeTo: {
940
1113
  * ```ts import.meta.vitest
941
1114
  * import { ChildProcess } from "effect/process"
942
1115
  *
943
- * const command = ChildProcess.make`echo "foo"`
1116
+ * const command = ChildProcess.make`echo foo`
944
1117
  *
945
1118
  * const prefixed = command.pipe(
946
1119
  * ChildProcess.prefix`time`
@@ -968,7 +1141,7 @@ export const prefix: {
968
1141
  * ```ts import.meta.vitest
969
1142
  * import { ChildProcess } from "effect/process"
970
1143
  *
971
- * const command = ChildProcess.make`echo "foo"`
1144
+ * const command = ChildProcess.make`echo foo`
972
1145
  *
973
1146
  * const prefixed = command.pipe(
974
1147
  * ChildProcess.prefix`time`
@@ -983,7 +1156,7 @@ export const prefix: {
983
1156
  * @category combinators
984
1157
  * @since 4.0.0
985
1158
  */
986
- (command: string, args?: ReadonlyArray<string>): (self: Command) => Command
1159
+ (command: string, args?: ReadonlyArray<CommandLine.Word>): (self: Command) => Command
987
1160
  /**
988
1161
  * Prepends another command to a command.
989
1162
  *
@@ -996,7 +1169,7 @@ export const prefix: {
996
1169
  * ```ts import.meta.vitest
997
1170
  * import { ChildProcess } from "effect/process"
998
1171
  *
999
- * const command = ChildProcess.make`echo "foo"`
1172
+ * const command = ChildProcess.make`echo foo`
1000
1173
  *
1001
1174
  * const prefixed = command.pipe(
1002
1175
  * ChildProcess.prefix`time`
@@ -1013,7 +1186,7 @@ export const prefix: {
1013
1186
  */
1014
1187
  (
1015
1188
  templates: TemplateStringsArray,
1016
- ...expressions: ReadonlyArray<TemplateExpression>
1189
+ ...expressions: ReadonlyArray<CommandLine.TemplateExpression>
1017
1190
  ): (self: Command) => Command
1018
1191
  /**
1019
1192
  * Prepends another command to a command.
@@ -1027,7 +1200,7 @@ export const prefix: {
1027
1200
  * ```ts import.meta.vitest
1028
1201
  * import { ChildProcess } from "effect/process"
1029
1202
  *
1030
- * const command = ChildProcess.make`echo "foo"`
1203
+ * const command = ChildProcess.make`echo foo`
1031
1204
  *
1032
1205
  * const prefixed = command.pipe(
1033
1206
  * ChildProcess.prefix`time`
@@ -1042,7 +1215,7 @@ export const prefix: {
1042
1215
  * @category combinators
1043
1216
  * @since 4.0.0
1044
1217
  */
1045
- (self: Command, command: string, args?: ReadonlyArray<string>): Command
1218
+ (self: Command, command: string, args?: ReadonlyArray<CommandLine.Word>): Command
1046
1219
  } = function prefix(...args: Array<unknown>): any {
1047
1220
  if (isCommand(args[0]) && args.length > 1) {
1048
1221
  const [self, ...rest] = args as [Command, ...Array<unknown>]
@@ -1055,16 +1228,16 @@ export const prefix: {
1055
1228
 
1056
1229
  type PrefixSpec = {
1057
1230
  readonly command: string
1058
- readonly args: ReadonlyArray<string>
1231
+ readonly args: ReadonlyArray<CommandLine.Word>
1059
1232
  }
1060
1233
 
1061
1234
  const parsePrefixArgs = (args: ReadonlyArray<unknown>): PrefixSpec => {
1062
1235
  if (isTemplateString(args[0])) {
1063
- const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<TemplateExpression>]
1064
- const tokens = parseTemplates(templates, expressions)
1065
- return { command: tokens[0] ?? "", args: tokens.slice(1) }
1236
+ const [templates, ...expressions] = args as [TemplateStringsArray, ...ReadonlyArray<CommandLine.TemplateExpression>]
1237
+ const [command, cmdArgs] = parseTemplate(templates, expressions)
1238
+ return { command, args: cmdArgs }
1066
1239
  }
1067
- const [command, cmdArgs = []] = args as [string, ReadonlyArray<string>?]
1240
+ const [command, cmdArgs = []] = args as [string, ReadonlyArray<CommandLine.Word>?]
1068
1241
  return { command, args: cmdArgs }
1069
1242
  }
1070
1243
 
@@ -1213,7 +1386,7 @@ export const setEnv: {
1213
1386
  * @category combinators
1214
1387
  * @since 4.0.0
1215
1388
  */
1216
- (env: Record<string, string>): (self: Command) => Command
1389
+ (env: Record<string, string | Redacted.Redacted<string>>): (self: Command) => Command
1217
1390
  /**
1218
1391
  * Adds environment variables to a command, merging them with any existing
1219
1392
  * command environment and overriding duplicate keys.
@@ -1237,10 +1410,10 @@ export const setEnv: {
1237
1410
  * @category combinators
1238
1411
  * @since 4.0.0
1239
1412
  */
1240
- (self: Command, env: Record<string, string>): Command
1413
+ (self: Command, env: Record<string, string | Redacted.Redacted<string>>): Command
1241
1414
  } = dual(
1242
1415
  2,
1243
- (self: Command, env: Record<string, string>): Command => {
1416
+ (self: Command, env: Record<string, string | Redacted.Redacted<string>>): Command => {
1244
1417
  switch (self._tag) {
1245
1418
  case "StandardCommand": {
1246
1419
  const nextEnv = self.options.env === undefined
@@ -1290,188 +1463,36 @@ export const fdName = (fd: number): string => `fd${fd}`
1290
1463
  // Template Parsing
1291
1464
  // =============================================================================
1292
1465
 
1293
- const parseTemplates = (
1294
- templates: TemplateStringsArray,
1295
- expressions: ReadonlyArray<TemplateExpression>
1296
- ): ReadonlyArray<string> => {
1297
- let tokens: ReadonlyArray<string> = []
1298
- for (const [index, template] of templates.entries()) {
1299
- tokens = parseTemplate(templates, expressions, tokens, template, index)
1300
- }
1301
- return tokens
1302
- }
1303
-
1304
1466
  const parseTemplate = (
1305
1467
  templates: TemplateStringsArray,
1306
- expressions: ReadonlyArray<TemplateExpression>,
1307
- prevTokens: ReadonlyArray<string>,
1308
- template: string,
1309
- index: number
1310
- ): ReadonlyArray<string> => {
1311
- const rawTemplate = templates.raw[index]
1312
-
1313
- if (rawTemplate === undefined) {
1314
- throw new Error(`Invalid backslash sequence: ${templates.raw[index]}`)
1315
- }
1316
-
1317
- const { hasLeadingWhitespace, hasTrailingWhitespace, tokens } = splitByWhitespaces(template, rawTemplate)
1318
- const nextTokens = concatTokens(prevTokens, tokens, hasLeadingWhitespace)
1319
-
1320
- if (index === expressions.length) {
1321
- return nextTokens
1322
- }
1323
-
1324
- const expression = expressions[index]
1325
- const expressionTokens = Array.isArray(expression)
1326
- ? expression.map((expression: TemplateExpressionItem) => parseExpression(expression))
1327
- : [parseExpression(expression as TemplateExpressionItem)]
1328
-
1329
- return concatTokens(nextTokens, expressionTokens, hasTrailingWhitespace)
1330
- }
1331
-
1332
- /**
1333
- * Convert valid expressions defined in a template string command (i.e. using
1334
- * `${expression}` into strings.
1335
- */
1336
- const parseExpression = (expression: TemplateExpression): string => {
1337
- const type = typeof expression
1338
- if (type === "string") {
1339
- return expression as string // Return strings directly
1468
+ expressions: ReadonlyArray<CommandLine.TemplateExpression>
1469
+ ): [command: string, args: Array<CommandLine.Word>] => {
1470
+ const [program = "", ...args] = Result.getOrThrow(CommandLine.template(templates, ...expressions))
1471
+ if (typeof program !== "string") {
1472
+ throw new CommandLine.CommandLineError({
1473
+ reason: "InvalidArgument",
1474
+ message: "The program name of a command cannot be Redacted"
1475
+ })
1340
1476
  }
1341
- return String(expression) // Convert numbers to strings
1477
+ return [program, args]
1342
1478
  }
1343
1479
 
1344
- const DELIMITERS = new Set([" ", "\t", "\r", "\n"])
1345
-
1346
- /**
1347
- * Number of characters in backslash escape sequences: \0 \xXX or \uXXXX
1348
- * \cX is allowed in RegExps but not in strings
1349
- * Octal sequences are not allowed in strict mode
1350
- */
1351
- const ESCAPE_LENGTH: Record<string, number> = { x: 3, u: 5 }
1352
-
1353
- /**
1354
- * Splits a template string by whitespace while also properly handling escape
1355
- * sequences.
1356
- *
1357
- * As an example, let's review the following valid commands:
1358
- *
1359
- * ```ts
1360
- * ChildProcess.exec`echo foo\n bar`
1361
- * // We should run `["echo", "foo\n", "bar"]`
1362
- *
1363
- * ChildProcess.exec`echo foo
1364
- * bar`
1365
- * // We should run `["echo", "foo", "bar]`
1366
- * ```
1367
- *
1368
- * The problem is that when we evaluate the template string for both of the above
1369
- * commands, we will end up with the same string "echo foo\n bar".
1370
- *
1371
- * What we really want is to include the escaped character in the arguments for
1372
- * the first command, since it was written explicitly by the user.
1373
- *
1374
- * This is why also having access to the raw template string is useful - in a
1375
- * template string, there are two representations of the same string:
1376
- * 1. `template` - The processed string (escape sequences are evaluated).
1377
- * 2. `template.raw` - The raw string (escape sequences are literal).
1378
- */
1379
- const splitByWhitespaces = (template: string, rawTemplate: string): {
1380
- readonly tokens: ReadonlyArray<string>
1381
- readonly hasLeadingWhitespace: boolean
1382
- readonly hasTrailingWhitespace: boolean
1383
- } => {
1384
- if (rawTemplate.length === 0) {
1385
- return {
1386
- tokens: [],
1387
- hasLeadingWhitespace: false,
1388
- hasTrailingWhitespace: false
1389
- }
1390
- }
1391
-
1392
- const hasLeadingWhitespace = DELIMITERS.has(rawTemplate[0])
1393
- const tokens: Array<string> = []
1394
-
1395
- // Given that escape sequences will have different lengths in the template
1396
- // versus the raw template, we must maintain two indices:
1397
- // - One for the index into the template string
1398
- // - One for the index into the raw template string
1399
- // We also maintain the current cursor position for where we are in the template
1400
- let templateCursor = 0
1401
- for (
1402
- let templateIndex = 0, rawIndex = 0;
1403
- templateIndex < template.length;
1404
- templateIndex += 1, rawIndex += 1
1405
- ) {
1406
- // Use the raw template character to check for actual whitespace
1407
- const rawCharacter = rawTemplate[rawIndex]
1408
-
1409
- if (DELIMITERS.has(rawCharacter)) {
1410
- // Whitespace found, extract token from template if necessary
1411
- if (templateCursor !== templateIndex) {
1412
- tokens.push(template.slice(templateCursor, templateIndex))
1413
- }
1414
- // Advance the template start index to the current position
1415
- templateCursor = templateIndex + 1
1416
- } else if (rawCharacter === "\\") {
1417
- // Escape sequence detected, check the next raw character
1418
- const nextRawCharacter = rawTemplate[rawIndex + 1]
1419
-
1420
- if (nextRawCharacter === "\n") {
1421
- // Handle `\` character followed by a newline (i.e. a line continuation) by:
1422
- // - Reversing the template index (backslash-newline is erased in template)
1423
- // - Advancing the raw template index past the line continuation
1424
- templateIndex -= 1
1425
- rawIndex += 1
1426
- } else if (nextRawCharacter === "u" && rawTemplate[rawIndex + 2] === "{") {
1427
- // Handle variable-length unicode escape sequences (i.e. `\u{1F600}`) by:
1428
- // - Advancing the template index an extra code unit for astral code points
1429
- // - Advancing the raw template index past the unicode escape sequence
1430
- const end = rawTemplate.indexOf("}", rawIndex + 3)
1431
- if (parseInt(rawTemplate.slice(rawIndex + 3, end), 16) > 0xffff) {
1432
- templateIndex += 1
1433
- }
1434
- rawIndex = end
1435
- } else {
1436
- // Advance raw template index past fixed-length escape sequences:
1437
- // - \n → 2 chars (backslash + n)
1438
- // - \t → 2 chars (backslash + t)
1439
- // - \xHH → 4 chars (backslash + x + H + H)
1440
- // - \uHHHH → 6 chars (backslash + u + H + H + H + H)
1441
- rawIndex += ESCAPE_LENGTH[nextRawCharacter] ?? 1
1442
- }
1443
- }
1444
- }
1445
-
1446
- // Trailing whitespace only exists if the template cursor is equivalent to the
1447
- // length of the template
1448
- const hasTrailingWhitespace = templateCursor === template.length
1449
-
1450
- // If we did not end with trailing whitespace, ensure the final token is added
1451
- if (!hasTrailingWhitespace) {
1452
- tokens.push(template.slice(templateCursor))
1480
+ const shellScript = (
1481
+ templates: TemplateStringsArray,
1482
+ expressions: ReadonlyArray<CommandLine.TemplateExpression>
1483
+ ): string => {
1484
+ if (expressions.length > 0) {
1485
+ throw new CommandLine.CommandLineError({
1486
+ reason: "UnsupportedSyntax",
1487
+ message: "A shell template cannot interpolate values; build the script with CommandLine.quote"
1488
+ })
1453
1489
  }
1454
-
1455
- return {
1456
- tokens,
1457
- hasLeadingWhitespace,
1458
- hasTrailingWhitespace
1490
+ const script = templates[0]
1491
+ if (script === undefined) {
1492
+ throw new CommandLine.CommandLineError({
1493
+ reason: "InvalidEscape",
1494
+ message: "Template part 0 contains an invalid escape sequence"
1495
+ })
1459
1496
  }
1497
+ return script
1460
1498
  }
1461
-
1462
- /**
1463
- * Concatenates two separate sets of string tokens together.
1464
- *
1465
- * If either set is empty or `isSeparated=false`, the last element of `prevTokens`
1466
- * and the first element of `nextTokens` will be joined into a single token.
1467
- */
1468
- const concatTokens = (
1469
- prevTokens: ReadonlyArray<string>,
1470
- nextTokens: ReadonlyArray<string>,
1471
- isSeparated: boolean
1472
- ): ReadonlyArray<string> =>
1473
- isSeparated || prevTokens.length === 0 || nextTokens.length === 0
1474
- // Keep the previous and next tokens separate from one another
1475
- ? [...prevTokens, ...nextTokens]
1476
- // Join the last token from the previous set and the first token from the next set
1477
- : [...prevTokens.slice(0, -1), `${prevTokens.at(-1)}${nextTokens.at(0)}`, ...nextTokens.slice(1)]