effect 4.0.7 → 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 (679) hide show
  1. package/README.md +1 -1
  2. package/dist/BigDecimal.d.ts.map +1 -1
  3. package/dist/BigDecimal.js +3 -0
  4. package/dist/BigDecimal.js.map +1 -1
  5. package/dist/Channel.d.ts +12 -6
  6. package/dist/Channel.d.ts.map +1 -1
  7. package/dist/Channel.js +9 -3
  8. package/dist/Channel.js.map +1 -1
  9. package/dist/Config.d.ts +7 -1
  10. package/dist/Config.d.ts.map +1 -1
  11. package/dist/Config.js.map +1 -1
  12. package/dist/Context.d.ts +18 -1
  13. package/dist/Context.d.ts.map +1 -1
  14. package/dist/Context.js +27 -8
  15. package/dist/Context.js.map +1 -1
  16. package/dist/Cron.d.ts +81 -11
  17. package/dist/Cron.d.ts.map +1 -1
  18. package/dist/Cron.js +101 -26
  19. package/dist/Cron.js.map +1 -1
  20. package/dist/Duration.d.ts +78 -0
  21. package/dist/Duration.d.ts.map +1 -1
  22. package/dist/Duration.js +123 -0
  23. package/dist/Duration.js.map +1 -1
  24. package/dist/Effect.d.ts +164 -7
  25. package/dist/Effect.d.ts.map +1 -1
  26. package/dist/Effect.js +11 -1
  27. package/dist/Effect.js.map +1 -1
  28. package/dist/FileSystem.d.ts +59 -4
  29. package/dist/FileSystem.d.ts.map +1 -1
  30. package/dist/FileSystem.js +9 -2
  31. package/dist/FileSystem.js.map +1 -1
  32. package/dist/Glob.d.ts +165 -0
  33. package/dist/Glob.d.ts.map +1 -0
  34. package/dist/Glob.js +127 -0
  35. package/dist/Glob.js.map +1 -0
  36. package/dist/Match.d.ts +86 -0
  37. package/dist/Match.d.ts.map +1 -1
  38. package/dist/Match.js +72 -0
  39. package/dist/Match.js.map +1 -1
  40. package/dist/Pool.d.ts +51 -0
  41. package/dist/Pool.d.ts.map +1 -1
  42. package/dist/Pool.js +59 -9
  43. package/dist/Pool.js.map +1 -1
  44. package/dist/Random.d.ts.map +1 -1
  45. package/dist/Random.js +3 -3
  46. package/dist/Random.js.map +1 -1
  47. package/dist/RcMap.d.ts.map +1 -1
  48. package/dist/RcMap.js +8 -2
  49. package/dist/RcMap.js.map +1 -1
  50. package/dist/Schedule.d.ts +18 -1
  51. package/dist/Schedule.d.ts.map +1 -1
  52. package/dist/Schedule.js +7 -2
  53. package/dist/Schedule.js.map +1 -1
  54. package/dist/Schema.d.ts +666 -41
  55. package/dist/Schema.d.ts.map +1 -1
  56. package/dist/Schema.js +650 -0
  57. package/dist/Schema.js.map +1 -1
  58. package/dist/SchemaGetter.d.ts +6 -1
  59. package/dist/SchemaGetter.d.ts.map +1 -1
  60. package/dist/SchemaGetter.js +22 -11
  61. package/dist/SchemaGetter.js.map +1 -1
  62. package/dist/SchemaRepresentation.d.ts +14 -0
  63. package/dist/SchemaRepresentation.d.ts.map +1 -1
  64. package/dist/SchemaRepresentation.js +16 -0
  65. package/dist/SchemaRepresentation.js.map +1 -1
  66. package/dist/SchemaTransformation.d.ts +8 -3
  67. package/dist/SchemaTransformation.d.ts.map +1 -1
  68. package/dist/SchemaTransformation.js +6 -3
  69. package/dist/SchemaTransformation.js.map +1 -1
  70. package/dist/ScopedCache.d.ts.map +1 -1
  71. package/dist/ScopedCache.js +5 -7
  72. package/dist/ScopedCache.js.map +1 -1
  73. package/dist/Semaphore.d.ts +130 -0
  74. package/dist/Semaphore.d.ts.map +1 -1
  75. package/dist/Semaphore.js +40 -0
  76. package/dist/Semaphore.js.map +1 -1
  77. package/dist/Stream.d.ts +13 -4
  78. package/dist/Stream.d.ts.map +1 -1
  79. package/dist/Stream.js +9 -0
  80. package/dist/Stream.js.map +1 -1
  81. package/dist/Terminal.d.ts +18 -1
  82. package/dist/Terminal.d.ts.map +1 -1
  83. package/dist/Terminal.js +1 -1
  84. package/dist/Terminal.js.map +1 -1
  85. package/dist/ai/AiError.d.ts +43 -116
  86. package/dist/ai/AiError.d.ts.map +1 -1
  87. package/dist/ai/AiError.js +53 -72
  88. package/dist/ai/AiError.js.map +1 -1
  89. package/dist/ai/Decision.d.ts +196 -15
  90. package/dist/ai/Decision.d.ts.map +1 -1
  91. package/dist/ai/Decision.js +130 -0
  92. package/dist/ai/Decision.js.map +1 -1
  93. package/dist/ai/DecisionModel.d.ts +54 -13
  94. package/dist/ai/DecisionModel.d.ts.map +1 -1
  95. package/dist/ai/DecisionModel.js +123 -12
  96. package/dist/ai/DecisionModel.js.map +1 -1
  97. package/dist/ai/McpServer.d.ts +630 -29
  98. package/dist/ai/McpServer.d.ts.map +1 -1
  99. package/dist/ai/McpServer.js +562 -116
  100. package/dist/ai/McpServer.js.map +1 -1
  101. package/dist/ai/McpTest.d.ts +130 -0
  102. package/dist/ai/McpTest.d.ts.map +1 -0
  103. package/dist/ai/McpTest.js +237 -0
  104. package/dist/ai/McpTest.js.map +1 -0
  105. package/dist/ai/Response.d.ts +1 -25
  106. package/dist/ai/Response.d.ts.map +1 -1
  107. package/dist/ai/Response.js +1 -10
  108. package/dist/ai/Response.js.map +1 -1
  109. package/dist/ai/Tool.d.ts +19 -1
  110. package/dist/ai/Tool.d.ts.map +1 -1
  111. package/dist/ai/Tool.js.map +1 -1
  112. package/dist/ai/index.d.ts +5 -0
  113. package/dist/ai/index.d.ts.map +1 -1
  114. package/dist/ai/index.js +5 -0
  115. package/dist/ai/index.js.map +1 -1
  116. package/dist/ai/internal/mcpCore.js +17 -12
  117. package/dist/ai/internal/mcpCore.js.map +1 -1
  118. package/dist/ai/internal/mcpProtocol/v2024_11_05.js +4 -5
  119. package/dist/ai/internal/mcpProtocol/v2024_11_05.js.map +1 -1
  120. package/dist/ai/internal/mcpProtocol/v2025_03_26.js +4 -5
  121. package/dist/ai/internal/mcpProtocol/v2025_03_26.js.map +1 -1
  122. package/dist/ai/internal/mcpProtocol/v2025_06_18.js +4 -5
  123. package/dist/ai/internal/mcpProtocol/v2025_06_18.js.map +1 -1
  124. package/dist/ai/internal/mcpProtocol/v2025_11_25.js +4 -5
  125. package/dist/ai/internal/mcpProtocol/v2025_11_25.js.map +1 -1
  126. package/dist/ai/internal/mcpProtocol/v2026_07_28.js +18 -10
  127. package/dist/ai/internal/mcpProtocol/v2026_07_28.js.map +1 -1
  128. package/dist/ai/internal/mcpProtocol.js +13 -0
  129. package/dist/ai/internal/mcpProtocol.js.map +1 -1
  130. package/dist/ai/internal/mcpRuntime.js +5 -3
  131. package/dist/ai/internal/mcpRuntime.js.map +1 -1
  132. package/dist/ai/internal/mcpStatefulRuntime.js +6 -1
  133. package/dist/ai/internal/mcpStatefulRuntime.js.map +1 -1
  134. package/dist/cli/Argument.d.ts +6 -0
  135. package/dist/cli/Argument.d.ts.map +1 -1
  136. package/dist/cli/Argument.js +2 -0
  137. package/dist/cli/Argument.js.map +1 -1
  138. package/dist/cli/CliOutput.d.ts +65 -1
  139. package/dist/cli/CliOutput.d.ts.map +1 -1
  140. package/dist/cli/CliOutput.js +94 -37
  141. package/dist/cli/CliOutput.js.map +1 -1
  142. package/dist/cli/Command.d.ts +23 -0
  143. package/dist/cli/Command.d.ts.map +1 -1
  144. package/dist/cli/Command.js +8 -0
  145. package/dist/cli/Command.js.map +1 -1
  146. package/dist/cli/Flag.d.ts +107 -0
  147. package/dist/cli/Flag.d.ts.map +1 -1
  148. package/dist/cli/Flag.js +37 -0
  149. package/dist/cli/Flag.js.map +1 -1
  150. package/dist/cli/HelpDoc.d.ts +15 -1
  151. package/dist/cli/HelpDoc.d.ts.map +1 -1
  152. package/dist/cli/Param.d.ts +6 -0
  153. package/dist/cli/Param.d.ts.map +1 -1
  154. package/dist/cli/Param.js +2 -0
  155. package/dist/cli/Param.js.map +1 -1
  156. package/dist/cli/Primitive.d.ts +14 -0
  157. package/dist/cli/Primitive.d.ts.map +1 -1
  158. package/dist/cli/Primitive.js +15 -1
  159. package/dist/cli/Primitive.js.map +1 -1
  160. package/dist/cli/Prompt.d.ts +1 -0
  161. package/dist/cli/Prompt.d.ts.map +1 -1
  162. package/dist/cli/Prompt.js +1 -0
  163. package/dist/cli/Prompt.js.map +1 -1
  164. package/dist/cli/internal/help.d.ts.map +1 -1
  165. package/dist/cli/internal/help.js +17 -10
  166. package/dist/cli/internal/help.js.map +1 -1
  167. package/dist/cluster/Sharding.d.ts.map +1 -1
  168. package/dist/cluster/Sharding.js +90 -28
  169. package/dist/cluster/Sharding.js.map +1 -1
  170. package/dist/cluster/ShardingConfig.d.ts +72 -6
  171. package/dist/cluster/ShardingConfig.d.ts.map +1 -1
  172. package/dist/cluster/ShardingConfig.js +4 -0
  173. package/dist/cluster/ShardingConfig.js.map +1 -1
  174. package/dist/cluster/SingleRunner.d.ts +3 -3
  175. package/dist/cluster/SingleRunner.d.ts.map +1 -1
  176. package/dist/cluster/SingleRunner.js +1 -1
  177. package/dist/cluster/SqlMessageStorage.d.ts +37 -6
  178. package/dist/cluster/SqlMessageStorage.d.ts.map +1 -1
  179. package/dist/cluster/SqlMessageStorage.js +34 -7
  180. package/dist/cluster/SqlMessageStorage.js.map +1 -1
  181. package/dist/cluster/SqlRunnerStorage.d.ts.map +1 -1
  182. package/dist/cluster/SqlRunnerStorage.js +23 -8
  183. package/dist/cluster/SqlRunnerStorage.js.map +1 -1
  184. package/dist/crypto/Aead.d.ts +322 -0
  185. package/dist/crypto/Aead.d.ts.map +1 -0
  186. package/dist/crypto/Aead.js +331 -0
  187. package/dist/crypto/Aead.js.map +1 -0
  188. package/dist/crypto/Cipher.d.ts +235 -0
  189. package/dist/crypto/Cipher.d.ts.map +1 -0
  190. package/dist/crypto/Cipher.js +233 -0
  191. package/dist/crypto/Cipher.js.map +1 -0
  192. package/dist/crypto/CryptoError.d.ts +212 -0
  193. package/dist/crypto/CryptoError.d.ts.map +1 -0
  194. package/dist/crypto/CryptoError.js +202 -0
  195. package/dist/crypto/CryptoError.js.map +1 -0
  196. package/dist/crypto/Digest.d.ts +143 -0
  197. package/dist/crypto/Digest.d.ts.map +1 -0
  198. package/dist/crypto/Digest.js +146 -0
  199. package/dist/crypto/Digest.js.map +1 -0
  200. package/dist/crypto/Kdf.d.ts +220 -0
  201. package/dist/crypto/Kdf.d.ts.map +1 -0
  202. package/dist/crypto/Kdf.js +212 -0
  203. package/dist/crypto/Kdf.js.map +1 -0
  204. package/dist/crypto/KeyAgreement.d.ts +323 -0
  205. package/dist/crypto/KeyAgreement.d.ts.map +1 -0
  206. package/dist/crypto/KeyAgreement.js +303 -0
  207. package/dist/crypto/KeyAgreement.js.map +1 -0
  208. package/dist/crypto/KeyFormat.d.ts +309 -0
  209. package/dist/crypto/KeyFormat.d.ts.map +1 -0
  210. package/dist/crypto/KeyFormat.js +556 -0
  211. package/dist/crypto/KeyFormat.js.map +1 -0
  212. package/dist/crypto/KeyWrap.d.ts +389 -0
  213. package/dist/crypto/KeyWrap.d.ts.map +1 -0
  214. package/dist/crypto/KeyWrap.js +381 -0
  215. package/dist/crypto/KeyWrap.js.map +1 -0
  216. package/dist/crypto/Mac.d.ts +277 -0
  217. package/dist/crypto/Mac.d.ts.map +1 -0
  218. package/dist/crypto/Mac.js +288 -0
  219. package/dist/crypto/Mac.js.map +1 -0
  220. package/dist/crypto/SecureRandom.d.ts +340 -0
  221. package/dist/crypto/SecureRandom.d.ts.map +1 -0
  222. package/dist/crypto/SecureRandom.js +257 -0
  223. package/dist/crypto/SecureRandom.js.map +1 -0
  224. package/dist/crypto/Signature.d.ts +448 -0
  225. package/dist/crypto/Signature.d.ts.map +1 -0
  226. package/dist/crypto/Signature.js +484 -0
  227. package/dist/crypto/Signature.js.map +1 -0
  228. package/dist/crypto/WebCrypto.d.ts +61 -0
  229. package/dist/crypto/WebCrypto.d.ts.map +1 -0
  230. package/dist/crypto/WebCrypto.js +63 -0
  231. package/dist/crypto/WebCrypto.js.map +1 -0
  232. package/dist/crypto/index.d.ts +65 -0
  233. package/dist/crypto/index.d.ts.map +1 -0
  234. package/dist/crypto/index.js +66 -0
  235. package/dist/crypto/index.js.map +1 -0
  236. package/dist/crypto/internal/asymmetric.d.ts +2 -0
  237. package/dist/crypto/internal/asymmetric.d.ts.map +1 -0
  238. package/dist/crypto/internal/asymmetric.js +210 -0
  239. package/dist/crypto/internal/asymmetric.js.map +1 -0
  240. package/dist/crypto/internal/chacha.d.ts +46 -0
  241. package/dist/crypto/internal/chacha.d.ts.map +1 -0
  242. package/dist/crypto/internal/chacha.js +885 -0
  243. package/dist/crypto/internal/chacha.js.map +1 -0
  244. package/dist/crypto/internal/der.d.ts +6 -0
  245. package/dist/crypto/internal/der.d.ts.map +1 -0
  246. package/dist/crypto/internal/der.js +86 -0
  247. package/dist/crypto/internal/der.js.map +1 -0
  248. package/dist/crypto/internal/digest.d.ts +2 -0
  249. package/dist/crypto/internal/digest.d.ts.map +1 -0
  250. package/dist/crypto/internal/digest.js +15 -0
  251. package/dist/crypto/internal/digest.js.map +1 -0
  252. package/dist/crypto/internal/key.d.ts +2 -0
  253. package/dist/crypto/internal/key.d.ts.map +1 -0
  254. package/dist/crypto/internal/key.js +170 -0
  255. package/dist/crypto/internal/key.js.map +1 -0
  256. package/dist/crypto/internal/md5.d.ts +39 -0
  257. package/dist/crypto/internal/md5.d.ts.map +1 -0
  258. package/dist/crypto/internal/md5.js +179 -0
  259. package/dist/crypto/internal/md5.js.map +1 -0
  260. package/dist/crypto/internal/webCrypto.d.ts +2 -0
  261. package/dist/crypto/internal/webCrypto.d.ts.map +1 -0
  262. package/dist/crypto/internal/webCrypto.js +111 -0
  263. package/dist/crypto/internal/webCrypto.js.map +1 -0
  264. package/dist/encoding/Base64Url.d.ts.map +1 -1
  265. package/dist/encoding/Base64Url.js +3 -2
  266. package/dist/encoding/Base64Url.js.map +1 -1
  267. package/dist/encoding/Csv.d.ts +608 -0
  268. package/dist/encoding/Csv.d.ts.map +1 -0
  269. package/dist/encoding/Csv.js +718 -0
  270. package/dist/encoding/Csv.js.map +1 -0
  271. package/dist/encoding/Hex.d.ts +3 -2
  272. package/dist/encoding/Hex.d.ts.map +1 -1
  273. package/dist/encoding/Hex.js +3 -2
  274. package/dist/encoding/Hex.js.map +1 -1
  275. package/dist/encoding/SchemaBinary.d.ts.map +1 -1
  276. package/dist/encoding/SchemaBinary.js +42 -4
  277. package/dist/encoding/SchemaBinary.js.map +1 -1
  278. package/dist/encoding/Toml.d.ts +17 -3
  279. package/dist/encoding/Toml.d.ts.map +1 -1
  280. package/dist/encoding/Toml.js +104 -16
  281. package/dist/encoding/Toml.js.map +1 -1
  282. package/dist/encoding/Yaml.d.ts +8 -1
  283. package/dist/encoding/Yaml.d.ts.map +1 -1
  284. package/dist/encoding/Yaml.js +54 -18
  285. package/dist/encoding/Yaml.js.map +1 -1
  286. package/dist/encoding/index.d.ts +5 -0
  287. package/dist/encoding/index.d.ts.map +1 -1
  288. package/dist/encoding/index.js +5 -0
  289. package/dist/encoding/index.js.map +1 -1
  290. package/dist/eventlog/EventJournal.d.ts.map +1 -1
  291. package/dist/eventlog/EventJournal.js +6 -3
  292. package/dist/eventlog/EventJournal.js.map +1 -1
  293. package/dist/eventlog/EventLog.d.ts +119 -4
  294. package/dist/eventlog/EventLog.d.ts.map +1 -1
  295. package/dist/eventlog/EventLog.js +200 -12
  296. package/dist/eventlog/EventLog.js.map +1 -1
  297. package/dist/eventlog/EventLogEncryption.d.ts +41 -4
  298. package/dist/eventlog/EventLogEncryption.d.ts.map +1 -1
  299. package/dist/eventlog/EventLogEncryption.js +83 -64
  300. package/dist/eventlog/EventLogEncryption.js.map +1 -1
  301. package/dist/eventlog/EventLogMessage.d.ts +279 -0
  302. package/dist/eventlog/EventLogMessage.d.ts.map +1 -1
  303. package/dist/eventlog/EventLogMessage.js +217 -1
  304. package/dist/eventlog/EventLogMessage.js.map +1 -1
  305. package/dist/eventlog/EventLogRemote.d.ts +200 -28
  306. package/dist/eventlog/EventLogRemote.d.ts.map +1 -1
  307. package/dist/eventlog/EventLogRemote.js +186 -16
  308. package/dist/eventlog/EventLogRemote.js.map +1 -1
  309. package/dist/eventlog/EventLogServer.d.ts +3 -0
  310. package/dist/eventlog/EventLogServer.d.ts.map +1 -1
  311. package/dist/eventlog/EventLogServer.js +18 -10
  312. package/dist/eventlog/EventLogServer.js.map +1 -1
  313. package/dist/eventlog/EventLogServerEncrypted.d.ts +326 -5
  314. package/dist/eventlog/EventLogServerEncrypted.d.ts.map +1 -1
  315. package/dist/eventlog/EventLogServerEncrypted.js +769 -14
  316. package/dist/eventlog/EventLogServerEncrypted.js.map +1 -1
  317. package/dist/eventlog/EventLogSessionAuth.d.ts +5 -3
  318. package/dist/eventlog/EventLogSessionAuth.d.ts.map +1 -1
  319. package/dist/eventlog/EventLogSessionAuth.js +41 -64
  320. package/dist/eventlog/EventLogSessionAuth.js.map +1 -1
  321. package/dist/eventlog/EventRow.d.ts +4 -0
  322. package/dist/eventlog/EventRow.d.ts.map +1 -1
  323. package/dist/eventlog/EventRow.js +12 -2
  324. package/dist/eventlog/EventRow.js.map +1 -1
  325. package/dist/eventlog/SqlEventJournal.js +2 -2
  326. package/dist/eventlog/SqlEventJournal.js.map +1 -1
  327. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts +21 -5
  328. package/dist/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -1
  329. package/dist/eventlog/SqlEventLogServerEncrypted.js +1048 -113
  330. package/dist/eventlog/SqlEventLogServerEncrypted.js.map +1 -1
  331. package/dist/eventlog/SqlEventLogServerUnencrypted.js +2 -2
  332. package/dist/eventlog/SqlEventLogServerUnencrypted.js.map +1 -1
  333. package/dist/eventlog/internal/batches.d.ts +12 -0
  334. package/dist/eventlog/internal/batches.d.ts.map +1 -0
  335. package/dist/eventlog/internal/batches.js +26 -0
  336. package/dist/eventlog/internal/batches.js.map +1 -0
  337. package/dist/eventlog/internal/compaction.d.ts +38 -0
  338. package/dist/eventlog/internal/compaction.d.ts.map +1 -0
  339. package/dist/eventlog/internal/compaction.js +33 -0
  340. package/dist/eventlog/internal/compaction.js.map +1 -0
  341. package/dist/eventlog/internal/identityRootSecretDerivation.js +66 -67
  342. package/dist/eventlog/internal/identityRootSecretDerivation.js.map +1 -1
  343. package/dist/eventlog/internal/remoteCompaction.d.ts +31 -0
  344. package/dist/eventlog/internal/remoteCompaction.d.ts.map +1 -0
  345. package/dist/eventlog/internal/remoteCompaction.js +76 -0
  346. package/dist/eventlog/internal/remoteCompaction.js.map +1 -0
  347. package/dist/http/Cookies.d.ts +172 -0
  348. package/dist/http/Cookies.d.ts.map +1 -1
  349. package/dist/http/Cookies.js +143 -1
  350. package/dist/http/Cookies.js.map +1 -1
  351. package/dist/http/FetchHttpClient.d.ts +26 -2
  352. package/dist/http/FetchHttpClient.d.ts.map +1 -1
  353. package/dist/http/FetchHttpClient.js +78 -15
  354. package/dist/http/FetchHttpClient.js.map +1 -1
  355. package/dist/http/HttpClient.d.ts +79 -8
  356. package/dist/http/HttpClient.d.ts.map +1 -1
  357. package/dist/http/HttpClient.js +65 -5
  358. package/dist/http/HttpClient.js.map +1 -1
  359. package/dist/http/HttpClientRequest.d.ts +9 -5
  360. package/dist/http/HttpClientRequest.d.ts.map +1 -1
  361. package/dist/http/HttpClientRequest.js +2 -3
  362. package/dist/http/HttpClientRequest.js.map +1 -1
  363. package/dist/http/HttpClientResponse.d.ts.map +1 -1
  364. package/dist/http/HttpClientResponse.js +3 -2
  365. package/dist/http/HttpClientResponse.js.map +1 -1
  366. package/dist/http/HttpMethod.d.ts +7 -1
  367. package/dist/http/HttpMethod.d.ts.map +1 -1
  368. package/dist/http/HttpMethod.js +3 -8
  369. package/dist/http/HttpMethod.js.map +1 -1
  370. package/dist/http/HttpServerRequest.d.ts +5 -2
  371. package/dist/http/HttpServerRequest.d.ts.map +1 -1
  372. package/dist/http/HttpServerRequest.js +6 -17
  373. package/dist/http/HttpServerRequest.js.map +1 -1
  374. package/dist/http/HttpServerResponse.d.ts.map +1 -1
  375. package/dist/http/HttpServerResponse.js +3 -2
  376. package/dist/http/HttpServerResponse.js.map +1 -1
  377. package/dist/http/HttpTraceContext.d.ts +2 -1
  378. package/dist/http/HttpTraceContext.d.ts.map +1 -1
  379. package/dist/http/HttpTraceContext.js +7 -5
  380. package/dist/http/HttpTraceContext.js.map +1 -1
  381. package/dist/http/ProblemDetails.d.ts +96 -0
  382. package/dist/http/ProblemDetails.d.ts.map +1 -0
  383. package/dist/http/ProblemDetails.js +98 -0
  384. package/dist/http/ProblemDetails.js.map +1 -0
  385. package/dist/http/index.d.ts +5 -0
  386. package/dist/http/index.d.ts.map +1 -1
  387. package/dist/http/index.js +5 -0
  388. package/dist/http/index.js.map +1 -1
  389. package/dist/http/internal/decompression.js +3 -2
  390. package/dist/http/internal/decompression.js.map +1 -1
  391. package/dist/http/internal/urlParams.js +8 -0
  392. package/dist/http/internal/urlParams.js.map +1 -1
  393. package/dist/http-api/HttpApiBuilder.js +19 -5
  394. package/dist/http-api/HttpApiBuilder.js.map +1 -1
  395. package/dist/http-api/HttpApiClient.d.ts +63 -0
  396. package/dist/http-api/HttpApiClient.d.ts.map +1 -1
  397. package/dist/http-api/HttpApiClient.js +51 -0
  398. package/dist/http-api/HttpApiClient.js.map +1 -1
  399. package/dist/http-api/HttpApiEndpoint.d.ts.map +1 -1
  400. package/dist/http-api/HttpApiEndpoint.js +14 -5
  401. package/dist/http-api/HttpApiEndpoint.js.map +1 -1
  402. package/dist/http-api/HttpApiError.d.ts +185 -13
  403. package/dist/http-api/HttpApiError.d.ts.map +1 -1
  404. package/dist/http-api/HttpApiError.js +128 -0
  405. package/dist/http-api/HttpApiError.js.map +1 -1
  406. package/dist/http-api/HttpApiMiddleware.d.ts +64 -17
  407. package/dist/http-api/HttpApiMiddleware.d.ts.map +1 -1
  408. package/dist/http-api/HttpApiMiddleware.js +85 -1
  409. package/dist/http-api/HttpApiMiddleware.js.map +1 -1
  410. package/dist/http-api/HttpApiSchema.d.ts +76 -14
  411. package/dist/http-api/HttpApiSchema.d.ts.map +1 -1
  412. package/dist/http-api/HttpApiSchema.js +53 -0
  413. package/dist/http-api/HttpApiSchema.js.map +1 -1
  414. package/dist/index.d.ts +5 -5
  415. package/dist/index.d.ts.map +1 -1
  416. package/dist/index.js +5 -5
  417. package/dist/index.js.map +1 -1
  418. package/dist/internal/effect.js +25 -14
  419. package/dist/internal/effect.js.map +1 -1
  420. package/dist/internal/glob.d.ts +2 -0
  421. package/dist/internal/glob.d.ts.map +1 -0
  422. package/dist/internal/glob.js +630 -0
  423. package/dist/internal/glob.js.map +1 -0
  424. package/dist/internal/matcher.js +10 -0
  425. package/dist/internal/matcher.js.map +1 -1
  426. package/dist/internal/persistence.js +9 -0
  427. package/dist/internal/persistence.js.map +1 -1
  428. package/dist/internal/rcRef.js +4 -1
  429. package/dist/internal/rcRef.js.map +1 -1
  430. package/dist/internal/schema/toCodeDocument.js +6 -3
  431. package/dist/internal/schema/toCodeDocument.js.map +1 -1
  432. package/dist/internal/trie.js +42 -13
  433. package/dist/internal/trie.js.map +1 -1
  434. package/dist/internal/ulid.js +41 -0
  435. package/dist/internal/ulid.js.map +1 -1
  436. package/dist/internal/uuid.js +52 -8
  437. package/dist/internal/uuid.js.map +1 -1
  438. package/dist/internal/version.js +1 -1
  439. package/dist/observability/Otlp.d.ts +15 -4
  440. package/dist/observability/Otlp.d.ts.map +1 -1
  441. package/dist/observability/Otlp.js +10 -0
  442. package/dist/observability/Otlp.js.map +1 -1
  443. package/dist/observability/OtlpResource.d.ts +7 -0
  444. package/dist/observability/OtlpResource.d.ts.map +1 -1
  445. package/dist/observability/OtlpResource.js +11 -1
  446. package/dist/observability/OtlpResource.js.map +1 -1
  447. package/dist/persistence/KeyValueStore.d.ts +47 -2
  448. package/dist/persistence/KeyValueStore.d.ts.map +1 -1
  449. package/dist/persistence/KeyValueStore.js +129 -18
  450. package/dist/persistence/KeyValueStore.js.map +1 -1
  451. package/dist/persistence/PersistedQueue.d.ts +9 -0
  452. package/dist/persistence/PersistedQueue.d.ts.map +1 -1
  453. package/dist/persistence/PersistedQueue.js +94 -52
  454. package/dist/persistence/PersistedQueue.js.map +1 -1
  455. package/dist/persistence/Persistence.d.ts +10 -4
  456. package/dist/persistence/Persistence.d.ts.map +1 -1
  457. package/dist/persistence/Persistence.js +18 -11
  458. package/dist/persistence/Persistence.js.map +1 -1
  459. package/dist/process/ChildProcess.d.ts +207 -67
  460. package/dist/process/ChildProcess.d.ts.map +1 -1
  461. package/dist/process/ChildProcess.js +56 -158
  462. package/dist/process/ChildProcess.js.map +1 -1
  463. package/dist/process/ChildProcessSpawner.d.ts +5 -0
  464. package/dist/process/ChildProcessSpawner.d.ts.map +1 -1
  465. package/dist/process/ChildProcessSpawner.js.map +1 -1
  466. package/dist/process/CommandLine.d.ts +294 -0
  467. package/dist/process/CommandLine.d.ts.map +1 -0
  468. package/dist/process/CommandLine.js +481 -0
  469. package/dist/process/CommandLine.js.map +1 -0
  470. package/dist/process/index.d.ts +5 -0
  471. package/dist/process/index.d.ts.map +1 -1
  472. package/dist/process/index.js +5 -0
  473. package/dist/process/index.js.map +1 -1
  474. package/dist/reactivity/Atom.d.ts +2 -1
  475. package/dist/reactivity/Atom.d.ts.map +1 -1
  476. package/dist/reactivity/Atom.js +3 -4
  477. package/dist/reactivity/Atom.js.map +1 -1
  478. package/dist/reactivity/AtomRegistry.js.map +1 -1
  479. package/dist/rpc/RpcClient.d.ts +16 -1
  480. package/dist/rpc/RpcClient.d.ts.map +1 -1
  481. package/dist/rpc/RpcClient.js +50 -16
  482. package/dist/rpc/RpcClient.js.map +1 -1
  483. package/dist/rpc/RpcMessage.d.ts +10 -1
  484. package/dist/rpc/RpcMessage.d.ts.map +1 -1
  485. package/dist/rpc/RpcMessage.js +1 -0
  486. package/dist/rpc/RpcMessage.js.map +1 -1
  487. package/dist/rpc/RpcSerialization.d.ts.map +1 -1
  488. package/dist/rpc/RpcSerialization.js +6 -0
  489. package/dist/rpc/RpcSerialization.js.map +1 -1
  490. package/dist/rpc/RpcServer.d.ts +31 -0
  491. package/dist/rpc/RpcServer.d.ts.map +1 -1
  492. package/dist/rpc/RpcServer.js +139 -66
  493. package/dist/rpc/RpcServer.js.map +1 -1
  494. package/dist/schema/Model.d.ts +14 -0
  495. package/dist/schema/Model.d.ts.map +1 -1
  496. package/dist/schema/Model.js +18 -3
  497. package/dist/schema/Model.js.map +1 -1
  498. package/dist/sql/Migrator.d.ts +0 -19
  499. package/dist/sql/Migrator.d.ts.map +1 -1
  500. package/dist/sql/Migrator.js +3 -48
  501. package/dist/sql/Migrator.js.map +1 -1
  502. package/dist/sql/MigratorFileSystem.d.ts +21 -0
  503. package/dist/sql/MigratorFileSystem.d.ts.map +1 -0
  504. package/dist/sql/MigratorFileSystem.js +57 -0
  505. package/dist/sql/MigratorFileSystem.js.map +1 -0
  506. package/dist/sql/SqlClient.d.ts.map +1 -1
  507. package/dist/sql/SqlClient.js +5 -9
  508. package/dist/sql/SqlClient.js.map +1 -1
  509. package/dist/sql/Statement.d.ts +20 -6
  510. package/dist/sql/Statement.d.ts.map +1 -1
  511. package/dist/sql/Statement.js +0 -13
  512. package/dist/sql/Statement.js.map +1 -1
  513. package/dist/sql/index.js +1 -1
  514. package/dist/testing/index.d.ts +0 -5
  515. package/dist/testing/index.d.ts.map +1 -1
  516. package/dist/testing/index.js +0 -5
  517. package/dist/testing/index.js.map +1 -1
  518. package/dist/workflow/internal/crypto.js +9 -8
  519. package/dist/workflow/internal/crypto.js.map +1 -1
  520. package/package.json +3 -1
  521. package/src/BigDecimal.ts +3 -0
  522. package/src/Channel.ts +17 -11
  523. package/src/Config.ts +7 -1
  524. package/src/Context.ts +34 -10
  525. package/src/Cron.ts +178 -29
  526. package/src/Duration.ts +140 -0
  527. package/src/Effect.ts +914 -85
  528. package/src/FileSystem.ts +65 -4
  529. package/src/Glob.ts +205 -0
  530. package/src/Match.ts +127 -0
  531. package/src/Pool.ts +73 -15
  532. package/src/Random.ts +3 -3
  533. package/src/RcMap.ts +5 -1
  534. package/src/Schedule.ts +26 -3
  535. package/src/Schema.ts +1189 -62
  536. package/src/SchemaGetter.ts +27 -11
  537. package/src/SchemaRepresentation.ts +19 -0
  538. package/src/SchemaTransformation.ts +8 -3
  539. package/src/ScopedCache.ts +5 -9
  540. package/src/Semaphore.ts +141 -0
  541. package/src/Stream.ts +15 -6
  542. package/src/Terminal.ts +19 -1
  543. package/src/ai/AiError.ts +56 -80
  544. package/src/ai/Decision.ts +257 -6
  545. package/src/ai/DecisionModel.ts +171 -28
  546. package/src/ai/McpServer.ts +1269 -286
  547. package/src/ai/McpTest.ts +380 -0
  548. package/src/ai/Response.ts +2 -22
  549. package/src/ai/Tool.ts +27 -8
  550. package/src/ai/index.ts +6 -0
  551. package/src/ai/internal/mcpCore.ts +78 -44
  552. package/src/ai/internal/mcpProtocol/v2024_11_05.ts +4 -7
  553. package/src/ai/internal/mcpProtocol/v2025_03_26.ts +4 -7
  554. package/src/ai/internal/mcpProtocol/v2025_06_18.ts +4 -7
  555. package/src/ai/internal/mcpProtocol/v2025_11_25.ts +4 -7
  556. package/src/ai/internal/mcpProtocol/v2026_07_28.ts +15 -10
  557. package/src/ai/internal/mcpProtocol.ts +29 -0
  558. package/src/ai/internal/mcpRuntime.ts +9 -5
  559. package/src/ai/internal/mcpStatefulRuntime.ts +14 -2
  560. package/src/cli/Argument.ts +6 -0
  561. package/src/cli/CliOutput.ts +117 -49
  562. package/src/cli/Command.ts +23 -0
  563. package/src/cli/Flag.ts +107 -0
  564. package/src/cli/HelpDoc.ts +18 -1
  565. package/src/cli/Param.ts +6 -0
  566. package/src/cli/Primitive.ts +16 -1
  567. package/src/cli/Prompt.ts +1 -0
  568. package/src/cli/internal/help.ts +21 -9
  569. package/src/cluster/Sharding.ts +93 -26
  570. package/src/cluster/ShardingConfig.ts +41 -3
  571. package/src/cluster/SingleRunner.ts +3 -3
  572. package/src/cluster/SqlMessageStorage.ts +49 -17
  573. package/src/cluster/SqlRunnerStorage.ts +37 -27
  574. package/src/crypto/Aead.ts +517 -0
  575. package/src/crypto/Cipher.ts +326 -0
  576. package/src/crypto/CryptoError.ts +242 -0
  577. package/src/crypto/Digest.ts +167 -0
  578. package/src/crypto/Kdf.ts +315 -0
  579. package/src/crypto/KeyAgreement.ts +489 -0
  580. package/src/crypto/KeyFormat.ts +712 -0
  581. package/src/crypto/KeyWrap.ts +639 -0
  582. package/src/crypto/Mac.ts +386 -0
  583. package/src/crypto/SecureRandom.ts +459 -0
  584. package/src/crypto/Signature.ts +673 -0
  585. package/src/crypto/WebCrypto.ts +64 -0
  586. package/src/crypto/index.ts +78 -0
  587. package/src/crypto/internal/asymmetric.ts +329 -0
  588. package/src/crypto/internal/chacha.ts +1088 -0
  589. package/src/crypto/internal/der.ts +110 -0
  590. package/src/crypto/internal/digest.ts +16 -0
  591. package/src/crypto/internal/key.ts +235 -0
  592. package/src/crypto/internal/md5.ts +170 -0
  593. package/src/crypto/internal/webCrypto.ts +150 -0
  594. package/src/encoding/Base64Url.ts +5 -2
  595. package/src/encoding/Csv.ts +1298 -0
  596. package/src/encoding/Hex.ts +3 -2
  597. package/src/encoding/SchemaBinary.ts +40 -4
  598. package/src/encoding/Toml.ts +85 -20
  599. package/src/encoding/Yaml.ts +61 -18
  600. package/src/encoding/index.ts +6 -0
  601. package/src/eventlog/EventJournal.ts +4 -3
  602. package/src/eventlog/EventLog.ts +340 -15
  603. package/src/eventlog/EventLogEncryption.ts +118 -110
  604. package/src/eventlog/EventLogMessage.ts +273 -1
  605. package/src/eventlog/EventLogRemote.ts +367 -23
  606. package/src/eventlog/EventLogServer.ts +23 -8
  607. package/src/eventlog/EventLogServerEncrypted.ts +1130 -67
  608. package/src/eventlog/EventLogSessionAuth.ts +56 -70
  609. package/src/eventlog/EventRow.ts +12 -3
  610. package/src/eventlog/SqlEventJournal.ts +2 -2
  611. package/src/eventlog/SqlEventLogServerEncrypted.ts +1244 -136
  612. package/src/eventlog/SqlEventLogServerUnencrypted.ts +2 -2
  613. package/src/eventlog/internal/batches.ts +30 -0
  614. package/src/eventlog/internal/compaction.ts +64 -0
  615. package/src/eventlog/internal/identityRootSecretDerivation.ts +93 -123
  616. package/src/eventlog/internal/remoteCompaction.ts +92 -0
  617. package/src/http/Cookies.ts +281 -1
  618. package/src/http/FetchHttpClient.ts +88 -16
  619. package/src/http/HttpClient.ts +89 -22
  620. package/src/http/HttpClientRequest.ts +12 -9
  621. package/src/http/HttpClientResponse.ts +3 -2
  622. package/src/http/HttpMethod.ts +10 -2
  623. package/src/http/HttpServerRequest.ts +15 -30
  624. package/src/http/HttpServerResponse.ts +3 -2
  625. package/src/http/HttpTraceContext.ts +7 -4
  626. package/src/http/ProblemDetails.ts +149 -0
  627. package/src/http/index.ts +6 -0
  628. package/src/http/internal/decompression.ts +4 -4
  629. package/src/http/internal/urlParams.ts +8 -0
  630. package/src/http-api/HttpApiBuilder.ts +24 -12
  631. package/src/http-api/HttpApiClient.ts +67 -1
  632. package/src/http-api/HttpApiEndpoint.ts +14 -5
  633. package/src/http-api/HttpApiError.ts +250 -0
  634. package/src/http-api/HttpApiMiddleware.ts +95 -1
  635. package/src/http-api/HttpApiSchema.ts +105 -14
  636. package/src/index.ts +6 -6
  637. package/src/internal/effect.ts +34 -18
  638. package/src/internal/glob.ts +736 -0
  639. package/src/internal/matcher.ts +17 -0
  640. package/src/internal/persistence.ts +11 -0
  641. package/src/internal/rcRef.ts +4 -1
  642. package/src/internal/schema/toCodeDocument.ts +7 -3
  643. package/src/internal/trie.ts +43 -14
  644. package/src/internal/ulid.ts +44 -0
  645. package/src/internal/uuid.ts +57 -16
  646. package/src/internal/version.ts +1 -1
  647. package/src/observability/Otlp.ts +21 -4
  648. package/src/observability/OtlpResource.ts +9 -1
  649. package/src/persistence/KeyValueStore.ts +219 -22
  650. package/src/persistence/PersistedQueue.ts +128 -59
  651. package/src/persistence/Persistence.ts +20 -13
  652. package/src/process/ChildProcess.ts +255 -260
  653. package/src/process/ChildProcessSpawner.ts +5 -0
  654. package/src/process/CommandLine.ts +630 -0
  655. package/src/process/index.ts +6 -0
  656. package/src/reactivity/Atom.ts +5 -5
  657. package/src/reactivity/AtomRegistry.ts +1 -1
  658. package/src/rpc/RpcClient.ts +62 -26
  659. package/src/rpc/RpcMessage.ts +10 -1
  660. package/src/rpc/RpcSerialization.ts +3 -0
  661. package/src/rpc/RpcServer.ts +176 -78
  662. package/src/schema/Model.ts +26 -3
  663. package/src/sql/Migrator.ts +4 -63
  664. package/src/sql/MigratorFileSystem.ts +71 -0
  665. package/src/sql/SqlClient.ts +2 -16
  666. package/src/sql/Statement.ts +8 -7
  667. package/src/sql/index.ts +1 -1
  668. package/src/testing/index.ts +0 -6
  669. package/src/workflow/internal/crypto.ts +15 -11
  670. package/dist/Crypto.d.ts +0 -244
  671. package/dist/Crypto.d.ts.map +0 -1
  672. package/dist/Crypto.js +0 -139
  673. package/dist/Crypto.js.map +0 -1
  674. package/dist/testing/TestCrypto.d.ts +0 -73
  675. package/dist/testing/TestCrypto.d.ts.map +0 -1
  676. package/dist/testing/TestCrypto.js +0 -87
  677. package/dist/testing/TestCrypto.js.map +0 -1
  678. package/src/Crypto.ts +0 -347
  679. package/src/testing/TestCrypto.ts +0 -94
@@ -0,0 +1,736 @@
1
+ import * as Arr from "../Array.ts"
2
+ import * as Effect from "../Effect.ts"
3
+ import type * as FileSystem from "../FileSystem.ts"
4
+ import * as Order from "../Order.ts"
5
+ import type { PlatformError } from "../PlatformError.ts"
6
+ import * as Predicate from "../Predicate.ts"
7
+
8
+ /** @internal */
9
+ export type Token =
10
+ | { readonly _tag: "Char"; readonly value: string }
11
+ | { readonly _tag: "Any" }
12
+ | { readonly _tag: "Star" }
13
+ /** `ranges` holds inclusive code point pairs: `[from0, to0, from1, to1, ...]`. */
14
+ | { readonly _tag: "Class"; readonly ranges: ReadonlyArray<number>; readonly negated: boolean }
15
+
16
+ /** @internal */
17
+ export type Node =
18
+ | { readonly _tag: "Globstar" }
19
+ | { readonly _tag: "Literal"; readonly value: string }
20
+ | { readonly _tag: "Wildcard"; readonly tokens: ReadonlyArray<Token>; readonly leadingDot: boolean }
21
+ /** Ends one expanded pattern. */
22
+ | { readonly _tag: "End"; readonly directoryOnly: boolean }
23
+
24
+ type States = ReadonlySet<number>
25
+
26
+ /**
27
+ * Every expanded pattern's nodes laid out in one array, so a match state is an
28
+ * index into `nodes` and `initial` holds the start of each pattern.
29
+ *
30
+ * @internal
31
+ */
32
+ export interface Compiled {
33
+ readonly nodes: ReadonlyArray<Node>
34
+ readonly initial: States
35
+ readonly dot: boolean
36
+ }
37
+
38
+ // -----------------------------------------------------------------------------
39
+ // compilation
40
+ // -----------------------------------------------------------------------------
41
+
42
+ const maxExpansions = 10_000
43
+
44
+ const maxExpandedLength = 2 ** 22
45
+ const maxBraceDepth = 64
46
+
47
+ /** @internal */
48
+ export const compile = (patterns: ReadonlyArray<string>, dot: boolean): Compiled => {
49
+ const nodes: Array<Node> = []
50
+ const starts = new Set<number>()
51
+ for (const pattern of patterns) {
52
+ for (const expanded of expandBraces(pattern)) {
53
+ const start = nodes.length
54
+ if (compilePattern(expanded, nodes)) {
55
+ starts.add(start)
56
+ }
57
+ }
58
+ }
59
+ return { nodes, initial: closure(nodes, starts), dot }
60
+ }
61
+
62
+ // Reject UNC paths rather than collapsing them into local absolute paths.
63
+ const isUnc = (path: string): boolean => path.startsWith("//") && path[2] !== undefined && path[2] !== "/"
64
+
65
+ // Appends the pattern's nodes, or appends nothing when it can match no path
66
+ const compilePattern = (pattern: string, nodes: Array<Node>): boolean => {
67
+ if (pattern === "" || isUnc(pattern)) {
68
+ return false
69
+ }
70
+ const raw = splitSegments(pattern)
71
+ const globstar = raw.indexOf("**")
72
+ if (globstar !== -1 && raw.some((segment, i) => i > globstar && (segment === "." || segment === ".."))) {
73
+ return false
74
+ }
75
+ const { directory, segments } = normalize(raw)
76
+ if (segments.length === 0) {
77
+ return false
78
+ }
79
+ for (const segment of segments) {
80
+ if (segment !== "**") {
81
+ nodes.push(compileSegment(Array.from(segment)))
82
+ } else if (nodes[nodes.length - 1] !== globstarNode) {
83
+ nodes.push(globstarNode)
84
+ }
85
+ }
86
+ nodes.push({ _tag: "End", directoryOnly: directory })
87
+ return true
88
+ }
89
+
90
+ const globstarNode: Node = { _tag: "Globstar" }
91
+
92
+ const splitSegments = (pattern: string): Array<string> => {
93
+ const segments: Array<string> = []
94
+ let start = 0
95
+ for (let i = 0; i < pattern.length; i++) {
96
+ if (pattern[i] === "\\") {
97
+ i++
98
+ } else if (pattern[i] === "/") {
99
+ segments.push(pattern.slice(start, i))
100
+ start = i + 1
101
+ }
102
+ }
103
+ segments.push(pattern.slice(start))
104
+ return segments
105
+ }
106
+
107
+ const drive = /^[A-Za-z]:/
108
+
109
+ const isDrive = (segment: string): boolean => segment.length === 2 && drive.test(segment)
110
+
111
+ // the root of an absolute path: `""` or a drive such as `C:/`
112
+ const isRoot = (name: string): boolean => name === "" || (name.length === 3 && name[2] === "/" && drive.test(name))
113
+
114
+ const isAbsolute = (path: string): boolean => path.startsWith("/") || (path[2] === "/" && drive.test(path))
115
+
116
+ // Preserve absolute roots and a lone `.`; trailing `/` or `/.` marks a directory.
117
+ const normalize = (raw: ReadonlyArray<string>): {
118
+ readonly segments: Array<string>
119
+ readonly directory: boolean
120
+ } => {
121
+ const segments: Array<string> = []
122
+ let i = 0
123
+ if (raw.length > 1 && (raw[0] === "" || isDrive(raw[0]))) {
124
+ segments.push(raw[0] === "" ? "" : `${raw[0]}/`)
125
+ i = 1
126
+ }
127
+ let directory = false
128
+ for (; i < raw.length; i++) {
129
+ const segment = raw[i]
130
+ if (segment === "" || segment === ".") {
131
+ directory = i === raw.length - 1 && segments.length > 0
132
+ } else {
133
+ segments.push(segment)
134
+ directory = false
135
+ }
136
+ }
137
+ if (segments.length === 0 && raw.includes(".")) {
138
+ segments.push(".")
139
+ }
140
+ return { segments, directory }
141
+ }
142
+
143
+ const compileSegment = (chars: ReadonlyArray<string>): Node => {
144
+ const tokens: Array<Token> = []
145
+ let literal = ""
146
+ let magic = false
147
+ // once a class fails to close, every later `[` in the segment is literal
148
+ let classes = true
149
+ for (let i = 0; i < chars.length; i++) {
150
+ const char = chars[i]
151
+ if (char === "\\" && i + 1 < chars.length) {
152
+ literal += chars[++i]
153
+ tokens.push({ _tag: "Char", value: chars[i] })
154
+ } else if (char === "*") {
155
+ magic = true
156
+ if (tokens[tokens.length - 1]?._tag !== "Star") {
157
+ tokens.push({ _tag: "Star" })
158
+ }
159
+ } else if (char === "?") {
160
+ magic = true
161
+ tokens.push({ _tag: "Any" })
162
+ } else if (char === "[" && classes) {
163
+ const parsed = parseClass(chars, i)
164
+ if (parsed === undefined) {
165
+ classes = false
166
+ literal += char
167
+ tokens.push({ _tag: "Char", value: char })
168
+ } else {
169
+ magic = true
170
+ tokens.push(parsed.token)
171
+ i = parsed.end
172
+ }
173
+ } else {
174
+ literal += char
175
+ tokens.push({ _tag: "Char", value: char })
176
+ }
177
+ }
178
+ if (!magic) {
179
+ return { _tag: "Literal", value: literal }
180
+ }
181
+ const first = tokens[0]
182
+ return { _tag: "Wildcard", tokens, leadingDot: first._tag === "Char" && first.value === "." }
183
+ }
184
+
185
+ const range = (from: string, to: string): Array<number> => [from.codePointAt(0)!, to.codePointAt(0)!]
186
+
187
+ const posixClasses: Record<string, ReadonlyArray<number>> = {
188
+ alnum: [...range("0", "9"), ...range("A", "Z"), ...range("a", "z")],
189
+ alpha: [...range("A", "Z"), ...range("a", "z")],
190
+ blank: [0x09, 0x09, 0x20, 0x20],
191
+ cntrl: [0x00, 0x1f, 0x7f, 0x7f],
192
+ digit: range("0", "9"),
193
+ graph: [0x21, 0x7e],
194
+ lower: range("a", "z"),
195
+ print: [0x20, 0x7e],
196
+ punct: [0x21, 0x2f, 0x3a, 0x40, 0x5b, 0x60, 0x7b, 0x7e],
197
+ space: [0x09, 0x0d, 0x20, 0x20],
198
+ upper: range("A", "Z"),
199
+ word: [...range("0", "9"), ...range("A", "Z"), 0x5f, 0x5f, ...range("a", "z")],
200
+ xdigit: [...range("0", "9"), ...range("A", "F"), ...range("a", "f")]
201
+ }
202
+
203
+ // POSIX class names are at most six characters.
204
+ const parsePosixClass = (
205
+ chars: ReadonlyArray<string>,
206
+ open: number
207
+ ): { readonly ranges: ReadonlyArray<number>; readonly end: number } | undefined => {
208
+ for (let i = open + 2; i < chars.length && i <= open + 8; i++) {
209
+ if (chars[i] === ":" && chars[i + 1] === "]") {
210
+ const ranges = posixClasses[chars.slice(open + 2, i).join("")]
211
+ return ranges === undefined ? undefined : { ranges, end: i + 1 }
212
+ }
213
+ }
214
+ return undefined
215
+ }
216
+
217
+ // Share class boundaries between brace expansion and segment compilation.
218
+ const parseClass = (
219
+ chars: ReadonlyArray<string>,
220
+ open: number
221
+ ): { readonly token: Token; readonly end: number } | undefined => {
222
+ let i = open + 1
223
+ const negated = chars[i] === "!" || chars[i] === "^"
224
+ if (negated) {
225
+ i++
226
+ }
227
+ const ranges: Array<number> = []
228
+ for (let first = true; i < chars.length; i++, first = false) {
229
+ let char = chars[i]
230
+ if (char === "/") {
231
+ return undefined
232
+ }
233
+ if (char === "]" && !first) {
234
+ return { token: { _tag: "Class", ranges, negated }, end: i }
235
+ }
236
+ if (char === "[" && chars[i + 1] === ":") {
237
+ const posix = parsePosixClass(chars, i)
238
+ if (posix !== undefined) {
239
+ ranges.push(...posix.ranges)
240
+ i = posix.end
241
+ continue
242
+ }
243
+ }
244
+ if (char === "\\" && i + 1 < chars.length) {
245
+ char = chars[++i]
246
+ }
247
+ if (chars[i + 1] === "-" && i + 2 < chars.length && chars[i + 2] !== "]") {
248
+ let next = i + 2
249
+ if (chars[next] === "/") {
250
+ return undefined
251
+ }
252
+ if (chars[next] === "\\" && next + 1 < chars.length) {
253
+ next++
254
+ }
255
+ ranges.push(...range(char, chars[next]))
256
+ i = next
257
+ continue
258
+ }
259
+ ranges.push(...range(char, char))
260
+ }
261
+ return undefined
262
+ }
263
+
264
+ type BraceSequence = ReadonlyArray<string | ReadonlyArray<BraceSequence>>
265
+
266
+ interface BraceGroup {
267
+ readonly commas: ReadonlyArray<number>
268
+ readonly close: number
269
+ }
270
+
271
+ const expandBraces = (pattern: string): Array<string> => {
272
+ const chars = Array.from(pattern)
273
+ const groups = matchBraceGroups(chars)
274
+ if (groups.size === 0) {
275
+ return [pattern]
276
+ }
277
+ const sequence = parseBraceSequence(chars, 0, chars.length, groups, 0)
278
+ if (sequence === undefined) {
279
+ return [pattern]
280
+ }
281
+ const count = countExpansions(sequence)
282
+ return count > maxExpansions || count * pattern.length > maxExpandedLength ? [pattern] : expandSequence(sequence)
283
+ }
284
+
285
+ // Index expandable brace groups by opening position, ignoring bracket classes.
286
+ const matchBraceGroups = (chars: ReadonlyArray<string>): Map<number, BraceGroup> => {
287
+ const groups = new Map<number, BraceGroup>()
288
+ const stack: Array<{ readonly open: number; readonly commas: Array<number> }> = []
289
+ let classes = true
290
+ for (let i = 0; i < chars.length; i++) {
291
+ const char = chars[i]
292
+ if (char === "\\") {
293
+ i++
294
+ } else if (char === "/") {
295
+ classes = true
296
+ } else if (char === "[" && classes) {
297
+ const parsed = parseClass(chars, i)
298
+ if (parsed === undefined) {
299
+ classes = false
300
+ } else {
301
+ i = parsed.end
302
+ }
303
+ } else if (char === "{") {
304
+ stack.push({ open: i, commas: [] })
305
+ } else if (char === ",") {
306
+ stack[stack.length - 1]?.commas.push(i)
307
+ } else if (char === "}") {
308
+ const group = stack.pop()
309
+ if (group !== undefined && group.commas.length > 0) {
310
+ groups.set(group.open, { commas: group.commas, close: i })
311
+ }
312
+ }
313
+ }
314
+ return groups
315
+ }
316
+
317
+ const parseBraceSequence = (
318
+ chars: ReadonlyArray<string>,
319
+ start: number,
320
+ end: number,
321
+ groups: Map<number, BraceGroup>,
322
+ depth: number
323
+ ): BraceSequence | undefined => {
324
+ if (depth > maxBraceDepth) {
325
+ return undefined
326
+ }
327
+ const parts: Array<string | ReadonlyArray<BraceSequence>> = []
328
+ let text = ""
329
+ for (let i = start; i < end; i++) {
330
+ const group = groups.get(i)
331
+ if (group === undefined) {
332
+ if (chars[i] === "\\" && i + 1 < end) {
333
+ text += chars[i++]
334
+ }
335
+ text += chars[i]
336
+ continue
337
+ }
338
+ const alternatives: Array<BraceSequence> = []
339
+ let from = i + 1
340
+ for (const to of [...group.commas, group.close]) {
341
+ const alternative = parseBraceSequence(chars, from, to, groups, depth + 1)
342
+ if (alternative === undefined) {
343
+ return undefined
344
+ }
345
+ alternatives.push(alternative)
346
+ from = to + 1
347
+ }
348
+ if (text !== "") {
349
+ parts.push(text)
350
+ text = ""
351
+ }
352
+ parts.push(alternatives)
353
+ i = group.close
354
+ }
355
+ if (text !== "") {
356
+ parts.push(text)
357
+ }
358
+ return parts
359
+ }
360
+
361
+ const countExpansions = (sequence: BraceSequence): number => {
362
+ let count = 1
363
+ for (const part of sequence) {
364
+ if (typeof part !== "string") {
365
+ let sum = 0
366
+ for (const alternative of part) {
367
+ sum += countExpansions(alternative)
368
+ }
369
+ count *= sum
370
+ if (count > maxExpansions) {
371
+ return Infinity
372
+ }
373
+ }
374
+ }
375
+ return count
376
+ }
377
+
378
+ const expandSequence = (sequence: BraceSequence): Array<string> => {
379
+ let out = [""]
380
+ for (const part of sequence) {
381
+ if (typeof part === "string") {
382
+ out = out.map((prefix) => prefix + part)
383
+ } else {
384
+ const alternatives = part.flatMap(expandSequence)
385
+ out = out.flatMap((prefix) => alternatives.map((alternative) => prefix + alternative))
386
+ }
387
+ }
388
+ return out
389
+ }
390
+
391
+ // -----------------------------------------------------------------------------
392
+ // matching
393
+ // -----------------------------------------------------------------------------
394
+
395
+ const matchToken = (token: Token, char: string): boolean => {
396
+ switch (token._tag) {
397
+ case "Char":
398
+ return token.value === char
399
+ case "Any":
400
+ return true
401
+ case "Star":
402
+ return false
403
+ case "Class": {
404
+ const code = char.codePointAt(0)!
405
+ let found = false
406
+ for (let i = 0; i < token.ranges.length && !found; i += 2) {
407
+ found = code >= token.ranges[i] && code <= token.ranges[i + 1]
408
+ }
409
+ return found !== token.negated
410
+ }
411
+ }
412
+ }
413
+
414
+ // Backtrack only to the last `*`, bounding retries by tokens × characters.
415
+ const matchWildcard = (
416
+ node: Extract<Node, { _tag: "Wildcard" }>,
417
+ name: string,
418
+ chars: ReadonlyArray<string>,
419
+ dot: boolean
420
+ ): boolean => {
421
+ if (name === "." || name === ".." || (name.startsWith(".") && !dot && !node.leadingDot)) {
422
+ return false
423
+ }
424
+ const { tokens } = node
425
+ let t = 0
426
+ let c = 0
427
+ let star = -1
428
+ let resume = 0
429
+ while (c < chars.length) {
430
+ if (tokens[t]?._tag === "Star") {
431
+ star = t++
432
+ resume = c
433
+ } else if (t < tokens.length && matchToken(tokens[t], chars[c])) {
434
+ t++
435
+ c++
436
+ } else if (star !== -1) {
437
+ t = star + 1
438
+ c = ++resume
439
+ } else {
440
+ return false
441
+ }
442
+ }
443
+ while (tokens[t]?._tag === "Star") {
444
+ t++
445
+ }
446
+ return t === tokens.length
447
+ }
448
+
449
+ // `**` also matches zero segments, so its successor is reachable too
450
+ const closure = (nodes: ReadonlyArray<Node>, states: Set<number>): Set<number> => {
451
+ for (const state of states) {
452
+ if (nodes[state]._tag === "Globstar") {
453
+ states.add(state + 1)
454
+ }
455
+ }
456
+ return states
457
+ }
458
+
459
+ interface Step {
460
+ /** States reached by matching a literal or wildcard segment. */
461
+ readonly explicit: States
462
+ /** States reached by a `**` consuming the name. */
463
+ readonly globstar: States
464
+ }
465
+
466
+ const step = (compiled: Compiled, states: States, name: string): Step => {
467
+ const explicit = new Set<number>()
468
+ const viaGlobstar = new Set<number>()
469
+ // only a literal segment can name the root of an absolute path
470
+ const root = isRoot(name)
471
+ let chars: ReadonlyArray<string> | undefined
472
+ for (const state of states) {
473
+ const node = compiled.nodes[state]
474
+ switch (node._tag) {
475
+ case "Globstar": {
476
+ if (!root && name !== "." && name !== ".." && (compiled.dot || !name.startsWith("."))) {
477
+ viaGlobstar.add(state)
478
+ }
479
+ break
480
+ }
481
+ case "Literal": {
482
+ if (node.value === name) {
483
+ explicit.add(state + 1)
484
+ }
485
+ break
486
+ }
487
+ case "Wildcard": {
488
+ if (!root && matchWildcard(node, name, chars ??= Array.from(name), compiled.dot)) {
489
+ explicit.add(state + 1)
490
+ }
491
+ break
492
+ }
493
+ }
494
+ }
495
+ return { explicit: closure(compiled.nodes, explicit), globstar: closure(compiled.nodes, viaGlobstar) }
496
+ }
497
+
498
+ const union = (step: Step): States => {
499
+ if (step.globstar.size === 0) {
500
+ return step.explicit
501
+ }
502
+ const states = new Set(step.explicit)
503
+ for (const state of step.globstar) {
504
+ states.add(state)
505
+ }
506
+ return states
507
+ }
508
+
509
+ const accepts = (compiled: Compiled, states: States, isDirectory: boolean): boolean => {
510
+ for (const state of states) {
511
+ const node = compiled.nodes[state]
512
+ if (node._tag === "End" && (isDirectory || !node.directoryOnly)) {
513
+ return true
514
+ }
515
+ }
516
+ return false
517
+ }
518
+
519
+ const canDescend = (compiled: Compiled, states: States): boolean => {
520
+ for (const state of states) {
521
+ if (compiled.nodes[state]._tag !== "End") {
522
+ return true
523
+ }
524
+ }
525
+ return false
526
+ }
527
+
528
+ const needsDirectory = (compiled: Compiled, states: States): boolean => {
529
+ for (const state of states) {
530
+ const node = compiled.nodes[state]
531
+ if (node._tag === "End" && node.directoryOnly) {
532
+ return true
533
+ }
534
+ }
535
+ return false
536
+ }
537
+
538
+ /** @internal */
539
+ export const match = (compiled: Compiled, path: string): boolean => {
540
+ if (path === "" || isUnc(path)) {
541
+ return false
542
+ }
543
+ const { directory, segments } = normalize(path.split("/"))
544
+ let states = compiled.initial
545
+ for (const name of segments) {
546
+ states = union(step(compiled, states, name))
547
+ if (states.size === 0) {
548
+ return false
549
+ }
550
+ }
551
+ return accepts(compiled, states, directory)
552
+ }
553
+
554
+ // -----------------------------------------------------------------------------
555
+ // file system walk
556
+ // -----------------------------------------------------------------------------
557
+
558
+ const join = (parent: string, name: string): string => {
559
+ if (parent === "") {
560
+ return name === "" ? "/" : name
561
+ }
562
+ return parent.endsWith("/") ? parent + name : `${parent}/${name}`
563
+ }
564
+
565
+ const isMissing = (error: PlatformError): boolean =>
566
+ error.reason._tag === "NotFound" || error.reason._tag === "BadResource"
567
+
568
+ const isIgnorable = (error: PlatformError): boolean => isMissing(error) || error.reason._tag === "PermissionDenied"
569
+
570
+ // Node and Deno report `readLink` on a path that is not a link as "Unknown"
571
+ const isNotLink = (error: PlatformError): boolean => isIgnorable(error) || error.reason._tag === "Unknown"
572
+
573
+ const byName = Order.mapInput(Order.String, (entry: FileSystem.DirectoryEntry) => entry.name)
574
+
575
+ /** @internal */
576
+ export const make = (
577
+ fs: Pick<FileSystem.FileSystem, "readDirectoryEntries" | "stat" | "readLink">
578
+ ): FileSystem.FileSystem["glob"] =>
579
+ (pattern, options) => walk(fs, compile([pattern], options?.dot ?? false), options)
580
+
581
+ // Named directories (the root and those reached only through leading literal
582
+ // segments) must be readable; unreadable wildcard-reached ones are skipped.
583
+ const walk = Effect.fnUntraced(function*(
584
+ fs: Pick<FileSystem.FileSystem, "readDirectoryEntries" | "stat" | "readLink">,
585
+ compiled: Compiled,
586
+ options?: {
587
+ readonly root?: string | undefined
588
+ readonly exclude?: ReadonlyArray<string> | undefined
589
+ }
590
+ ): Effect.fn.Return<Array<string>, PlatformError> {
591
+ if (compiled.initial.size === 0) {
592
+ return []
593
+ }
594
+ const root = options?.root ?? ""
595
+ const excludes = compile(options?.exclude ?? [], true)
596
+ const excludeNeedsDirectory = excludes.nodes.some((node) => node._tag === "End" && node.directoryOnly)
597
+
598
+ const toFsPath = (relative: string): string =>
599
+ isAbsolute(relative) ? relative : relative === "" ? (root === "" ? "." : root) : join(root, relative)
600
+
601
+ // Listings never contain `.`, `..`, or the root of an absolute pattern
602
+ const isUnlisted = (value: string): boolean => value === "." || value === ".." || isRoot(value)
603
+
604
+ // Keep broken links so literal probes agree with directory listings.
605
+ const probe = (
606
+ parent: string,
607
+ name: string,
608
+ named: boolean
609
+ ): Effect.Effect<FileSystem.DirectoryEntry | undefined, PlatformError> => {
610
+ const path = toFsPath(join(parent, name))
611
+ return fs.stat(path).pipe(
612
+ Effect.map((info) => info.type),
613
+ Effect.catchReason("PlatformError", "NotFound", () =>
614
+ fs.readLink(path).pipe(
615
+ Effect.as("SymbolicLink" as const),
616
+ Effect.catchIf(isNotLink, () => Effect.succeed(undefined))
617
+ )),
618
+ Effect.catchIf(named ? isMissing : isIgnorable, () => Effect.succeed(undefined)),
619
+ Effect.map((type) => type === undefined ? undefined : { name, type })
620
+ )
621
+ }
622
+
623
+ // Probe leading literals without requiring permission to list their parent.
624
+ const entries = (
625
+ relative: string,
626
+ states: States,
627
+ named: boolean
628
+ ): Effect.Effect<{ readonly entries: Array<FileSystem.DirectoryEntry>; readonly named: boolean }, PlatformError> => {
629
+ const literals = new Set<string>()
630
+ let listed = !named
631
+ for (const state of states) {
632
+ const node = compiled.nodes[state]
633
+ if (node._tag === "Literal") {
634
+ literals.add(node.value)
635
+ } else if (node._tag !== "End") {
636
+ listed = true
637
+ }
638
+ }
639
+ const probed = listed ? [...literals].filter(isUnlisted) : [...literals]
640
+ return Effect.zipWith(
641
+ listed
642
+ ? Effect.catchIf(
643
+ fs.readDirectoryEntries(toFsPath(relative)),
644
+ named ? isMissing : isIgnorable,
645
+ () => Effect.succeed([])
646
+ )
647
+ : Effect.succeed([]),
648
+ Effect.forEach(probed, (name) => probe(relative, name, named), { concurrency: 16 }),
649
+ (listing, found) => ({
650
+ entries: Arr.sort([...listing, ...found.filter(Predicate.isNotUndefined)], byName),
651
+ named: named && !listed
652
+ })
653
+ )
654
+ }
655
+
656
+ interface Child {
657
+ readonly relative: string
658
+ readonly accepted: boolean
659
+ readonly excluded: States
660
+ readonly next: States | undefined
661
+ }
662
+
663
+ const visit = Effect.fnUntraced(function*(
664
+ { name, type }: FileSystem.DirectoryEntry,
665
+ parent: string,
666
+ states: States,
667
+ excluded: States
668
+ ): Effect.fn.Return<Child | undefined, PlatformError> {
669
+ const result = step(compiled, states, name)
670
+ const next = union(result)
671
+ if (next.size === 0) {
672
+ return undefined
673
+ }
674
+ const relative = join(parent, name)
675
+ const nextExcluded = union(step(excludes, excluded, name))
676
+ const descend = canDescend(compiled, next)
677
+ const isDirectory = !descend && !needsDirectory(compiled, next) && !excludeNeedsDirectory
678
+ ? false
679
+ : type !== "Unknown" && type !== "SymbolicLink"
680
+ ? type === "Directory"
681
+ : yield* fs.stat(toFsPath(relative)).pipe(
682
+ Effect.map((info) => info.type === "Directory"),
683
+ Effect.catchIf(isIgnorable, () => Effect.succeed(false))
684
+ )
685
+ const accepted = accepts(compiled, next, isDirectory)
686
+ if ((!accepted && (!isDirectory || !descend)) || accepts(excludes, nextExcluded, isDirectory)) {
687
+ return undefined
688
+ }
689
+ const child = (next: States | undefined): Child => ({ relative, accepted, excluded: nextExcluded, next })
690
+ if (!isDirectory || !descend) {
691
+ return child(undefined)
692
+ }
693
+ if (result.globstar.size === 0) {
694
+ return child(next)
695
+ }
696
+ // Follow symlinks only through explicit segments, not `**`.
697
+ const followed = canDescend(compiled, result.explicit) ? result.explicit : undefined
698
+ if (type !== "Unknown") {
699
+ return child(type === "SymbolicLink" ? followed : next)
700
+ }
701
+ return yield* fs.readLink(toFsPath(relative)).pipe(
702
+ Effect.as(child(followed)),
703
+ Effect.catchIf(isNotLink, () => Effect.succeed(child(next)))
704
+ )
705
+ })
706
+
707
+ const directory = Effect.fnUntraced(function*(
708
+ relative: string,
709
+ states: States,
710
+ excluded: States,
711
+ named: boolean,
712
+ out: Array<string>
713
+ ): Effect.fn.Return<void, PlatformError> {
714
+ const listing = yield* entries(relative, states, named)
715
+ const children = yield* Effect.forEach(
716
+ listing.entries,
717
+ (entry) => visit(entry, relative, states, excluded),
718
+ { concurrency: 16 }
719
+ )
720
+ for (const child of children) {
721
+ if (child === undefined) {
722
+ continue
723
+ }
724
+ if (child.accepted) {
725
+ out.push(child.relative)
726
+ }
727
+ if (child.next !== undefined) {
728
+ yield* directory(child.relative, child.next, child.excluded, listing.named, out)
729
+ }
730
+ }
731
+ })
732
+
733
+ const out: Array<string> = []
734
+ yield* directory("", compiled.initial, excludes.initial, true, out)
735
+ return out
736
+ })