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
@@ -0,0 +1,952 @@
1
+ import * as Arr from "../Array.ts"
2
+ import * as Deferred from "../Deferred.ts"
3
+ import * as Effect from "../Effect.ts"
4
+ import * as Fiber from "../Fiber.ts"
5
+ import type * as FileSystem from "../FileSystem.ts"
6
+ import * as Order from "../Order.ts"
7
+ import type { PlatformError } from "../PlatformError.ts"
8
+ import * as Predicate from "../Predicate.ts"
9
+
10
+ /** @internal */
11
+ export type Token =
12
+ | { readonly _tag: "Char"; readonly code: number }
13
+ | { readonly _tag: "Any" }
14
+ | { readonly _tag: "Star" }
15
+ /** `ranges` holds inclusive code point pairs: `[from0, to0, from1, to1, ...]`. */
16
+ | { readonly _tag: "Class"; readonly ranges: ReadonlyArray<number>; readonly negated: boolean }
17
+
18
+ /** @internal */
19
+ export type Node =
20
+ | { readonly _tag: "Globstar" }
21
+ | { readonly _tag: "Literal"; readonly value: string }
22
+ | {
23
+ readonly _tag: "Wildcard"
24
+ readonly tokens: ReadonlyArray<Token>
25
+ readonly leadingDot: boolean
26
+ /** Set when the segment is `prefix*suffix`, which needs no backtracking. */
27
+ readonly affixes: { readonly prefix: string; readonly suffix: string } | undefined
28
+ }
29
+ /** Ends one expanded pattern. */
30
+ | { readonly _tag: "End"; readonly directoryOnly: boolean }
31
+
32
+ type States = ReadonlySet<number>
33
+
34
+ /**
35
+ * Every expanded pattern's nodes laid out in one array, so a match state is an
36
+ * index into `nodes` and `initial` holds the start of each pattern.
37
+ *
38
+ * @internal
39
+ */
40
+ export interface Compiled {
41
+ readonly nodes: ReadonlyArray<Node>
42
+ readonly initial: States
43
+ readonly dot: boolean
44
+ /** The same automaton as bitmasks for `match`, when `nodes` fits in 32 bits. */
45
+ readonly masks: Masks | undefined
46
+ }
47
+
48
+ /**
49
+ * Node sets where bit `i` stands for `nodes[i]`.
50
+ *
51
+ * @internal
52
+ */
53
+ export interface Masks {
54
+ readonly initial: number
55
+ readonly globstar: number
56
+ readonly end: number
57
+ /** `End` nodes that also accept files. */
58
+ readonly endFile: number
59
+ }
60
+
61
+ // -----------------------------------------------------------------------------
62
+ // compilation
63
+ // -----------------------------------------------------------------------------
64
+
65
+ const maxExpansions = 10_000
66
+
67
+ const maxExpandedLength = 2 ** 22
68
+ const maxBraceDepth = 64
69
+
70
+ /** @internal */
71
+ export const compile = (patterns: ReadonlyArray<string>, dot: boolean): Compiled => {
72
+ const nodes: Array<Node> = []
73
+ const starts = new Set<number>()
74
+ for (const pattern of patterns) {
75
+ for (const expanded of expandBraces(pattern)) {
76
+ const start = nodes.length
77
+ if (compilePattern(expanded, nodes)) {
78
+ starts.add(start)
79
+ }
80
+ }
81
+ }
82
+ const initial = closure(nodes, starts)
83
+ return { nodes, initial, dot, masks: nodes.length <= 32 ? compileMasks(nodes, initial) : undefined }
84
+ }
85
+
86
+ const compileMasks = (nodes: ReadonlyArray<Node>, initial: States): Masks => {
87
+ let start = 0
88
+ for (const state of initial) {
89
+ start |= 1 << state
90
+ }
91
+ let globstar = 0
92
+ let end = 0
93
+ let endFile = 0
94
+ for (let i = 0; i < nodes.length; i++) {
95
+ const node = nodes[i]
96
+ const bit = 1 << i
97
+ if (node._tag === "Globstar") {
98
+ globstar |= bit
99
+ } else if (node._tag === "End") {
100
+ end |= bit
101
+ if (!node.directoryOnly) {
102
+ endFile |= bit
103
+ }
104
+ }
105
+ }
106
+ return { initial: start, globstar, end, endFile }
107
+ }
108
+
109
+ // Reject UNC paths rather than collapsing them into local absolute paths.
110
+ const isUnc = (path: string): boolean => path.startsWith("//") && path[2] !== undefined && path[2] !== "/"
111
+
112
+ // Appends the pattern's nodes, or appends nothing when it can match no path
113
+ const compilePattern = (pattern: string, nodes: Array<Node>): boolean => {
114
+ if (pattern === "" || isUnc(pattern)) {
115
+ return false
116
+ }
117
+ const raw = splitSegments(pattern)
118
+ const globstar = raw.indexOf("**")
119
+ if (globstar !== -1 && raw.some((segment, i) => i > globstar && (segment === "." || segment === ".."))) {
120
+ return false
121
+ }
122
+ const { directory, segments } = normalize(raw)
123
+ if (segments.length === 0) {
124
+ return false
125
+ }
126
+ for (const segment of segments) {
127
+ if (segment !== "**") {
128
+ nodes.push(compileSegment(Array.from(segment)))
129
+ } else if (nodes[nodes.length - 1] !== globstarNode) {
130
+ nodes.push(globstarNode)
131
+ }
132
+ }
133
+ nodes.push({ _tag: "End", directoryOnly: directory })
134
+ return true
135
+ }
136
+
137
+ const globstarNode: Node = { _tag: "Globstar" }
138
+
139
+ const splitSegments = (pattern: string): Array<string> => {
140
+ const segments: Array<string> = []
141
+ let start = 0
142
+ for (let i = 0; i < pattern.length; i++) {
143
+ if (pattern[i] === "\\") {
144
+ i++
145
+ } else if (pattern[i] === "/") {
146
+ segments.push(pattern.slice(start, i))
147
+ start = i + 1
148
+ }
149
+ }
150
+ segments.push(pattern.slice(start))
151
+ return segments
152
+ }
153
+
154
+ const drive = /^[A-Za-z]:/
155
+
156
+ const isDrive = (segment: string): boolean => segment.length === 2 && drive.test(segment)
157
+
158
+ // the root of an absolute path: `""` or a drive such as `C:/`
159
+ const isRoot = (name: string): boolean => name === "" || (name.length === 3 && name[2] === "/" && drive.test(name))
160
+
161
+ const isAbsolute = (path: string): boolean => path.startsWith("/") || (path[2] === "/" && drive.test(path))
162
+
163
+ // Preserve absolute roots and a lone `.`; trailing `/` or `/.` marks a directory.
164
+ const normalize = (raw: ReadonlyArray<string>): {
165
+ readonly segments: Array<string>
166
+ readonly directory: boolean
167
+ } => {
168
+ const segments: Array<string> = []
169
+ let i = 0
170
+ if (raw.length > 1 && (raw[0] === "" || isDrive(raw[0]))) {
171
+ segments.push(raw[0] === "" ? "" : `${raw[0]}/`)
172
+ i = 1
173
+ }
174
+ let directory = false
175
+ for (; i < raw.length; i++) {
176
+ const segment = raw[i]
177
+ if (segment === "" || segment === ".") {
178
+ directory = i === raw.length - 1 && segments.length > 0
179
+ } else {
180
+ segments.push(segment)
181
+ directory = false
182
+ }
183
+ }
184
+ if (segments.length === 0 && raw.includes(".")) {
185
+ segments.push(".")
186
+ }
187
+ return { segments, directory }
188
+ }
189
+
190
+ const compileSegment = (chars: ReadonlyArray<string>): Node => {
191
+ const tokens: Array<Token> = []
192
+ let literal = ""
193
+ let magic = false
194
+ // once a class fails to close, every later `[` in the segment is literal
195
+ let classes = true
196
+ for (let i = 0; i < chars.length; i++) {
197
+ const char = chars[i]
198
+ if (char === "\\" && i + 1 < chars.length) {
199
+ literal += chars[++i]
200
+ tokens.push({ _tag: "Char", code: chars[i].codePointAt(0)! })
201
+ } else if (char === "*") {
202
+ magic = true
203
+ if (tokens[tokens.length - 1]?._tag !== "Star") {
204
+ tokens.push({ _tag: "Star" })
205
+ }
206
+ } else if (char === "?") {
207
+ magic = true
208
+ tokens.push({ _tag: "Any" })
209
+ } else if (char === "[" && classes) {
210
+ const parsed = parseClass(chars, i)
211
+ if (parsed === undefined) {
212
+ classes = false
213
+ literal += char
214
+ tokens.push({ _tag: "Char", code: char.codePointAt(0)! })
215
+ } else {
216
+ magic = true
217
+ tokens.push(parsed.token)
218
+ i = parsed.end
219
+ }
220
+ } else {
221
+ literal += char
222
+ tokens.push({ _tag: "Char", code: char.codePointAt(0)! })
223
+ }
224
+ }
225
+ if (!magic) {
226
+ return { _tag: "Literal", value: literal }
227
+ }
228
+ const first = tokens[0]
229
+ return {
230
+ _tag: "Wildcard",
231
+ tokens,
232
+ leadingDot: first._tag === "Char" && first.code === 0x2e,
233
+ affixes: compileAffixes(tokens)
234
+ }
235
+ }
236
+
237
+ // Lone surrogates stay on the token path: `startsWith` would match them
238
+ // against half of a surrogate pair.
239
+ const compileAffixes = (
240
+ tokens: ReadonlyArray<Token>
241
+ ): { readonly prefix: string; readonly suffix: string } | undefined => {
242
+ let prefix = ""
243
+ let suffix: string | undefined
244
+ for (const token of tokens) {
245
+ if (token._tag === "Star" && suffix === undefined) {
246
+ suffix = ""
247
+ } else if (token._tag === "Char" && (token.code < 0xd800 || token.code > 0xdfff)) {
248
+ const char = String.fromCodePoint(token.code)
249
+ if (suffix === undefined) {
250
+ prefix += char
251
+ } else {
252
+ suffix += char
253
+ }
254
+ } else {
255
+ return undefined
256
+ }
257
+ }
258
+ return suffix === undefined ? undefined : { prefix, suffix }
259
+ }
260
+
261
+ const range = (from: string, to: string): Array<number> => [from.codePointAt(0)!, to.codePointAt(0)!]
262
+
263
+ const posixClasses: Record<string, ReadonlyArray<number>> = {
264
+ alnum: [...range("0", "9"), ...range("A", "Z"), ...range("a", "z")],
265
+ alpha: [...range("A", "Z"), ...range("a", "z")],
266
+ blank: [0x09, 0x09, 0x20, 0x20],
267
+ cntrl: [0x00, 0x1f, 0x7f, 0x7f],
268
+ digit: range("0", "9"),
269
+ graph: [0x21, 0x7e],
270
+ lower: range("a", "z"),
271
+ print: [0x20, 0x7e],
272
+ punct: [0x21, 0x2f, 0x3a, 0x40, 0x5b, 0x60, 0x7b, 0x7e],
273
+ space: [0x09, 0x0d, 0x20, 0x20],
274
+ upper: range("A", "Z"),
275
+ word: [...range("0", "9"), ...range("A", "Z"), 0x5f, 0x5f, ...range("a", "z")],
276
+ xdigit: [...range("0", "9"), ...range("A", "F"), ...range("a", "f")]
277
+ }
278
+
279
+ // POSIX class names are at most six characters.
280
+ const parsePosixClass = (
281
+ chars: ReadonlyArray<string>,
282
+ open: number
283
+ ): { readonly ranges: ReadonlyArray<number>; readonly end: number } | undefined => {
284
+ for (let i = open + 2; i < chars.length && i <= open + 8; i++) {
285
+ if (chars[i] === ":" && chars[i + 1] === "]") {
286
+ const ranges = posixClasses[chars.slice(open + 2, i).join("")]
287
+ return ranges === undefined ? undefined : { ranges, end: i + 1 }
288
+ }
289
+ }
290
+ return undefined
291
+ }
292
+
293
+ // Share class boundaries between brace expansion and segment compilation.
294
+ const parseClass = (
295
+ chars: ReadonlyArray<string>,
296
+ open: number
297
+ ): { readonly token: Token; readonly end: number } | undefined => {
298
+ let i = open + 1
299
+ const negated = chars[i] === "!" || chars[i] === "^"
300
+ if (negated) {
301
+ i++
302
+ }
303
+ const ranges: Array<number> = []
304
+ for (let first = true; i < chars.length; i++, first = false) {
305
+ let char = chars[i]
306
+ if (char === "/") {
307
+ return undefined
308
+ }
309
+ if (char === "]" && !first) {
310
+ return { token: { _tag: "Class", ranges, negated }, end: i }
311
+ }
312
+ if (char === "[" && chars[i + 1] === ":") {
313
+ const posix = parsePosixClass(chars, i)
314
+ if (posix !== undefined) {
315
+ ranges.push(...posix.ranges)
316
+ i = posix.end
317
+ continue
318
+ }
319
+ }
320
+ if (char === "\\" && i + 1 < chars.length) {
321
+ char = chars[++i]
322
+ }
323
+ if (chars[i + 1] === "-" && i + 2 < chars.length && chars[i + 2] !== "]") {
324
+ let next = i + 2
325
+ if (chars[next] === "/") {
326
+ return undefined
327
+ }
328
+ if (chars[next] === "\\" && next + 1 < chars.length) {
329
+ next++
330
+ }
331
+ ranges.push(...range(char, chars[next]))
332
+ i = next
333
+ continue
334
+ }
335
+ ranges.push(...range(char, char))
336
+ }
337
+ return undefined
338
+ }
339
+
340
+ type BraceSequence = ReadonlyArray<string | ReadonlyArray<BraceSequence>>
341
+
342
+ interface BraceGroup {
343
+ readonly commas: ReadonlyArray<number>
344
+ readonly close: number
345
+ }
346
+
347
+ const expandBraces = (pattern: string): Array<string> => {
348
+ const chars = Array.from(pattern)
349
+ const groups = matchBraceGroups(chars)
350
+ if (groups.size === 0) {
351
+ return [pattern]
352
+ }
353
+ const sequence = parseBraceSequence(chars, 0, chars.length, groups, 0)
354
+ if (sequence === undefined) {
355
+ return [pattern]
356
+ }
357
+ const count = countExpansions(sequence)
358
+ return count > maxExpansions || count * pattern.length > maxExpandedLength ? [pattern] : expandSequence(sequence)
359
+ }
360
+
361
+ // Index expandable brace groups by opening position, ignoring bracket classes.
362
+ const matchBraceGroups = (chars: ReadonlyArray<string>): Map<number, BraceGroup> => {
363
+ const groups = new Map<number, BraceGroup>()
364
+ const stack: Array<{ readonly open: number; readonly commas: Array<number> }> = []
365
+ let classes = true
366
+ for (let i = 0; i < chars.length; i++) {
367
+ const char = chars[i]
368
+ if (char === "\\") {
369
+ i++
370
+ } else if (char === "/") {
371
+ classes = true
372
+ } else if (char === "[" && classes) {
373
+ const parsed = parseClass(chars, i)
374
+ if (parsed === undefined) {
375
+ classes = false
376
+ } else {
377
+ i = parsed.end
378
+ }
379
+ } else if (char === "{") {
380
+ stack.push({ open: i, commas: [] })
381
+ } else if (char === ",") {
382
+ stack[stack.length - 1]?.commas.push(i)
383
+ } else if (char === "}") {
384
+ const group = stack.pop()
385
+ if (group !== undefined && group.commas.length > 0) {
386
+ groups.set(group.open, { commas: group.commas, close: i })
387
+ }
388
+ }
389
+ }
390
+ return groups
391
+ }
392
+
393
+ const parseBraceSequence = (
394
+ chars: ReadonlyArray<string>,
395
+ start: number,
396
+ end: number,
397
+ groups: Map<number, BraceGroup>,
398
+ depth: number
399
+ ): BraceSequence | undefined => {
400
+ if (depth > maxBraceDepth) {
401
+ return undefined
402
+ }
403
+ const parts: Array<string | ReadonlyArray<BraceSequence>> = []
404
+ let text = ""
405
+ for (let i = start; i < end; i++) {
406
+ const group = groups.get(i)
407
+ if (group === undefined) {
408
+ if (chars[i] === "\\" && i + 1 < end) {
409
+ text += chars[i++]
410
+ }
411
+ text += chars[i]
412
+ continue
413
+ }
414
+ const alternatives: Array<BraceSequence> = []
415
+ let from = i + 1
416
+ for (const to of [...group.commas, group.close]) {
417
+ const alternative = parseBraceSequence(chars, from, to, groups, depth + 1)
418
+ if (alternative === undefined) {
419
+ return undefined
420
+ }
421
+ alternatives.push(alternative)
422
+ from = to + 1
423
+ }
424
+ if (text !== "") {
425
+ parts.push(text)
426
+ text = ""
427
+ }
428
+ parts.push(alternatives)
429
+ i = group.close
430
+ }
431
+ if (text !== "") {
432
+ parts.push(text)
433
+ }
434
+ return parts
435
+ }
436
+
437
+ const countExpansions = (sequence: BraceSequence): number => {
438
+ let count = 1
439
+ for (const part of sequence) {
440
+ if (typeof part !== "string") {
441
+ let sum = 0
442
+ for (const alternative of part) {
443
+ sum += countExpansions(alternative)
444
+ }
445
+ count *= sum
446
+ if (count > maxExpansions) {
447
+ return Infinity
448
+ }
449
+ }
450
+ }
451
+ return count
452
+ }
453
+
454
+ const expandSequence = (sequence: BraceSequence): Array<string> => {
455
+ let out = [""]
456
+ for (const part of sequence) {
457
+ if (typeof part === "string") {
458
+ out = out.map((prefix) => prefix + part)
459
+ } else {
460
+ const alternatives = part.flatMap(expandSequence)
461
+ out = out.flatMap((prefix) => alternatives.map((alternative) => prefix + alternative))
462
+ }
463
+ }
464
+ return out
465
+ }
466
+
467
+ // -----------------------------------------------------------------------------
468
+ // matching
469
+ // -----------------------------------------------------------------------------
470
+
471
+ const matchToken = (token: Token, code: number): boolean => {
472
+ switch (token._tag) {
473
+ case "Char":
474
+ return token.code === code
475
+ case "Any":
476
+ return true
477
+ case "Star":
478
+ return false
479
+ case "Class": {
480
+ let found = false
481
+ for (let i = 0; i < token.ranges.length && !found; i += 2) {
482
+ found = code >= token.ranges[i] && code <= token.ranges[i + 1]
483
+ }
484
+ return found !== token.negated
485
+ }
486
+ }
487
+ }
488
+
489
+ // UTF-16 length of the code point
490
+ const width = (code: number): number => code > 0xffff ? 2 : 1
491
+
492
+ // Backtrack only to the last `*`, bounding retries by tokens × characters.
493
+ const matchWildcard = (
494
+ node: Extract<Node, { _tag: "Wildcard" }>,
495
+ name: string,
496
+ dot: boolean
497
+ ): boolean => {
498
+ if (name === "." || name === ".." || (name.startsWith(".") && !dot && !node.leadingDot)) {
499
+ return false
500
+ }
501
+ if (node.affixes !== undefined) {
502
+ const { prefix, suffix } = node.affixes
503
+ return name.length >= prefix.length + suffix.length && name.startsWith(prefix) && name.endsWith(suffix)
504
+ }
505
+ const { tokens } = node
506
+ let t = 0
507
+ let c = 0
508
+ let star = -1
509
+ let resume = 0
510
+ while (c < name.length) {
511
+ if (tokens[t]?._tag === "Star") {
512
+ star = t++
513
+ resume = c
514
+ continue
515
+ }
516
+ const code = name.codePointAt(c)!
517
+ if (t < tokens.length && matchToken(tokens[t], code)) {
518
+ t++
519
+ c += width(code)
520
+ } else if (star !== -1) {
521
+ t = star + 1
522
+ resume += width(name.codePointAt(resume)!)
523
+ c = resume
524
+ } else {
525
+ return false
526
+ }
527
+ }
528
+ while (tokens[t]?._tag === "Star") {
529
+ t++
530
+ }
531
+ return t === tokens.length
532
+ }
533
+
534
+ // `**` also matches zero segments, so its successor is reachable too
535
+ const closure = (nodes: ReadonlyArray<Node>, states: Set<number>): Set<number> => {
536
+ for (const state of states) {
537
+ if (nodes[state]._tag === "Globstar") {
538
+ states.add(state + 1)
539
+ }
540
+ }
541
+ return states
542
+ }
543
+
544
+ interface Step {
545
+ /** States reached by matching a literal or wildcard segment. */
546
+ readonly explicit: States
547
+ /** States reached by a `**` consuming the name. */
548
+ readonly globstar: States
549
+ }
550
+
551
+ const step = (compiled: Compiled, states: States, name: string): Step => {
552
+ const explicit = new Set<number>()
553
+ const viaGlobstar = new Set<number>()
554
+ // only a literal segment can name the root of an absolute path
555
+ const root = isRoot(name)
556
+ for (const state of states) {
557
+ const node = compiled.nodes[state]
558
+ switch (node._tag) {
559
+ case "Globstar": {
560
+ if (!root && name !== "." && name !== ".." && (compiled.dot || !name.startsWith("."))) {
561
+ viaGlobstar.add(state)
562
+ }
563
+ break
564
+ }
565
+ case "Literal": {
566
+ if (node.value === name) {
567
+ explicit.add(state + 1)
568
+ }
569
+ break
570
+ }
571
+ case "Wildcard": {
572
+ if (!root && matchWildcard(node, name, compiled.dot)) {
573
+ explicit.add(state + 1)
574
+ }
575
+ break
576
+ }
577
+ }
578
+ }
579
+ return { explicit: closure(compiled.nodes, explicit), globstar: closure(compiled.nodes, viaGlobstar) }
580
+ }
581
+
582
+ const union = (step: Step): States => {
583
+ if (step.globstar.size === 0) {
584
+ return step.explicit
585
+ }
586
+ const states = new Set(step.explicit)
587
+ for (const state of step.globstar) {
588
+ states.add(state)
589
+ }
590
+ return states
591
+ }
592
+
593
+ const accepts = (compiled: Compiled, states: States, isDirectory: boolean): boolean => {
594
+ for (const state of states) {
595
+ const node = compiled.nodes[state]
596
+ if (node._tag === "End" && (isDirectory || !node.directoryOnly)) {
597
+ return true
598
+ }
599
+ }
600
+ return false
601
+ }
602
+
603
+ const canDescend = (compiled: Compiled, states: States): boolean => {
604
+ for (const state of states) {
605
+ if (compiled.nodes[state]._tag !== "End") {
606
+ return true
607
+ }
608
+ }
609
+ return false
610
+ }
611
+
612
+ const needsDirectory = (compiled: Compiled, states: States): boolean => {
613
+ for (const state of states) {
614
+ const node = compiled.nodes[state]
615
+ if (node._tag === "End" && node.directoryOnly) {
616
+ return true
617
+ }
618
+ }
619
+ return false
620
+ }
621
+
622
+ // `step` and `union` over bitmasks; a `**` node's successor is the next bit
623
+ const stepMasks = (compiled: Compiled, masks: Masks, states: number, name: string, root: boolean): number => {
624
+ let next = !root && name !== "." && name !== ".." && (compiled.dot || !name.startsWith("."))
625
+ ? states & masks.globstar
626
+ : 0
627
+ // the remaining states are `Literal` and `Wildcard` nodes
628
+ let segments = states & ~(masks.globstar | masks.end)
629
+ while (segments !== 0) {
630
+ const bit = segments & -segments
631
+ segments ^= bit
632
+ const node = compiled.nodes[31 - Math.clz32(bit)]
633
+ if (
634
+ node._tag === "Literal"
635
+ ? node.value === name
636
+ : node._tag === "Wildcard" && !root && matchWildcard(node, name, compiled.dot)
637
+ ) {
638
+ next |= bit << 1
639
+ }
640
+ }
641
+ return next | ((next & masks.globstar) << 1)
642
+ }
643
+
644
+ /** @internal */
645
+ export const match = (compiled: Compiled, path: string): boolean => {
646
+ if (path === "" || isUnc(path)) {
647
+ return false
648
+ }
649
+ const { masks } = compiled
650
+ if (masks === undefined) {
651
+ const { directory, segments } = normalize(path.split("/"))
652
+ let states = compiled.initial
653
+ for (const name of segments) {
654
+ states = union(step(compiled, states, name))
655
+ if (states.size === 0) {
656
+ return false
657
+ }
658
+ }
659
+ return accepts(compiled, states, directory)
660
+ }
661
+ // The same segments as `normalize(path.split("/"))`, without the arrays
662
+ let states = masks.initial
663
+ let stepped = false
664
+ let start = 0
665
+ let end = path.indexOf("/")
666
+ if (end === 0 || (end === 2 && drive.test(path))) {
667
+ states = stepMasks(compiled, masks, states, path.slice(0, end === 0 ? 0 : 3), true)
668
+ stepped = true
669
+ start = end + 1
670
+ end = path.indexOf("/", start)
671
+ }
672
+ let directory = false
673
+ let dotted = false
674
+ while (states !== 0) {
675
+ const name = end === -1 ? path.slice(start) : path.slice(start, end)
676
+ if (name === "" || name === ".") {
677
+ dotted ||= name === "."
678
+ directory = end === -1 && stepped
679
+ } else {
680
+ states = stepMasks(compiled, masks, states, name, false)
681
+ stepped = true
682
+ directory = false
683
+ }
684
+ if (end === -1) {
685
+ break
686
+ }
687
+ start = end + 1
688
+ end = path.indexOf("/", start)
689
+ }
690
+ if (!stepped && dotted) {
691
+ states = stepMasks(compiled, masks, states, ".", false)
692
+ }
693
+ return (states & (directory ? masks.end : masks.endFile)) !== 0
694
+ }
695
+
696
+ // -----------------------------------------------------------------------------
697
+ // file system walk
698
+ // -----------------------------------------------------------------------------
699
+
700
+ const join = (parent: string, name: string): string => {
701
+ if (parent === "") {
702
+ return name === "" ? "/" : name
703
+ }
704
+ return parent.endsWith("/") ? parent + name : `${parent}/${name}`
705
+ }
706
+
707
+ const isMissing = (error: PlatformError): boolean =>
708
+ error.reason._tag === "NotFound" || error.reason._tag === "BadResource"
709
+
710
+ const isIgnorable = (error: PlatformError): boolean => isMissing(error) || error.reason._tag === "PermissionDenied"
711
+
712
+ // Node and Deno report `readLink` on a path that is not a link as "Unknown"
713
+ const isNotLink = (error: PlatformError): boolean => isIgnorable(error) || error.reason._tag === "Unknown"
714
+
715
+ const DIRECTORY_CONCURRENCY = 16
716
+
717
+ const byName = Order.mapInput(Order.String, (entry: FileSystem.DirectoryEntry) => entry.name)
718
+
719
+ /** @internal */
720
+ export const make = (
721
+ fs: Pick<FileSystem.FileSystem, "readDirectoryEntries" | "stat" | "readLink">
722
+ ): FileSystem.FileSystem["glob"] =>
723
+ (pattern, options) => walk(fs, compile([pattern], options?.dot ?? false), options)
724
+
725
+ // Named directories (the root and those reached only through leading literal
726
+ // segments) must be readable; unreadable wildcard-reached ones are skipped.
727
+ const walk = Effect.fnUntraced(function*(
728
+ fs: Pick<FileSystem.FileSystem, "readDirectoryEntries" | "stat" | "readLink">,
729
+ compiled: Compiled,
730
+ options?: {
731
+ readonly root?: string | undefined
732
+ readonly exclude?: ReadonlyArray<string> | undefined
733
+ }
734
+ ): Effect.fn.Return<Array<string>, PlatformError> {
735
+ if (compiled.initial.size === 0) {
736
+ return []
737
+ }
738
+ const root = options?.root ?? ""
739
+ const excludes = compile(options?.exclude ?? [], true)
740
+ const excludeNeedsDirectory = excludes.nodes.some((node) => node._tag === "End" && node.directoryOnly)
741
+
742
+ const toFsPath = (relative: string): string =>
743
+ isAbsolute(relative) ? relative : relative === "" ? (root === "" ? "." : root) : join(root, relative)
744
+
745
+ // Listings never contain `.`, `..`, or the root of an absolute pattern
746
+ const isUnlisted = (value: string): boolean => value === "." || value === ".." || isRoot(value)
747
+
748
+ // Keep broken links so literal probes agree with directory listings.
749
+ const probe = (
750
+ parent: string,
751
+ name: string,
752
+ named: boolean
753
+ ): Effect.Effect<FileSystem.DirectoryEntry | undefined, PlatformError> => {
754
+ const path = toFsPath(join(parent, name))
755
+ return fs.stat(path).pipe(
756
+ Effect.map((info) => info.type),
757
+ Effect.catchReason("PlatformError", "NotFound", () =>
758
+ fs.readLink(path).pipe(
759
+ Effect.as("SymbolicLink" as const),
760
+ Effect.catchIf(isNotLink, () => Effect.succeed(undefined))
761
+ )),
762
+ Effect.catchIf(named ? isMissing : isIgnorable, () => Effect.succeed(undefined)),
763
+ Effect.map((type) => type === undefined ? undefined : { name, type })
764
+ )
765
+ }
766
+
767
+ // Probe leading literals without requiring permission to list their parent.
768
+ const entries = (
769
+ relative: string,
770
+ states: States,
771
+ named: boolean
772
+ ): Effect.Effect<{ readonly entries: Array<FileSystem.DirectoryEntry>; readonly named: boolean }, PlatformError> => {
773
+ const literals = new Set<string>()
774
+ let listed = !named
775
+ for (const state of states) {
776
+ const node = compiled.nodes[state]
777
+ if (node._tag === "Literal") {
778
+ literals.add(node.value)
779
+ } else if (node._tag !== "End") {
780
+ listed = true
781
+ }
782
+ }
783
+ const probed = listed ? [...literals].filter(isUnlisted) : [...literals]
784
+ return Effect.zipWith(
785
+ listed
786
+ ? Effect.catchIf(
787
+ fs.readDirectoryEntries(toFsPath(relative)),
788
+ named ? isMissing : isIgnorable,
789
+ () => Effect.succeed([])
790
+ )
791
+ : Effect.succeed([]),
792
+ Effect.forEach(probed, (name) => probe(relative, name, named), { concurrency: 16 }),
793
+ (listing, found) => ({
794
+ entries: Arr.sort([...listing, ...found.filter(Predicate.isNotUndefined)], byName),
795
+ named: named && !listed
796
+ })
797
+ )
798
+ }
799
+
800
+ interface Child {
801
+ readonly relative: string
802
+ readonly accepted: boolean
803
+ readonly excluded: States
804
+ readonly next: States | undefined
805
+ }
806
+
807
+ // Synchronous unless the entry type must be resolved through `stat` / `readLink`
808
+ const visit = (
809
+ { name, type }: FileSystem.DirectoryEntry,
810
+ parent: string,
811
+ states: States,
812
+ excluded: States
813
+ ): Child | undefined | Effect.Effect<Child | undefined, PlatformError> => {
814
+ const result = step(compiled, states, name)
815
+ const next = union(result)
816
+ if (next.size === 0) {
817
+ return undefined
818
+ }
819
+ const relative = join(parent, name)
820
+ const nextExcluded = union(step(excludes, excluded, name))
821
+ const descend = canDescend(compiled, next)
822
+ const child = (isDirectory: boolean, link: boolean): Child | undefined => {
823
+ const accepted = accepts(compiled, next, isDirectory)
824
+ if ((!accepted && (!isDirectory || !descend)) || accepts(excludes, nextExcluded, isDirectory)) {
825
+ return undefined
826
+ }
827
+ return {
828
+ relative,
829
+ accepted,
830
+ excluded: nextExcluded,
831
+ next: !isDirectory || !descend
832
+ ? undefined
833
+ : !link || result.globstar.size === 0
834
+ ? next
835
+ // Follow symlinks only through explicit segments, not `**`.
836
+ : canDescend(compiled, result.explicit)
837
+ ? result.explicit
838
+ : undefined
839
+ }
840
+ }
841
+ if (!descend && !needsDirectory(compiled, next) && !excludeNeedsDirectory) {
842
+ return child(false, false)
843
+ }
844
+ if (type !== "Unknown" && type !== "SymbolicLink") {
845
+ return child(type === "Directory", false)
846
+ }
847
+ const path = toFsPath(relative)
848
+ return fs.stat(path).pipe(
849
+ Effect.map((info) => info.type === "Directory"),
850
+ Effect.catchIf(isIgnorable, () => Effect.succeed(false)),
851
+ Effect.flatMap((isDirectory) => {
852
+ const resolved = child(isDirectory, type === "SymbolicLink")
853
+ if (type === "SymbolicLink" || resolved?.next === undefined || result.globstar.size === 0) {
854
+ return Effect.succeed(resolved)
855
+ }
856
+ return fs.readLink(path).pipe(
857
+ Effect.as(child(isDirectory, true)),
858
+ Effect.catchIf(isNotLink, () => Effect.succeed(resolved))
859
+ )
860
+ })
861
+ )
862
+ }
863
+
864
+ // Walk subdirectories in forked fibers while slots are free and inline
865
+ // otherwise, bounding directory reads in flight across the whole walk. A
866
+ // forked walk reports its failure through `failed` so the whole walk ends
867
+ // promptly even while its parent is walking another subdirectory inline.
868
+ // Once the root walk is finishing, forked walks only exit because it
869
+ // interrupts them.
870
+ let slots = DIRECTORY_CONCURRENCY
871
+ let finishing = false
872
+ const failed = Deferred.makeUnsafe<never, PlatformError>()
873
+ const fork = (walk: Effect.Effect<Array<string>, PlatformError>) =>
874
+ walk.pipe(
875
+ Effect.onError((cause) =>
876
+ Effect.sync(() => {
877
+ if (!finishing) {
878
+ Deferred.doneUnsafe(failed, Effect.failCause(cause))
879
+ }
880
+ })
881
+ ),
882
+ Effect.ensuring(Effect.sync(() => {
883
+ slots++
884
+ })),
885
+ Effect.forkChild
886
+ )
887
+
888
+ const directory = Effect.fnUntraced(function*(
889
+ relative: string,
890
+ states: States,
891
+ excluded: States,
892
+ named: boolean
893
+ ): Effect.fn.Return<Array<string>, PlatformError> {
894
+ const listing = yield* entries(relative, states, named)
895
+ const children: Array<Child | undefined> = []
896
+ const pending: Array<Effect.Effect<void, PlatformError>> = []
897
+ for (const entry of listing.entries) {
898
+ const child = visit(entry, relative, states, excluded)
899
+ if (Effect.isEffect(child)) {
900
+ const index = children.push(undefined) - 1
901
+ pending.push(Effect.map(child, (child) => {
902
+ children[index] = child
903
+ }))
904
+ } else {
905
+ children.push(child)
906
+ }
907
+ }
908
+ if (pending.length > 0) {
909
+ yield* Effect.all(pending, { concurrency: 16, discard: true })
910
+ }
911
+ const subtrees: Array<Effect.Effect<Array<string>, PlatformError>> = []
912
+ for (const child of children) {
913
+ if (child?.next !== undefined) {
914
+ const walk = directory(child.relative, child.next, child.excluded, listing.named)
915
+ if (slots > 0) {
916
+ slots--
917
+ subtrees.push(Fiber.join(yield* fork(walk)))
918
+ } else {
919
+ subtrees.push(Effect.succeed(yield* walk))
920
+ }
921
+ }
922
+ }
923
+ // Splice subtrees back in listing order
924
+ const out: Array<string> = []
925
+ let index = 0
926
+ for (const child of children) {
927
+ if (child === undefined) {
928
+ continue
929
+ }
930
+ if (child.accepted) {
931
+ out.push(child.relative)
932
+ }
933
+ if (child.next !== undefined) {
934
+ for (const path of yield* subtrees[index++]) {
935
+ out.push(path)
936
+ }
937
+ }
938
+ }
939
+ return out
940
+ })
941
+
942
+ // The losing walk is interrupted along with every fiber it forked
943
+ return yield* Effect.raceFirst(
944
+ Effect.ensuring(
945
+ directory("", compiled.initial, excludes.initial, true),
946
+ Effect.sync(() => {
947
+ finishing = true
948
+ })
949
+ ),
950
+ Deferred.await(failed)
951
+ )
952
+ })