effect 4.0.7 → 4.1.1

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