@sayoriqwq/effect-harness 0.0.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 (2055) hide show
  1. package/HARNESS.md +34 -0
  2. package/README.md +113 -0
  3. package/dist/bin/effect-harness.d.ts +2 -0
  4. package/dist/bin/effect-harness.js +39 -0
  5. package/dist/bin/effect-harness.js.map +1 -0
  6. package/dist/src/cli/Main.d.ts +6 -0
  7. package/dist/src/cli/Main.js +141 -0
  8. package/dist/src/cli/Main.js.map +1 -0
  9. package/dist/src/harness/CraftSkills.d.ts +14 -0
  10. package/dist/src/harness/CraftSkills.js +164 -0
  11. package/dist/src/harness/CraftSkills.js.map +1 -0
  12. package/dist/src/harness/Errors.d.ts +24 -0
  13. package/dist/src/harness/Errors.js +26 -0
  14. package/dist/src/harness/Errors.js.map +1 -0
  15. package/dist/src/harness/GuardrailRules.d.ts +6 -0
  16. package/dist/src/harness/GuardrailRules.js +303 -0
  17. package/dist/src/harness/GuardrailRules.js.map +1 -0
  18. package/dist/src/harness/Guardrails.d.ts +10 -0
  19. package/dist/src/harness/Guardrails.js +69 -0
  20. package/dist/src/harness/Guardrails.js.map +1 -0
  21. package/dist/src/harness/Init.d.ts +9 -0
  22. package/dist/src/harness/Init.js +234 -0
  23. package/dist/src/harness/Init.js.map +1 -0
  24. package/dist/src/harness/Model.d.ts +44 -0
  25. package/dist/src/harness/Model.js +169 -0
  26. package/dist/src/harness/Model.js.map +1 -0
  27. package/dist/src/harness/ModuleSources.d.ts +5 -0
  28. package/dist/src/harness/ModuleSources.js +47 -0
  29. package/dist/src/harness/ModuleSources.js.map +1 -0
  30. package/dist/src/harness/PnpmWorkspace.d.ts +2 -0
  31. package/dist/src/harness/PnpmWorkspace.js +23 -0
  32. package/dist/src/harness/PnpmWorkspace.js.map +1 -0
  33. package/dist/src/harness/Publish.d.ts +53 -0
  34. package/dist/src/harness/Publish.js +282 -0
  35. package/dist/src/harness/Publish.js.map +1 -0
  36. package/dist/src/harness/SelfVerify.d.ts +4 -0
  37. package/dist/src/harness/SelfVerify.js +56 -0
  38. package/dist/src/harness/SelfVerify.js.map +1 -0
  39. package/dist/src/harness/SourcePin.d.ts +12 -0
  40. package/dist/src/harness/SourcePin.js +320 -0
  41. package/dist/src/harness/SourcePin.js.map +1 -0
  42. package/dist/src/harness/Status.d.ts +12 -0
  43. package/dist/src/harness/Status.js +88 -0
  44. package/dist/src/harness/Status.js.map +1 -0
  45. package/dist/src/harness/TargetVerify.d.ts +8 -0
  46. package/dist/src/harness/TargetVerify.js +432 -0
  47. package/dist/src/harness/TargetVerify.js.map +1 -0
  48. package/dist/src/harness/TestContract.d.ts +6 -0
  49. package/dist/src/harness/TestContract.js +45 -0
  50. package/dist/src/harness/TestContract.js.map +1 -0
  51. package/dist/src/platform/Json.d.ts +8 -0
  52. package/dist/src/platform/Json.js +35 -0
  53. package/dist/src/platform/Json.js.map +1 -0
  54. package/dist/src/platform/ManagedFiles.d.ts +8 -0
  55. package/dist/src/platform/ManagedFiles.js +59 -0
  56. package/dist/src/platform/ManagedFiles.js.map +1 -0
  57. package/dist/src/platform/Process.d.ts +8 -0
  58. package/dist/src/platform/Process.js +80 -0
  59. package/dist/src/platform/Process.js.map +1 -0
  60. package/guide/default-capabilities.md +38 -0
  61. package/guide/index.md +49 -0
  62. package/guide/setup.md +64 -0
  63. package/harness/default-capabilities.md +32 -0
  64. package/harness/exposure.md +46 -0
  65. package/harness/feedback/index.md +60 -0
  66. package/harness/index.md +22 -0
  67. package/harness/official-inventory.md +85 -0
  68. package/harness/runtime/codex/AGENTS.fragment.md +28 -0
  69. package/harness/runtime/codex/agents/effect-worker.md +26 -0
  70. package/harness/runtime/codex/skills/effect-code/SKILL.md +72 -0
  71. package/harness/runtime/codex/skills/effect-code/agents/openai.yaml +4 -0
  72. package/harness/runtime/codex/skills/effect-feedback/SKILL.md +66 -0
  73. package/harness/runtime/codex/skills/effect-feedback/agents/openai.yaml +4 -0
  74. package/harness/source.md +52 -0
  75. package/harness/target-agent-contract.md +205 -0
  76. package/package.json +68 -0
  77. package/repos/craft-skills.manifest.json +34 -0
  78. package/repos/effect/.agents/skills/grill-me/SKILL.md +43 -0
  79. package/repos/effect/.agents/skills/jsdocs/SKILL.md +203 -0
  80. package/repos/effect/.agents/skills/scratchpad/SKILL.md +44 -0
  81. package/repos/effect/.agents/skills/scratchpad/agents/openai.yaml +7 -0
  82. package/repos/effect/.agents/skills/scratchpad/scripts/extract-example.mjs +260 -0
  83. package/repos/effect/.changeset/add-bigdecimal-sumall-multiplyall.md +5 -0
  84. package/repos/effect/.changeset/add-chunk-schema.md +5 -0
  85. package/repos/effect/.changeset/add-command-hidden.md +19 -0
  86. package/repos/effect/.changeset/add-config-nested.md +5 -0
  87. package/repos/effect/.changeset/add-flag-hidden.md +15 -0
  88. package/repos/effect/.changeset/add-from-string-schemas.md +5 -0
  89. package/repos/effect/.changeset/add-headers-remove-many.md +5 -0
  90. package/repos/effect/.changeset/add-indexeddb-kvs-layer.md +5 -0
  91. package/repos/effect/.changeset/add-make-msgpack.md +5 -0
  92. package/repos/effect/.changeset/add-make-option.md +5 -0
  93. package/repos/effect/.changeset/add-missing-tx-modules.md +11 -0
  94. package/repos/effect/.changeset/add-newtype-module.md +5 -0
  95. package/repos/effect/.changeset/add-scalar-show-operation-id.md +5 -0
  96. package/repos/effect/.changeset/add-schedule-tap.md +5 -0
  97. package/repos/effect/.changeset/add-schema-annotate-encoded.md +5 -0
  98. package/repos/effect/.changeset/add-schema-array-ensure.md +5 -0
  99. package/repos/effect/.changeset/add-schema-bigdecimal.md +5 -0
  100. package/repos/effect/.changeset/add-schema-datetime.md +5 -0
  101. package/repos/effect/.changeset/add-schema-option-from-optional-nullor.md +5 -0
  102. package/repos/effect/.changeset/add-schema-option-from-undefined-nullish.md +5 -0
  103. package/repos/effect/.changeset/add-schema-string-encoding.md +5 -0
  104. package/repos/effect/.changeset/add-sql-pglite.md +5 -0
  105. package/repos/effect/.changeset/add-standard-jsdoc-rule.md +5 -0
  106. package/repos/effect/.changeset/add-stream-broadcastn.md +5 -0
  107. package/repos/effect/.changeset/add-unstable-encoding-export.md +5 -0
  108. package/repos/effect/.changeset/afraid-cobras-like.md +5 -0
  109. package/repos/effect/.changeset/ai-openai-config-field-leak.md +6 -0
  110. package/repos/effect/.changeset/ai-openai-file-nullable-fields.md +5 -0
  111. package/repos/effect/.changeset/anthropic-4-6-structured-output.md +5 -0
  112. package/repos/effect/.changeset/asyncresult-exhaustive.md +5 -0
  113. package/repos/effect/.changeset/atom-stream-error-type.md +5 -0
  114. package/repos/effect/.changeset/beige-paths-sort.md +5 -0
  115. package/repos/effect/.changeset/better-apples-nail.md +5 -0
  116. package/repos/effect/.changeset/better-rocks-arrive.md +5 -0
  117. package/repos/effect/.changeset/big-pans-look.md +5 -0
  118. package/repos/effect/.changeset/blue-dingos-greet.md +5 -0
  119. package/repos/effect/.changeset/blue-ligers-cheat.md +5 -0
  120. package/repos/effect/.changeset/blue-onions-smile.md +5 -0
  121. package/repos/effect/.changeset/blue-ravens-type.md +5 -0
  122. package/repos/effect/.changeset/blue-trams-kiss.md +7 -0
  123. package/repos/effect/.changeset/bold-chairs-yawn.md +5 -0
  124. package/repos/effect/.changeset/bold-planets-shout.md +30 -0
  125. package/repos/effect/.changeset/breezy-meals-see.md +5 -0
  126. package/repos/effect/.changeset/bright-bugs-bow.md +5 -0
  127. package/repos/effect/.changeset/bright-canyons-clean.md +5 -0
  128. package/repos/effect/.changeset/bright-dogs-fail.md +5 -0
  129. package/repos/effect/.changeset/bright-flags-stand.md +5 -0
  130. package/repos/effect/.changeset/bright-laws-teach.md +5 -0
  131. package/repos/effect/.changeset/bright-lemons-dance.md +5 -0
  132. package/repos/effect/.changeset/bright-planes-smash.md +5 -0
  133. package/repos/effect/.changeset/bright-rats-attend.md +5 -0
  134. package/repos/effect/.changeset/bright-toes-rush.md +5 -0
  135. package/repos/effect/.changeset/bumpy-boxes-teach.md +5 -0
  136. package/repos/effect/.changeset/busy-lions-sneeze.md +5 -0
  137. package/repos/effect/.changeset/busy-maps-attend.md +7 -0
  138. package/repos/effect/.changeset/calm-buckets-own.md +5 -0
  139. package/repos/effect/.changeset/calm-carrots-march.md +7 -0
  140. package/repos/effect/.changeset/calm-cars-rest.md +5 -0
  141. package/repos/effect/.changeset/calm-panthers-nail.md +5 -0
  142. package/repos/effect/.changeset/calm-seas-smile.md +5 -0
  143. package/repos/effect/.changeset/calm-squids-hug.md +5 -0
  144. package/repos/effect/.changeset/chatty-poets-type.md +5 -0
  145. package/repos/effect/.changeset/chilled-mice-wash.md +5 -0
  146. package/repos/effect/.changeset/chilly-pumas-rule.md +5 -0
  147. package/repos/effect/.changeset/chubby-buckets-feel.md +5 -0
  148. package/repos/effect/.changeset/chubby-parents-flow.md +5 -0
  149. package/repos/effect/.changeset/chubby-planets-fall.md +5 -0
  150. package/repos/effect/.changeset/clean-balloons-tan.md +5 -0
  151. package/repos/effect/.changeset/clean-bulldogs-care.md +5 -0
  152. package/repos/effect/.changeset/clean-dryers-sneeze.md +5 -0
  153. package/repos/effect/.changeset/clean-geese-work.md +5 -0
  154. package/repos/effect/.changeset/clean-goats-wave.md +5 -0
  155. package/repos/effect/.changeset/clean-needles-shake.md +23 -0
  156. package/repos/effect/.changeset/clean-tires-guess.md +5 -0
  157. package/repos/effect/.changeset/clear-spies-boil.md +5 -0
  158. package/repos/effect/.changeset/cli-help-choices.md +5 -0
  159. package/repos/effect/.changeset/cold-knives-lie.md +35 -0
  160. package/repos/effect/.changeset/cold-rooms-show.md +5 -0
  161. package/repos/effect/.changeset/cold-sloths-wave.md +5 -0
  162. package/repos/effect/.changeset/compact-json-schema-enum.md +25 -0
  163. package/repos/effect/.changeset/config-withdefault-eager.md +7 -0
  164. package/repos/effect/.changeset/config.json +24 -0
  165. package/repos/effect/.changeset/consolidate-encoding.md +5 -0
  166. package/repos/effect/.changeset/consolidate-sql-error.md +16 -0
  167. package/repos/effect/.changeset/crisp-seas-warn.md +5 -0
  168. package/repos/effect/.changeset/cuddly-rooms-bet.md +5 -0
  169. package/repos/effect/.changeset/curly-poems-talk.md +5 -0
  170. package/repos/effect/.changeset/curly-spies-relax.md +5 -0
  171. package/repos/effect/.changeset/curvy-apples-float.md +5 -0
  172. package/repos/effect/.changeset/custom-http-security-openapi-generator.md +5 -0
  173. package/repos/effect/.changeset/cute-heads-thank.md +5 -0
  174. package/repos/effect/.changeset/cyan-loops-grow.md +5 -0
  175. package/repos/effect/.changeset/cyan-radios-switch.md +5 -0
  176. package/repos/effect/.changeset/deep-rivers-spend.md +5 -0
  177. package/repos/effect/.changeset/dirty-lamps-trade.md +5 -0
  178. package/repos/effect/.changeset/dirty-laws-wear.md +5 -0
  179. package/repos/effect/.changeset/duration-temporal-object-input.md +7 -0
  180. package/repos/effect/.changeset/eager-coats-cheat.md +5 -0
  181. package/repos/effect/.changeset/early-birds-dream.md +5 -0
  182. package/repos/effect/.changeset/early-donuts-argue.md +5 -0
  183. package/repos/effect/.changeset/early-peaches-check.md +6 -0
  184. package/repos/effect/.changeset/eff-691-default-logger-ordering.md +5 -0
  185. package/repos/effect/.changeset/eff-693-rpcgroup-handler-deps.md +5 -0
  186. package/repos/effect/.changeset/eff-694-cli-completions-module.md +5 -0
  187. package/repos/effect/.changeset/eff-695-layer-mock-dual-api.md +5 -0
  188. package/repos/effect/.changeset/eff-697-rpcserialization-json-array-decode.md +5 -0
  189. package/repos/effect/.changeset/eff-698-rpcserialization-unreachable-branch.md +5 -0
  190. package/repos/effect/.changeset/eff-700-httpapi-middleware-errors.md +12 -0
  191. package/repos/effect/.changeset/eff-701-httpapierror-respondable.md +5 -0
  192. package/repos/effect/.changeset/eff-704-stream-merge-predicate.md +5 -0
  193. package/repos/effect/.changeset/eff-705-layer-tap-apis.md +5 -0
  194. package/repos/effect/.changeset/eff-706-servicemap-mutate.md +6 -0
  195. package/repos/effect/.changeset/eff-716-response-id-tracker-map.md +5 -0
  196. package/repos/effect/.changeset/eff-717-openai-socket-cancel.md +5 -0
  197. package/repos/effect/.changeset/eff-718-embedding-model-surface.md +13 -0
  198. package/repos/effect/.changeset/eff-725-fix-catch-jsdoc.md +5 -0
  199. package/repos/effect/.changeset/eff-726-model-dimensions.md +7 -0
  200. package/repos/effect/.changeset/eff-727-cli-help-alignment.md +5 -0
  201. package/repos/effect/.changeset/eff-730-language-model-incremental-fallback.md +5 -0
  202. package/repos/effect/.changeset/eff-736-cached-with-ttl.md +5 -0
  203. package/repos/effect/.changeset/eff-738-cron-prev.md +5 -0
  204. package/repos/effect/.changeset/eff-739-openai-function-call-done.md +5 -0
  205. package/repos/effect/.changeset/eff-740-missing-summary-parts.md +5 -0
  206. package/repos/effect/.changeset/eff-742-http-client-request-web.md +5 -0
  207. package/repos/effect/.changeset/eff-744-sqlite-migrator-lock.md +5 -0
  208. package/repos/effect/.changeset/eff-746-fixed-iteration-catchup.md +5 -0
  209. package/repos/effect/.changeset/eff-747-unify-effect.md +5 -0
  210. package/repos/effect/.changeset/eff-754-url-builder-any.md +6 -0
  211. package/repos/effect/.changeset/eff-755-references-core.md +5 -0
  212. package/repos/effect/.changeset/eff-769-select-text-highlight.md +5 -0
  213. package/repos/effect/.changeset/eff-774-mutable-list-append-all-empty-array.md +5 -0
  214. package/repos/effect/.changeset/eff-777-schema-make-effect.md +5 -0
  215. package/repos/effect/.changeset/eff-778-http-middleware-path-logger.md +5 -0
  216. package/repos/effect/.changeset/eff-779-keyvaluestore-layer-sql.md +5 -0
  217. package/repos/effect/.changeset/eff-780-layer-unify.md +5 -0
  218. package/repos/effect/.changeset/eff-781-fix-stream-toqueue-types.md +5 -0
  219. package/repos/effect/.changeset/eff-782-httpapi-status-literals.md +5 -0
  220. package/repos/effect/.changeset/eff-783-atom-http-api-errors.md +5 -0
  221. package/repos/effect/.changeset/eff-819-cluster-workflow-shard-groups.md +5 -0
  222. package/repos/effect/.changeset/eight-turkeys-own.md +7 -0
  223. package/repos/effect/.changeset/eighty-lies-deny.md +5 -0
  224. package/repos/effect/.changeset/eighty-poets-draw.md +9 -0
  225. package/repos/effect/.changeset/eighty-swans-scream.md +5 -0
  226. package/repos/effect/.changeset/eighty-teeth-sniff.md +5 -0
  227. package/repos/effect/.changeset/eleven-apes-share.md +5 -0
  228. package/repos/effect/.changeset/eleven-numbers-bake.md +5 -0
  229. package/repos/effect/.changeset/empty-gifts-beg.md +5 -0
  230. package/repos/effect/.changeset/empty-http-rpc-client.md +5 -0
  231. package/repos/effect/.changeset/eventlog-unencrypted.md +5 -0
  232. package/repos/effect/.changeset/expand-schema-filter-output.md +24 -0
  233. package/repos/effect/.changeset/export-schema-encode-keys-interface.md +7 -0
  234. package/repos/effect/.changeset/extract-semaphore-latch.md +10 -0
  235. package/repos/effect/.changeset/fair-bees-relax.md +5 -0
  236. package/repos/effect/.changeset/fair-buttons-share.md +7 -0
  237. package/repos/effect/.changeset/fair-cooks-stop.md +5 -0
  238. package/repos/effect/.changeset/fair-cups-train.md +5 -0
  239. package/repos/effect/.changeset/fair-dryers-speak.md +5 -0
  240. package/repos/effect/.changeset/fair-forks-shake.md +5 -0
  241. package/repos/effect/.changeset/fair-pandas-prove.md +5 -0
  242. package/repos/effect/.changeset/fair-pants-float.md +5 -0
  243. package/repos/effect/.changeset/fair-poems-visit.md +5 -0
  244. package/repos/effect/.changeset/famous-wolves-lead.md +5 -0
  245. package/repos/effect/.changeset/fancy-glasses-grow.md +5 -0
  246. package/repos/effect/.changeset/fast-times-camp.md +5 -0
  247. package/repos/effect/.changeset/few-birds-matter.md +5 -0
  248. package/repos/effect/.changeset/few-cougars-dig.md +5 -0
  249. package/repos/effect/.changeset/few-foxes-grin.md +5 -0
  250. package/repos/effect/.changeset/few-mirrors-pull.md +14 -0
  251. package/repos/effect/.changeset/few-socks-poke.md +5 -0
  252. package/repos/effect/.changeset/fiber-runtime-start-metrics.md +5 -0
  253. package/repos/effect/.changeset/fiery-jokes-care.md +5 -0
  254. package/repos/effect/.changeset/fiery-mammals-call.md +5 -0
  255. package/repos/effect/.changeset/fine-walls-decide.md +5 -0
  256. package/repos/effect/.changeset/first-success-of.md +5 -0
  257. package/repos/effect/.changeset/five-parents-relax.md +5 -0
  258. package/repos/effect/.changeset/five-worms-rhyme.md +5 -0
  259. package/repos/effect/.changeset/fix-1332.md +5 -0
  260. package/repos/effect/.changeset/fix-1917.md +11 -0
  261. package/repos/effect/.changeset/fix-1927.md +5 -0
  262. package/repos/effect/.changeset/fix-1940.md +7 -0
  263. package/repos/effect/.changeset/fix-1947.md +7 -0
  264. package/repos/effect/.changeset/fix-2002.md +5 -0
  265. package/repos/effect/.changeset/fix-2012.md +5 -0
  266. package/repos/effect/.changeset/fix-2015.md +5 -0
  267. package/repos/effect/.changeset/fix-2260.md +5 -0
  268. package/repos/effect/.changeset/fix-2268.md +5 -0
  269. package/repos/effect/.changeset/fix-2271.md +5 -0
  270. package/repos/effect/.changeset/fix-2384.md +7 -0
  271. package/repos/effect/.changeset/fix-ai-empty-params-structured-output.md +5 -0
  272. package/repos/effect/.changeset/fix-ai-text-toolkit-typing.md +5 -0
  273. package/repos/effect/.changeset/fix-catch-orelse-error-erasure.md +5 -0
  274. package/repos/effect/.changeset/fix-class-constructor-defaults.md +5 -0
  275. package/repos/effect/.changeset/fix-cli-mixed-global-flag-context.md +7 -0
  276. package/repos/effect/.changeset/fix-config-withDefault.md +5 -0
  277. package/repos/effect/.changeset/fix-config-withdefault-filter.md +7 -0
  278. package/repos/effect/.changeset/fix-datetime-gmt.md +5 -0
  279. package/repos/effect/.changeset/fix-devtools-flush-on-teardown.md +10 -0
  280. package/repos/effect/.changeset/fix-duration-symmetric-rounding.md +5 -0
  281. package/repos/effect/.changeset/fix-entity-manager-defect-replay.md +5 -0
  282. package/repos/effect/.changeset/fix-entity-proxy-rpc-handler-context.md +5 -0
  283. package/repos/effect/.changeset/fix-entity-proxy-server-path-params.md +5 -0
  284. package/repos/effect/.changeset/fix-from-readable-stream-cancel-defect.md +5 -0
  285. package/repos/effect/.changeset/fix-graph-undirected-traversal.md +5 -0
  286. package/repos/effect/.changeset/fix-has-interrupts-only-empty.md +5 -0
  287. package/repos/effect/.changeset/fix-hashmap-bit31-ordering.md +5 -0
  288. package/repos/effect/.changeset/fix-headers-proto-enumerability.md +5 -0
  289. package/repos/effect/.changeset/fix-http-incoming-message-parse-options.md +5 -0
  290. package/repos/effect/.changeset/fix-httpapi-endpoint-error-inference.md +5 -0
  291. package/repos/effect/.changeset/fix-httpapi-schema-types.md +5 -0
  292. package/repos/effect/.changeset/fix-httpapi-security-middleware-cache.md +5 -0
  293. package/repos/effect/.changeset/fix-is-json-dag.md +7 -0
  294. package/repos/effect/.changeset/fix-json-schema-anyof-oneof-siblings.md +5 -0
  295. package/repos/effect/.changeset/fix-json-schema-import-json.md +5 -0
  296. package/repos/effect/.changeset/fix-keepalive-blocked-timers.md +5 -0
  297. package/repos/effect/.changeset/fix-mcp-param-name-resolution.md +5 -0
  298. package/repos/effect/.changeset/fix-mermaid-escape-special-chars.md +5 -0
  299. package/repos/effect/.changeset/fix-mutable-list-filter-length.md +5 -0
  300. package/repos/effect/.changeset/fix-object-keyword-json-schema.md +5 -0
  301. package/repos/effect/.changeset/fix-openai-mcp-tool-names.md +5 -0
  302. package/repos/effect/.changeset/fix-openapi-generator-form-urlencoded.md +5 -0
  303. package/repos/effect/.changeset/fix-openapi-generator-swagger2openapi.md +5 -0
  304. package/repos/effect/.changeset/fix-openapi-preserve-multiple-response-content-types.md +5 -0
  305. package/repos/effect/.changeset/fix-openrouter-sparse-array.md +5 -0
  306. package/repos/effect/.changeset/fix-otel-logger-clock-skew.md +7 -0
  307. package/repos/effect/.changeset/fix-otel-logger-severity-number.md +20 -0
  308. package/repos/effect/.changeset/fix-queue-collect-duplication.md +5 -0
  309. package/repos/effect/.changeset/fix-random-string-seeds.md +5 -0
  310. package/repos/effect/.changeset/fix-ratelimiter-tokenbucket-redis-ttl.md +5 -0
  311. package/repos/effect/.changeset/fix-remainder-scientific-notation.md +5 -0
  312. package/repos/effect/.changeset/fix-request-resolver-pending-batches-leak.md +5 -0
  313. package/repos/effect/.changeset/fix-retry-transient-autocomplete.md +5 -0
  314. package/repos/effect/.changeset/fix-rpc-http-requestids-finalizer.md +5 -0
  315. package/repos/effect/.changeset/fix-rpc-json-id-edges.md +5 -0
  316. package/repos/effect/.changeset/fix-schedule-fixed-double-exec.md +9 -0
  317. package/repos/effect/.changeset/fix-schedule-reduce-sync-state.md +5 -0
  318. package/repos/effect/.changeset/fix-schema-arbitrary-exclusive-bounds.md +5 -0
  319. package/repos/effect/.changeset/fix-schema-defect-message.md +5 -0
  320. package/repos/effect/.changeset/fix-schema-encode-keys-property-keys.md +5 -0
  321. package/repos/effect/.changeset/fix-schema-encodekeys-class.md +5 -0
  322. package/repos/effect/.changeset/fix-schema-encodekeys-struct.md +5 -0
  323. package/repos/effect/.changeset/fix-schema-identifier-expected-message.md +5 -0
  324. package/repos/effect/.changeset/fix-schema-is-uuid.md +5 -0
  325. package/repos/effect/.changeset/fix-schema-option-non-schema-failures.md +17 -0
  326. package/repos/effect/.changeset/fix-schema-parser-checks.md +9 -0
  327. package/repos/effect/.changeset/fix-searchparam-initial-decode.md +5 -0
  328. package/repos/effect/.changeset/fix-serializable-wire-transfer.md +7 -0
  329. package/repos/effect/.changeset/fix-stream-grouped-within-flush.md +5 -0
  330. package/repos/effect/.changeset/fix-stream-run-for-each-while.md +5 -0
  331. package/repos/effect/.changeset/fix-stream-scan-effect.md +5 -0
  332. package/repos/effect/.changeset/fix-stream-scoped-scope.md +5 -0
  333. package/repos/effect/.changeset/fix-strip-approval-artifacts-multi-round.md +13 -0
  334. package/repos/effect/.changeset/fix-struct-utility-types-simplify.md +5 -0
  335. package/repos/effect/.changeset/fix-structwithrest-index-signatures.md +6 -0
  336. package/repos/effect/.changeset/fix-tagged-union-class-sentinels.md +5 -0
  337. package/repos/effect/.changeset/fix-tagged-union-match-unify.md +6 -0
  338. package/repos/effect/.changeset/fix-to-tagged-union-isanyof-custom-tags.md +10 -0
  339. package/repos/effect/.changeset/fix-tuple-with-rest-post-rest-index-drift.md +5 -0
  340. package/repos/effect/.changeset/fix-tuple-with-rest-post-rest-validation.md +5 -0
  341. package/repos/effect/.changeset/fix-types-voidifempty.md +5 -0
  342. package/repos/effect/.changeset/fix-void-response-encoding.md +5 -0
  343. package/repos/effect/.changeset/fix-workflow-proxy-rpc-handler-context.md +5 -0
  344. package/repos/effect/.changeset/flat-chicken-remain.md +5 -0
  345. package/repos/effect/.changeset/floppy-cows-spend.md +5 -0
  346. package/repos/effect/.changeset/floppy-items-admire.md +5 -0
  347. package/repos/effect/.changeset/floppy-pigs-kiss.md +5 -0
  348. package/repos/effect/.changeset/fluffy-meals-matter.md +5 -0
  349. package/repos/effect/.changeset/fluffy-pumas-push.md +5 -0
  350. package/repos/effect/.changeset/forked-memo-maps.md +6 -0
  351. package/repos/effect/.changeset/forty-hounds-cheer.md +5 -0
  352. package/repos/effect/.changeset/forty-otters-cry.md +5 -0
  353. package/repos/effect/.changeset/forty-rings-film.md +7 -0
  354. package/repos/effect/.changeset/forty-signs-stay.md +5 -0
  355. package/repos/effect/.changeset/forty-swans-divide.md +5 -0
  356. package/repos/effect/.changeset/forty-trees-pay.md +5 -0
  357. package/repos/effect/.changeset/four-papayas-bow.md +5 -0
  358. package/repos/effect/.changeset/four-points-repeat.md +5 -0
  359. package/repos/effect/.changeset/fresh-cats-smash.md +5 -0
  360. package/repos/effect/.changeset/fresh-emus-cheat.md +5 -0
  361. package/repos/effect/.changeset/fresh-monkeys-smoke.md +9 -0
  362. package/repos/effect/.changeset/fruity-houses-learn.md +6 -0
  363. package/repos/effect/.changeset/full-adults-double.md +5 -0
  364. package/repos/effect/.changeset/funny-crabs-hang.md +6 -0
  365. package/repos/effect/.changeset/funny-forks-move.md +5 -0
  366. package/repos/effect/.changeset/fuzzy-camels-hunt.md +5 -0
  367. package/repos/effect/.changeset/fuzzy-dodos-help.md +5 -0
  368. package/repos/effect/.changeset/fuzzy-lions-perform.md +5 -0
  369. package/repos/effect/.changeset/fuzzy-planets-sneeze.md +5 -0
  370. package/repos/effect/.changeset/gold-meteors-move.md +5 -0
  371. package/repos/effect/.changeset/gold-readers-hug.md +5 -0
  372. package/repos/effect/.changeset/gold-rings-start.md +5 -0
  373. package/repos/effect/.changeset/good-tools-work.md +7 -0
  374. package/repos/effect/.changeset/graph-algorithm-fixes.md +5 -0
  375. package/repos/effect/.changeset/great-trains-mate.md +5 -0
  376. package/repos/effect/.changeset/great-trams-report.md +5 -0
  377. package/repos/effect/.changeset/green-beds-unref.md +7 -0
  378. package/repos/effect/.changeset/green-chips-wash.md +5 -0
  379. package/repos/effect/.changeset/green-moons-smile.md +5 -0
  380. package/repos/effect/.changeset/green-pugs-play.md +5 -0
  381. package/repos/effect/.changeset/green-rings-prove.md +5 -0
  382. package/repos/effect/.changeset/happy-mirrors-dream.md +5 -0
  383. package/repos/effect/.changeset/heavy-loops-cut.md +5 -0
  384. package/repos/effect/.changeset/heavy-trams-fix.md +5 -0
  385. package/repos/effect/.changeset/hip-socks-travel.md +5 -0
  386. package/repos/effect/.changeset/honest-pens-thank.md +5 -0
  387. package/repos/effect/.changeset/honest-rivers-notice.md +5 -0
  388. package/repos/effect/.changeset/hot-taxis-fry.md +5 -0
  389. package/repos/effect/.changeset/httpapi-endpoint-relax-constraints.md +5 -0
  390. package/repos/effect/.changeset/httpapi-schema-service-types.md +6 -0
  391. package/repos/effect/.changeset/huge-moons-rhyme.md +5 -0
  392. package/repos/effect/.changeset/humble-pigs-dig.md +5 -0
  393. package/repos/effect/.changeset/icy-flies-cross.md +5 -0
  394. package/repos/effect/.changeset/itchy-radios-poke.md +5 -0
  395. package/repos/effect/.changeset/itchy-results-bet.md +5 -0
  396. package/repos/effect/.changeset/itchy-shrimps-deny.md +5 -0
  397. package/repos/effect/.changeset/itchy-toes-promise.md +5 -0
  398. package/repos/effect/.changeset/k8s-last-transition-null.md +5 -0
  399. package/repos/effect/.changeset/khaki-cats-learn.md +5 -0
  400. package/repos/effect/.changeset/khaki-melons-appear.md +5 -0
  401. package/repos/effect/.changeset/kind-hounds-float.md +5 -0
  402. package/repos/effect/.changeset/kind-windows-fall.md +5 -0
  403. package/repos/effect/.changeset/late-hotels-rule.md +5 -0
  404. package/repos/effect/.changeset/late-lamps-care.md +5 -0
  405. package/repos/effect/.changeset/late-rivers-applaud.md +5 -0
  406. package/repos/effect/.changeset/layer-map-dynamic-idle-ttl.md +5 -0
  407. package/repos/effect/.changeset/lazy-queens-rush.md +5 -0
  408. package/repos/effect/.changeset/lazy-recursive-forward-refs.md +5 -0
  409. package/repos/effect/.changeset/lazy-timers-exist.md +5 -0
  410. package/repos/effect/.changeset/legal-pants-drop.md +5 -0
  411. package/repos/effect/.changeset/lemon-taxis-sin.md +5 -0
  412. package/repos/effect/.changeset/light-kids-sneeze.md +5 -0
  413. package/repos/effect/.changeset/little-dryers-allow.md +7 -0
  414. package/repos/effect/.changeset/long-cameras-think.md +5 -0
  415. package/repos/effect/.changeset/lovely-cobras-change.md +5 -0
  416. package/repos/effect/.changeset/lovely-frogs-rescue.md +5 -0
  417. package/repos/effect/.changeset/lucky-buttons-jump.md +5 -0
  418. package/repos/effect/.changeset/lucky-phones-listen.md +5 -0
  419. package/repos/effect/.changeset/lucky-worms-type.md +5 -0
  420. package/repos/effect/.changeset/mean-dingos-share.md +5 -0
  421. package/repos/effect/.changeset/mean-trains-smash.md +5 -0
  422. package/repos/effect/.changeset/metal-parts-yell.md +5 -0
  423. package/repos/effect/.changeset/mighty-games-matter.md +5 -0
  424. package/repos/effect/.changeset/modern-uuid-guid-filter.md +5 -0
  425. package/repos/effect/.changeset/nasty-geese-grow.md +5 -0
  426. package/repos/effect/.changeset/neat-goats-wave.md +5 -0
  427. package/repos/effect/.changeset/neat-kings-chew.md +5 -0
  428. package/repos/effect/.changeset/neat-lions-rest.md +5 -0
  429. package/repos/effect/.changeset/neat-snails-wash.md +5 -0
  430. package/repos/effect/.changeset/neat-taxis-notice.md +5 -0
  431. package/repos/effect/.changeset/new-dogs-swim.md +5 -0
  432. package/repos/effect/.changeset/new-toes-stop.md +5 -0
  433. package/repos/effect/.changeset/ninety-geese-exist.md +5 -0
  434. package/repos/effect/.changeset/odd-boats-think.md +5 -0
  435. package/repos/effect/.changeset/odd-bulldogs-sleep.md +5 -0
  436. package/repos/effect/.changeset/odd-fans-glow.md +5 -0
  437. package/repos/effect/.changeset/odd-forks-talk.md +5 -0
  438. package/repos/effect/.changeset/odd-laws-draw.md +5 -0
  439. package/repos/effect/.changeset/odd-owls-smoke.md +5 -0
  440. package/repos/effect/.changeset/odd-socks-boil.md +5 -0
  441. package/repos/effect/.changeset/odd-suns-dance.md +5 -0
  442. package/repos/effect/.changeset/old-brooms-cry.md +5 -0
  443. package/repos/effect/.changeset/old-facts-stand.md +5 -0
  444. package/repos/effect/.changeset/old-mirrors-float.md +5 -0
  445. package/repos/effect/.changeset/olive-poems-visit.md +5 -0
  446. package/repos/effect/.changeset/open-hotels-remain.md +5 -0
  447. package/repos/effect/.changeset/openai-compat-nullable-tool-name.md +7 -0
  448. package/repos/effect/.changeset/openai-compat-reasoning.md +5 -0
  449. package/repos/effect/.changeset/otel-resource-env-precedence.md +5 -0
  450. package/repos/effect/.changeset/perfect-buckets-tickle.md +5 -0
  451. package/repos/effect/.changeset/petite-months-allow.md +6 -0
  452. package/repos/effect/.changeset/platform-crypto-service.md +9 -0
  453. package/repos/effect/.changeset/platform-node-shared-barrel.md +5 -0
  454. package/repos/effect/.changeset/plenty-moons-pull.md +5 -0
  455. package/repos/effect/.changeset/polite-brooms-tickle.md +5 -0
  456. package/repos/effect/.changeset/polite-pigs-speak.md +5 -0
  457. package/repos/effect/.changeset/polite-tables-kneel.md +5 -0
  458. package/repos/effect/.changeset/port-react-hydration.md +8 -0
  459. package/repos/effect/.changeset/pre.json +588 -0
  460. package/repos/effect/.changeset/public-deer-ring.md +5 -0
  461. package/repos/effect/.changeset/public-jeans-stop.md +5 -0
  462. package/repos/effect/.changeset/pubsub-publish-false.md +5 -0
  463. package/repos/effect/.changeset/puny-pens-clap.md +6 -0
  464. package/repos/effect/.changeset/purple-bars-prove.md +5 -0
  465. package/repos/effect/.changeset/purple-schools-float.md +5 -0
  466. package/repos/effect/.changeset/purple-turtles-draw.md +5 -0
  467. package/repos/effect/.changeset/quick-dragons-fix.md +5 -0
  468. package/repos/effect/.changeset/quick-falcons-travel.md +5 -0
  469. package/repos/effect/.changeset/quick-geese-relax.md +5 -0
  470. package/repos/effect/.changeset/quick-lamps-dig.md +5 -0
  471. package/repos/effect/.changeset/quick-lizards-fall.md +5 -0
  472. package/repos/effect/.changeset/quick-trees-join.md +5 -0
  473. package/repos/effect/.changeset/quiet-carpets-grin.md +5 -0
  474. package/repos/effect/.changeset/quiet-files-hunt.md +5 -0
  475. package/repos/effect/.changeset/quiet-lamps-jam.md +5 -0
  476. package/repos/effect/.changeset/quiet-radios-wave.md +5 -0
  477. package/repos/effect/.changeset/quiet-redis-scripts.md +5 -0
  478. package/repos/effect/.changeset/ready-olives-divide.md +5 -0
  479. package/repos/effect/.changeset/real-trains-ring.md +5 -0
  480. package/repos/effect/.changeset/red-pigs-repair.md +5 -0
  481. package/repos/effect/.changeset/redacted-representation-options.md +7 -0
  482. package/repos/effect/.changeset/refactor-cli-global-flags.md +27 -0
  483. package/repos/effect/.changeset/refactor-config-provider.md +23 -0
  484. package/repos/effect/.changeset/refactor-representation-references.md +5 -0
  485. package/repos/effect/.changeset/remove-effect-transactionwith.md +5 -0
  486. package/repos/effect/.changeset/remove-http-span-counter.md +5 -0
  487. package/repos/effect/.changeset/remove-nullor.md +5 -0
  488. package/repos/effect/.changeset/remove-openapi-fromapi-options.md +7 -0
  489. package/repos/effect/.changeset/remove-types-mergerecord.md +5 -0
  490. package/repos/effect/.changeset/remove-unused-utils-apis.md +5 -0
  491. package/repos/effect/.changeset/rename-rebuild-out.md +5 -0
  492. package/repos/effect/.changeset/restore-schema-parse-options.md +5 -0
  493. package/repos/effect/.changeset/rich-dots-push.md +5 -0
  494. package/repos/effect/.changeset/rich-hoops-nail.md +5 -0
  495. package/repos/effect/.changeset/rich-sloths-draw.md +5 -0
  496. package/repos/effect/.changeset/ripe-lies-battle.md +5 -0
  497. package/repos/effect/.changeset/rpc-middleware-provides-fix.md +5 -0
  498. package/repos/effect/.changeset/scalar-custom-fetch.md +5 -0
  499. package/repos/effect/.changeset/schema-as-class.md +17 -0
  500. package/repos/effect/.changeset/schema-asserts-signature.md +5 -0
  501. package/repos/effect/.changeset/schema-clean-up-additionalProperties.md +7 -0
  502. package/repos/effect/.changeset/schema-datetime-utc-from-string.md +5 -0
  503. package/repos/effect/.changeset/schema-decoding-defaults-services.md +7 -0
  504. package/repos/effect/.changeset/schema-defaults-issue-channel.md +7 -0
  505. package/repos/effect/.changeset/schema-dollar-prefix.md +5 -0
  506. package/repos/effect/.changeset/schema-missing-self-generic.md +5 -0
  507. package/repos/effect/.changeset/schema-ordered-arbitrary-constraints.md +12 -0
  508. package/repos/effect/.changeset/schema-parser-adapter-errors.md +5 -0
  509. package/repos/effect/.changeset/schema-refactor-toCodecJson.md +5 -0
  510. package/repos/effect/.changeset/schema-remove-annotate-in.md +5 -0
  511. package/repos/effect/.changeset/schema-rename-makeUnsafe-to-make.md +7 -0
  512. package/repos/effect/.changeset/schema-rename-parser-makeUnsafe.md +5 -0
  513. package/repos/effect/.changeset/schema-result-combinators.md +5 -0
  514. package/repos/effect/.changeset/schema-struct-simplify.md +5 -0
  515. package/repos/effect/.changeset/seven-mugs-marry.md +5 -0
  516. package/repos/effect/.changeset/shaggy-birds-stay.md +5 -0
  517. package/repos/effect/.changeset/shaggy-cities-push.md +5 -0
  518. package/repos/effect/.changeset/shaggy-numbers-accept.md +5 -0
  519. package/repos/effect/.changeset/sharp-emus-applaud.md +5 -0
  520. package/repos/effect/.changeset/sharp-goats-wink.md +5 -0
  521. package/repos/effect/.changeset/sharp-pandas-care.md +5 -0
  522. package/repos/effect/.changeset/sharp-peas-march.md +5 -0
  523. package/repos/effect/.changeset/sharp-rules-draw.md +5 -0
  524. package/repos/effect/.changeset/sharp-singers-sort.md +5 -0
  525. package/repos/effect/.changeset/shiny-trains-hug.md +5 -0
  526. package/repos/effect/.changeset/short-cows-relate.md +5 -0
  527. package/repos/effect/.changeset/short-foxes-admire.md +5 -0
  528. package/repos/effect/.changeset/shy-cycles-flow.md +5 -0
  529. package/repos/effect/.changeset/shy-geckos-sniff.md +30 -0
  530. package/repos/effect/.changeset/silent-geckos-matter.md +5 -0
  531. package/repos/effect/.changeset/silent-needles-design.md +6 -0
  532. package/repos/effect/.changeset/silent-plants-matter.md +8 -0
  533. package/repos/effect/.changeset/silent-spoons-stare.md +5 -0
  534. package/repos/effect/.changeset/silly-loops-tickle.md +5 -0
  535. package/repos/effect/.changeset/silver-bulk-indexeddb.md +5 -0
  536. package/repos/effect/.changeset/silver-emus-smoke.md +5 -0
  537. package/repos/effect/.changeset/silver-kings-poke.md +5 -0
  538. package/repos/effect/.changeset/silver-snails-sqlite.md +17 -0
  539. package/repos/effect/.changeset/silver-wings-watch.md +5 -0
  540. package/repos/effect/.changeset/six-cups-taste.md +5 -0
  541. package/repos/effect/.changeset/sixty-mails-shout.md +5 -0
  542. package/repos/effect/.changeset/sixty-socks-yell.md +5 -0
  543. package/repos/effect/.changeset/slimy-planets-divide.md +5 -0
  544. package/repos/effect/.changeset/slimy-turtles-juggle.md +5 -0
  545. package/repos/effect/.changeset/slow-beans-battle.md +28 -0
  546. package/repos/effect/.changeset/slow-berries-enjoy.md +5 -0
  547. package/repos/effect/.changeset/small-bugs-hunt.md +5 -0
  548. package/repos/effect/.changeset/small-crabs-care.md +9 -0
  549. package/repos/effect/.changeset/small-pets-sit.md +6 -0
  550. package/repos/effect/.changeset/smart-ducks-jump.md +6 -0
  551. package/repos/effect/.changeset/smart-pillows-buy.md +6 -0
  552. package/repos/effect/.changeset/smart-timers-fly.md +5 -0
  553. package/repos/effect/.changeset/smart-tips-sort.md +5 -0
  554. package/repos/effect/.changeset/social-pumas-prove.md +5 -0
  555. package/repos/effect/.changeset/soft-comics-wink.md +5 -0
  556. package/repos/effect/.changeset/soft-delete-sqlmodel.md +5 -0
  557. package/repos/effect/.changeset/soft-seals-allow.md +5 -0
  558. package/repos/effect/.changeset/solid-cougars-attack.md +5 -0
  559. package/repos/effect/.changeset/solid-doors-ring.md +5 -0
  560. package/repos/effect/.changeset/solid-items-tease.md +5 -0
  561. package/repos/effect/.changeset/solid-towns-smoke.md +5 -0
  562. package/repos/effect/.changeset/sour-canyons-rescue.md +5 -0
  563. package/repos/effect/.changeset/sparkly-bears-act.md +5 -0
  564. package/repos/effect/.changeset/sparkly-coins-sit.md +5 -0
  565. package/repos/effect/.changeset/spotty-comics-fry.md +5 -0
  566. package/repos/effect/.changeset/sql-migrator-mjs-mts.md +5 -0
  567. package/repos/effect/.changeset/stale-dots-tell.md +5 -0
  568. package/repos/effect/.changeset/stale-snakes-know.md +5 -0
  569. package/repos/effect/.changeset/strict-areas-end.md +5 -0
  570. package/repos/effect/.changeset/strict-buckets-hug.md +8 -0
  571. package/repos/effect/.changeset/strip-resolved-approvals.md +5 -0
  572. package/repos/effect/.changeset/strong-balloons-tickle.md +5 -0
  573. package/repos/effect/.changeset/strong-bees-queue.md +5 -0
  574. package/repos/effect/.changeset/struct-record.md +5 -0
  575. package/repos/effect/.changeset/sunny-ads-hang.md +5 -0
  576. package/repos/effect/.changeset/sunny-bikes-sleep.md +5 -0
  577. package/repos/effect/.changeset/sunny-rooms-invent.md +5 -0
  578. package/repos/effect/.changeset/sweet-donuts-bet.md +5 -0
  579. package/repos/effect/.changeset/sweet-hotels-give.md +5 -0
  580. package/repos/effect/.changeset/sweet-views-learn.md +5 -0
  581. package/repos/effect/.changeset/swift-spiders-unpack.md +5 -0
  582. package/repos/effect/.changeset/swift-symbols-stand.md +5 -0
  583. package/repos/effect/.changeset/tagged-error-class-optional-empty-props.md +5 -0
  584. package/repos/effect/.changeset/tall-hairs-return.md +5 -0
  585. package/repos/effect/.changeset/tall-mails-listen.md +5 -0
  586. package/repos/effect/.changeset/tall-queens-cheer.md +5 -0
  587. package/repos/effect/.changeset/tall-wombats-wave.md +5 -0
  588. package/repos/effect/.changeset/tangy-colts-lose.md +5 -0
  589. package/repos/effect/.changeset/tasty-comics-send.md +5 -0
  590. package/repos/effect/.changeset/ten-kings-fry.md +5 -0
  591. package/repos/effect/.changeset/thick-pandas-wait.md +5 -0
  592. package/repos/effect/.changeset/thin-ducks-wonder.md +5 -0
  593. package/repos/effect/.changeset/thirty-ducks-go.md +5 -0
  594. package/repos/effect/.changeset/thirty-pans-love.md +5 -0
  595. package/repos/effect/.changeset/three-corners-sort.md +5 -0
  596. package/repos/effect/.changeset/three-ravens-jam.md +5 -0
  597. package/repos/effect/.changeset/three-tomatoes-wave.md +5 -0
  598. package/repos/effect/.changeset/tidy-foxes-own.md +5 -0
  599. package/repos/effect/.changeset/tidy-icons-glow.md +5 -0
  600. package/repos/effect/.changeset/tidy-stacks-encode.md +5 -0
  601. package/repos/effect/.changeset/tidy-stars-drive.md +5 -0
  602. package/repos/effect/.changeset/tiny-buckets-wave.md +5 -0
  603. package/repos/effect/.changeset/tiny-lilies-flash.md +5 -0
  604. package/repos/effect/.changeset/tiny-rabbits-smile.md +5 -0
  605. package/repos/effect/.changeset/tocodecjson-return-json-type.md +10 -0
  606. package/repos/effect/.changeset/tool-get-json-schema-tests.md +5 -0
  607. package/repos/effect/.changeset/true-actors-battle.md +5 -0
  608. package/repos/effect/.changeset/twenty-buttons-cheer.md +5 -0
  609. package/repos/effect/.changeset/two-roses-double.md +5 -0
  610. package/repos/effect/.changeset/unify-error-defect-stack-options.md +23 -0
  611. package/repos/effect/.changeset/update-schema-arbitrary-report.md +22 -0
  612. package/repos/effect/.changeset/upset-colts-stick.md +5 -0
  613. package/repos/effect/.changeset/vast-bananas-send.md +5 -0
  614. package/repos/effect/.changeset/vast-deserts-travel.md +5 -0
  615. package/repos/effect/.changeset/violet-peaches-feel.md +5 -0
  616. package/repos/effect/.changeset/vitest-layer-top-level-options.md +5 -0
  617. package/repos/effect/.changeset/wacky-grapes-poke.md +5 -0
  618. package/repos/effect/.changeset/wacky-rice-add.md +5 -0
  619. package/repos/effect/.changeset/warm-dolls-brake.md +5 -0
  620. package/repos/effect/.changeset/warm-friends-tie.md +5 -0
  621. package/repos/effect/.changeset/warm-snails-shop.md +7 -0
  622. package/repos/effect/.changeset/wet-news-invent.md +5 -0
  623. package/repos/effect/.changeset/wild-readers-clean.md +5 -0
  624. package/repos/effect/.changeset/wild-suns-bearer-space.md +5 -0
  625. package/repos/effect/.changeset/wise-ants-wave.md +6 -0
  626. package/repos/effect/.changeset/wise-flags-shift.md +22 -0
  627. package/repos/effect/.changeset/wise-oranges-stay.md +5 -0
  628. package/repos/effect/.changeset/witty-lobsters-share.md +5 -0
  629. package/repos/effect/.changeset/yellow-adults-study.md +5 -0
  630. package/repos/effect/.changeset/yellow-clocks-dance.md +5 -0
  631. package/repos/effect/.changeset/yellow-dingos-jump.md +5 -0
  632. package/repos/effect/.changeset/young-doors-change.md +5 -0
  633. package/repos/effect/.envrc +1 -0
  634. package/repos/effect/.github/actions/setup/action.yaml +33 -0
  635. package/repos/effect/.github/workflows/ai-codegen.yml +66 -0
  636. package/repos/effect/.github/workflows/bundle-comment.yml +72 -0
  637. package/repos/effect/.github/workflows/check.yml +195 -0
  638. package/repos/effect/.github/workflows/release.yml +47 -0
  639. package/repos/effect/.github/workflows/snapshot.yml +34 -0
  640. package/repos/effect/.oxlintrc.json +25 -0
  641. package/repos/effect/.patterns/effect.md +102 -0
  642. package/repos/effect/.patterns/jsdoc.md +53 -0
  643. package/repos/effect/.patterns/testing.md +44 -0
  644. package/repos/effect/.specs/README.md +2 -0
  645. package/repos/effect/.vscode/extensions.json +6 -0
  646. package/repos/effect/.vscode/settings.json +44 -0
  647. package/repos/effect/AGENTS.md +139 -0
  648. package/repos/effect/LICENSE +21 -0
  649. package/repos/effect/LLMS.md +343 -0
  650. package/repos/effect/MIGRATION.md +83 -0
  651. package/repos/effect/README.md +3 -0
  652. package/repos/effect/TODOS.md +28 -0
  653. package/repos/effect/ai-docs/README.md +44 -0
  654. package/repos/effect/ai-docs/package.json +36 -0
  655. package/repos/effect/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
  656. package/repos/effect/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
  657. package/repos/effect/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
  658. package/repos/effect/ai-docs/src/01_effect/01_basics/index.md +5 -0
  659. package/repos/effect/ai-docs/src/01_effect/02_services/01_service.ts +45 -0
  660. package/repos/effect/ai-docs/src/01_effect/02_services/10_reference.ts +10 -0
  661. package/repos/effect/ai-docs/src/01_effect/02_services/20_layer-composition.ts +70 -0
  662. package/repos/effect/ai-docs/src/01_effect/02_services/20_layer-unwrap.ts +66 -0
  663. package/repos/effect/ai-docs/src/01_effect/02_services/index.md +5 -0
  664. package/repos/effect/ai-docs/src/01_effect/03_errors/01_error-handling.ts +30 -0
  665. package/repos/effect/ai-docs/src/01_effect/03_errors/10_catch-tags.ts +24 -0
  666. package/repos/effect/ai-docs/src/01_effect/03_errors/20_reason-errors.ts +64 -0
  667. package/repos/effect/ai-docs/src/01_effect/03_errors/index.md +1 -0
  668. package/repos/effect/ai-docs/src/01_effect/04_resources/10_acquire-release.ts +105 -0
  669. package/repos/effect/ai-docs/src/01_effect/04_resources/20_layer-side-effects.ts +31 -0
  670. package/repos/effect/ai-docs/src/01_effect/04_resources/30_layer-map.ts +86 -0
  671. package/repos/effect/ai-docs/src/01_effect/04_resources/index.md +3 -0
  672. package/repos/effect/ai-docs/src/01_effect/05_running/10_run-main.ts +30 -0
  673. package/repos/effect/ai-docs/src/01_effect/05_running/20_layer-launch.ts +27 -0
  674. package/repos/effect/ai-docs/src/01_effect/05_running/index.md +1 -0
  675. package/repos/effect/ai-docs/src/01_effect/06_pubsub/10_pubsub.ts +56 -0
  676. package/repos/effect/ai-docs/src/01_effect/06_pubsub/index.md +3 -0
  677. package/repos/effect/ai-docs/src/02_stream/10_creating-streams.ts +103 -0
  678. package/repos/effect/ai-docs/src/02_stream/20_consuming-streams.ts +137 -0
  679. package/repos/effect/ai-docs/src/02_stream/30_encoding.ts +165 -0
  680. package/repos/effect/ai-docs/src/02_stream/index.md +4 -0
  681. package/repos/effect/ai-docs/src/03_integration/10_managed-runtime.ts +129 -0
  682. package/repos/effect/ai-docs/src/03_integration/index.md +5 -0
  683. package/repos/effect/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
  684. package/repos/effect/ai-docs/src/05_batching/index.md +3 -0
  685. package/repos/effect/ai-docs/src/06_schedule/10_schedules.ts +102 -0
  686. package/repos/effect/ai-docs/src/06_schedule/index.md +3 -0
  687. package/repos/effect/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
  688. package/repos/effect/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
  689. package/repos/effect/ai-docs/src/07_datetime/index.md +5 -0
  690. package/repos/effect/ai-docs/src/08_observability/10_logging.ts +66 -0
  691. package/repos/effect/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
  692. package/repos/effect/ai-docs/src/08_observability/index.md +7 -0
  693. package/repos/effect/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
  694. package/repos/effect/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
  695. package/repos/effect/ai-docs/src/09_testing/index.md +1 -0
  696. package/repos/effect/ai-docs/src/50_http-client/10_basics.ts +102 -0
  697. package/repos/effect/ai-docs/src/50_http-client/index.md +3 -0
  698. package/repos/effect/ai-docs/src/51_http-server/10_basics.ts +116 -0
  699. package/repos/effect/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
  700. package/repos/effect/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
  701. package/repos/effect/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
  702. package/repos/effect/ai-docs/src/51_http-server/fixtures/api/Users.ts +91 -0
  703. package/repos/effect/ai-docs/src/51_http-server/fixtures/domain/User.ts +12 -0
  704. package/repos/effect/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
  705. package/repos/effect/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +36 -0
  706. package/repos/effect/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +71 -0
  707. package/repos/effect/ai-docs/src/51_http-server/fixtures/server/Users.ts +62 -0
  708. package/repos/effect/ai-docs/src/51_http-server/index.md +3 -0
  709. package/repos/effect/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
  710. package/repos/effect/ai-docs/src/60_child-process/index.md +3 -0
  711. package/repos/effect/ai-docs/src/70_cli/10_basics.ts +136 -0
  712. package/repos/effect/ai-docs/src/70_cli/index.md +5 -0
  713. package/repos/effect/ai-docs/src/71_ai/10_language-model.ts +156 -0
  714. package/repos/effect/ai-docs/src/71_ai/20_tools.ts +226 -0
  715. package/repos/effect/ai-docs/src/71_ai/30_chat.ts +158 -0
  716. package/repos/effect/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
  717. package/repos/effect/ai-docs/src/71_ai/index.md +5 -0
  718. package/repos/effect/ai-docs/src/80_cluster/10_entities.ts +97 -0
  719. package/repos/effect/ai-docs/src/80_cluster/index.md +4 -0
  720. package/repos/effect/ai-docs/src/index.md +12 -0
  721. package/repos/effect/ai-docs/tsconfig.json +24 -0
  722. package/repos/effect/cookbooks/schedule.md +3507 -0
  723. package/repos/effect/deno.json +33 -0
  724. package/repos/effect/docker-compose.yaml +18 -0
  725. package/repos/effect/dprint.json +32 -0
  726. package/repos/effect/flake.lock +27 -0
  727. package/repos/effect/flake.nix +24 -0
  728. package/repos/effect/jsdocs.config.json +16 -0
  729. package/repos/effect/migration/cause.md +163 -0
  730. package/repos/effect/migration/equality.md +72 -0
  731. package/repos/effect/migration/error-handling.md +106 -0
  732. package/repos/effect/migration/fiber-keep-alive.md +74 -0
  733. package/repos/effect/migration/fiberref.md +109 -0
  734. package/repos/effect/migration/forking.md +94 -0
  735. package/repos/effect/migration/generators.md +32 -0
  736. package/repos/effect/migration/layer-memoization.md +98 -0
  737. package/repos/effect/migration/runtime.md +88 -0
  738. package/repos/effect/migration/schema.md +1032 -0
  739. package/repos/effect/migration/scope.md +50 -0
  740. package/repos/effect/migration/services.md +235 -0
  741. package/repos/effect/migration/v3-to-v4.md +421 -0
  742. package/repos/effect/migration/yieldable.md +173 -0
  743. package/repos/effect/package.json +104 -0
  744. package/repos/effect/packages/ai/anthropic/CHANGELOG.md +611 -0
  745. package/repos/effect/packages/ai/anthropic/codegen.yml +63 -0
  746. package/repos/effect/packages/ai/anthropic/docgen.json +26 -0
  747. package/repos/effect/packages/ai/anthropic/package.json +67 -0
  748. package/repos/effect/packages/ai/anthropic/src/AnthropicClient.ts +432 -0
  749. package/repos/effect/packages/ai/anthropic/src/AnthropicConfig.ts +84 -0
  750. package/repos/effect/packages/ai/anthropic/src/AnthropicError.ts +212 -0
  751. package/repos/effect/packages/ai/anthropic/src/AnthropicLanguageModel.ts +3098 -0
  752. package/repos/effect/packages/ai/anthropic/src/AnthropicTelemetry.ts +132 -0
  753. package/repos/effect/packages/ai/anthropic/src/AnthropicTool.ts +2512 -0
  754. package/repos/effect/packages/ai/anthropic/src/Generated.ts +12600 -0
  755. package/repos/effect/packages/ai/anthropic/src/index.ts +40 -0
  756. package/repos/effect/packages/ai/anthropic/src/internal/errors.ts +370 -0
  757. package/repos/effect/packages/ai/anthropic/src/internal/utilities.ts +26 -0
  758. package/repos/effect/packages/ai/anthropic/test/AnthropicLanguageModel.test.ts +300 -0
  759. package/repos/effect/packages/ai/anthropic/tsconfig.json +8 -0
  760. package/repos/effect/packages/ai/anthropic/vitest.config.ts +6 -0
  761. package/repos/effect/packages/ai/openai/CHANGELOG.md +668 -0
  762. package/repos/effect/packages/ai/openai/codegen.yaml +41 -0
  763. package/repos/effect/packages/ai/openai/docgen.json +24 -0
  764. package/repos/effect/packages/ai/openai/package.json +67 -0
  765. package/repos/effect/packages/ai/openai/src/Generated.ts +35774 -0
  766. package/repos/effect/packages/ai/openai/src/OpenAiClient.ts +730 -0
  767. package/repos/effect/packages/ai/openai/src/OpenAiClientGenerated.ts +202 -0
  768. package/repos/effect/packages/ai/openai/src/OpenAiConfig.ts +93 -0
  769. package/repos/effect/packages/ai/openai/src/OpenAiEmbeddingModel.ts +258 -0
  770. package/repos/effect/packages/ai/openai/src/OpenAiError.ts +242 -0
  771. package/repos/effect/packages/ai/openai/src/OpenAiLanguageModel.ts +3133 -0
  772. package/repos/effect/packages/ai/openai/src/OpenAiSchema.ts +1286 -0
  773. package/repos/effect/packages/ai/openai/src/OpenAiTelemetry.ts +162 -0
  774. package/repos/effect/packages/ai/openai/src/OpenAiTool.ts +342 -0
  775. package/repos/effect/packages/ai/openai/src/index.ts +55 -0
  776. package/repos/effect/packages/ai/openai/src/internal/errors.ts +349 -0
  777. package/repos/effect/packages/ai/openai/src/internal/utilities.ts +33 -0
  778. package/repos/effect/packages/ai/openai/test/OpenAiClient.test.ts +798 -0
  779. package/repos/effect/packages/ai/openai/test/OpenAiEmbeddingModel.test.ts +289 -0
  780. package/repos/effect/packages/ai/openai/test/OpenAiLanguageModel.test.ts +1528 -0
  781. package/repos/effect/packages/ai/openai/test/OpenAiSchema.test.ts +273 -0
  782. package/repos/effect/packages/ai/openai/tsconfig.json +8 -0
  783. package/repos/effect/packages/ai/openai/vitest.config.ts +6 -0
  784. package/repos/effect/packages/ai/openai-compat/CHANGELOG.md +626 -0
  785. package/repos/effect/packages/ai/openai-compat/docgen.json +24 -0
  786. package/repos/effect/packages/ai/openai-compat/package.json +69 -0
  787. package/repos/effect/packages/ai/openai-compat/src/OpenAiClient.ts +1221 -0
  788. package/repos/effect/packages/ai/openai-compat/src/OpenAiConfig.ts +87 -0
  789. package/repos/effect/packages/ai/openai-compat/src/OpenAiEmbeddingModel.ts +254 -0
  790. package/repos/effect/packages/ai/openai-compat/src/OpenAiError.ts +178 -0
  791. package/repos/effect/packages/ai/openai-compat/src/OpenAiLanguageModel.ts +1951 -0
  792. package/repos/effect/packages/ai/openai-compat/src/OpenAiTelemetry.ts +164 -0
  793. package/repos/effect/packages/ai/openai-compat/src/index.ts +35 -0
  794. package/repos/effect/packages/ai/openai-compat/src/internal/errors.ts +327 -0
  795. package/repos/effect/packages/ai/openai-compat/src/internal/utilities.ts +33 -0
  796. package/repos/effect/packages/ai/openai-compat/test/OpenAiClient.test.ts +474 -0
  797. package/repos/effect/packages/ai/openai-compat/test/OpenAiEmbeddingModel.test.ts +216 -0
  798. package/repos/effect/packages/ai/openai-compat/test/OpenAiLanguageModel.test.ts +1505 -0
  799. package/repos/effect/packages/ai/openai-compat/tsconfig.json +8 -0
  800. package/repos/effect/packages/ai/openai-compat/vitest.config.ts +6 -0
  801. package/repos/effect/packages/ai/openrouter/CHANGELOG.md +607 -0
  802. package/repos/effect/packages/ai/openrouter/codegen.yml +35 -0
  803. package/repos/effect/packages/ai/openrouter/docgen.json +24 -0
  804. package/repos/effect/packages/ai/openrouter/package.json +67 -0
  805. package/repos/effect/packages/ai/openrouter/src/Generated.ts +10028 -0
  806. package/repos/effect/packages/ai/openrouter/src/OpenRouterClient.ts +357 -0
  807. package/repos/effect/packages/ai/openrouter/src/OpenRouterConfig.ts +99 -0
  808. package/repos/effect/packages/ai/openrouter/src/OpenRouterError.ts +225 -0
  809. package/repos/effect/packages/ai/openrouter/src/OpenRouterLanguageModel.ts +1796 -0
  810. package/repos/effect/packages/ai/openrouter/src/index.ts +30 -0
  811. package/repos/effect/packages/ai/openrouter/src/internal/errors.ts +375 -0
  812. package/repos/effect/packages/ai/openrouter/src/internal/utilities.ts +92 -0
  813. package/repos/effect/packages/ai/openrouter/tsconfig.json +10 -0
  814. package/repos/effect/packages/ai/openrouter/vitest.config.ts +6 -0
  815. package/repos/effect/packages/atom/react/CHANGELOG.md +599 -0
  816. package/repos/effect/packages/atom/react/LICENSE +21 -0
  817. package/repos/effect/packages/atom/react/README.md +7 -0
  818. package/repos/effect/packages/atom/react/docgen.json +25 -0
  819. package/repos/effect/packages/atom/react/package.json +79 -0
  820. package/repos/effect/packages/atom/react/src/Hooks.ts +476 -0
  821. package/repos/effect/packages/atom/react/src/ReactHydration.ts +109 -0
  822. package/repos/effect/packages/atom/react/src/RegistryContext.ts +108 -0
  823. package/repos/effect/packages/atom/react/src/ScopedAtom.ts +151 -0
  824. package/repos/effect/packages/atom/react/src/index.ts +23 -0
  825. package/repos/effect/packages/atom/react/test/index.test.tsx +650 -0
  826. package/repos/effect/packages/atom/react/tsconfig.json +8 -0
  827. package/repos/effect/packages/atom/react/vitest.config.ts +9 -0
  828. package/repos/effect/packages/atom/react/vitest.setup.ts +8 -0
  829. package/repos/effect/packages/atom/solid/CHANGELOG.md +595 -0
  830. package/repos/effect/packages/atom/solid/LICENSE +21 -0
  831. package/repos/effect/packages/atom/solid/README.md +7 -0
  832. package/repos/effect/packages/atom/solid/docgen.json +26 -0
  833. package/repos/effect/packages/atom/solid/package.json +72 -0
  834. package/repos/effect/packages/atom/solid/src/Hooks.ts +359 -0
  835. package/repos/effect/packages/atom/solid/src/RegistryContext.ts +80 -0
  836. package/repos/effect/packages/atom/solid/src/index.ts +13 -0
  837. package/repos/effect/packages/atom/solid/test/index.test.tsx +296 -0
  838. package/repos/effect/packages/atom/solid/tsconfig.json +8 -0
  839. package/repos/effect/packages/atom/solid/vitest.config.ts +15 -0
  840. package/repos/effect/packages/atom/solid/vitest.setup.ts +8 -0
  841. package/repos/effect/packages/atom/vue/CHANGELOG.md +593 -0
  842. package/repos/effect/packages/atom/vue/LICENSE +21 -0
  843. package/repos/effect/packages/atom/vue/README.md +7 -0
  844. package/repos/effect/packages/atom/vue/docgen.json +24 -0
  845. package/repos/effect/packages/atom/vue/package.json +68 -0
  846. package/repos/effect/packages/atom/vue/src/index.ts +211 -0
  847. package/repos/effect/packages/atom/vue/test/index.test.ts +5 -0
  848. package/repos/effect/packages/atom/vue/tsconfig.json +14 -0
  849. package/repos/effect/packages/atom/vue/vitest.config.ts +8 -0
  850. package/repos/effect/packages/effect/CHANGELOG.md +1607 -0
  851. package/repos/effect/packages/effect/CONFIG.md +690 -0
  852. package/repos/effect/packages/effect/HTTPAPI.md +3213 -0
  853. package/repos/effect/packages/effect/LICENSE +21 -0
  854. package/repos/effect/packages/effect/MCP.md +369 -0
  855. package/repos/effect/packages/effect/OPTIC.md +620 -0
  856. package/repos/effect/packages/effect/README.md +53 -0
  857. package/repos/effect/packages/effect/SCHEMA.md +7284 -0
  858. package/repos/effect/packages/effect/benchmark/schema/Enums.ts +40 -0
  859. package/repos/effect/packages/effect/benchmark/schema/Optic.ts +79 -0
  860. package/repos/effect/packages/effect/benchmark/schema/array.ts +74 -0
  861. package/repos/effect/packages/effect/benchmark/schema/filter.ts +74 -0
  862. package/repos/effect/packages/effect/benchmark/schema/object.ts +82 -0
  863. package/repos/effect/packages/effect/benchmark/schema/tagged-union.ts +69 -0
  864. package/repos/effect/packages/effect/benchmark/schema/transformation.ts +91 -0
  865. package/repos/effect/packages/effect/benchmark/stream/splitLines.ts +46 -0
  866. package/repos/effect/packages/effect/docgen.json +38 -0
  867. package/repos/effect/packages/effect/package.json +127 -0
  868. package/repos/effect/packages/effect/src/Array.ts +4908 -0
  869. package/repos/effect/packages/effect/src/BigDecimal.ts +1943 -0
  870. package/repos/effect/packages/effect/src/BigInt.ts +1029 -0
  871. package/repos/effect/packages/effect/src/Boolean.ts +481 -0
  872. package/repos/effect/packages/effect/src/Brand.ts +318 -0
  873. package/repos/effect/packages/effect/src/Cache.ts +1295 -0
  874. package/repos/effect/packages/effect/src/Cause.ts +1939 -0
  875. package/repos/effect/packages/effect/src/Channel.ts +8615 -0
  876. package/repos/effect/packages/effect/src/ChannelSchema.ts +308 -0
  877. package/repos/effect/packages/effect/src/Chunk.ts +2976 -0
  878. package/repos/effect/packages/effect/src/Clock.ts +194 -0
  879. package/repos/effect/packages/effect/src/Combiner.ts +316 -0
  880. package/repos/effect/packages/effect/src/Config.ts +1416 -0
  881. package/repos/effect/packages/effect/src/ConfigProvider.ts +1159 -0
  882. package/repos/effect/packages/effect/src/Console.ts +653 -0
  883. package/repos/effect/packages/effect/src/Context.ts +1339 -0
  884. package/repos/effect/packages/effect/src/Cron.ts +1212 -0
  885. package/repos/effect/packages/effect/src/Crypto.ts +318 -0
  886. package/repos/effect/packages/effect/src/Data.ts +774 -0
  887. package/repos/effect/packages/effect/src/DateTime.ts +2922 -0
  888. package/repos/effect/packages/effect/src/Deferred.ts +917 -0
  889. package/repos/effect/packages/effect/src/Differ.ts +32 -0
  890. package/repos/effect/packages/effect/src/Duration.ts +1827 -0
  891. package/repos/effect/packages/effect/src/Effect.ts +15347 -0
  892. package/repos/effect/packages/effect/src/Effectable.ts +68 -0
  893. package/repos/effect/packages/effect/src/Encoding.ts +1046 -0
  894. package/repos/effect/packages/effect/src/Equal.ts +550 -0
  895. package/repos/effect/packages/effect/src/Equivalence.ts +870 -0
  896. package/repos/effect/packages/effect/src/ErrorReporter.ts +543 -0
  897. package/repos/effect/packages/effect/src/ExecutionPlan.ts +416 -0
  898. package/repos/effect/packages/effect/src/Exit.ts +1085 -0
  899. package/repos/effect/packages/effect/src/Fiber.ts +632 -0
  900. package/repos/effect/packages/effect/src/FiberHandle.ts +815 -0
  901. package/repos/effect/packages/effect/src/FiberMap.ts +1030 -0
  902. package/repos/effect/packages/effect/src/FiberSet.ts +713 -0
  903. package/repos/effect/packages/effect/src/FileSystem.ts +1394 -0
  904. package/repos/effect/packages/effect/src/Filter.ts +827 -0
  905. package/repos/effect/packages/effect/src/Formatter.ts +319 -0
  906. package/repos/effect/packages/effect/src/Function.ts +1415 -0
  907. package/repos/effect/packages/effect/src/Graph.ts +4892 -0
  908. package/repos/effect/packages/effect/src/HKT.ts +213 -0
  909. package/repos/effect/packages/effect/src/Hash.ts +539 -0
  910. package/repos/effect/packages/effect/src/HashMap.ts +1236 -0
  911. package/repos/effect/packages/effect/src/HashRing.ts +426 -0
  912. package/repos/effect/packages/effect/src/HashSet.ts +605 -0
  913. package/repos/effect/packages/effect/src/Inspectable.ts +329 -0
  914. package/repos/effect/packages/effect/src/Iterable.ts +2483 -0
  915. package/repos/effect/packages/effect/src/JsonPatch.ts +469 -0
  916. package/repos/effect/packages/effect/src/JsonPointer.ts +80 -0
  917. package/repos/effect/packages/effect/src/JsonSchema.ts +948 -0
  918. package/repos/effect/packages/effect/src/Latch.ts +373 -0
  919. package/repos/effect/packages/effect/src/Layer.ts +2773 -0
  920. package/repos/effect/packages/effect/src/LayerMap.ts +468 -0
  921. package/repos/effect/packages/effect/src/LogLevel.ts +412 -0
  922. package/repos/effect/packages/effect/src/Logger.ts +1284 -0
  923. package/repos/effect/packages/effect/src/ManagedRuntime.ts +381 -0
  924. package/repos/effect/packages/effect/src/Match.ts +2606 -0
  925. package/repos/effect/packages/effect/src/Metric.ts +4058 -0
  926. package/repos/effect/packages/effect/src/MutableHashMap.ts +845 -0
  927. package/repos/effect/packages/effect/src/MutableHashSet.ts +422 -0
  928. package/repos/effect/packages/effect/src/MutableList.ts +967 -0
  929. package/repos/effect/packages/effect/src/MutableRef.ts +822 -0
  930. package/repos/effect/packages/effect/src/Newtype.ts +319 -0
  931. package/repos/effect/packages/effect/src/NonEmptyIterable.ts +221 -0
  932. package/repos/effect/packages/effect/src/Number.ts +860 -0
  933. package/repos/effect/packages/effect/src/Optic.ts +1701 -0
  934. package/repos/effect/packages/effect/src/Option.ts +2664 -0
  935. package/repos/effect/packages/effect/src/Order.ts +982 -0
  936. package/repos/effect/packages/effect/src/Ordering.ts +182 -0
  937. package/repos/effect/packages/effect/src/PartitionedSemaphore.ts +561 -0
  938. package/repos/effect/packages/effect/src/Path.ts +870 -0
  939. package/repos/effect/packages/effect/src/Pipeable.ts +674 -0
  940. package/repos/effect/packages/effect/src/PlatformError.ts +221 -0
  941. package/repos/effect/packages/effect/src/Pool.ts +699 -0
  942. package/repos/effect/packages/effect/src/Predicate.ts +1872 -0
  943. package/repos/effect/packages/effect/src/PrimaryKey.ts +123 -0
  944. package/repos/effect/packages/effect/src/PubSub.ts +2797 -0
  945. package/repos/effect/packages/effect/src/Pull.ts +376 -0
  946. package/repos/effect/packages/effect/src/Queue.ts +1962 -0
  947. package/repos/effect/packages/effect/src/Random.ts +549 -0
  948. package/repos/effect/packages/effect/src/RcMap.ts +612 -0
  949. package/repos/effect/packages/effect/src/RcRef.ts +225 -0
  950. package/repos/effect/packages/effect/src/Record.ts +1563 -0
  951. package/repos/effect/packages/effect/src/Redactable.ts +168 -0
  952. package/repos/effect/packages/effect/src/Redacted.ts +314 -0
  953. package/repos/effect/packages/effect/src/Reducer.ts +178 -0
  954. package/repos/effect/packages/effect/src/Ref.ts +801 -0
  955. package/repos/effect/packages/effect/src/References.ts +786 -0
  956. package/repos/effect/packages/effect/src/RegExp.ts +82 -0
  957. package/repos/effect/packages/effect/src/Request.ts +598 -0
  958. package/repos/effect/packages/effect/src/RequestResolver.ts +1249 -0
  959. package/repos/effect/packages/effect/src/Resource.ts +184 -0
  960. package/repos/effect/packages/effect/src/Result.ts +1939 -0
  961. package/repos/effect/packages/effect/src/Runtime.ts +432 -0
  962. package/repos/effect/packages/effect/src/Schedule.ts +3564 -0
  963. package/repos/effect/packages/effect/src/Scheduler.ts +285 -0
  964. package/repos/effect/packages/effect/src/Schema.ts +14653 -0
  965. package/repos/effect/packages/effect/src/SchemaAST.ts +3903 -0
  966. package/repos/effect/packages/effect/src/SchemaGetter.ts +1870 -0
  967. package/repos/effect/packages/effect/src/SchemaIssue.ts +1176 -0
  968. package/repos/effect/packages/effect/src/SchemaParser.ts +1105 -0
  969. package/repos/effect/packages/effect/src/SchemaRepresentation.ts +3944 -0
  970. package/repos/effect/packages/effect/src/SchemaTransformation.ts +1818 -0
  971. package/repos/effect/packages/effect/src/SchemaUtils.ts +51 -0
  972. package/repos/effect/packages/effect/src/Scope.ts +572 -0
  973. package/repos/effect/packages/effect/src/ScopedCache.ts +820 -0
  974. package/repos/effect/packages/effect/src/ScopedRef.ts +192 -0
  975. package/repos/effect/packages/effect/src/Semaphore.ts +517 -0
  976. package/repos/effect/packages/effect/src/Sink.ts +2174 -0
  977. package/repos/effect/packages/effect/src/Stdio.ts +143 -0
  978. package/repos/effect/packages/effect/src/Stream.ts +11722 -0
  979. package/repos/effect/packages/effect/src/String.ts +1427 -0
  980. package/repos/effect/packages/effect/src/Struct.ts +979 -0
  981. package/repos/effect/packages/effect/src/SubscriptionRef.ts +1021 -0
  982. package/repos/effect/packages/effect/src/Symbol.ts +31 -0
  983. package/repos/effect/packages/effect/src/SynchronizedRef.ts +668 -0
  984. package/repos/effect/packages/effect/src/Take.ts +46 -0
  985. package/repos/effect/packages/effect/src/Terminal.ts +188 -0
  986. package/repos/effect/packages/effect/src/Tracer.ts +683 -0
  987. package/repos/effect/packages/effect/src/Trie.ts +953 -0
  988. package/repos/effect/packages/effect/src/Tuple.ts +737 -0
  989. package/repos/effect/packages/effect/src/TxChunk.ts +822 -0
  990. package/repos/effect/packages/effect/src/TxDeferred.ts +319 -0
  991. package/repos/effect/packages/effect/src/TxHashMap.ts +2165 -0
  992. package/repos/effect/packages/effect/src/TxHashSet.ts +908 -0
  993. package/repos/effect/packages/effect/src/TxPriorityQueue.ts +567 -0
  994. package/repos/effect/packages/effect/src/TxPubSub.ts +684 -0
  995. package/repos/effect/packages/effect/src/TxQueue.ts +1488 -0
  996. package/repos/effect/packages/effect/src/TxReentrantLock.ts +655 -0
  997. package/repos/effect/packages/effect/src/TxRef.ts +282 -0
  998. package/repos/effect/packages/effect/src/TxSemaphore.ts +707 -0
  999. package/repos/effect/packages/effect/src/TxSubscriptionRef.ts +518 -0
  1000. package/repos/effect/packages/effect/src/Types.ts +1121 -0
  1001. package/repos/effect/packages/effect/src/UndefinedOr.ts +239 -0
  1002. package/repos/effect/packages/effect/src/Unify.ts +314 -0
  1003. package/repos/effect/packages/effect/src/Utils.ts +221 -0
  1004. package/repos/effect/packages/effect/src/index.ts +712 -0
  1005. package/repos/effect/packages/effect/src/internal/array.ts +8 -0
  1006. package/repos/effect/packages/effect/src/internal/concurrency.ts +52 -0
  1007. package/repos/effect/packages/effect/src/internal/core.ts +666 -0
  1008. package/repos/effect/packages/effect/src/internal/dateTime.ts +1264 -0
  1009. package/repos/effect/packages/effect/src/internal/doNotation.ts +117 -0
  1010. package/repos/effect/packages/effect/src/internal/effect.ts +6427 -0
  1011. package/repos/effect/packages/effect/src/internal/equal.ts +28 -0
  1012. package/repos/effect/packages/effect/src/internal/errors.ts +9 -0
  1013. package/repos/effect/packages/effect/src/internal/executionPlan.ts +120 -0
  1014. package/repos/effect/packages/effect/src/internal/hashMap.ts +1309 -0
  1015. package/repos/effect/packages/effect/src/internal/hashSet.ts +190 -0
  1016. package/repos/effect/packages/effect/src/internal/layer.ts +88 -0
  1017. package/repos/effect/packages/effect/src/internal/matcher.ts +637 -0
  1018. package/repos/effect/packages/effect/src/internal/metric.ts +2 -0
  1019. package/repos/effect/packages/effect/src/internal/option.ts +98 -0
  1020. package/repos/effect/packages/effect/src/internal/random.ts +20 -0
  1021. package/repos/effect/packages/effect/src/internal/rcRef.ts +189 -0
  1022. package/repos/effect/packages/effect/src/internal/record.ts +18 -0
  1023. package/repos/effect/packages/effect/src/internal/redacted.ts +19 -0
  1024. package/repos/effect/packages/effect/src/internal/references.ts +72 -0
  1025. package/repos/effect/packages/effect/src/internal/request.ts +205 -0
  1026. package/repos/effect/packages/effect/src/internal/result.ts +112 -0
  1027. package/repos/effect/packages/effect/src/internal/schedule.ts +248 -0
  1028. package/repos/effect/packages/effect/src/internal/schema/annotations.ts +37 -0
  1029. package/repos/effect/packages/effect/src/internal/schema/arbitrary.ts +894 -0
  1030. package/repos/effect/packages/effect/src/internal/schema/cause.ts +26 -0
  1031. package/repos/effect/packages/effect/src/internal/schema/equivalence.ts +154 -0
  1032. package/repos/effect/packages/effect/src/internal/schema/representation.ts +799 -0
  1033. package/repos/effect/packages/effect/src/internal/schema/schema.ts +128 -0
  1034. package/repos/effect/packages/effect/src/internal/stream.ts +28 -0
  1035. package/repos/effect/packages/effect/src/internal/tracer.ts +41 -0
  1036. package/repos/effect/packages/effect/src/internal/trie.ts +733 -0
  1037. package/repos/effect/packages/effect/src/internal/version.ts +2 -0
  1038. package/repos/effect/packages/effect/src/testing/FastCheck.ts +89 -0
  1039. package/repos/effect/packages/effect/src/testing/TestClock.ts +547 -0
  1040. package/repos/effect/packages/effect/src/testing/TestConsole.ts +369 -0
  1041. package/repos/effect/packages/effect/src/testing/TestSchema.ts +567 -0
  1042. package/repos/effect/packages/effect/src/testing/index.ts +25 -0
  1043. package/repos/effect/packages/effect/src/unstable/ai/AiError.ts +1629 -0
  1044. package/repos/effect/packages/effect/src/unstable/ai/AnthropicStructuredOutput.ts +407 -0
  1045. package/repos/effect/packages/effect/src/unstable/ai/Chat.ts +931 -0
  1046. package/repos/effect/packages/effect/src/unstable/ai/EmbeddingModel.ts +269 -0
  1047. package/repos/effect/packages/effect/src/unstable/ai/IdGenerator.ts +300 -0
  1048. package/repos/effect/packages/effect/src/unstable/ai/LanguageModel.ts +2221 -0
  1049. package/repos/effect/packages/effect/src/unstable/ai/McpSchema.ts +2527 -0
  1050. package/repos/effect/packages/effect/src/unstable/ai/McpServer.ts +1468 -0
  1051. package/repos/effect/packages/effect/src/unstable/ai/Model.ts +166 -0
  1052. package/repos/effect/packages/effect/src/unstable/ai/OpenAiStructuredOutput.ts +476 -0
  1053. package/repos/effect/packages/effect/src/unstable/ai/Prompt.ts +2234 -0
  1054. package/repos/effect/packages/effect/src/unstable/ai/Response.ts +2582 -0
  1055. package/repos/effect/packages/effect/src/unstable/ai/ResponseIdTracker.ts +139 -0
  1056. package/repos/effect/packages/effect/src/unstable/ai/Telemetry.ts +515 -0
  1057. package/repos/effect/packages/effect/src/unstable/ai/Tokenizer.ts +176 -0
  1058. package/repos/effect/packages/effect/src/unstable/ai/Tool.ts +2003 -0
  1059. package/repos/effect/packages/effect/src/unstable/ai/Toolkit.ts +554 -0
  1060. package/repos/effect/packages/effect/src/unstable/ai/index.ts +90 -0
  1061. package/repos/effect/packages/effect/src/unstable/ai/internal/codec-transformer.ts +13 -0
  1062. package/repos/effect/packages/effect/src/unstable/cli/Argument.ts +749 -0
  1063. package/repos/effect/packages/effect/src/unstable/cli/CliError.ts +549 -0
  1064. package/repos/effect/packages/effect/src/unstable/cli/CliOutput.ts +607 -0
  1065. package/repos/effect/packages/effect/src/unstable/cli/Command.ts +1610 -0
  1066. package/repos/effect/packages/effect/src/unstable/cli/Completions.ts +123 -0
  1067. package/repos/effect/packages/effect/src/unstable/cli/Flag.ts +986 -0
  1068. package/repos/effect/packages/effect/src/unstable/cli/GlobalFlag.ts +295 -0
  1069. package/repos/effect/packages/effect/src/unstable/cli/HelpDoc.ts +323 -0
  1070. package/repos/effect/packages/effect/src/unstable/cli/Param.ts +2193 -0
  1071. package/repos/effect/packages/effect/src/unstable/cli/Primitive.ts +766 -0
  1072. package/repos/effect/packages/effect/src/unstable/cli/Prompt.ts +3852 -0
  1073. package/repos/effect/packages/effect/src/unstable/cli/SEMANTICS.md +157 -0
  1074. package/repos/effect/packages/effect/src/unstable/cli/index.ts +60 -0
  1075. package/repos/effect/packages/effect/src/unstable/cli/internal/ansi.ts +152 -0
  1076. package/repos/effect/packages/effect/src/unstable/cli/internal/auto-suggest.ts +41 -0
  1077. package/repos/effect/packages/effect/src/unstable/cli/internal/command.ts +340 -0
  1078. package/repos/effect/packages/effect/src/unstable/cli/internal/completions/bash.ts +222 -0
  1079. package/repos/effect/packages/effect/src/unstable/cli/internal/completions/descriptor.ts +133 -0
  1080. package/repos/effect/packages/effect/src/unstable/cli/internal/completions/fish.ts +253 -0
  1081. package/repos/effect/packages/effect/src/unstable/cli/internal/completions/zsh.ts +220 -0
  1082. package/repos/effect/packages/effect/src/unstable/cli/internal/config.ts +272 -0
  1083. package/repos/effect/packages/effect/src/unstable/cli/internal/help.ts +181 -0
  1084. package/repos/effect/packages/effect/src/unstable/cli/internal/lexer.ts +70 -0
  1085. package/repos/effect/packages/effect/src/unstable/cli/internal/parser.ts +932 -0
  1086. package/repos/effect/packages/effect/src/unstable/cluster/ClusterCron.ts +163 -0
  1087. package/repos/effect/packages/effect/src/unstable/cluster/ClusterError.ts +238 -0
  1088. package/repos/effect/packages/effect/src/unstable/cluster/ClusterMetrics.ts +112 -0
  1089. package/repos/effect/packages/effect/src/unstable/cluster/ClusterSchema.ts +170 -0
  1090. package/repos/effect/packages/effect/src/unstable/cluster/ClusterWorkflowEngine.ts +778 -0
  1091. package/repos/effect/packages/effect/src/unstable/cluster/DeliverAt.ts +58 -0
  1092. package/repos/effect/packages/effect/src/unstable/cluster/Entity.ts +779 -0
  1093. package/repos/effect/packages/effect/src/unstable/cluster/EntityAddress.ts +93 -0
  1094. package/repos/effect/packages/effect/src/unstable/cluster/EntityId.ts +50 -0
  1095. package/repos/effect/packages/effect/src/unstable/cluster/EntityProxy.ts +263 -0
  1096. package/repos/effect/packages/effect/src/unstable/cluster/EntityProxyServer.ts +149 -0
  1097. package/repos/effect/packages/effect/src/unstable/cluster/EntityResource.ts +184 -0
  1098. package/repos/effect/packages/effect/src/unstable/cluster/EntityType.ts +52 -0
  1099. package/repos/effect/packages/effect/src/unstable/cluster/Envelope.ts +433 -0
  1100. package/repos/effect/packages/effect/src/unstable/cluster/HttpRunner.ts +345 -0
  1101. package/repos/effect/packages/effect/src/unstable/cluster/K8sHttpClient.ts +297 -0
  1102. package/repos/effect/packages/effect/src/unstable/cluster/MachineId.ts +54 -0
  1103. package/repos/effect/packages/effect/src/unstable/cluster/Message.ts +314 -0
  1104. package/repos/effect/packages/effect/src/unstable/cluster/MessageStorage.ts +1072 -0
  1105. package/repos/effect/packages/effect/src/unstable/cluster/Reply.ts +455 -0
  1106. package/repos/effect/packages/effect/src/unstable/cluster/Runner.ts +129 -0
  1107. package/repos/effect/packages/effect/src/unstable/cluster/RunnerAddress.ts +112 -0
  1108. package/repos/effect/packages/effect/src/unstable/cluster/RunnerHealth.ts +145 -0
  1109. package/repos/effect/packages/effect/src/unstable/cluster/RunnerServer.ts +220 -0
  1110. package/repos/effect/packages/effect/src/unstable/cluster/RunnerStorage.ts +243 -0
  1111. package/repos/effect/packages/effect/src/unstable/cluster/Runners.ts +690 -0
  1112. package/repos/effect/packages/effect/src/unstable/cluster/ShardId.ts +178 -0
  1113. package/repos/effect/packages/effect/src/unstable/cluster/Sharding.ts +1488 -0
  1114. package/repos/effect/packages/effect/src/unstable/cluster/ShardingConfig.ts +367 -0
  1115. package/repos/effect/packages/effect/src/unstable/cluster/ShardingRegistrationEvent.ts +76 -0
  1116. package/repos/effect/packages/effect/src/unstable/cluster/SingleRunner.ts +75 -0
  1117. package/repos/effect/packages/effect/src/unstable/cluster/Singleton.ts +56 -0
  1118. package/repos/effect/packages/effect/src/unstable/cluster/SingletonAddress.ts +49 -0
  1119. package/repos/effect/packages/effect/src/unstable/cluster/Snowflake.ts +282 -0
  1120. package/repos/effect/packages/effect/src/unstable/cluster/SocketRunner.ts +96 -0
  1121. package/repos/effect/packages/effect/src/unstable/cluster/SqlMessageStorage.ts +1045 -0
  1122. package/repos/effect/packages/effect/src/unstable/cluster/SqlRunnerStorage.ts +700 -0
  1123. package/repos/effect/packages/effect/src/unstable/cluster/TestRunner.ts +36 -0
  1124. package/repos/effect/packages/effect/src/unstable/cluster/index.ts +195 -0
  1125. package/repos/effect/packages/effect/src/unstable/cluster/internal/entityManager.ts +678 -0
  1126. package/repos/effect/packages/effect/src/unstable/cluster/internal/entityReaper.ts +58 -0
  1127. package/repos/effect/packages/effect/src/unstable/cluster/internal/hash.ts +23 -0
  1128. package/repos/effect/packages/effect/src/unstable/cluster/internal/interruptors.ts +2 -0
  1129. package/repos/effect/packages/effect/src/unstable/cluster/internal/resourceMap.ts +100 -0
  1130. package/repos/effect/packages/effect/src/unstable/cluster/internal/resourceRef.ts +99 -0
  1131. package/repos/effect/packages/effect/src/unstable/devtools/DevTools.ts +68 -0
  1132. package/repos/effect/packages/effect/src/unstable/devtools/DevToolsClient.ts +236 -0
  1133. package/repos/effect/packages/effect/src/unstable/devtools/DevToolsSchema.ts +558 -0
  1134. package/repos/effect/packages/effect/src/unstable/devtools/DevToolsServer.ts +94 -0
  1135. package/repos/effect/packages/effect/src/unstable/devtools/index.ts +25 -0
  1136. package/repos/effect/packages/effect/src/unstable/encoding/Msgpack.ts +383 -0
  1137. package/repos/effect/packages/effect/src/unstable/encoding/Ndjson.ts +602 -0
  1138. package/repos/effect/packages/effect/src/unstable/encoding/Sse.ts +593 -0
  1139. package/repos/effect/packages/effect/src/unstable/encoding/index.ts +20 -0
  1140. package/repos/effect/packages/effect/src/unstable/eventlog/Event.ts +447 -0
  1141. package/repos/effect/packages/effect/src/unstable/eventlog/EventGroup.ts +193 -0
  1142. package/repos/effect/packages/effect/src/unstable/eventlog/EventJournal.ts +795 -0
  1143. package/repos/effect/packages/effect/src/unstable/eventlog/EventLog.ts +1030 -0
  1144. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogEncryption.ts +169 -0
  1145. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogMessage.ts +354 -0
  1146. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogRemote.ts +377 -0
  1147. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogServer.ts +242 -0
  1148. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogServerEncrypted.ts +268 -0
  1149. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogServerUnencrypted.ts +898 -0
  1150. package/repos/effect/packages/effect/src/unstable/eventlog/EventLogSessionAuth.ts +524 -0
  1151. package/repos/effect/packages/effect/src/unstable/eventlog/SqlEventJournal.ts +353 -0
  1152. package/repos/effect/packages/effect/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +343 -0
  1153. package/repos/effect/packages/effect/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +527 -0
  1154. package/repos/effect/packages/effect/src/unstable/eventlog/index.ts +75 -0
  1155. package/repos/effect/packages/effect/src/unstable/eventlog/internal/identityRootSecretDerivation.ts +153 -0
  1156. package/repos/effect/packages/effect/src/unstable/http/Cookies.ts +952 -0
  1157. package/repos/effect/packages/effect/src/unstable/http/Etag.ts +141 -0
  1158. package/repos/effect/packages/effect/src/unstable/http/FetchHttpClient.ts +123 -0
  1159. package/repos/effect/packages/effect/src/unstable/http/FindMyWay.ts +15 -0
  1160. package/repos/effect/packages/effect/src/unstable/http/Headers.ts +438 -0
  1161. package/repos/effect/packages/effect/src/unstable/http/HttpBody.ts +545 -0
  1162. package/repos/effect/packages/effect/src/unstable/http/HttpClient.ts +1630 -0
  1163. package/repos/effect/packages/effect/src/unstable/http/HttpClientError.ts +328 -0
  1164. package/repos/effect/packages/effect/src/unstable/http/HttpClientRequest.ts +968 -0
  1165. package/repos/effect/packages/effect/src/unstable/http/HttpClientResponse.ts +408 -0
  1166. package/repos/effect/packages/effect/src/unstable/http/HttpEffect.ts +400 -0
  1167. package/repos/effect/packages/effect/src/unstable/http/HttpIncomingMessage.ts +153 -0
  1168. package/repos/effect/packages/effect/src/unstable/http/HttpMethod.ts +124 -0
  1169. package/repos/effect/packages/effect/src/unstable/http/HttpMiddleware.ts +394 -0
  1170. package/repos/effect/packages/effect/src/unstable/http/HttpPlatform.ts +165 -0
  1171. package/repos/effect/packages/effect/src/unstable/http/HttpRouter.ts +1341 -0
  1172. package/repos/effect/packages/effect/src/unstable/http/HttpServer.ts +329 -0
  1173. package/repos/effect/packages/effect/src/unstable/http/HttpServerError.ts +374 -0
  1174. package/repos/effect/packages/effect/src/unstable/http/HttpServerRequest.ts +1081 -0
  1175. package/repos/effect/packages/effect/src/unstable/http/HttpServerRespondable.ts +115 -0
  1176. package/repos/effect/packages/effect/src/unstable/http/HttpServerResponse.ts +1381 -0
  1177. package/repos/effect/packages/effect/src/unstable/http/HttpStaticServer.ts +464 -0
  1178. package/repos/effect/packages/effect/src/unstable/http/HttpTraceContext.ts +160 -0
  1179. package/repos/effect/packages/effect/src/unstable/http/Multipart.ts +830 -0
  1180. package/repos/effect/packages/effect/src/unstable/http/Multipasta/HeadersParser.ts +14 -0
  1181. package/repos/effect/packages/effect/src/unstable/http/Multipasta/Node.ts +14 -0
  1182. package/repos/effect/packages/effect/src/unstable/http/Multipasta/Search.ts +14 -0
  1183. package/repos/effect/packages/effect/src/unstable/http/Multipasta/Web.ts +14 -0
  1184. package/repos/effect/packages/effect/src/unstable/http/Multipasta.ts +15 -0
  1185. package/repos/effect/packages/effect/src/unstable/http/Template.ts +262 -0
  1186. package/repos/effect/packages/effect/src/unstable/http/Url.ts +330 -0
  1187. package/repos/effect/packages/effect/src/unstable/http/UrlParams.ts +678 -0
  1188. package/repos/effect/packages/effect/src/unstable/http/index.ts +145 -0
  1189. package/repos/effect/packages/effect/src/unstable/http/internal/preResponseHandler.ts +15 -0
  1190. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApi.ts +316 -0
  1191. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiBuilder.ts +1015 -0
  1192. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiClient.ts +1005 -0
  1193. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiEndpoint.ts +1545 -0
  1194. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiError.ts +443 -0
  1195. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiGroup.ts +381 -0
  1196. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiMiddleware.ts +478 -0
  1197. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiScalar.ts +267 -0
  1198. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiSchema.ts +733 -0
  1199. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiSecurity.ts +244 -0
  1200. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiSwagger.ts +68 -0
  1201. package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiTest.ts +112 -0
  1202. package/repos/effect/packages/effect/src/unstable/httpapi/OpenApi.ts +1098 -0
  1203. package/repos/effect/packages/effect/src/unstable/httpapi/index.ts +70 -0
  1204. package/repos/effect/packages/effect/src/unstable/httpapi/internal/html.ts +18 -0
  1205. package/repos/effect/packages/effect/src/unstable/httpapi/internal/httpApiScalar.ts +5 -0
  1206. package/repos/effect/packages/effect/src/unstable/httpapi/internal/httpApiSwagger.ts +9 -0
  1207. package/repos/effect/packages/effect/src/unstable/observability/Otlp.ts +172 -0
  1208. package/repos/effect/packages/effect/src/unstable/observability/OtlpExporter.ts +149 -0
  1209. package/repos/effect/packages/effect/src/unstable/observability/OtlpLogger.ts +340 -0
  1210. package/repos/effect/packages/effect/src/unstable/observability/OtlpMetrics.ts +826 -0
  1211. package/repos/effect/packages/effect/src/unstable/observability/OtlpResource.ts +288 -0
  1212. package/repos/effect/packages/effect/src/unstable/observability/OtlpSerialization.ts +66 -0
  1213. package/repos/effect/packages/effect/src/unstable/observability/OtlpTracer.ts +442 -0
  1214. package/repos/effect/packages/effect/src/unstable/observability/PrometheusMetrics.ts +468 -0
  1215. package/repos/effect/packages/effect/src/unstable/observability/index.ts +45 -0
  1216. package/repos/effect/packages/effect/src/unstable/observability/internal/otlpEnv.ts +39 -0
  1217. package/repos/effect/packages/effect/src/unstable/observability/internal/otlpProtobuf.ts +779 -0
  1218. package/repos/effect/packages/effect/src/unstable/observability/internal/protobuf.ts +262 -0
  1219. package/repos/effect/packages/effect/src/unstable/persistence/KeyValueStore.ts +864 -0
  1220. package/repos/effect/packages/effect/src/unstable/persistence/Persistable.ts +252 -0
  1221. package/repos/effect/packages/effect/src/unstable/persistence/PersistedCache.ts +111 -0
  1222. package/repos/effect/packages/effect/src/unstable/persistence/PersistedQueue.ts +1196 -0
  1223. package/repos/effect/packages/effect/src/unstable/persistence/Persistence.ts +1071 -0
  1224. package/repos/effect/packages/effect/src/unstable/persistence/RateLimiter.ts +748 -0
  1225. package/repos/effect/packages/effect/src/unstable/persistence/Redis.ts +188 -0
  1226. package/repos/effect/packages/effect/src/unstable/persistence/index.ts +40 -0
  1227. package/repos/effect/packages/effect/src/unstable/process/ChildProcess.ts +1036 -0
  1228. package/repos/effect/packages/effect/src/unstable/process/ChildProcessSpawner.ts +285 -0
  1229. package/repos/effect/packages/effect/src/unstable/process/index.ts +15 -0
  1230. package/repos/effect/packages/effect/src/unstable/reactivity/AsyncResult.ts +1081 -0
  1231. package/repos/effect/packages/effect/src/unstable/reactivity/Atom.ts +2520 -0
  1232. package/repos/effect/packages/effect/src/unstable/reactivity/AtomHttpApi.ts +352 -0
  1233. package/repos/effect/packages/effect/src/unstable/reactivity/AtomRef.ts +352 -0
  1234. package/repos/effect/packages/effect/src/unstable/reactivity/AtomRegistry.ts +1127 -0
  1235. package/repos/effect/packages/effect/src/unstable/reactivity/AtomRpc.ts +305 -0
  1236. package/repos/effect/packages/effect/src/unstable/reactivity/Hydration.ts +155 -0
  1237. package/repos/effect/packages/effect/src/unstable/reactivity/Reactivity.ts +348 -0
  1238. package/repos/effect/packages/effect/src/unstable/reactivity/index.ts +45 -0
  1239. package/repos/effect/packages/effect/src/unstable/rpc/Rpc.ts +1255 -0
  1240. package/repos/effect/packages/effect/src/unstable/rpc/RpcClient.ts +1370 -0
  1241. package/repos/effect/packages/effect/src/unstable/rpc/RpcClientError.ts +57 -0
  1242. package/repos/effect/packages/effect/src/unstable/rpc/RpcGroup.ts +409 -0
  1243. package/repos/effect/packages/effect/src/unstable/rpc/RpcMessage.ts +402 -0
  1244. package/repos/effect/packages/effect/src/unstable/rpc/RpcMiddleware.ts +344 -0
  1245. package/repos/effect/packages/effect/src/unstable/rpc/RpcSchema.ts +97 -0
  1246. package/repos/effect/packages/effect/src/unstable/rpc/RpcSerialization.ts +546 -0
  1247. package/repos/effect/packages/effect/src/unstable/rpc/RpcServer.ts +1492 -0
  1248. package/repos/effect/packages/effect/src/unstable/rpc/RpcTest.ts +56 -0
  1249. package/repos/effect/packages/effect/src/unstable/rpc/RpcWorker.ts +118 -0
  1250. package/repos/effect/packages/effect/src/unstable/rpc/Utils.ts +120 -0
  1251. package/repos/effect/packages/effect/src/unstable/rpc/index.ts +65 -0
  1252. package/repos/effect/packages/effect/src/unstable/schema/Model.ts +862 -0
  1253. package/repos/effect/packages/effect/src/unstable/schema/VariantSchema.ts +604 -0
  1254. package/repos/effect/packages/effect/src/unstable/schema/index.ts +15 -0
  1255. package/repos/effect/packages/effect/src/unstable/socket/Socket.ts +911 -0
  1256. package/repos/effect/packages/effect/src/unstable/socket/SocketServer.ts +147 -0
  1257. package/repos/effect/packages/effect/src/unstable/socket/index.ts +15 -0
  1258. package/repos/effect/packages/effect/src/unstable/sql/Migrator.ts +440 -0
  1259. package/repos/effect/packages/effect/src/unstable/sql/SqlClient.ts +342 -0
  1260. package/repos/effect/packages/effect/src/unstable/sql/SqlConnection.ts +83 -0
  1261. package/repos/effect/packages/effect/src/unstable/sql/SqlError.ts +590 -0
  1262. package/repos/effect/packages/effect/src/unstable/sql/SqlModel.ts +359 -0
  1263. package/repos/effect/packages/effect/src/unstable/sql/SqlResolver.ts +380 -0
  1264. package/repos/effect/packages/effect/src/unstable/sql/SqlSchema.ts +172 -0
  1265. package/repos/effect/packages/effect/src/unstable/sql/SqlStream.ts +81 -0
  1266. package/repos/effect/packages/effect/src/unstable/sql/Statement.ts +1500 -0
  1267. package/repos/effect/packages/effect/src/unstable/sql/index.ts +50 -0
  1268. package/repos/effect/packages/effect/src/unstable/workers/Transferable.ts +191 -0
  1269. package/repos/effect/packages/effect/src/unstable/workers/Worker.ts +245 -0
  1270. package/repos/effect/packages/effect/src/unstable/workers/WorkerError.ts +148 -0
  1271. package/repos/effect/packages/effect/src/unstable/workers/WorkerRunner.ts +57 -0
  1272. package/repos/effect/packages/effect/src/unstable/workers/index.ts +25 -0
  1273. package/repos/effect/packages/effect/src/unstable/workflow/Activity.ts +322 -0
  1274. package/repos/effect/packages/effect/src/unstable/workflow/DurableClock.ts +117 -0
  1275. package/repos/effect/packages/effect/src/unstable/workflow/DurableDeferred.ts +653 -0
  1276. package/repos/effect/packages/effect/src/unstable/workflow/DurableQueue.ts +360 -0
  1277. package/repos/effect/packages/effect/src/unstable/workflow/Workflow.ts +898 -0
  1278. package/repos/effect/packages/effect/src/unstable/workflow/WorkflowEngine.ts +759 -0
  1279. package/repos/effect/packages/effect/src/unstable/workflow/WorkflowProxy.ts +212 -0
  1280. package/repos/effect/packages/effect/src/unstable/workflow/WorkflowProxyServer.ts +151 -0
  1281. package/repos/effect/packages/effect/src/unstable/workflow/index.ts +45 -0
  1282. package/repos/effect/packages/effect/src/unstable/workflow/internal/crypto.ts +15 -0
  1283. package/repos/effect/packages/effect/test/Array.test.ts +1579 -0
  1284. package/repos/effect/packages/effect/test/AtomRef.test.ts +27 -0
  1285. package/repos/effect/packages/effect/test/BigDecimal.test.ts +525 -0
  1286. package/repos/effect/packages/effect/test/BigInt.test.ts +57 -0
  1287. package/repos/effect/packages/effect/test/Boolean.test.ts +289 -0
  1288. package/repos/effect/packages/effect/test/Brand.test.ts +160 -0
  1289. package/repos/effect/packages/effect/test/Cache.test.ts +1423 -0
  1290. package/repos/effect/packages/effect/test/Cause.test.ts +834 -0
  1291. package/repos/effect/packages/effect/test/Channel.test.ts +556 -0
  1292. package/repos/effect/packages/effect/test/Chunk.test.ts +874 -0
  1293. package/repos/effect/packages/effect/test/Combiner.test.ts +42 -0
  1294. package/repos/effect/packages/effect/test/Config.test.ts +1416 -0
  1295. package/repos/effect/packages/effect/test/ConfigProvider.test.ts +726 -0
  1296. package/repos/effect/packages/effect/test/Cron.test.ts +401 -0
  1297. package/repos/effect/packages/effect/test/Crypto.test.ts +86 -0
  1298. package/repos/effect/packages/effect/test/Data.test.ts +269 -0
  1299. package/repos/effect/packages/effect/test/DateTime.test.ts +953 -0
  1300. package/repos/effect/packages/effect/test/Deferred.test.ts +165 -0
  1301. package/repos/effect/packages/effect/test/Duration.test.ts +679 -0
  1302. package/repos/effect/packages/effect/test/Effect.test.ts +2658 -0
  1303. package/repos/effect/packages/effect/test/EffectEager.test.ts +678 -0
  1304. package/repos/effect/packages/effect/test/EffectKeepAlive.test.ts +71 -0
  1305. package/repos/effect/packages/effect/test/Equal.test.ts +1278 -0
  1306. package/repos/effect/packages/effect/test/Equivalence.test.ts +170 -0
  1307. package/repos/effect/packages/effect/test/ExecutionPlan.test.ts +117 -0
  1308. package/repos/effect/packages/effect/test/Exit.test.ts +12 -0
  1309. package/repos/effect/packages/effect/test/Fiber.test.ts +9 -0
  1310. package/repos/effect/packages/effect/test/FiberHandle.test.ts +146 -0
  1311. package/repos/effect/packages/effect/test/FiberMap.test.ts +171 -0
  1312. package/repos/effect/packages/effect/test/FiberSet.test.ts +119 -0
  1313. package/repos/effect/packages/effect/test/Formatter.test.ts +247 -0
  1314. package/repos/effect/packages/effect/test/Function.test.ts +333 -0
  1315. package/repos/effect/packages/effect/test/Graph.test.ts +3505 -0
  1316. package/repos/effect/packages/effect/test/HashMap.test.ts +618 -0
  1317. package/repos/effect/packages/effect/test/HashSet.test.ts +298 -0
  1318. package/repos/effect/packages/effect/test/HttpClient.test.ts +131 -0
  1319. package/repos/effect/packages/effect/test/Iterable.test.ts +486 -0
  1320. package/repos/effect/packages/effect/test/JsonPatch.test.ts +948 -0
  1321. package/repos/effect/packages/effect/test/JsonPointer.test.ts +353 -0
  1322. package/repos/effect/packages/effect/test/JsonSchema.test.ts +1253 -0
  1323. package/repos/effect/packages/effect/test/Latch.test.ts +21 -0
  1324. package/repos/effect/packages/effect/test/Layer.test.ts +648 -0
  1325. package/repos/effect/packages/effect/test/LayerMap.test.ts +98 -0
  1326. package/repos/effect/packages/effect/test/LogLevel.test.ts +28 -0
  1327. package/repos/effect/packages/effect/test/Logger.test.ts +154 -0
  1328. package/repos/effect/packages/effect/test/ManagedRuntime.test.ts +58 -0
  1329. package/repos/effect/packages/effect/test/Match.test.ts +27 -0
  1330. package/repos/effect/packages/effect/test/Metric.test.ts +682 -0
  1331. package/repos/effect/packages/effect/test/Migrator.test.ts +69 -0
  1332. package/repos/effect/packages/effect/test/MutableHashMap.test.ts +309 -0
  1333. package/repos/effect/packages/effect/test/MutableHashSet.test.ts +10 -0
  1334. package/repos/effect/packages/effect/test/MutableList.test.ts +58 -0
  1335. package/repos/effect/packages/effect/test/Newtype.test.ts +90 -0
  1336. package/repos/effect/packages/effect/test/Number.test.ts +422 -0
  1337. package/repos/effect/packages/effect/test/Optic.test.ts +452 -0
  1338. package/repos/effect/packages/effect/test/Option.test.ts +564 -0
  1339. package/repos/effect/packages/effect/test/Order.test.ts +163 -0
  1340. package/repos/effect/packages/effect/test/Ordering.test.ts +18 -0
  1341. package/repos/effect/packages/effect/test/PartitionedSemaphore.test.ts +74 -0
  1342. package/repos/effect/packages/effect/test/Pathfinding.test.ts +426 -0
  1343. package/repos/effect/packages/effect/test/Pool.test.ts +422 -0
  1344. package/repos/effect/packages/effect/test/Predicate.test.ts +555 -0
  1345. package/repos/effect/packages/effect/test/PubSub.test.ts +538 -0
  1346. package/repos/effect/packages/effect/test/Queue.test.ts +317 -0
  1347. package/repos/effect/packages/effect/test/Random.test.ts +238 -0
  1348. package/repos/effect/packages/effect/test/RcMap.test.ts +237 -0
  1349. package/repos/effect/packages/effect/test/RcRef.test.ts +97 -0
  1350. package/repos/effect/packages/effect/test/Record.test.ts +395 -0
  1351. package/repos/effect/packages/effect/test/Redacted.test.ts +59 -0
  1352. package/repos/effect/packages/effect/test/Reducer.test.ts +12 -0
  1353. package/repos/effect/packages/effect/test/Ref.test.ts +187 -0
  1354. package/repos/effect/packages/effect/test/Request.test.ts +305 -0
  1355. package/repos/effect/packages/effect/test/Resource.test.ts +59 -0
  1356. package/repos/effect/packages/effect/test/Result.test.ts +517 -0
  1357. package/repos/effect/packages/effect/test/Schedule.test.ts +395 -0
  1358. package/repos/effect/packages/effect/test/Scheduler.test.ts +70 -0
  1359. package/repos/effect/packages/effect/test/Scope.test.ts +19 -0
  1360. package/repos/effect/packages/effect/test/ScopedCache.test.ts +2316 -0
  1361. package/repos/effect/packages/effect/test/ScopedRef.test.ts +80 -0
  1362. package/repos/effect/packages/effect/test/Semaphore.test.ts +469 -0
  1363. package/repos/effect/packages/effect/test/Sink.test.ts +230 -0
  1364. package/repos/effect/packages/effect/test/Stream.test.ts +4712 -0
  1365. package/repos/effect/packages/effect/test/String.test.ts +690 -0
  1366. package/repos/effect/packages/effect/test/Struct.test.ts +216 -0
  1367. package/repos/effect/packages/effect/test/SubscriptionRef.test.ts +90 -0
  1368. package/repos/effect/packages/effect/test/Symbol.test.ts +50 -0
  1369. package/repos/effect/packages/effect/test/SynchronizedRef.test.ts +105 -0
  1370. package/repos/effect/packages/effect/test/TestClock.test.ts +71 -0
  1371. package/repos/effect/packages/effect/test/Tracer.test.ts +410 -0
  1372. package/repos/effect/packages/effect/test/Trie.test.ts +531 -0
  1373. package/repos/effect/packages/effect/test/Tuple.test.ts +127 -0
  1374. package/repos/effect/packages/effect/test/TxChunk.test.ts +342 -0
  1375. package/repos/effect/packages/effect/test/TxDeferred.test.ts +197 -0
  1376. package/repos/effect/packages/effect/test/TxHashMap.test.ts +963 -0
  1377. package/repos/effect/packages/effect/test/TxHashSet.test.ts +442 -0
  1378. package/repos/effect/packages/effect/test/TxPriorityQueue.test.ts +187 -0
  1379. package/repos/effect/packages/effect/test/TxPubSub.test.ts +391 -0
  1380. package/repos/effect/packages/effect/test/TxQueue.test.ts +1260 -0
  1381. package/repos/effect/packages/effect/test/TxReentrantLock.test.ts +413 -0
  1382. package/repos/effect/packages/effect/test/TxSemaphore.test.ts +283 -0
  1383. package/repos/effect/packages/effect/test/TxSubscriptionRef.test.ts +197 -0
  1384. package/repos/effect/packages/effect/test/UndefinedOr.test.ts +65 -0
  1385. package/repos/effect/packages/effect/test/cluster/ClusterWorkflowEngine.test.ts +652 -0
  1386. package/repos/effect/packages/effect/test/cluster/Entity.test.ts +81 -0
  1387. package/repos/effect/packages/effect/test/cluster/K8sHttpClient.test.ts +34 -0
  1388. package/repos/effect/packages/effect/test/cluster/MessageStorage.test.ts +196 -0
  1389. package/repos/effect/packages/effect/test/cluster/Sharding.test.ts +578 -0
  1390. package/repos/effect/packages/effect/test/cluster/TestEntity.ts +132 -0
  1391. package/repos/effect/packages/effect/test/reactivity/AsyncResult.test.ts +41 -0
  1392. package/repos/effect/packages/effect/test/reactivity/Atom.test.ts +2551 -0
  1393. package/repos/effect/packages/effect/test/reactivity/AtomHttpApi.test.ts +86 -0
  1394. package/repos/effect/packages/effect/test/reactivity/AtomRpc.test.ts +70 -0
  1395. package/repos/effect/packages/effect/test/rpc/Rpc.test.ts +73 -0
  1396. package/repos/effect/packages/effect/test/rpc/RpcClient.test.ts +58 -0
  1397. package/repos/effect/packages/effect/test/rpc/RpcSerialization.test.ts +171 -0
  1398. package/repos/effect/packages/effect/test/schema/HMR.test.ts +72 -0
  1399. package/repos/effect/packages/effect/test/schema/Schema.test.ts +9133 -0
  1400. package/repos/effect/packages/effect/test/schema/SchemaAST.test.ts +280 -0
  1401. package/repos/effect/packages/effect/test/schema/SchemaGetter.test.ts +383 -0
  1402. package/repos/effect/packages/effect/test/schema/SchemaIssue.test.ts +9 -0
  1403. package/repos/effect/packages/effect/test/schema/SchemaParser.test.ts +323 -0
  1404. package/repos/effect/packages/effect/test/schema/fixtures/HMR-Class.ts +5 -0
  1405. package/repos/effect/packages/effect/test/schema/fixtures/HMR-sanity-check.ts +3 -0
  1406. package/repos/effect/packages/effect/test/schema/representation/fromASTs.test.ts +820 -0
  1407. package/repos/effect/packages/effect/test/schema/representation/fromJsonSchemaDocument.test.ts +2137 -0
  1408. package/repos/effect/packages/effect/test/schema/representation/toCodeDocument.test.ts +2089 -0
  1409. package/repos/effect/packages/effect/test/schema/representation/toJsonSchemaMultiDocument.test.ts +39 -0
  1410. package/repos/effect/packages/effect/test/schema/representation/toSchema.test.ts +506 -0
  1411. package/repos/effect/packages/effect/test/schema/toArbitrary.test.ts +1693 -0
  1412. package/repos/effect/packages/effect/test/schema/toCodec.test.ts +3149 -0
  1413. package/repos/effect/packages/effect/test/schema/toDifferJsonPatch.test.ts +239 -0
  1414. package/repos/effect/packages/effect/test/schema/toEquivalence.test.ts +519 -0
  1415. package/repos/effect/packages/effect/test/schema/toFormatter.test.ts +565 -0
  1416. package/repos/effect/packages/effect/test/schema/toIso.test.ts +394 -0
  1417. package/repos/effect/packages/effect/test/schema/toJsonSchemaDocument.test.ts +3630 -0
  1418. package/repos/effect/packages/effect/test/schema/toStandardJSONSchemaV1.test.ts +126 -0
  1419. package/repos/effect/packages/effect/test/schema/toStandardSchemaV1.test.ts +495 -0
  1420. package/repos/effect/packages/effect/test/schema/v3-v4.test.ts +250 -0
  1421. package/repos/effect/packages/effect/test/testing/TestSchema.test.ts +78 -0
  1422. package/repos/effect/packages/effect/test/unstable/ai/AiError.test.ts +823 -0
  1423. package/repos/effect/packages/effect/test/unstable/ai/AnthropicStructuredOutput.test.ts +593 -0
  1424. package/repos/effect/packages/effect/test/unstable/ai/Chat.test.ts +147 -0
  1425. package/repos/effect/packages/effect/test/unstable/ai/EmbeddingModel.test.ts +185 -0
  1426. package/repos/effect/packages/effect/test/unstable/ai/LanguageModel.test.ts +1714 -0
  1427. package/repos/effect/packages/effect/test/unstable/ai/LanguageModelTrackerLifecycle.test.ts +413 -0
  1428. package/repos/effect/packages/effect/test/unstable/ai/McpServer.test.ts +82 -0
  1429. package/repos/effect/packages/effect/test/unstable/ai/Model.test.ts +16 -0
  1430. package/repos/effect/packages/effect/test/unstable/ai/OpenAiStructuredOutput.test.ts +723 -0
  1431. package/repos/effect/packages/effect/test/unstable/ai/Prompt.test.ts +346 -0
  1432. package/repos/effect/packages/effect/test/unstable/ai/ResponseIdTracker.test.ts +424 -0
  1433. package/repos/effect/packages/effect/test/unstable/ai/Tool.test.ts +1264 -0
  1434. package/repos/effect/packages/effect/test/unstable/ai/utils.ts +68 -0
  1435. package/repos/effect/packages/effect/test/unstable/cli/Arguments.test.ts +390 -0
  1436. package/repos/effect/packages/effect/test/unstable/cli/Command.test.ts +1801 -0
  1437. package/repos/effect/packages/effect/test/unstable/cli/Errors.test.ts +150 -0
  1438. package/repos/effect/packages/effect/test/unstable/cli/Help.test.ts +572 -0
  1439. package/repos/effect/packages/effect/test/unstable/cli/LogLevel.test.ts +202 -0
  1440. package/repos/effect/packages/effect/test/unstable/cli/Param.test.ts +391 -0
  1441. package/repos/effect/packages/effect/test/unstable/cli/Primitive.test.ts +321 -0
  1442. package/repos/effect/packages/effect/test/unstable/cli/Prompt.test.ts +597 -0
  1443. package/repos/effect/packages/effect/test/unstable/cli/completions/completions.test.ts +656 -0
  1444. package/repos/effect/packages/effect/test/unstable/cli/completions/descriptor.test.ts +245 -0
  1445. package/repos/effect/packages/effect/test/unstable/cli/fixtures/ComprehensiveCli.ts +422 -0
  1446. package/repos/effect/packages/effect/test/unstable/cli/services/MockTerminal.ts +135 -0
  1447. package/repos/effect/packages/effect/test/unstable/cli/services/TestActions.ts +36 -0
  1448. package/repos/effect/packages/effect/test/unstable/encoding/Ndjson.test.ts +18 -0
  1449. package/repos/effect/packages/effect/test/unstable/encoding/Sse.test.ts +62 -0
  1450. package/repos/effect/packages/effect/test/unstable/eventlog/EventJournal.test.ts +25 -0
  1451. package/repos/effect/packages/effect/test/unstable/eventlog/EventLog.test.ts +104 -0
  1452. package/repos/effect/packages/effect/test/unstable/eventlog/EventLogIdentityDerivation.test.ts +85 -0
  1453. package/repos/effect/packages/effect/test/unstable/eventlog/EventLogRemote.test.ts +176 -0
  1454. package/repos/effect/packages/effect/test/unstable/eventlog/EventLogSessionAuth.test.ts +130 -0
  1455. package/repos/effect/packages/effect/test/unstable/eventlog/SqlEventLogServerUnencryptedStorageTest.ts +169 -0
  1456. package/repos/effect/packages/effect/test/unstable/http/Cookies.test.ts +80 -0
  1457. package/repos/effect/packages/effect/test/unstable/http/Headers.test.ts +73 -0
  1458. package/repos/effect/packages/effect/test/unstable/http/HttpClient.test.ts +306 -0
  1459. package/repos/effect/packages/effect/test/unstable/http/HttpClientRequest.test.ts +164 -0
  1460. package/repos/effect/packages/effect/test/unstable/http/HttpEffect.test.ts +254 -0
  1461. package/repos/effect/packages/effect/test/unstable/http/HttpMiddleware.test.ts +57 -0
  1462. package/repos/effect/packages/effect/test/unstable/http/HttpServerError.test.ts +121 -0
  1463. package/repos/effect/packages/effect/test/unstable/http/HttpServerRequest.test.ts +157 -0
  1464. package/repos/effect/packages/effect/test/unstable/http/HttpServerResponse.test.ts +76 -0
  1465. package/repos/effect/packages/effect/test/unstable/http/Multipart.test.ts +69 -0
  1466. package/repos/effect/packages/effect/test/unstable/http/Url.test.ts +98 -0
  1467. package/repos/effect/packages/effect/test/unstable/http/UrlParams.test.ts +30 -0
  1468. package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiBuilder.test.ts +186 -0
  1469. package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiClient.test.ts +446 -0
  1470. package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiEndpoint.test.ts +160 -0
  1471. package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiSchema.test.ts +108 -0
  1472. package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiSecurity.test.ts +41 -0
  1473. package/repos/effect/packages/effect/test/unstable/httpapi/OpenApi.test.ts +39 -0
  1474. package/repos/effect/packages/effect/test/unstable/observability/OtlpConfig.test.ts +151 -0
  1475. package/repos/effect/packages/effect/test/unstable/observability/OtlpExporter.test.ts +108 -0
  1476. package/repos/effect/packages/effect/test/unstable/observability/OtlpMetrics.test.ts +518 -0
  1477. package/repos/effect/packages/effect/test/unstable/observability/OtlpResource.test.ts +84 -0
  1478. package/repos/effect/packages/effect/test/unstable/observability/PrometheusMetrics.test.ts +417 -0
  1479. package/repos/effect/packages/effect/test/unstable/persistence/KeyValueStore.test.ts +164 -0
  1480. package/repos/effect/packages/effect/test/unstable/persistence/KeyValueStoreTest.ts +85 -0
  1481. package/repos/effect/packages/effect/test/unstable/persistence/PersistedCache.test.ts +4 -0
  1482. package/repos/effect/packages/effect/test/unstable/persistence/PersistedCacheTest.ts +111 -0
  1483. package/repos/effect/packages/effect/test/unstable/persistence/PersistedQueue.test.ts +4 -0
  1484. package/repos/effect/packages/effect/test/unstable/persistence/PersistedQueueTest.ts +106 -0
  1485. package/repos/effect/packages/effect/test/unstable/persistence/RateLimiter.test.ts +145 -0
  1486. package/repos/effect/packages/effect/test/unstable/persistence/Redis.test.ts +43 -0
  1487. package/repos/effect/packages/effect/test/unstable/process/ChildProcess.test.ts +352 -0
  1488. package/repos/effect/packages/effect/test/unstable/schema/VariantSchema.test.ts +72 -0
  1489. package/repos/effect/packages/effect/test/unstable/sql/SqlError.test.ts +228 -0
  1490. package/repos/effect/packages/effect/test/unstable/sql/SqlSchema.test.ts +168 -0
  1491. package/repos/effect/packages/effect/test/unstable/workers/WorkerError.test.ts +90 -0
  1492. package/repos/effect/packages/effect/test/unstable/workflow/DurableQueue.test.ts +105 -0
  1493. package/repos/effect/packages/effect/test/unstable/workflow/WorkflowEngine.test.ts +60 -0
  1494. package/repos/effect/packages/effect/test/utils/assert.ts +182 -0
  1495. package/repos/effect/packages/effect/test/utils/chunkCoordination.ts +36 -0
  1496. package/repos/effect/packages/effect/test/utils/counter.ts +54 -0
  1497. package/repos/effect/packages/effect/tsconfig.json +8 -0
  1498. package/repos/effect/packages/effect/typetest/AiError.tst.ts +49 -0
  1499. package/repos/effect/packages/effect/typetest/Array.tst.ts +1289 -0
  1500. package/repos/effect/packages/effect/typetest/Brand.tst.ts +51 -0
  1501. package/repos/effect/packages/effect/typetest/Channel.tst.ts +112 -0
  1502. package/repos/effect/packages/effect/typetest/Config.tst.ts +31 -0
  1503. package/repos/effect/packages/effect/typetest/Data.tst.ts +121 -0
  1504. package/repos/effect/packages/effect/typetest/Effect.tst.ts +976 -0
  1505. package/repos/effect/packages/effect/typetest/Equivalence.tst.ts +19 -0
  1506. package/repos/effect/packages/effect/typetest/Newtype.tst.ts +72 -0
  1507. package/repos/effect/packages/effect/typetest/Optic.tst.ts +130 -0
  1508. package/repos/effect/packages/effect/typetest/Option.tst.ts +72 -0
  1509. package/repos/effect/packages/effect/typetest/Order.tst.ts +19 -0
  1510. package/repos/effect/packages/effect/typetest/Predicate.tst.ts +251 -0
  1511. package/repos/effect/packages/effect/typetest/Result.tst.ts +353 -0
  1512. package/repos/effect/packages/effect/typetest/Schedule.tst.ts +21 -0
  1513. package/repos/effect/packages/effect/typetest/Stream.tst.ts +197 -0
  1514. package/repos/effect/packages/effect/typetest/Struct.tst.ts +422 -0
  1515. package/repos/effect/packages/effect/typetest/Tuple.tst.ts +177 -0
  1516. package/repos/effect/packages/effect/typetest/Types.tst.ts +364 -0
  1517. package/repos/effect/packages/effect/typetest/VariantSchema.tst.ts +76 -0
  1518. package/repos/effect/packages/effect/typetest/schema/Array.tst.ts +46 -0
  1519. package/repos/effect/packages/effect/typetest/schema/Literals.tst.ts +58 -0
  1520. package/repos/effect/packages/effect/typetest/schema/Record.tst.ts +145 -0
  1521. package/repos/effect/packages/effect/typetest/schema/Schema.tst.ts +1854 -0
  1522. package/repos/effect/packages/effect/typetest/schema/Struct.tst.ts +745 -0
  1523. package/repos/effect/packages/effect/typetest/schema/Tuple.tst.ts +199 -0
  1524. package/repos/effect/packages/effect/typetest/schema/Union.tst.ts +198 -0
  1525. package/repos/effect/packages/effect/typetest/schema/api.tst.ts +276 -0
  1526. package/repos/effect/packages/effect/typetest/schema/toArbitrary.tst.ts +65 -0
  1527. package/repos/effect/packages/effect/typetest/schema/toIso.tst.ts +282 -0
  1528. package/repos/effect/packages/effect/typetest/unstable/ai/LanguageModel.tst.ts +191 -0
  1529. package/repos/effect/packages/effect/typetest/unstable/ai/Tool.tst.ts +33 -0
  1530. package/repos/effect/packages/effect/typetest/unstable/cli/Command.tst.ts +124 -0
  1531. package/repos/effect/packages/effect/typetest/unstable/cli/Param.tst.ts +20 -0
  1532. package/repos/effect/packages/effect/typetest/unstable/cli/Prompt.tst.ts +97 -0
  1533. package/repos/effect/packages/effect/typetest/unstable/encoding/Ndjson.tst.ts +24 -0
  1534. package/repos/effect/packages/effect/typetest/unstable/http/HttpClient.tst.ts +143 -0
  1535. package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiBuilder.tst.ts +98 -0
  1536. package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiClient.tst.ts +677 -0
  1537. package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiEndpoint.tst.ts +466 -0
  1538. package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiMiddleware.tst.ts +90 -0
  1539. package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiSchema.tst.ts +135 -0
  1540. package/repos/effect/packages/effect/typetest/unstable/reactivity/AsyncResult.tst.ts +65 -0
  1541. package/repos/effect/packages/effect/typetest/unstable/reactivity/AtomHttpApi.tst.ts +63 -0
  1542. package/repos/effect/packages/effect/typetest/unstable/rpc/Rpc.tst.ts +74 -0
  1543. package/repos/effect/packages/effect/typetest/unstable/rpc/RpcGroup.tst.ts +61 -0
  1544. package/repos/effect/packages/effect/typetest/unstable/rpc/RpcMiddleware.tst.ts +41 -0
  1545. package/repos/effect/packages/effect/typetest/unstable/rpc/RpcServer.tst.ts +26 -0
  1546. package/repos/effect/packages/effect/typetest/unstable/sql/SqlSchema.tst.ts +75 -0
  1547. package/repos/effect/packages/effect/typetest/unstable/workflow/Workflow.tst.ts +16 -0
  1548. package/repos/effect/packages/effect/vitest.config.ts +11 -0
  1549. package/repos/effect/packages/opentelemetry/CHANGELOG.md +620 -0
  1550. package/repos/effect/packages/opentelemetry/LICENSE +21 -0
  1551. package/repos/effect/packages/opentelemetry/README.md +5 -0
  1552. package/repos/effect/packages/opentelemetry/docgen.json +30 -0
  1553. package/repos/effect/packages/opentelemetry/package.json +126 -0
  1554. package/repos/effect/packages/opentelemetry/src/Logger.ts +193 -0
  1555. package/repos/effect/packages/opentelemetry/src/Metrics.ts +138 -0
  1556. package/repos/effect/packages/opentelemetry/src/NodeSdk.ts +162 -0
  1557. package/repos/effect/packages/opentelemetry/src/Resource.ts +147 -0
  1558. package/repos/effect/packages/opentelemetry/src/Tracer.ts +594 -0
  1559. package/repos/effect/packages/opentelemetry/src/WebSdk.ts +140 -0
  1560. package/repos/effect/packages/opentelemetry/src/index.ts +35 -0
  1561. package/repos/effect/packages/opentelemetry/src/internal/attributes.ts +28 -0
  1562. package/repos/effect/packages/opentelemetry/src/internal/metrics.ts +463 -0
  1563. package/repos/effect/packages/opentelemetry/src/internal/utilities.ts +5 -0
  1564. package/repos/effect/packages/opentelemetry/test/Logger.test.ts +122 -0
  1565. package/repos/effect/packages/opentelemetry/test/Metrics.test.ts +339 -0
  1566. package/repos/effect/packages/opentelemetry/test/Tracer.test.ts +167 -0
  1567. package/repos/effect/packages/opentelemetry/tsconfig.json +8 -0
  1568. package/repos/effect/packages/opentelemetry/vitest.config.ts +6 -0
  1569. package/repos/effect/packages/platform-browser/CHANGELOG.md +637 -0
  1570. package/repos/effect/packages/platform-browser/LICENSE +21 -0
  1571. package/repos/effect/packages/platform-browser/README.md +1 -0
  1572. package/repos/effect/packages/platform-browser/docgen.json +21 -0
  1573. package/repos/effect/packages/platform-browser/package.json +74 -0
  1574. package/repos/effect/packages/platform-browser/src/BrowserCrypto.ts +97 -0
  1575. package/repos/effect/packages/platform-browser/src/BrowserHttpClient.ts +430 -0
  1576. package/repos/effect/packages/platform-browser/src/BrowserKeyValueStore.ts +177 -0
  1577. package/repos/effect/packages/platform-browser/src/BrowserPersistence.ts +334 -0
  1578. package/repos/effect/packages/platform-browser/src/BrowserRuntime.ts +53 -0
  1579. package/repos/effect/packages/platform-browser/src/BrowserSocket.ts +52 -0
  1580. package/repos/effect/packages/platform-browser/src/BrowserStream.ts +56 -0
  1581. package/repos/effect/packages/platform-browser/src/BrowserWorker.ts +98 -0
  1582. package/repos/effect/packages/platform-browser/src/BrowserWorkerRunner.ts +199 -0
  1583. package/repos/effect/packages/platform-browser/src/Clipboard.ts +143 -0
  1584. package/repos/effect/packages/platform-browser/src/Geolocation.ts +233 -0
  1585. package/repos/effect/packages/platform-browser/src/IndexedDb.ts +113 -0
  1586. package/repos/effect/packages/platform-browser/src/IndexedDbDatabase.ts +648 -0
  1587. package/repos/effect/packages/platform-browser/src/IndexedDbQueryBuilder.ts +2032 -0
  1588. package/repos/effect/packages/platform-browser/src/IndexedDbTable.ts +260 -0
  1589. package/repos/effect/packages/platform-browser/src/IndexedDbVersion.ts +138 -0
  1590. package/repos/effect/packages/platform-browser/src/Permissions.ts +146 -0
  1591. package/repos/effect/packages/platform-browser/src/index.ts +90 -0
  1592. package/repos/effect/packages/platform-browser/test/BrowserCrypto.test.ts +74 -0
  1593. package/repos/effect/packages/platform-browser/test/BrowserHttpClient.test.ts +91 -0
  1594. package/repos/effect/packages/platform-browser/test/BrowserKeyValueStore.test.ts +23 -0
  1595. package/repos/effect/packages/platform-browser/test/BrowserPersistence.test.ts +209 -0
  1596. package/repos/effect/packages/platform-browser/test/BrowserPersistencePersistedCache.test.ts +29 -0
  1597. package/repos/effect/packages/platform-browser/test/IndexedDbDatabase.test.ts +253 -0
  1598. package/repos/effect/packages/platform-browser/test/IndexedDbQueryBuilder.test.ts +1459 -0
  1599. package/repos/effect/packages/platform-browser/test/IndexedDbTable.test.ts +101 -0
  1600. package/repos/effect/packages/platform-browser/test/IndexedDbVersion.test.ts +50 -0
  1601. package/repos/effect/packages/platform-browser/test/Permissions.test.ts +12 -0
  1602. package/repos/effect/packages/platform-browser/test/RpcWorker.test.ts +19 -0
  1603. package/repos/effect/packages/platform-browser/test/fixtures/rpc-e2e.ts +141 -0
  1604. package/repos/effect/packages/platform-browser/test/fixtures/rpc-schemas.ts +157 -0
  1605. package/repos/effect/packages/platform-browser/test/fixtures/rpc-worker.ts +12 -0
  1606. package/repos/effect/packages/platform-browser/tsconfig.json +8 -0
  1607. package/repos/effect/packages/platform-browser/vitest.config.ts +17 -0
  1608. package/repos/effect/packages/platform-browser/vitest.setup.ts +5 -0
  1609. package/repos/effect/packages/platform-bun/CHANGELOG.md +691 -0
  1610. package/repos/effect/packages/platform-bun/LICENSE +21 -0
  1611. package/repos/effect/packages/platform-bun/README.md +7 -0
  1612. package/repos/effect/packages/platform-bun/docgen.json +20 -0
  1613. package/repos/effect/packages/platform-bun/package.json +73 -0
  1614. package/repos/effect/packages/platform-bun/src/BunChildProcessSpawner.ts +6 -0
  1615. package/repos/effect/packages/platform-bun/src/BunClusterHttp.ts +174 -0
  1616. package/repos/effect/packages/platform-bun/src/BunClusterSocket.ts +153 -0
  1617. package/repos/effect/packages/platform-bun/src/BunCrypto.ts +24 -0
  1618. package/repos/effect/packages/platform-bun/src/BunFileSystem.ts +20 -0
  1619. package/repos/effect/packages/platform-bun/src/BunHttpClient.ts +9 -0
  1620. package/repos/effect/packages/platform-bun/src/BunHttpPlatform.ts +50 -0
  1621. package/repos/effect/packages/platform-bun/src/BunHttpServer.ts +600 -0
  1622. package/repos/effect/packages/platform-bun/src/BunHttpServerRequest.ts +19 -0
  1623. package/repos/effect/packages/platform-bun/src/BunMultipart.ts +54 -0
  1624. package/repos/effect/packages/platform-bun/src/BunPath.ts +37 -0
  1625. package/repos/effect/packages/platform-bun/src/BunRedis.ts +88 -0
  1626. package/repos/effect/packages/platform-bun/src/BunRuntime.ts +52 -0
  1627. package/repos/effect/packages/platform-bun/src/BunServices.ts +49 -0
  1628. package/repos/effect/packages/platform-bun/src/BunSink.ts +8 -0
  1629. package/repos/effect/packages/platform-bun/src/BunSocket.ts +54 -0
  1630. package/repos/effect/packages/platform-bun/src/BunSocketServer.ts +8 -0
  1631. package/repos/effect/packages/platform-bun/src/BunStdio.ts +22 -0
  1632. package/repos/effect/packages/platform-bun/src/BunStream.ts +68 -0
  1633. package/repos/effect/packages/platform-bun/src/BunTerminal.ts +32 -0
  1634. package/repos/effect/packages/platform-bun/src/BunWorker.ts +92 -0
  1635. package/repos/effect/packages/platform-bun/src/BunWorkerRunner.ts +113 -0
  1636. package/repos/effect/packages/platform-bun/src/index.ts +115 -0
  1637. package/repos/effect/packages/platform-bun/tsconfig.json +12 -0
  1638. package/repos/effect/packages/platform-node/CHANGELOG.md +695 -0
  1639. package/repos/effect/packages/platform-node/LICENSE +21 -0
  1640. package/repos/effect/packages/platform-node/README.md +7 -0
  1641. package/repos/effect/packages/platform-node/docgen.json +24 -0
  1642. package/repos/effect/packages/platform-node/package.json +82 -0
  1643. package/repos/effect/packages/platform-node/src/Mime.ts +25 -0
  1644. package/repos/effect/packages/platform-node/src/NodeChildProcessSpawner.ts +6 -0
  1645. package/repos/effect/packages/platform-node/src/NodeClusterHttp.ts +155 -0
  1646. package/repos/effect/packages/platform-node/src/NodeClusterSocket.ts +176 -0
  1647. package/repos/effect/packages/platform-node/src/NodeCrypto.ts +24 -0
  1648. package/repos/effect/packages/platform-node/src/NodeFileSystem.ts +21 -0
  1649. package/repos/effect/packages/platform-node/src/NodeHttpClient.ts +664 -0
  1650. package/repos/effect/packages/platform-node/src/NodeHttpIncomingMessage.ts +141 -0
  1651. package/repos/effect/packages/platform-node/src/NodeHttpPlatform.ts +70 -0
  1652. package/repos/effect/packages/platform-node/src/NodeHttpServer.ts +646 -0
  1653. package/repos/effect/packages/platform-node/src/NodeHttpServerRequest.ts +33 -0
  1654. package/repos/effect/packages/platform-node/src/NodeMultipart.ts +183 -0
  1655. package/repos/effect/packages/platform-node/src/NodePath.ts +40 -0
  1656. package/repos/effect/packages/platform-node/src/NodeRedis.ts +92 -0
  1657. package/repos/effect/packages/platform-node/src/NodeRuntime.ts +53 -0
  1658. package/repos/effect/packages/platform-node/src/NodeServices.ts +50 -0
  1659. package/repos/effect/packages/platform-node/src/NodeSink.ts +8 -0
  1660. package/repos/effect/packages/platform-node/src/NodeSocket.ts +72 -0
  1661. package/repos/effect/packages/platform-node/src/NodeSocketServer.ts +8 -0
  1662. package/repos/effect/packages/platform-node/src/NodeStdio.ts +22 -0
  1663. package/repos/effect/packages/platform-node/src/NodeStream.ts +8 -0
  1664. package/repos/effect/packages/platform-node/src/NodeTerminal.ts +32 -0
  1665. package/repos/effect/packages/platform-node/src/NodeWorker.ts +121 -0
  1666. package/repos/effect/packages/platform-node/src/NodeWorkerRunner.ts +110 -0
  1667. package/repos/effect/packages/platform-node/src/Undici.ts +29 -0
  1668. package/repos/effect/packages/platform-node/src/index.ts +130 -0
  1669. package/repos/effect/packages/platform-node/test/HttpApi.test.ts +1831 -0
  1670. package/repos/effect/packages/platform-node/test/HttpStaticServer.test.ts +253 -0
  1671. package/repos/effect/packages/platform-node/test/HttpStaticServerConditional.test.ts +296 -0
  1672. package/repos/effect/packages/platform-node/test/NodeCrypto.test.ts +59 -0
  1673. package/repos/effect/packages/platform-node/test/NodeHttpClient.test.ts +157 -0
  1674. package/repos/effect/packages/platform-node/test/NodeHttpPlatform.test.ts +51 -0
  1675. package/repos/effect/packages/platform-node/test/NodeHttpServer.test.ts +598 -0
  1676. package/repos/effect/packages/platform-node/test/NodeRedis.test.ts +31 -0
  1677. package/repos/effect/packages/platform-node/test/NodeSocket.test.ts +153 -0
  1678. package/repos/effect/packages/platform-node/test/OpenApi.test.ts +1573 -0
  1679. package/repos/effect/packages/platform-node/test/RpcServer.test.ts +213 -0
  1680. package/repos/effect/packages/platform-node/test/__snapshots__/HttpApi.test.ts.snap +715 -0
  1681. package/repos/effect/packages/platform-node/test/cluster/MessageStorageTest.ts +196 -0
  1682. package/repos/effect/packages/platform-node/test/cluster/SocketRunner.test.ts +120 -0
  1683. package/repos/effect/packages/platform-node/test/cluster/SqlMessageStorage.test.ts +222 -0
  1684. package/repos/effect/packages/platform-node/test/cluster/SqlRunnerStorage.test.ts +101 -0
  1685. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/conditional.txt +1 -0
  1686. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/custom/home.html +1 -0
  1687. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/file.binx +1 -0
  1688. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/guide/index.html +1 -0
  1689. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/hello.txt +1 -0
  1690. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/index.html +1 -0
  1691. package/repos/effect/packages/platform-node/test/fixtures/http-static-server/range.txt +1 -0
  1692. package/repos/effect/packages/platform-node/test/fixtures/http-static-server-outside.txt +1 -0
  1693. package/repos/effect/packages/platform-node/test/fixtures/mysql2-utils.ts +64 -0
  1694. package/repos/effect/packages/platform-node/test/fixtures/pg-utils.ts +39 -0
  1695. package/repos/effect/packages/platform-node/test/fixtures/rpc-e2e.ts +149 -0
  1696. package/repos/effect/packages/platform-node/test/fixtures/rpc-schemas.ts +175 -0
  1697. package/repos/effect/packages/platform-node/test/fixtures/text.txt +1 -0
  1698. package/repos/effect/packages/platform-node/tsconfig.json +12 -0
  1699. package/repos/effect/packages/platform-node/vitest.config.ts +6 -0
  1700. package/repos/effect/packages/platform-node-shared/CHANGELOG.md +617 -0
  1701. package/repos/effect/packages/platform-node-shared/LICENSE +21 -0
  1702. package/repos/effect/packages/platform-node-shared/README.md +7 -0
  1703. package/repos/effect/packages/platform-node-shared/docgen.json +38 -0
  1704. package/repos/effect/packages/platform-node-shared/package.json +76 -0
  1705. package/repos/effect/packages/platform-node-shared/src/NodeChildProcessSpawner.ts +713 -0
  1706. package/repos/effect/packages/platform-node-shared/src/NodeClusterSocket.ts +70 -0
  1707. package/repos/effect/packages/platform-node-shared/src/NodeCrypto.ts +60 -0
  1708. package/repos/effect/packages/platform-node-shared/src/NodeFileSystem.ts +652 -0
  1709. package/repos/effect/packages/platform-node-shared/src/NodePath.ts +80 -0
  1710. package/repos/effect/packages/platform-node-shared/src/NodeRuntime.ts +59 -0
  1711. package/repos/effect/packages/platform-node-shared/src/NodeSink.ts +116 -0
  1712. package/repos/effect/packages/platform-node-shared/src/NodeSocket.ts +269 -0
  1713. package/repos/effect/packages/platform-node-shared/src/NodeSocketServer.ts +301 -0
  1714. package/repos/effect/packages/platform-node-shared/src/NodeStdio.ts +67 -0
  1715. package/repos/effect/packages/platform-node-shared/src/NodeStream.ts +445 -0
  1716. package/repos/effect/packages/platform-node-shared/src/NodeTerminal.ts +129 -0
  1717. package/repos/effect/packages/platform-node-shared/src/index.ts +65 -0
  1718. package/repos/effect/packages/platform-node-shared/src/internal/utils.ts +51 -0
  1719. package/repos/effect/packages/platform-node-shared/test/NodeChildProcessSpawner.test.ts +1069 -0
  1720. package/repos/effect/packages/platform-node-shared/test/NodeFileSystem.test.ts +214 -0
  1721. package/repos/effect/packages/platform-node-shared/test/NodeSink.test.ts +153 -0
  1722. package/repos/effect/packages/platform-node-shared/test/NodeStream.test.ts +173 -0
  1723. package/repos/effect/packages/platform-node-shared/test/fixtures/bash/no-permissions.sh +3 -0
  1724. package/repos/effect/packages/platform-node-shared/test/fixtures/bash/parent-exits-early.sh +31 -0
  1725. package/repos/effect/packages/platform-node-shared/test/fixtures/bash/spawn-children.sh +32 -0
  1726. package/repos/effect/packages/platform-node-shared/test/fixtures/config/SHOUTING +1 -0
  1727. package/repos/effect/packages/platform-node-shared/test/fixtures/config/integer +1 -0
  1728. package/repos/effect/packages/platform-node-shared/test/fixtures/config/nested/config +1 -0
  1729. package/repos/effect/packages/platform-node-shared/test/fixtures/config/secret +1 -0
  1730. package/repos/effect/packages/platform-node-shared/test/fixtures/helloworld.tar.gz +0 -0
  1731. package/repos/effect/packages/platform-node-shared/test/fixtures/text.txt +1 -0
  1732. package/repos/effect/packages/platform-node-shared/tsconfig.json +11 -0
  1733. package/repos/effect/packages/platform-node-shared/vitest.config.ts +6 -0
  1734. package/repos/effect/packages/sql/clickhouse/CHANGELOG.md +681 -0
  1735. package/repos/effect/packages/sql/clickhouse/LICENSE +21 -0
  1736. package/repos/effect/packages/sql/clickhouse/README.md +7 -0
  1737. package/repos/effect/packages/sql/clickhouse/docgen.json +24 -0
  1738. package/repos/effect/packages/sql/clickhouse/package.json +72 -0
  1739. package/repos/effect/packages/sql/clickhouse/src/ClickhouseClient.ts +546 -0
  1740. package/repos/effect/packages/sql/clickhouse/src/ClickhouseMigrator.ts +51 -0
  1741. package/repos/effect/packages/sql/clickhouse/src/index.ts +15 -0
  1742. package/repos/effect/packages/sql/clickhouse/test/Client.test.ts +6 -0
  1743. package/repos/effect/packages/sql/clickhouse/test/SqlErrorClassification.test.ts +75 -0
  1744. package/repos/effect/packages/sql/clickhouse/tsconfig.json +12 -0
  1745. package/repos/effect/packages/sql/clickhouse/vitest.config.ts +6 -0
  1746. package/repos/effect/packages/sql/d1/CHANGELOG.md +597 -0
  1747. package/repos/effect/packages/sql/d1/LICENSE +21 -0
  1748. package/repos/effect/packages/sql/d1/README.md +7 -0
  1749. package/repos/effect/packages/sql/d1/docgen.json +24 -0
  1750. package/repos/effect/packages/sql/d1/package.json +75 -0
  1751. package/repos/effect/packages/sql/d1/src/D1Client.ts +249 -0
  1752. package/repos/effect/packages/sql/d1/src/index.ts +10 -0
  1753. package/repos/effect/packages/sql/d1/test/Client.test.ts +65 -0
  1754. package/repos/effect/packages/sql/d1/test/Resolver.test.ts +176 -0
  1755. package/repos/effect/packages/sql/d1/test/utils.ts +38 -0
  1756. package/repos/effect/packages/sql/d1/tsconfig.json +8 -0
  1757. package/repos/effect/packages/sql/d1/vitest.config.ts +6 -0
  1758. package/repos/effect/packages/sql/libsql/CHANGELOG.md +601 -0
  1759. package/repos/effect/packages/sql/libsql/LICENSE +21 -0
  1760. package/repos/effect/packages/sql/libsql/README.md +7 -0
  1761. package/repos/effect/packages/sql/libsql/docgen.json +24 -0
  1762. package/repos/effect/packages/sql/libsql/package.json +73 -0
  1763. package/repos/effect/packages/sql/libsql/src/LibsqlClient.ts +381 -0
  1764. package/repos/effect/packages/sql/libsql/src/LibsqlMigrator.ts +46 -0
  1765. package/repos/effect/packages/sql/libsql/src/index.ts +15 -0
  1766. package/repos/effect/packages/sql/libsql/test/Client.test.ts +106 -0
  1767. package/repos/effect/packages/sql/libsql/test/Resolver.test.ts +177 -0
  1768. package/repos/effect/packages/sql/libsql/test/util.ts +54 -0
  1769. package/repos/effect/packages/sql/libsql/tsconfig.json +9 -0
  1770. package/repos/effect/packages/sql/libsql/vitest.config.ts +6 -0
  1771. package/repos/effect/packages/sql/mssql/CHANGELOG.md +601 -0
  1772. package/repos/effect/packages/sql/mssql/LICENSE +21 -0
  1773. package/repos/effect/packages/sql/mssql/README.md +7 -0
  1774. package/repos/effect/packages/sql/mssql/docgen.json +24 -0
  1775. package/repos/effect/packages/sql/mssql/package.json +70 -0
  1776. package/repos/effect/packages/sql/mssql/src/MssqlClient.ts +732 -0
  1777. package/repos/effect/packages/sql/mssql/src/MssqlMigrator.ts +45 -0
  1778. package/repos/effect/packages/sql/mssql/src/Parameter.ts +64 -0
  1779. package/repos/effect/packages/sql/mssql/src/Procedure.ts +213 -0
  1780. package/repos/effect/packages/sql/mssql/src/index.ts +32 -0
  1781. package/repos/effect/packages/sql/mssql/test/Client.test.ts +91 -0
  1782. package/repos/effect/packages/sql/mssql/test/SqlErrorClassification.test.ts +206 -0
  1783. package/repos/effect/packages/sql/mssql/tsconfig.json +8 -0
  1784. package/repos/effect/packages/sql/mssql/vitest.config.ts +6 -0
  1785. package/repos/effect/packages/sql/mysql2/CHANGELOG.md +603 -0
  1786. package/repos/effect/packages/sql/mysql2/LICENSE +21 -0
  1787. package/repos/effect/packages/sql/mysql2/README.md +7 -0
  1788. package/repos/effect/packages/sql/mysql2/docgen.json +24 -0
  1789. package/repos/effect/packages/sql/mysql2/package.json +71 -0
  1790. package/repos/effect/packages/sql/mysql2/src/MysqlClient.ts +517 -0
  1791. package/repos/effect/packages/sql/mysql2/src/MysqlMigrator.ts +102 -0
  1792. package/repos/effect/packages/sql/mysql2/src/index.ts +15 -0
  1793. package/repos/effect/packages/sql/mysql2/test/Client.test.ts +34 -0
  1794. package/repos/effect/packages/sql/mysql2/test/KeyValueStore.test.ts +16 -0
  1795. package/repos/effect/packages/sql/mysql2/test/Model.test.ts +227 -0
  1796. package/repos/effect/packages/sql/mysql2/test/MysqlClient.test.ts +35 -0
  1797. package/repos/effect/packages/sql/mysql2/test/Persistence.test.ts +22 -0
  1798. package/repos/effect/packages/sql/mysql2/test/SqlErrorClassification.test.ts +133 -0
  1799. package/repos/effect/packages/sql/mysql2/test/SqlEventLogServerUnencrypted.test.ts +7 -0
  1800. package/repos/effect/packages/sql/mysql2/test/utils.ts +64 -0
  1801. package/repos/effect/packages/sql/mysql2/tsconfig.json +9 -0
  1802. package/repos/effect/packages/sql/mysql2/vitest.config.ts +6 -0
  1803. package/repos/effect/packages/sql/pg/CHANGELOG.md +3432 -0
  1804. package/repos/effect/packages/sql/pg/LICENSE +21 -0
  1805. package/repos/effect/packages/sql/pg/README.md +7 -0
  1806. package/repos/effect/packages/sql/pg/docgen.json +24 -0
  1807. package/repos/effect/packages/sql/pg/package.json +77 -0
  1808. package/repos/effect/packages/sql/pg/src/PgClient.ts +947 -0
  1809. package/repos/effect/packages/sql/pg/src/PgMigrator.ts +120 -0
  1810. package/repos/effect/packages/sql/pg/src/index.ts +15 -0
  1811. package/repos/effect/packages/sql/pg/test/Client.test.ts +373 -0
  1812. package/repos/effect/packages/sql/pg/test/KeyValueStore.test.ts +16 -0
  1813. package/repos/effect/packages/sql/pg/test/Persistence.test.ts +20 -0
  1814. package/repos/effect/packages/sql/pg/test/SqlErrorClassification.test.ts +81 -0
  1815. package/repos/effect/packages/sql/pg/test/SqlEventLogServerUnencrypted.test.ts +7 -0
  1816. package/repos/effect/packages/sql/pg/test/TransactionAcquire.test.ts +52 -0
  1817. package/repos/effect/packages/sql/pg/test/utils.ts +49 -0
  1818. package/repos/effect/packages/sql/pg/tsconfig.json +9 -0
  1819. package/repos/effect/packages/sql/pg/vitest.config.ts +6 -0
  1820. package/repos/effect/packages/sql/pglite/CHANGELOG.md +198 -0
  1821. package/repos/effect/packages/sql/pglite/LICENSE +21 -0
  1822. package/repos/effect/packages/sql/pglite/README.md +7 -0
  1823. package/repos/effect/packages/sql/pglite/docgen.json +24 -0
  1824. package/repos/effect/packages/sql/pglite/package.json +74 -0
  1825. package/repos/effect/packages/sql/pglite/src/PgliteClient.ts +503 -0
  1826. package/repos/effect/packages/sql/pglite/src/PgliteMigrator.ts +44 -0
  1827. package/repos/effect/packages/sql/pglite/src/index.ts +15 -0
  1828. package/repos/effect/packages/sql/pglite/test/Client.test.ts +149 -0
  1829. package/repos/effect/packages/sql/pglite/test/Migrator.test.ts +45 -0
  1830. package/repos/effect/packages/sql/pglite/test/SqlErrorClassification.test.ts +56 -0
  1831. package/repos/effect/packages/sql/pglite/test/Transaction.test.ts +62 -0
  1832. package/repos/effect/packages/sql/pglite/tsconfig.json +8 -0
  1833. package/repos/effect/packages/sql/pglite/vitest.config.ts +6 -0
  1834. package/repos/effect/packages/sql/sqlite-bun/CHANGELOG.md +601 -0
  1835. package/repos/effect/packages/sql/sqlite-bun/LICENSE +21 -0
  1836. package/repos/effect/packages/sql/sqlite-bun/README.md +7 -0
  1837. package/repos/effect/packages/sql/sqlite-bun/docgen.json +24 -0
  1838. package/repos/effect/packages/sql/sqlite-bun/package.json +69 -0
  1839. package/repos/effect/packages/sql/sqlite-bun/src/SqliteClient.ts +262 -0
  1840. package/repos/effect/packages/sql/sqlite-bun/src/SqliteMigrator.ts +90 -0
  1841. package/repos/effect/packages/sql/sqlite-bun/src/index.ts +15 -0
  1842. package/repos/effect/packages/sql/sqlite-bun/test/Client.test.ts +6 -0
  1843. package/repos/effect/packages/sql/sqlite-bun/tsconfig.json +11 -0
  1844. package/repos/effect/packages/sql/sqlite-bun/vitest.config.ts +6 -0
  1845. package/repos/effect/packages/sql/sqlite-do/CHANGELOG.md +601 -0
  1846. package/repos/effect/packages/sql/sqlite-do/LICENSE +21 -0
  1847. package/repos/effect/packages/sql/sqlite-do/README.md +7 -0
  1848. package/repos/effect/packages/sql/sqlite-do/docgen.json +24 -0
  1849. package/repos/effect/packages/sql/sqlite-do/package.json +68 -0
  1850. package/repos/effect/packages/sql/sqlite-do/src/SqliteClient.ts +249 -0
  1851. package/repos/effect/packages/sql/sqlite-do/src/SqliteMigrator.ts +45 -0
  1852. package/repos/effect/packages/sql/sqlite-do/src/index.ts +15 -0
  1853. package/repos/effect/packages/sql/sqlite-do/test/Client.test.ts +24 -0
  1854. package/repos/effect/packages/sql/sqlite-do/tsconfig.json +8 -0
  1855. package/repos/effect/packages/sql/sqlite-do/vitest.config.ts +6 -0
  1856. package/repos/effect/packages/sql/sqlite-node/CHANGELOG.md +3415 -0
  1857. package/repos/effect/packages/sql/sqlite-node/LICENSE +21 -0
  1858. package/repos/effect/packages/sql/sqlite-node/README.md +7 -0
  1859. package/repos/effect/packages/sql/sqlite-node/docgen.json +24 -0
  1860. package/repos/effect/packages/sql/sqlite-node/package.json +72 -0
  1861. package/repos/effect/packages/sql/sqlite-node/src/SqliteClient.ts +312 -0
  1862. package/repos/effect/packages/sql/sqlite-node/src/SqliteMigrator.ts +90 -0
  1863. package/repos/effect/packages/sql/sqlite-node/src/index.ts +15 -0
  1864. package/repos/effect/packages/sql/sqlite-node/test/Client.test.ts +75 -0
  1865. package/repos/effect/packages/sql/sqlite-node/test/KeyValueStore.test.ts +29 -0
  1866. package/repos/effect/packages/sql/sqlite-node/test/Persistence.test.ts +109 -0
  1867. package/repos/effect/packages/sql/sqlite-node/test/Resolver.test.ts +183 -0
  1868. package/repos/effect/packages/sql/sqlite-node/test/SqlEventJournal.test.ts +84 -0
  1869. package/repos/effect/packages/sql/sqlite-node/test/SqlEventLogServerEncrypted.test.ts +249 -0
  1870. package/repos/effect/packages/sql/sqlite-node/test/SqlEventLogServerUnencrypted.test.ts +110 -0
  1871. package/repos/effect/packages/sql/sqlite-node/test/SqliteMigrator.test.ts +48 -0
  1872. package/repos/effect/packages/sql/sqlite-node/tsconfig.json +8 -0
  1873. package/repos/effect/packages/sql/sqlite-node/vitest.config.ts +6 -0
  1874. package/repos/effect/packages/sql/sqlite-react-native/CHANGELOG.md +601 -0
  1875. package/repos/effect/packages/sql/sqlite-react-native/LICENSE +21 -0
  1876. package/repos/effect/packages/sql/sqlite-react-native/README.md +7 -0
  1877. package/repos/effect/packages/sql/sqlite-react-native/docgen.json +24 -0
  1878. package/repos/effect/packages/sql/sqlite-react-native/package.json +69 -0
  1879. package/repos/effect/packages/sql/sqlite-react-native/src/SqliteClient.ts +354 -0
  1880. package/repos/effect/packages/sql/sqlite-react-native/src/SqliteMigrator.ts +55 -0
  1881. package/repos/effect/packages/sql/sqlite-react-native/src/index.ts +15 -0
  1882. package/repos/effect/packages/sql/sqlite-react-native/test/Client.test.ts +6 -0
  1883. package/repos/effect/packages/sql/sqlite-react-native/tsconfig.json +8 -0
  1884. package/repos/effect/packages/sql/sqlite-react-native/vitest.config.ts +6 -0
  1885. package/repos/effect/packages/sql/sqlite-wasm/CHANGELOG.md +601 -0
  1886. package/repos/effect/packages/sql/sqlite-wasm/LICENSE +21 -0
  1887. package/repos/effect/packages/sql/sqlite-wasm/README.md +7 -0
  1888. package/repos/effect/packages/sql/sqlite-wasm/docgen.json +24 -0
  1889. package/repos/effect/packages/sql/sqlite-wasm/package.json +69 -0
  1890. package/repos/effect/packages/sql/sqlite-wasm/src/OpfsWorker.ts +118 -0
  1891. package/repos/effect/packages/sql/sqlite-wasm/src/SqliteClient.ts +551 -0
  1892. package/repos/effect/packages/sql/sqlite-wasm/src/SqliteMigrator.ts +55 -0
  1893. package/repos/effect/packages/sql/sqlite-wasm/src/index.ts +14 -0
  1894. package/repos/effect/packages/sql/sqlite-wasm/src/internal/opfsWorker.ts +7 -0
  1895. package/repos/effect/packages/sql/sqlite-wasm/src/sqlite-wasm.d.ts +47 -0
  1896. package/repos/effect/packages/sql/sqlite-wasm/test/Client.test.ts +6 -0
  1897. package/repos/effect/packages/sql/sqlite-wasm/tsconfig.json +8 -0
  1898. package/repos/effect/packages/sql/sqlite-wasm/vitest.config.ts +6 -0
  1899. package/repos/effect/packages/tools/ai-codegen/codegen.schema.json +92 -0
  1900. package/repos/effect/packages/tools/ai-codegen/docgen.json +4 -0
  1901. package/repos/effect/packages/tools/ai-codegen/package.json +61 -0
  1902. package/repos/effect/packages/tools/ai-codegen/src/Config.ts +292 -0
  1903. package/repos/effect/packages/tools/ai-codegen/src/Discovery.ts +197 -0
  1904. package/repos/effect/packages/tools/ai-codegen/src/Generator.ts +183 -0
  1905. package/repos/effect/packages/tools/ai-codegen/src/Glob.ts +56 -0
  1906. package/repos/effect/packages/tools/ai-codegen/src/PostProcess.ts +157 -0
  1907. package/repos/effect/packages/tools/ai-codegen/src/SpecFetcher.ts +154 -0
  1908. package/repos/effect/packages/tools/ai-codegen/src/bin.ts +10 -0
  1909. package/repos/effect/packages/tools/ai-codegen/src/main.ts +237 -0
  1910. package/repos/effect/packages/tools/ai-codegen/tsconfig.json +15 -0
  1911. package/repos/effect/packages/tools/ai-docgen/docgen.json +4 -0
  1912. package/repos/effect/packages/tools/ai-docgen/package.json +60 -0
  1913. package/repos/effect/packages/tools/ai-docgen/src/Glob.ts +48 -0
  1914. package/repos/effect/packages/tools/ai-docgen/src/main.ts +186 -0
  1915. package/repos/effect/packages/tools/ai-docgen/tsconfig.json +14 -0
  1916. package/repos/effect/packages/tools/bundle/docgen.json +4 -0
  1917. package/repos/effect/packages/tools/bundle/fixtures/basic.ts +3 -0
  1918. package/repos/effect/packages/tools/bundle/fixtures/batching.ts +25 -0
  1919. package/repos/effect/packages/tools/bundle/fixtures/brand.ts +5 -0
  1920. package/repos/effect/packages/tools/bundle/fixtures/cache.ts +10 -0
  1921. package/repos/effect/packages/tools/bundle/fixtures/config.ts +13 -0
  1922. package/repos/effect/packages/tools/bundle/fixtures/differ.ts +9 -0
  1923. package/repos/effect/packages/tools/bundle/fixtures/http-client.ts +12 -0
  1924. package/repos/effect/packages/tools/bundle/fixtures/logger.ts +5 -0
  1925. package/repos/effect/packages/tools/bundle/fixtures/metric.ts +13 -0
  1926. package/repos/effect/packages/tools/bundle/fixtures/optic.ts +6 -0
  1927. package/repos/effect/packages/tools/bundle/fixtures/pubsub.ts +22 -0
  1928. package/repos/effect/packages/tools/bundle/fixtures/queue.ts +18 -0
  1929. package/repos/effect/packages/tools/bundle/fixtures/schedule.ts +9 -0
  1930. package/repos/effect/packages/tools/bundle/fixtures/schema-fromJsonSchemaDocument.ts +16 -0
  1931. package/repos/effect/packages/tools/bundle/fixtures/schema-representation-roundtrip.ts +16 -0
  1932. package/repos/effect/packages/tools/bundle/fixtures/schema-string-transformation.ts +20 -0
  1933. package/repos/effect/packages/tools/bundle/fixtures/schema-string.ts +8 -0
  1934. package/repos/effect/packages/tools/bundle/fixtures/schema-template-literal.ts +8 -0
  1935. package/repos/effect/packages/tools/bundle/fixtures/schema-toArbitraryLazy.ts +9 -0
  1936. package/repos/effect/packages/tools/bundle/fixtures/schema-toCodeDocument.ts +12 -0
  1937. package/repos/effect/packages/tools/bundle/fixtures/schema-toCodecJson.ts +9 -0
  1938. package/repos/effect/packages/tools/bundle/fixtures/schema-toEquivalence.ts +9 -0
  1939. package/repos/effect/packages/tools/bundle/fixtures/schema-toFormatter.ts +9 -0
  1940. package/repos/effect/packages/tools/bundle/fixtures/schema-toJsonSchemaDocument.ts +9 -0
  1941. package/repos/effect/packages/tools/bundle/fixtures/schema-toRepresentation.ts +9 -0
  1942. package/repos/effect/packages/tools/bundle/fixtures/schema.ts +12 -0
  1943. package/repos/effect/packages/tools/bundle/fixtures/stm.ts +21 -0
  1944. package/repos/effect/packages/tools/bundle/fixtures/stream.ts +7 -0
  1945. package/repos/effect/packages/tools/bundle/package.json +52 -0
  1946. package/repos/effect/packages/tools/bundle/src/Cli.ts +104 -0
  1947. package/repos/effect/packages/tools/bundle/src/Fixtures.ts +51 -0
  1948. package/repos/effect/packages/tools/bundle/src/Plugins.ts +131 -0
  1949. package/repos/effect/packages/tools/bundle/src/Reporter.ts +200 -0
  1950. package/repos/effect/packages/tools/bundle/src/Rollup.ts +179 -0
  1951. package/repos/effect/packages/tools/bundle/src/bin.ts +23 -0
  1952. package/repos/effect/packages/tools/bundle/tsconfig.fixtures.json +13 -0
  1953. package/repos/effect/packages/tools/bundle/tsconfig.json +9 -0
  1954. package/repos/effect/packages/tools/bundle/tsconfig.src.json +13 -0
  1955. package/repos/effect/packages/tools/jsdocs/docgen.json +4 -0
  1956. package/repos/effect/packages/tools/jsdocs/package.json +64 -0
  1957. package/repos/effect/packages/tools/jsdocs/src/Jsdocs.ts +3303 -0
  1958. package/repos/effect/packages/tools/jsdocs/src/bin.ts +23 -0
  1959. package/repos/effect/packages/tools/jsdocs/test/jsdocs.test.ts +979 -0
  1960. package/repos/effect/packages/tools/jsdocs/tsconfig.json +8 -0
  1961. package/repos/effect/packages/tools/jsdocs/vitest.config.ts +6 -0
  1962. package/repos/effect/packages/tools/openapi-generator/CHANGELOG.md +691 -0
  1963. package/repos/effect/packages/tools/openapi-generator/LICENSE +21 -0
  1964. package/repos/effect/packages/tools/openapi-generator/docgen.json +4 -0
  1965. package/repos/effect/packages/tools/openapi-generator/package.json +78 -0
  1966. package/repos/effect/packages/tools/openapi-generator/src/HttpApiTransformer.ts +552 -0
  1967. package/repos/effect/packages/tools/openapi-generator/src/JsonSchemaGenerator.ts +319 -0
  1968. package/repos/effect/packages/tools/openapi-generator/src/OpenApiGenerator.ts +1201 -0
  1969. package/repos/effect/packages/tools/openapi-generator/src/OpenApiPatch.ts +539 -0
  1970. package/repos/effect/packages/tools/openapi-generator/src/OpenApiTransformer.ts +1019 -0
  1971. package/repos/effect/packages/tools/openapi-generator/src/ParsedOperation.ts +277 -0
  1972. package/repos/effect/packages/tools/openapi-generator/src/Utils.ts +111 -0
  1973. package/repos/effect/packages/tools/openapi-generator/src/bin.ts +10 -0
  1974. package/repos/effect/packages/tools/openapi-generator/src/main.ts +116 -0
  1975. package/repos/effect/packages/tools/openapi-generator/test/JsonSchemaGenerator.test.ts +173 -0
  1976. package/repos/effect/packages/tools/openapi-generator/test/OpenApiGenerator.test.ts +2130 -0
  1977. package/repos/effect/packages/tools/openapi-generator/test/OpenApiGeneratorCli.test.ts +147 -0
  1978. package/repos/effect/packages/tools/openapi-generator/test/OpenApiPatch.test.ts +380 -0
  1979. package/repos/effect/packages/tools/openapi-generator/test/Utils.test.ts +33 -0
  1980. package/repos/effect/packages/tools/openapi-generator/test/fixtures/cli-basic-spec.json +35 -0
  1981. package/repos/effect/packages/tools/openapi-generator/test/fixtures/cli-warning-spec.json +57 -0
  1982. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/invalid-op.json +7 -0
  1983. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/missing-path.json +6 -0
  1984. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/missing-value.json +6 -0
  1985. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-add.json +8 -0
  1986. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-multiple.json +17 -0
  1987. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-patch.yaml +6 -0
  1988. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-remove.json +6 -0
  1989. package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-replace.json +7 -0
  1990. package/repos/effect/packages/tools/openapi-generator/tsconfig.json +9 -0
  1991. package/repos/effect/packages/tools/openapi-generator/vitest.config.ts +6 -0
  1992. package/repos/effect/packages/tools/oxc/docgen.json +4 -0
  1993. package/repos/effect/packages/tools/oxc/oxlintrc.json +83 -0
  1994. package/repos/effect/packages/tools/oxc/package.json +72 -0
  1995. package/repos/effect/packages/tools/oxc/src/oxlint/index.ts +18 -0
  1996. package/repos/effect/packages/tools/oxc/src/oxlint/rules/jsdocs.ts +108 -0
  1997. package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-bigint-literals.ts +25 -0
  1998. package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-import-from-barrel-package.ts +144 -0
  1999. package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-js-extension-imports.ts +73 -0
  2000. package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-opaque-instance-fields.ts +92 -0
  2001. package/repos/effect/packages/tools/oxc/test/jsdocs.test.ts +75 -0
  2002. package/repos/effect/packages/tools/oxc/test/no-import-from-barrel-package.test.ts +182 -0
  2003. package/repos/effect/packages/tools/oxc/test/no-js-extension-imports.test.ts +120 -0
  2004. package/repos/effect/packages/tools/oxc/test/no-opaque-instance-fields.test.ts +276 -0
  2005. package/repos/effect/packages/tools/oxc/test/utils.ts +61 -0
  2006. package/repos/effect/packages/tools/oxc/tsconfig.json +8 -0
  2007. package/repos/effect/packages/tools/oxc/vitest.config.ts +6 -0
  2008. package/repos/effect/packages/tools/utils/docgen.json +4 -0
  2009. package/repos/effect/packages/tools/utils/package.json +59 -0
  2010. package/repos/effect/packages/tools/utils/src/Codegen.ts +214 -0
  2011. package/repos/effect/packages/tools/utils/src/Glob.ts +61 -0
  2012. package/repos/effect/packages/tools/utils/src/bin.ts +16 -0
  2013. package/repos/effect/packages/tools/utils/src/commands/codegen.ts +44 -0
  2014. package/repos/effect/packages/tools/utils/tsconfig.json +9 -0
  2015. package/repos/effect/packages/vitest/CHANGELOG.md +601 -0
  2016. package/repos/effect/packages/vitest/LICENSE +21 -0
  2017. package/repos/effect/packages/vitest/README.md +320 -0
  2018. package/repos/effect/packages/vitest/docgen.json +24 -0
  2019. package/repos/effect/packages/vitest/package.json +60 -0
  2020. package/repos/effect/packages/vitest/src/index.ts +259 -0
  2021. package/repos/effect/packages/vitest/src/internal/internal.ts +374 -0
  2022. package/repos/effect/packages/vitest/src/utils.ts +321 -0
  2023. package/repos/effect/packages/vitest/test/index.test.ts +222 -0
  2024. package/repos/effect/packages/vitest/test/isolation.test.ts +105 -0
  2025. package/repos/effect/packages/vitest/test/nested-isolation.test.ts +212 -0
  2026. package/repos/effect/packages/vitest/tsconfig.json +11 -0
  2027. package/repos/effect/packages/vitest/typetest/index.tst.ts +56 -0
  2028. package/repos/effect/packages/vitest/vitest.config.ts +6 -0
  2029. package/repos/effect/patches/@changesets__assemble-release-plan.patch +26 -0
  2030. package/repos/effect/patches/@changesets__get-github-info.patch +44 -0
  2031. package/repos/effect/pnpm-lock.yaml +13483 -0
  2032. package/repos/effect/pnpm-workspace.yaml +10 -0
  2033. package/repos/effect/scripts/bundle-compare.sh +42 -0
  2034. package/repos/effect/scripts/check-cookbook-schedule.ts +390 -0
  2035. package/repos/effect/scripts/circular.mjs +26 -0
  2036. package/repos/effect/scripts/clean.mjs +19 -0
  2037. package/repos/effect/scripts/codemod.mjs +22 -0
  2038. package/repos/effect/scripts/codemods/jsdoc.ts +79 -0
  2039. package/repos/effect/scripts/docs.mjs +64 -0
  2040. package/repos/effect/scripts/package-scalar.mjs +14 -0
  2041. package/repos/effect/scripts/package-swagger.mjs +23 -0
  2042. package/repos/effect/scripts/package.json +22 -0
  2043. package/repos/effect/scripts/tsconfig.json +18 -0
  2044. package/repos/effect/scripts/version.mjs +9 -0
  2045. package/repos/effect/scripts/version.template.txt +2 -0
  2046. package/repos/effect/scripts/worktree-setup.sh +27 -0
  2047. package/repos/effect/stats.txt +30 -0
  2048. package/repos/effect/tsconfig.base.json +46 -0
  2049. package/repos/effect/tsconfig.json +128 -0
  2050. package/repos/effect/tsconfig.packages.json +39 -0
  2051. package/repos/effect/tstyche.json +7 -0
  2052. package/repos/effect/vitest.config.ts +31 -0
  2053. package/repos/effect/vitest.setup.ts +4 -0
  2054. package/repos/effect/vitest.shared.ts +61 -0
  2055. package/repos/effect.subtree.json +16 -0
@@ -0,0 +1,4908 @@
1
+ /**
2
+ * Works with JavaScript arrays, readonly arrays, and non-empty arrays.
3
+ *
4
+ * The helpers cover common collection work such as creating arrays, reading
5
+ * elements, transforming values, sorting, grouping, splitting, combining, and
6
+ * reducing many values to one result. Helpers that change contents return new
7
+ * arrays and preserve non-empty array types when the result is guaranteed to
8
+ * contain values.
9
+ *
10
+ * @since 2.0.0
11
+ */
12
+ import * as Equal from "./Equal.ts"
13
+ import * as Equivalence from "./Equivalence.ts"
14
+ import type { LazyArg } from "./Function.ts"
15
+ import { dual, identity } from "./Function.ts"
16
+ import type { TypeLambda } from "./HKT.ts"
17
+ import * as internalArray from "./internal/array.ts"
18
+ import * as internalDoNotation from "./internal/doNotation.ts"
19
+ import * as moduleIterable from "./Iterable.ts"
20
+ import * as Option from "./Option.ts"
21
+ import * as Order from "./Order.ts"
22
+ import type * as Predicate from "./Predicate.ts"
23
+ import * as Record from "./Record.ts"
24
+ import * as Reducer from "./Reducer.ts"
25
+ import * as Result from "./Result.ts"
26
+ import * as Tuple from "./Tuple.ts"
27
+ import type { NoInfer, TupleOf } from "./Types.ts"
28
+
29
+ /**
30
+ * Exposes the global array constructor.
31
+ *
32
+ * **When to use**
33
+ *
34
+ * Use to access native JavaScript array constructor methods such as `isArray`
35
+ * or `from` from the Effect module namespace.
36
+ *
37
+ * **Example** (Accessing the Array constructor)
38
+ *
39
+ * ```ts
40
+ * import { Array } from "effect"
41
+ *
42
+ * const arr = new Array.Array(3)
43
+ * console.log(arr) // [undefined, undefined, undefined]
44
+ * ```
45
+ *
46
+ * @category constructors
47
+ * @since 4.0.0
48
+ */
49
+ export const Array = globalThis.Array
50
+
51
+ /**
52
+ * Type lambda for `ReadonlyArray`, used for higher-kinded type operations.
53
+ *
54
+ * @category type lambdas
55
+ * @since 2.0.0
56
+ */
57
+ export interface ReadonlyArrayTypeLambda extends TypeLambda {
58
+ readonly type: ReadonlyArray<this["Target"]>
59
+ }
60
+
61
+ /**
62
+ * A readonly array guaranteed to have at least one element.
63
+ *
64
+ * **When to use**
65
+ *
66
+ * Use when non-emptiness must be tracked at the type level while preventing mutation.
67
+ * Many Array module functions accept or return this type.
68
+ *
69
+ * **Example** (Typing a non-empty array)
70
+ *
71
+ * ```ts
72
+ * import type { Array } from "effect"
73
+ *
74
+ * const nonEmpty: Array.NonEmptyReadonlyArray<number> = [1, 2, 3]
75
+ * const head: number = nonEmpty[0] // guaranteed to exist
76
+ * ```
77
+ *
78
+ * @see {@link NonEmptyArray} — mutable counterpart
79
+ * @see {@link isReadonlyArrayNonEmpty} — narrow a `ReadonlyArray` to this type
80
+ *
81
+ * @category models
82
+ * @since 2.0.0
83
+ */
84
+ export type NonEmptyReadonlyArray<A> = readonly [A, ...Array<A>]
85
+
86
+ /**
87
+ * A mutable array guaranteed to have at least one element.
88
+ *
89
+ * **When to use**
90
+ *
91
+ * Use when mutation is acceptable and non-emptiness must be tracked at the type
92
+ * level.
93
+ *
94
+ * **Details**
95
+ *
96
+ * This is the mutable counterpart of {@link NonEmptyReadonlyArray}. Most Array
97
+ * module functions return `NonEmptyArray` when the result is guaranteed
98
+ * non-empty.
99
+ *
100
+ * **Example** (Typing a mutable non-empty array)
101
+ *
102
+ * ```ts
103
+ * import type { Array } from "effect"
104
+ *
105
+ * const nonEmpty: Array.NonEmptyArray<number> = [1, 2, 3]
106
+ * nonEmpty.push(4)
107
+ * ```
108
+ *
109
+ * @see {@link NonEmptyReadonlyArray} — readonly counterpart
110
+ * @see {@link isArrayNonEmpty} — narrow an `Array` to this type
111
+ *
112
+ * @category models
113
+ * @since 2.0.0
114
+ */
115
+ export type NonEmptyArray<A> = [A, ...Array<A>]
116
+
117
+ /**
118
+ * Creates a `NonEmptyArray` from one or more elements.
119
+ *
120
+ * **When to use**
121
+ *
122
+ * Use when you need to create a typed non-empty array from literal values.
123
+ *
124
+ * **Details**
125
+ *
126
+ * The element type is inferred as the union of all arguments. Because at least
127
+ * one argument is required, this always returns a `NonEmptyArray`.
128
+ *
129
+ * **Example** (Creating an array from values)
130
+ *
131
+ * ```ts
132
+ * import { Array } from "effect"
133
+ *
134
+ * const result = Array.make(1, 2, 3)
135
+ * console.log(result) // [1, 2, 3]
136
+ * ```
137
+ *
138
+ * @see {@link of} — create a single-element array
139
+ * @see {@link fromIterable} — create from any iterable
140
+ *
141
+ * @category constructors
142
+ * @since 2.0.0
143
+ */
144
+ export const make = <Elements extends NonEmptyArray<unknown>>(
145
+ ...elements: Elements
146
+ ): NonEmptyArray<Elements[number]> => elements
147
+
148
+ /**
149
+ * Creates a new `Array` of the specified length with all slots uninitialized.
150
+ *
151
+ * **When to use**
152
+ *
153
+ * Use when you need a pre-sized array that will be filled imperatively.
154
+ *
155
+ * **Details**
156
+ *
157
+ * Elements are typed as `A | undefined` because the slots are empty.
158
+ *
159
+ * **Example** (Allocating a fixed-size array)
160
+ *
161
+ * ```ts
162
+ * import { Array } from "effect"
163
+ *
164
+ * const result = Array.allocate<number>(3)
165
+ * console.log(result.length) // 3
166
+ * ```
167
+ *
168
+ * @see {@link makeBy} — create an array by computing each element
169
+ *
170
+ * @category constructors
171
+ * @since 2.0.0
172
+ */
173
+ export const allocate = <A = never>(n: number): Array<A | undefined> => new Array(n)
174
+
175
+ /**
176
+ * Creates a `NonEmptyArray` of length `n` where element `i` is computed by `f(i)`.
177
+ *
178
+ * **When to use**
179
+ *
180
+ * Use when you need to compute each array element from its index.
181
+ *
182
+ * **Details**
183
+ *
184
+ * `n` is normalized to an integer greater than or equal to 1, so this function
185
+ * always returns at least one element. Supports both data-first and data-last
186
+ * usage.
187
+ *
188
+ * **Example** (Generating values from indices)
189
+ *
190
+ * ```ts
191
+ * import { Array } from "effect"
192
+ *
193
+ * const result = Array.makeBy(5, (n) => n * 2)
194
+ * console.log(result) // [0, 2, 4, 6, 8]
195
+ * ```
196
+ *
197
+ * @see {@link range} — create a range of integers
198
+ * @see {@link replicate} — repeat a single value
199
+ *
200
+ * @category constructors
201
+ * @since 2.0.0
202
+ */
203
+ export const makeBy: {
204
+ <A>(f: (i: number) => A): (n: number) => NonEmptyArray<A>
205
+ <A>(n: number, f: (i: number) => A): NonEmptyArray<A>
206
+ } = dual(2, <A>(n: number, f: (i: number) => A) => {
207
+ const max = Math.max(1, Math.floor(n))
208
+ const out = new Array(max)
209
+ for (let i = 0; i < max; i++) {
210
+ out[i] = f(i)
211
+ }
212
+ return out as NonEmptyArray<A>
213
+ })
214
+
215
+ /**
216
+ * Creates a `NonEmptyArray` containing a range of integers, inclusive on both
217
+ * ends.
218
+ *
219
+ * **When to use**
220
+ *
221
+ * Use when you need a non-empty sequence of consecutive integers.
222
+ *
223
+ * **Details**
224
+ *
225
+ * If `start > end`, returns `[start]`.
226
+ *
227
+ * **Example** (Creating a range)
228
+ *
229
+ * ```ts
230
+ * import { Array } from "effect"
231
+ *
232
+ * const result = Array.range(1, 3)
233
+ * console.log(result) // [1, 2, 3]
234
+ * ```
235
+ *
236
+ * @see {@link makeBy} — generate values from a function
237
+ *
238
+ * @category constructors
239
+ * @since 2.0.0
240
+ */
241
+ export const range = (start: number, end: number): NonEmptyArray<number> =>
242
+ start <= end ? makeBy(end - start + 1, (i) => start + i) : [start]
243
+
244
+ /**
245
+ * Creates a `NonEmptyArray` containing a value repeated `n` times.
246
+ *
247
+ * **When to use**
248
+ *
249
+ * Use when you need a non-empty array containing repeated copies of one value.
250
+ *
251
+ * **Details**
252
+ *
253
+ * `n` is normalized to an integer greater than or equal to 1, so this function
254
+ * always returns at least one element. Supports both data-first and data-last
255
+ * usage.
256
+ *
257
+ * **Example** (Repeating a value)
258
+ *
259
+ * ```ts
260
+ * import { Array } from "effect"
261
+ *
262
+ * const result = Array.replicate("a", 3)
263
+ * console.log(result) // ["a", "a", "a"]
264
+ * ```
265
+ *
266
+ * @see {@link makeBy} — vary values based on index
267
+ *
268
+ * @category constructors
269
+ * @since 2.0.0
270
+ */
271
+ export const replicate: {
272
+ (n: number): <A>(a: A) => NonEmptyArray<A>
273
+ <A>(a: A, n: number): NonEmptyArray<A>
274
+ } = dual(2, <A>(a: A, n: number): NonEmptyArray<A> => makeBy(n, () => a))
275
+
276
+ /**
277
+ * Converts an `Iterable` to an `Array`.
278
+ *
279
+ * **When to use**
280
+ *
281
+ * Use to convert any `Iterable` (Set, Generator, etc.) into an array.
282
+ *
283
+ * **Details**
284
+ *
285
+ * If the input is already an array, this returns it by reference without
286
+ * copying. Otherwise, it creates a new array from the iterable. Use `copy` if
287
+ * you need a fresh array even when the input is already an array.
288
+ *
289
+ * **Example** (Converting a Set to an array)
290
+ *
291
+ * ```ts
292
+ * import { Array } from "effect"
293
+ *
294
+ * const result = Array.fromIterable(new Set([1, 2, 3]))
295
+ * console.log(result) // [1, 2, 3]
296
+ * ```
297
+ *
298
+ * @see {@link ensure} — wrap a single value or return an existing array
299
+ * @see {@link copy} — create a shallow copy of an array
300
+ *
301
+ * @category constructors
302
+ * @since 2.0.0
303
+ */
304
+ export const fromIterable = <A>(collection: Iterable<A>): Array<A> =>
305
+ Array.isArray(collection) ? collection : Array.from(collection)
306
+
307
+ /**
308
+ * Normalizes a value that is either a single element or an array into an array.
309
+ *
310
+ * **When to use**
311
+ *
312
+ * Use to normalize input that may be a single value or an array into a consistent
313
+ * array.
314
+ *
315
+ * **Details**
316
+ *
317
+ * If the input is already an array, this returns it by reference. If the input
318
+ * is a single value, this wraps it in a one-element array. This is useful for
319
+ * APIs that accept `A | Array<A>`.
320
+ *
321
+ * **Example** (Normalizing input)
322
+ *
323
+ * ```ts
324
+ * import { Array } from "effect"
325
+ *
326
+ * console.log(Array.ensure("a")) // ["a"]
327
+ * console.log(Array.ensure(["a", "b", "c"])) // ["a", "b", "c"]
328
+ * ```
329
+ *
330
+ * @see {@link of} — always wrap in a single-element array
331
+ * @see {@link fromIterable} — convert any iterable
332
+ *
333
+ * @category constructors
334
+ * @since 3.3.0
335
+ */
336
+ export const ensure = <A>(self: ReadonlyArray<A> | A): Array<A> => Array.isArray(self) ? self : [self as A]
337
+
338
+ /**
339
+ * Converts a record into an array of `[key, value]` tuples.
340
+ *
341
+ * **When to use**
342
+ *
343
+ * Use to convert a record into an array of key-value tuples for iteration or
344
+ * transformation.
345
+ *
346
+ * **Details**
347
+ *
348
+ * Key order follows `Object.entries` semantics. Empty records produce an empty
349
+ * array.
350
+ *
351
+ * **Example** (Converting a record to entries)
352
+ *
353
+ * ```ts
354
+ * import { Array } from "effect"
355
+ *
356
+ * const result = Array.fromRecord({ a: 1, b: 2, c: 3 })
357
+ * console.log(result) // [["a", 1], ["b", 2], ["c", 3]]
358
+ * ```
359
+ *
360
+ * @see {@link Record.toEntries} the equivalent function from the Record module
361
+ * @see {@link Record.fromEntries} to build a record from an array of tuples
362
+ *
363
+ * @category converting
364
+ * @since 2.0.0
365
+ */
366
+ export const fromRecord: <K extends string, A>(self: Readonly<Record<K, A>>) => Array<[K, A]> = Record.toEntries
367
+
368
+ /**
369
+ * Converts an `Option` to an array: `Some(a)` becomes `[a]`, `None` becomes `[]`.
370
+ *
371
+ * **When to use**
372
+ *
373
+ * Use to convert a single `Option` into an array for downstream array operations.
374
+ *
375
+ * **Example** (Converting an Option to an array)
376
+ *
377
+ * ```ts
378
+ * import { Array, Option } from "effect"
379
+ *
380
+ * console.log(Array.fromOption(Option.some(1))) // [1]
381
+ * console.log(Array.fromOption(Option.none())) // []
382
+ * ```
383
+ *
384
+ * @see {@link getSomes} — extract `Some` values from an array of Options
385
+ *
386
+ * @category converting
387
+ * @since 2.0.0
388
+ */
389
+ export const fromOption: <A>(self: Option.Option<A>) => Array<A> = Option.toArray
390
+
391
+ /**
392
+ * Pattern-matches on an array, handling empty and non-empty cases separately.
393
+ *
394
+ * **When to use**
395
+ *
396
+ * Use when you need to branch on whether an array is empty.
397
+ *
398
+ * **Details**
399
+ *
400
+ * `onNonEmpty` receives a `NonEmptyReadonlyArray`. Supports both data-first and
401
+ * data-last usage.
402
+ *
403
+ * **Example** (Branching on emptiness)
404
+ *
405
+ * ```ts
406
+ * import { Array } from "effect"
407
+ *
408
+ * const describe = Array.match({
409
+ * onEmpty: () => "empty",
410
+ * onNonEmpty: ([head, ...tail]) => `head: ${head}, tail: ${tail.length}`
411
+ * })
412
+ * console.log(describe([])) // "empty"
413
+ * console.log(describe([1, 2, 3])) // "head: 1, tail: 2"
414
+ * ```
415
+ *
416
+ * @see {@link matchLeft} — destructures into head + tail
417
+ * @see {@link matchRight} — destructures into init + last
418
+ *
419
+ * @category pattern matching
420
+ * @since 2.0.0
421
+ */
422
+ export const match: {
423
+ <B, A, C = B>(
424
+ options: {
425
+ readonly onEmpty: LazyArg<B>
426
+ readonly onNonEmpty: (self: NonEmptyReadonlyArray<A>) => C
427
+ }
428
+ ): (self: ReadonlyArray<A>) => B | C
429
+ <A, B, C = B>(
430
+ self: ReadonlyArray<A>,
431
+ options: {
432
+ readonly onEmpty: LazyArg<B>
433
+ readonly onNonEmpty: (self: NonEmptyReadonlyArray<A>) => C
434
+ }
435
+ ): B | C
436
+ } = dual(2, <A, B, C = B>(
437
+ self: ReadonlyArray<A>,
438
+ { onEmpty, onNonEmpty }: {
439
+ readonly onEmpty: LazyArg<B>
440
+ readonly onNonEmpty: (self: NonEmptyReadonlyArray<A>) => C
441
+ }
442
+ ): B | C => isReadonlyArrayNonEmpty(self) ? onNonEmpty(self) : onEmpty())
443
+
444
+ /**
445
+ * Pattern-matches on an array from the left, providing the first element and
446
+ * the remaining elements separately.
447
+ *
448
+ * **When to use**
449
+ *
450
+ * Use when you need to branch on an array and handle the non-empty case as the
451
+ * first element plus the remaining elements.
452
+ *
453
+ * **Details**
454
+ *
455
+ * `onNonEmpty` receives `(head, tail)` where `tail` is the rest of the array.
456
+ *
457
+ * **Example** (Destructuring head and tail)
458
+ *
459
+ * ```ts
460
+ * import { Array } from "effect"
461
+ *
462
+ * const matchLeft = Array.matchLeft({
463
+ * onEmpty: () => "empty",
464
+ * onNonEmpty: (head, tail) => `head: ${head}, tail: ${tail.length}`
465
+ * })
466
+ * console.log(matchLeft([])) // "empty"
467
+ * console.log(matchLeft([1, 2, 3])) // "head: 1, tail: 2"
468
+ * ```
469
+ *
470
+ * @see {@link match} — receives the full non-empty array
471
+ * @see {@link matchRight} — destructures into init + last
472
+ *
473
+ * @category pattern matching
474
+ * @since 2.0.0
475
+ */
476
+ export const matchLeft: {
477
+ <B, A, C = B>(
478
+ options: {
479
+ readonly onEmpty: LazyArg<B>
480
+ readonly onNonEmpty: (head: A, tail: Array<A>) => C
481
+ }
482
+ ): (self: ReadonlyArray<A>) => B | C
483
+ <A, B, C = B>(
484
+ self: ReadonlyArray<A>,
485
+ options: {
486
+ readonly onEmpty: LazyArg<B>
487
+ readonly onNonEmpty: (head: A, tail: Array<A>) => C
488
+ }
489
+ ): B | C
490
+ } = dual(2, <A, B, C = B>(
491
+ self: ReadonlyArray<A>,
492
+ { onEmpty, onNonEmpty }: {
493
+ readonly onEmpty: LazyArg<B>
494
+ readonly onNonEmpty: (head: A, tail: Array<A>) => C
495
+ }
496
+ ): B | C => isReadonlyArrayNonEmpty(self) ? onNonEmpty(headNonEmpty(self), tailNonEmpty(self)) : onEmpty())
497
+
498
+ /**
499
+ * Pattern-matches on an array from the right, providing all elements except the
500
+ * last and the last element separately.
501
+ *
502
+ * **When to use**
503
+ *
504
+ * Use when you need to branch on an array and handle the non-empty case as the
505
+ * elements before the last plus the last element.
506
+ *
507
+ * **Details**
508
+ *
509
+ * `onNonEmpty` receives `(init, last)` where `init` is everything but the last element.
510
+ *
511
+ * **Example** (Destructuring init and last)
512
+ *
513
+ * ```ts
514
+ * import { Array } from "effect"
515
+ *
516
+ * const matchRight = Array.matchRight({
517
+ * onEmpty: () => "empty",
518
+ * onNonEmpty: (init, last) => `init: ${init.length}, last: ${last}`
519
+ * })
520
+ * console.log(matchRight([])) // "empty"
521
+ * console.log(matchRight([1, 2, 3])) // "init: 2, last: 3"
522
+ * ```
523
+ *
524
+ * @see {@link match} — receives the full non-empty array
525
+ * @see {@link matchLeft} — destructures into head + tail
526
+ *
527
+ * @category pattern matching
528
+ * @since 2.0.0
529
+ */
530
+ export const matchRight: {
531
+ <B, A, C = B>(
532
+ options: {
533
+ readonly onEmpty: LazyArg<B>
534
+ readonly onNonEmpty: (init: Array<A>, last: A) => C
535
+ }
536
+ ): (self: ReadonlyArray<A>) => B | C
537
+ <A, B, C = B>(
538
+ self: ReadonlyArray<A>,
539
+ options: {
540
+ readonly onEmpty: LazyArg<B>
541
+ readonly onNonEmpty: (init: Array<A>, last: A) => C
542
+ }
543
+ ): B | C
544
+ } = dual(2, <A, B, C = B>(
545
+ self: ReadonlyArray<A>,
546
+ { onEmpty, onNonEmpty }: {
547
+ readonly onEmpty: LazyArg<B>
548
+ readonly onNonEmpty: (init: Array<A>, last: A) => C
549
+ }
550
+ ): B | C =>
551
+ isReadonlyArrayNonEmpty(self) ?
552
+ onNonEmpty(initNonEmpty(self), lastNonEmpty(self)) :
553
+ onEmpty())
554
+
555
+ /**
556
+ * Adds a single element to the front of an iterable, returning a `NonEmptyArray`.
557
+ *
558
+ * **When to use**
559
+ *
560
+ * Use when you need to guarantee a non-empty result after adding a required
561
+ * leading value.
562
+ *
563
+ * **Example** (Prepending an element)
564
+ *
565
+ * ```ts
566
+ * import { Array } from "effect"
567
+ *
568
+ * const result = Array.prepend([2, 3, 4], 1)
569
+ * console.log(result) // [1, 2, 3, 4]
570
+ * ```
571
+ *
572
+ * @see {@link append} — add to the end
573
+ * @see {@link prependAll} — prepend multiple elements
574
+ *
575
+ * @category combining
576
+ * @since 2.0.0
577
+ */
578
+ export const prepend: {
579
+ <B>(head: B): <A>(self: Iterable<A>) => NonEmptyArray<A | B>
580
+ <A, B>(self: Iterable<A>, head: B): NonEmptyArray<A | B>
581
+ } = dual(2, <A, B>(self: Iterable<A>, head: B): NonEmptyArray<A | B> => [head, ...self])
582
+
583
+ /**
584
+ * Prepends all elements from a prefix iterable to the front of an array.
585
+ *
586
+ * **When to use**
587
+ *
588
+ * Use to prepend multiple elements from an iterable to the front of an array.
589
+ *
590
+ * **Details**
591
+ *
592
+ * If either input is non-empty, the result is a `NonEmptyArray`.
593
+ *
594
+ * **Example** (Prepending multiple elements)
595
+ *
596
+ * ```ts
597
+ * import { Array } from "effect"
598
+ *
599
+ * const result = Array.prependAll([2, 3], [0, 1])
600
+ * console.log(result) // [0, 1, 2, 3]
601
+ * ```
602
+ *
603
+ * @see {@link prepend} — add a single element to the front
604
+ * @see {@link appendAll} — add elements to the end
605
+ *
606
+ * @category combining
607
+ * @since 2.0.0
608
+ */
609
+ export const prependAll: {
610
+ <S extends Iterable<any>, T extends Iterable<any>>(
611
+ that: T
612
+ ): (self: S) => ReadonlyArray.OrNonEmpty<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
613
+ <A, B>(self: Iterable<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<A | B>
614
+ <A, B>(self: NonEmptyReadonlyArray<A>, that: Iterable<B>): NonEmptyArray<A | B>
615
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
616
+ } = dual(
617
+ 2,
618
+ <A>(self: Iterable<A>, that: Iterable<A>): Array<A> => fromIterable(that).concat(fromIterable(self))
619
+ )
620
+
621
+ /**
622
+ * Adds a single element to the end of an iterable, returning a `NonEmptyArray`.
623
+ *
624
+ * **When to use**
625
+ *
626
+ * Use when you need to guarantee a non-empty result after adding a required
627
+ * trailing value.
628
+ *
629
+ * **Example** (Appending an element)
630
+ *
631
+ * ```ts
632
+ * import { Array } from "effect"
633
+ *
634
+ * const result = Array.append([1, 2, 3], 4)
635
+ * console.log(result) // [1, 2, 3, 4]
636
+ * ```
637
+ *
638
+ * @see {@link prepend} — add to the front
639
+ * @see {@link appendAll} — append multiple elements
640
+ *
641
+ * @category combining
642
+ * @since 2.0.0
643
+ */
644
+ export const append: {
645
+ <B>(last: B): <A>(self: Iterable<A>) => NonEmptyArray<A | B>
646
+ <A, B>(self: Iterable<A>, last: B): NonEmptyArray<A | B>
647
+ } = dual(2, <A, B>(self: Iterable<A>, last: B): Array<A | B> => [...self, last])
648
+
649
+ /**
650
+ * Concatenates two iterables into a single array.
651
+ *
652
+ * **When to use**
653
+ *
654
+ * Use to combine two iterable inputs into a new array with the second input's
655
+ * elements after the first.
656
+ *
657
+ * **Details**
658
+ *
659
+ * If either input is non-empty, the result is a `NonEmptyArray`.
660
+ *
661
+ * **Example** (Concatenating arrays)
662
+ *
663
+ * ```ts
664
+ * import { Array } from "effect"
665
+ *
666
+ * const result = Array.appendAll([1, 2], [3, 4])
667
+ * console.log(result) // [1, 2, 3, 4]
668
+ * ```
669
+ *
670
+ * @see {@link append} — add a single element to the end
671
+ * @see {@link prependAll} — add elements to the front
672
+ *
673
+ * @category combining
674
+ * @since 2.0.0
675
+ */
676
+ export const appendAll: {
677
+ <S extends Iterable<any>, T extends Iterable<any>>(
678
+ that: T
679
+ ): (self: S) => ReadonlyArray.OrNonEmpty<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
680
+ <A, B>(self: Iterable<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<A | B>
681
+ <A, B>(self: NonEmptyReadonlyArray<A>, that: Iterable<B>): NonEmptyArray<A | B>
682
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
683
+ } = dual(
684
+ 2,
685
+ <A>(self: Iterable<A>, that: Iterable<A>): Array<A> => fromIterable(self).concat(fromIterable(that))
686
+ )
687
+
688
+ /**
689
+ * Folds left-to-right while keeping every intermediate accumulator value.
690
+ *
691
+ * **When to use**
692
+ *
693
+ * Use to compute a running accumulator where each intermediate value is needed.
694
+ *
695
+ * **Details**
696
+ *
697
+ * The output length is `input.length + 1` because it starts with the initial
698
+ * value. The result is always a `NonEmptyArray`. Use `reduce` if you only need
699
+ * the final accumulated value.
700
+ *
701
+ * **Example** (Running totals)
702
+ *
703
+ * ```ts
704
+ * import { Array } from "effect"
705
+ *
706
+ * const result = Array.scan([1, 2, 3, 4], 0, (acc, value) => acc + value)
707
+ * console.log(result) // [0, 1, 3, 6, 10]
708
+ * ```
709
+ *
710
+ * @see {@link scanRight} — right-to-left scan
711
+ * @see {@link reduce} — fold without intermediate values
712
+ *
713
+ * @category folding
714
+ * @since 2.0.0
715
+ */
716
+ export const scan: {
717
+ <B, A>(b: B, f: (b: B, a: A) => B): (self: Iterable<A>) => NonEmptyArray<B>
718
+ <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A) => B): NonEmptyArray<B>
719
+ } = dual(3, <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A) => B): NonEmptyArray<B> => {
720
+ const out: NonEmptyArray<B> = [b]
721
+ let i = 0
722
+ for (const a of self) {
723
+ out[i + 1] = f(out[i], a)
724
+ i++
725
+ }
726
+ return out
727
+ })
728
+
729
+ /**
730
+ * Folds right-to-left while keeping every intermediate accumulator value.
731
+ *
732
+ * **When to use**
733
+ *
734
+ * Use to compute a running accumulator from right to left where each intermediate
735
+ * value is needed.
736
+ *
737
+ * **Details**
738
+ *
739
+ * The output length is `input.length + 1` because it ends with the initial
740
+ * value. The result is always a `NonEmptyArray`.
741
+ *
742
+ * **Example** (Scanning running totals in reverse)
743
+ *
744
+ * ```ts
745
+ * import { Array } from "effect"
746
+ *
747
+ * const result = Array.scanRight([1, 2, 3, 4], 0, (acc, value) => acc + value)
748
+ * console.log(result) // [10, 9, 7, 4, 0]
749
+ * ```
750
+ *
751
+ * @see {@link scan} — left-to-right scan
752
+ * @see {@link reduceRight} — fold without intermediate values
753
+ *
754
+ * @category folding
755
+ * @since 2.0.0
756
+ */
757
+ export const scanRight: {
758
+ <B, A>(b: B, f: (b: B, a: A) => B): (self: Iterable<A>) => NonEmptyArray<B>
759
+ <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A) => B): NonEmptyArray<B>
760
+ } = dual(3, <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A) => B): NonEmptyArray<B> => {
761
+ const input = fromIterable(self)
762
+ const out: NonEmptyArray<B> = new Array(input.length + 1) as any
763
+ out[input.length] = b
764
+ for (let i = input.length - 1; i >= 0; i--) {
765
+ out[i] = f(out[i + 1], input[i])
766
+ }
767
+ return out
768
+ })
769
+
770
+ /**
771
+ * Checks whether a value is an `Array`.
772
+ *
773
+ * **When to use**
774
+ *
775
+ * Use to verify a value is a mutable array, narrowing its type to `Array<unknown>`.
776
+ *
777
+ * **Details**
778
+ *
779
+ * Acts as a type guard narrowing the input to `Array<unknown>` and delegates to
780
+ * `globalThis.Array.isArray`.
781
+ *
782
+ * **Example** (Type-guarding an unknown value)
783
+ *
784
+ * ```ts
785
+ * import { Array } from "effect"
786
+ *
787
+ * console.log(Array.isArray(null)) // false
788
+ * console.log(Array.isArray([1, 2, 3])) // true
789
+ * ```
790
+ *
791
+ * @see {@link isArrayEmpty} — check for an empty array
792
+ * @see {@link isArrayNonEmpty} — check for a non-empty array
793
+ *
794
+ * @category guards
795
+ * @since 2.0.0
796
+ */
797
+ export const isArray: {
798
+ (self: unknown): self is Array<unknown>
799
+ <T>(self: T): self is Extract<T, ReadonlyArray<any>>
800
+ } = Array.isArray
801
+
802
+ /**
803
+ * Checks whether a mutable `Array` is empty, narrowing the type to `[]`.
804
+ *
805
+ * **Example** (Checking for an empty array)
806
+ *
807
+ * ```ts
808
+ * import { Array } from "effect"
809
+ *
810
+ * console.log(Array.isArrayEmpty([])) // true
811
+ * console.log(Array.isArrayEmpty([1, 2, 3])) // false
812
+ * ```
813
+ *
814
+ * @see {@link isReadonlyArrayEmpty} — readonly variant
815
+ * @see {@link isArrayNonEmpty} — opposite check
816
+ *
817
+ * @category guards
818
+ * @since 4.0.0
819
+ */
820
+ export const isArrayEmpty = <A>(self: Array<A>): self is [] => self.length === 0
821
+
822
+ /**
823
+ * Checks whether a `ReadonlyArray` is empty, narrowing the type to `readonly []`.
824
+ *
825
+ * **Example** (Checking for an empty readonly array)
826
+ *
827
+ * ```ts
828
+ * import { Array } from "effect"
829
+ *
830
+ * console.log(Array.isReadonlyArrayEmpty([])) // true
831
+ * console.log(Array.isReadonlyArrayEmpty([1, 2, 3])) // false
832
+ * ```
833
+ *
834
+ * @see {@link isArrayEmpty} — mutable variant
835
+ * @see {@link isReadonlyArrayNonEmpty} — opposite check
836
+ *
837
+ * @category guards
838
+ * @since 4.0.0
839
+ */
840
+ export const isReadonlyArrayEmpty: <A>(self: ReadonlyArray<A>) => self is readonly [] = isArrayEmpty as any
841
+
842
+ /**
843
+ * Checks whether a mutable `Array` is non-empty, narrowing the type to
844
+ * `NonEmptyArray`.
845
+ *
846
+ * **When to use**
847
+ *
848
+ * Use when you need the narrowed value to remain a mutable `Array` after proving
849
+ * it has at least one element.
850
+ *
851
+ * **Example** (Checking for a non-empty array)
852
+ *
853
+ * ```ts
854
+ * import { Array } from "effect"
855
+ *
856
+ * console.log(Array.isArrayNonEmpty([])) // false
857
+ * console.log(Array.isArrayNonEmpty([1, 2, 3])) // true
858
+ * ```
859
+ *
860
+ * @see {@link isReadonlyArrayNonEmpty} — readonly variant
861
+ * @see {@link isArrayEmpty} — opposite check
862
+ *
863
+ * @category guards
864
+ * @since 4.0.0
865
+ */
866
+ export const isArrayNonEmpty: <A>(self: Array<A>) => self is NonEmptyArray<A> = internalArray.isArrayNonEmpty
867
+
868
+ /**
869
+ * Checks whether a `ReadonlyArray` is non-empty, narrowing the type to
870
+ * `NonEmptyReadonlyArray`.
871
+ *
872
+ * **When to use**
873
+ *
874
+ * Use when you need to prove a readonly array has at least one element without
875
+ * requiring mutable array methods afterward.
876
+ *
877
+ * **Example** (Checking for a non-empty readonly array)
878
+ *
879
+ * ```ts
880
+ * import { Array } from "effect"
881
+ *
882
+ * console.log(Array.isReadonlyArrayNonEmpty([])) // false
883
+ * console.log(Array.isReadonlyArrayNonEmpty([1, 2, 3])) // true
884
+ * ```
885
+ *
886
+ * @see {@link isArrayNonEmpty} — mutable variant
887
+ * @see {@link isReadonlyArrayEmpty} — opposite check
888
+ *
889
+ * @category guards
890
+ * @since 4.0.0
891
+ */
892
+ export const isReadonlyArrayNonEmpty: <A>(self: ReadonlyArray<A>) => self is NonEmptyReadonlyArray<A> =
893
+ internalArray.isArrayNonEmpty
894
+
895
+ /**
896
+ * Returns the number of elements in a `ReadonlyArray`.
897
+ *
898
+ * **When to use**
899
+ *
900
+ * Use when you need length as a composable function rather than a property access.
901
+ *
902
+ * **Example** (Getting the length)
903
+ *
904
+ * ```ts
905
+ * import { Array } from "effect"
906
+ *
907
+ * console.log(Array.length([1, 2, 3])) // 3
908
+ * ```
909
+ *
910
+ * @category getters
911
+ * @since 2.0.0
912
+ */
913
+ export const length = <A>(self: ReadonlyArray<A>): number => self.length
914
+
915
+ /** @internal */
916
+ export function isOutOfBounds<A>(i: number, as: ReadonlyArray<A>): boolean {
917
+ return i < 0 || i >= as.length
918
+ }
919
+
920
+ const clamp = <A>(i: number, as: ReadonlyArray<A>): number => Math.floor(Math.min(Math.max(0, i), as.length))
921
+
922
+ /**
923
+ * Reads an element at the given index safely, returning `Option.some` or
924
+ * `Option.none` if the index is out of bounds.
925
+ *
926
+ * **When to use**
927
+ *
928
+ * Use when you need to read an array element by index and handle an
929
+ * out-of-bounds index as `Option.none`.
930
+ *
931
+ * **Details**
932
+ *
933
+ * The index is floored to an integer. This never throws.
934
+ *
935
+ * **Example** (Accessing indexes safely)
936
+ *
937
+ * ```ts
938
+ * import { Array } from "effect"
939
+ *
940
+ * console.log(Array.get([1, 2, 3], 1)) // Some(2)
941
+ * console.log(Array.get([1, 2, 3], 10)) // None
942
+ * ```
943
+ *
944
+ * @see {@link getUnsafe} for indexed access that throws when the index is out of bounds
945
+ * @see {@link head} for reading the first element as an `Option`
946
+ * @see {@link last} for reading the last element as an `Option`
947
+ *
948
+ * @category getters
949
+ * @since 2.0.0
950
+ */
951
+ export const get: {
952
+ (index: number): <A>(self: ReadonlyArray<A>) => Option.Option<A>
953
+ <A>(self: ReadonlyArray<A>, index: number): Option.Option<A>
954
+ } = dual(2, <A>(self: ReadonlyArray<A>, index: number): Option.Option<A> => {
955
+ const i = Math.floor(index)
956
+ return isOutOfBounds(i, self) ? Option.none() : Option.some(self[i])
957
+ })
958
+
959
+ /**
960
+ * Reads an element at the given index, throwing if the index is out of bounds.
961
+ *
962
+ * **When to use**
963
+ *
964
+ * Use to read an array element at a known valid index when out-of-bounds would
965
+ * be a programming error.
966
+ *
967
+ * **Details**
968
+ *
969
+ * Throws an `Error` with the message `"Index out of bounds: <i>"`. Prefer
970
+ * `get` for safe access.
971
+ *
972
+ * **Example** (Accessing indexes unsafely)
973
+ *
974
+ * ```ts
975
+ * import { Array } from "effect"
976
+ *
977
+ * console.log(Array.getUnsafe([1, 2, 3], 1)) // 2
978
+ * // Array.getUnsafe([1, 2, 3], 10) // throws Error
979
+ * ```
980
+ *
981
+ * @see {@link get} — safe version returning `Option`
982
+ *
983
+ * @category unsafe
984
+ * @since 4.0.0
985
+ */
986
+ export const getUnsafe: {
987
+ (index: number): <A>(self: ReadonlyArray<A>) => A
988
+ <A>(self: ReadonlyArray<A>, index: number): A
989
+ } = dual(2, <A>(self: ReadonlyArray<A>, index: number): A => {
990
+ const i = Math.floor(index)
991
+ if (isOutOfBounds(i, self)) {
992
+ throw new Error(`Index out of bounds: ${i}`)
993
+ }
994
+ return self[i]
995
+ })
996
+
997
+ /**
998
+ * Splits a non-empty array into its first element and the remaining elements.
999
+ *
1000
+ * **When to use**
1001
+ *
1002
+ * Use when you have a `NonEmptyReadonlyArray` and need both its first element
1003
+ * and the remaining elements as separate values.
1004
+ *
1005
+ * **Details**
1006
+ *
1007
+ * Returns a tuple `[head, tail]` and requires a `NonEmptyReadonlyArray`.
1008
+ *
1009
+ * **Example** (Destructuring head and tail)
1010
+ *
1011
+ * ```ts
1012
+ * import { Array } from "effect"
1013
+ *
1014
+ * const result = Array.unprepend([1, 2, 3, 4])
1015
+ * console.log(result) // [1, [2, 3, 4]]
1016
+ * ```
1017
+ *
1018
+ * @see {@link unappend} for splitting a non-empty array into init and last
1019
+ * @see {@link headNonEmpty} for getting only the first element
1020
+ * @see {@link tailNonEmpty} for getting only the elements after the first
1021
+ *
1022
+ * @category splitting
1023
+ * @since 2.0.0
1024
+ */
1025
+ export const unprepend = <A>(
1026
+ self: NonEmptyReadonlyArray<A>
1027
+ ): [firstElement: A, remainingElements: Array<A>] => [headNonEmpty(self), tailNonEmpty(self)]
1028
+
1029
+ /**
1030
+ * Splits a non-empty array into all elements except the last, and the last
1031
+ * element.
1032
+ *
1033
+ * **When to use**
1034
+ *
1035
+ * Use when you need to split a non-empty array into the elements before the
1036
+ * last element and the last element.
1037
+ *
1038
+ * **Details**
1039
+ *
1040
+ * Returns a tuple `[init, last]` and requires a `NonEmptyReadonlyArray`.
1041
+ *
1042
+ * **Example** (Destructuring init and last)
1043
+ *
1044
+ * ```ts
1045
+ * import { Array } from "effect"
1046
+ *
1047
+ * const result = Array.unappend([1, 2, 3, 4])
1048
+ * console.log(result) // [[1, 2, 3], 4]
1049
+ * ```
1050
+ *
1051
+ * @see {@link unprepend} for splitting a non-empty array into head and tail
1052
+ * @see {@link initNonEmpty} for getting only the elements before the last
1053
+ * @see {@link lastNonEmpty} for getting only the last element
1054
+ *
1055
+ * @category splitting
1056
+ * @since 2.0.0
1057
+ */
1058
+ export const unappend = <A>(
1059
+ self: NonEmptyReadonlyArray<A>
1060
+ ): [arrayWithoutLastElement: Array<A>, lastElement: A] => [initNonEmpty(self), lastNonEmpty(self)]
1061
+
1062
+ /**
1063
+ * Returns the first element of an array safely wrapped in `Option.some`, or
1064
+ * `Option.none` if the array is empty.
1065
+ *
1066
+ * **When to use**
1067
+ *
1068
+ * Use to safely get the first element of an array that may be empty.
1069
+ *
1070
+ * **Example** (Getting the first element)
1071
+ *
1072
+ * ```ts
1073
+ * import { Array } from "effect"
1074
+ *
1075
+ * console.log(Array.head([1, 2, 3])) // Some(1)
1076
+ * console.log(Array.head([])) // None
1077
+ * ```
1078
+ *
1079
+ * @see {@link headNonEmpty} — direct access when array is known non-empty
1080
+ * @see {@link last} — get the last element
1081
+ *
1082
+ * @category getters
1083
+ * @since 2.0.0
1084
+ */
1085
+ export const head: <A>(self: ReadonlyArray<A>) => Option.Option<A> = get(0)
1086
+
1087
+ /**
1088
+ * Returns the first element of a `NonEmptyReadonlyArray` directly (no `Option`
1089
+ * wrapper).
1090
+ *
1091
+ * **When to use**
1092
+ *
1093
+ * Use to get the first element without `Option` wrapping when the array is known
1094
+ * to be non-empty.
1095
+ *
1096
+ * **Example** (Getting the head of a non-empty array)
1097
+ *
1098
+ * ```ts
1099
+ * import { Array } from "effect"
1100
+ *
1101
+ * console.log(Array.headNonEmpty([1, 2, 3, 4])) // 1
1102
+ * ```
1103
+ *
1104
+ * @see {@link head} — safe version for possibly-empty arrays
1105
+ *
1106
+ * @category getters
1107
+ * @since 2.0.0
1108
+ */
1109
+ export const headNonEmpty: <A>(self: NonEmptyReadonlyArray<A>) => A = getUnsafe(0)
1110
+
1111
+ /**
1112
+ * Returns the last element of an array safely wrapped in `Option.some`, or
1113
+ * `Option.none` if the array is empty.
1114
+ *
1115
+ * **When to use**
1116
+ *
1117
+ * Use to safely get the last element of an array that may be empty.
1118
+ *
1119
+ * **Example** (Getting the last element)
1120
+ *
1121
+ * ```ts
1122
+ * import { Array } from "effect"
1123
+ *
1124
+ * console.log(Array.last([1, 2, 3])) // Some(3)
1125
+ * console.log(Array.last([])) // None
1126
+ * ```
1127
+ *
1128
+ * @see {@link lastNonEmpty} — direct access when array is known non-empty
1129
+ * @see {@link head} — get the first element
1130
+ *
1131
+ * @category getters
1132
+ * @since 2.0.0
1133
+ */
1134
+ export const last = <A>(self: ReadonlyArray<A>): Option.Option<A> =>
1135
+ isReadonlyArrayNonEmpty(self) ? Option.some(lastNonEmpty(self)) : Option.none()
1136
+
1137
+ /**
1138
+ * Returns the last element of a `NonEmptyReadonlyArray` directly (no `Option`
1139
+ * wrapper).
1140
+ *
1141
+ * **When to use**
1142
+ *
1143
+ * Use to get the last element without `Option` wrapping when the array is known
1144
+ * to be non-empty.
1145
+ *
1146
+ * **Example** (Getting the last of a non-empty array)
1147
+ *
1148
+ * ```ts
1149
+ * import { Array } from "effect"
1150
+ *
1151
+ * console.log(Array.lastNonEmpty([1, 2, 3, 4])) // 4
1152
+ * ```
1153
+ *
1154
+ * @see {@link last} — safe version for possibly-empty arrays
1155
+ *
1156
+ * @category getters
1157
+ * @since 2.0.0
1158
+ */
1159
+ export const lastNonEmpty = <A>(self: NonEmptyReadonlyArray<A>): A => self[self.length - 1]
1160
+
1161
+ /**
1162
+ * Returns all elements except the first safely, wrapped in an `Option`.
1163
+ *
1164
+ * **When to use**
1165
+ *
1166
+ * Use to safely get all elements after the first when the iterable may be empty.
1167
+ *
1168
+ * **Details**
1169
+ *
1170
+ * Allocates a new array via `slice(1)`. Empty inputs return `Option.none()`.
1171
+ *
1172
+ * **Example** (Getting the tail)
1173
+ *
1174
+ * ```ts
1175
+ * import { Array } from "effect"
1176
+ *
1177
+ * console.log(Array.tail([1, 2, 3, 4])) // Option.some([2, 3, 4])
1178
+ * console.log(Array.tail([])) // Option.none()
1179
+ * ```
1180
+ *
1181
+ * @see {@link tailNonEmpty} — when the array is known non-empty
1182
+ * @see {@link init} — all elements except the last
1183
+ *
1184
+ * @category getters
1185
+ * @since 2.0.0
1186
+ */
1187
+ export function tail<A>(self: Iterable<A>): Option.Option<Array<A>> {
1188
+ const as = fromIterable(self)
1189
+ return isReadonlyArrayNonEmpty(as) ? Option.some(tailNonEmpty(as)) : Option.none()
1190
+ }
1191
+
1192
+ /**
1193
+ * Returns all elements except the first of a `NonEmptyReadonlyArray`.
1194
+ *
1195
+ * **When to use**
1196
+ *
1197
+ * Use to get all elements after the first when the array is known to be non-empty.
1198
+ *
1199
+ * **Example** (Getting the tail of a non-empty array)
1200
+ *
1201
+ * ```ts
1202
+ * import { Array } from "effect"
1203
+ *
1204
+ * console.log(Array.tailNonEmpty([1, 2, 3, 4])) // [2, 3, 4]
1205
+ * ```
1206
+ *
1207
+ * @see {@link tail} — safe version for possibly-empty arrays
1208
+ * @see {@link initNonEmpty} — all elements except the last
1209
+ *
1210
+ * @category getters
1211
+ * @since 2.0.0
1212
+ */
1213
+ export const tailNonEmpty = <A>(self: NonEmptyReadonlyArray<A>): Array<A> => self.slice(1)
1214
+
1215
+ /**
1216
+ * Returns all elements except the last safely, wrapped in an `Option`.
1217
+ *
1218
+ * **When to use**
1219
+ *
1220
+ * Use to safely get all elements before the last when the iterable may be empty.
1221
+ *
1222
+ * **Details**
1223
+ *
1224
+ * Allocates a new array via `slice(0, -1)`. Empty inputs return
1225
+ * `Option.none()`.
1226
+ *
1227
+ * **Example** (Getting init)
1228
+ *
1229
+ * ```ts
1230
+ * import { Array } from "effect"
1231
+ *
1232
+ * console.log(Array.init([1, 2, 3, 4])) // Option.some([1, 2, 3])
1233
+ * console.log(Array.init([])) // Option.none()
1234
+ * ```
1235
+ *
1236
+ * @see {@link initNonEmpty} — when the array is known non-empty
1237
+ * @see {@link tail} — all elements except the first
1238
+ *
1239
+ * @category getters
1240
+ * @since 2.0.0
1241
+ */
1242
+ export function init<A>(self: Iterable<A>): Option.Option<Array<A>> {
1243
+ const as = fromIterable(self)
1244
+ return isReadonlyArrayNonEmpty(as) ? Option.some(initNonEmpty(as)) : Option.none()
1245
+ }
1246
+
1247
+ /**
1248
+ * Returns all elements except the last of a `NonEmptyReadonlyArray`.
1249
+ *
1250
+ * **When to use**
1251
+ *
1252
+ * Use to get all elements before the last when the array is known to be non-empty.
1253
+ *
1254
+ * **Example** (Getting init of a non-empty array)
1255
+ *
1256
+ * ```ts
1257
+ * import { Array } from "effect"
1258
+ *
1259
+ * console.log(Array.initNonEmpty([1, 2, 3, 4])) // [1, 2, 3]
1260
+ * ```
1261
+ *
1262
+ * @see {@link init} — safe version for possibly-empty arrays
1263
+ * @see {@link tailNonEmpty} — all elements except the first
1264
+ *
1265
+ * @category getters
1266
+ * @since 2.0.0
1267
+ */
1268
+ export const initNonEmpty = <A>(self: NonEmptyReadonlyArray<A>): Array<A> => self.slice(0, -1)
1269
+
1270
+ /**
1271
+ * Keeps the first `n` elements, creating a new array.
1272
+ *
1273
+ * **When to use**
1274
+ *
1275
+ * Use to keep up to the first `n` elements from an iterable as a new array.
1276
+ *
1277
+ * **Details**
1278
+ *
1279
+ * `n` is clamped to `[0, length]`. Returns an empty array when `n <= 0`.
1280
+ *
1281
+ * **Example** (Taking from the start)
1282
+ *
1283
+ * ```ts
1284
+ * import { Array } from "effect"
1285
+ *
1286
+ * console.log(Array.take([1, 2, 3, 4, 5], 3)) // [1, 2, 3]
1287
+ * ```
1288
+ *
1289
+ * @see {@link takeRight} for keeping elements from the end
1290
+ * @see {@link takeWhile} for keeping an initial prefix while a predicate holds
1291
+ * @see {@link drop} for removing elements from the start
1292
+ *
1293
+ * @category getters
1294
+ * @since 2.0.0
1295
+ */
1296
+ export const take: {
1297
+ (n: number): <A>(self: Iterable<A>) => Array<A>
1298
+ <A>(self: Iterable<A>, n: number): Array<A>
1299
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<A> => {
1300
+ const input = fromIterable(self)
1301
+ return input.slice(0, clamp(n, input))
1302
+ })
1303
+
1304
+ /**
1305
+ * Keeps the last `n` elements, creating a new array.
1306
+ *
1307
+ * **When to use**
1308
+ *
1309
+ * Use to keep the last `n` elements of an iterable.
1310
+ *
1311
+ * **Details**
1312
+ *
1313
+ * `n` is clamped to `[0, length]`. Returns an empty array when `n <= 0`.
1314
+ *
1315
+ * **Example** (Taking from the end)
1316
+ *
1317
+ * ```ts
1318
+ * import { Array } from "effect"
1319
+ *
1320
+ * console.log(Array.takeRight([1, 2, 3, 4, 5], 3)) // [3, 4, 5]
1321
+ * ```
1322
+ *
1323
+ * @see {@link take} — keep from the start
1324
+ * @see {@link dropRight} — remove from the end
1325
+ *
1326
+ * @category getters
1327
+ * @since 2.0.0
1328
+ */
1329
+ export const takeRight: {
1330
+ (n: number): <A>(self: Iterable<A>) => Array<A>
1331
+ <A>(self: Iterable<A>, n: number): Array<A>
1332
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<A> => {
1333
+ const input = fromIterable(self)
1334
+ const i = clamp(n, input)
1335
+ return i === 0 ? [] : input.slice(-i)
1336
+ })
1337
+
1338
+ /**
1339
+ * Takes elements from the start while the predicate holds, stopping at the
1340
+ * first element that fails.
1341
+ *
1342
+ * **When to use**
1343
+ *
1344
+ * Use to keep the leading elements of an iterable while each element satisfies
1345
+ * a predicate, returning the retained prefix as an array.
1346
+ *
1347
+ * **Details**
1348
+ *
1349
+ * Supports refinements for type narrowing. The predicate receives
1350
+ * `(element, index)`.
1351
+ *
1352
+ * **Example** (Taking while condition holds)
1353
+ *
1354
+ * ```ts
1355
+ * import { Array } from "effect"
1356
+ *
1357
+ * console.log(Array.takeWhile([1, 3, 2, 4, 1, 2], (x) => x < 4)) // [1, 3, 2]
1358
+ * ```
1359
+ *
1360
+ * @see {@link take} for keeping a fixed number of leading elements
1361
+ * @see {@link dropWhile} for removing the matching prefix and keeping the rest
1362
+ * @see {@link span} for splitting the matching prefix from the remaining elements
1363
+ *
1364
+ * @category getters
1365
+ * @since 2.0.0
1366
+ */
1367
+ export const takeWhile: {
1368
+ <A, B extends A>(refinement: (a: NoInfer<A>, i: number) => a is B): (self: Iterable<A>) => Array<B>
1369
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Array<A>
1370
+ <A, B extends A>(self: Iterable<A>, refinement: (a: A, i: number) => a is B): Array<B>
1371
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A>
1372
+ } = dual(2, <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A> => {
1373
+ let i = 0
1374
+ const out: Array<A> = []
1375
+ for (const a of self) {
1376
+ if (!predicate(a, i)) {
1377
+ break
1378
+ }
1379
+ out.push(a)
1380
+ i++
1381
+ }
1382
+ return out
1383
+ })
1384
+
1385
+ /**
1386
+ * Takes elements from the start while a `Filter` succeeds, collecting transformed values.
1387
+ *
1388
+ * **When to use**
1389
+ *
1390
+ * Use when you need to take a prefix from an iterable while a function can
1391
+ * successfully extract or transform elements, stopping at the first element
1392
+ * that produces a failure result.
1393
+ *
1394
+ * **Details**
1395
+ *
1396
+ * The filter receives `(element, index)` and processing stops at the first
1397
+ * filter failure.
1398
+ *
1399
+ * @see {@link takeWhile} for taking a prefix based on a boolean predicate
1400
+ *
1401
+ * @category getters
1402
+ * @since 4.0.0
1403
+ */
1404
+ export const takeWhileFilter: {
1405
+ <A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (self: Iterable<A>) => Array<B>
1406
+ <A, B, X>(self: Iterable<A>, f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): Array<B>
1407
+ } = dual(2, <A, B, X>(self: Iterable<A>, f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): Array<B> => {
1408
+ let i = 0
1409
+ const out: Array<B> = []
1410
+ for (const a of self) {
1411
+ const result = f(a, i)
1412
+ if (Result.isFailure(result)) {
1413
+ break
1414
+ }
1415
+ out.push(result.success)
1416
+ i++
1417
+ }
1418
+ return out
1419
+ })
1420
+
1421
+ const spanIndex = <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): number => {
1422
+ let i = 0
1423
+ for (const a of self) {
1424
+ if (!predicate(a, i)) {
1425
+ break
1426
+ }
1427
+ i++
1428
+ }
1429
+ return i
1430
+ }
1431
+
1432
+ /**
1433
+ * Splits an iterable into two arrays: the longest prefix where the predicate
1434
+ * holds, and the remaining elements.
1435
+ *
1436
+ * **When to use**
1437
+ *
1438
+ * Use when you need both the longest predicate-matching prefix and the
1439
+ * remaining elements.
1440
+ *
1441
+ * **Details**
1442
+ *
1443
+ * Equivalent to `[takeWhile(pred), dropWhile(pred)]`, but more efficient
1444
+ * because it runs in a single pass. Supports refinements for type narrowing of
1445
+ * the prefix.
1446
+ *
1447
+ * **Example** (Splitting at predicate boundary)
1448
+ *
1449
+ * ```ts
1450
+ * import { Array } from "effect"
1451
+ *
1452
+ * console.log(Array.span([1, 3, 2, 4, 5], (x) => x % 2 === 1)) // [[1, 3], [2, 4, 5]]
1453
+ * ```
1454
+ *
1455
+ * @see {@link takeWhile} for keeping only the matching prefix
1456
+ * @see {@link dropWhile} for keeping only the elements after the matching prefix
1457
+ * @see {@link splitWhere} for splitting at the first element that satisfies a predicate
1458
+ *
1459
+ * @category splitting
1460
+ * @since 2.0.0
1461
+ */
1462
+ export const span: {
1463
+ <A, B extends A>(
1464
+ refinement: (a: NoInfer<A>, i: number) => a is B
1465
+ ): (self: Iterable<A>) => [init: Array<B>, rest: Array<Exclude<A, B>>]
1466
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => [init: Array<A>, rest: Array<A>]
1467
+ <A, B extends A>(
1468
+ self: Iterable<A>,
1469
+ refinement: (a: A, i: number) => a is B
1470
+ ): [init: Array<B>, rest: Array<Exclude<A, B>>]
1471
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): [init: Array<A>, rest: Array<A>]
1472
+ } = dual(
1473
+ 2,
1474
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): [init: Array<A>, rest: Array<A>] => {
1475
+ const input = fromIterable(self)
1476
+ return splitAt(input, spanIndex(input, predicate))
1477
+ }
1478
+ )
1479
+
1480
+ /**
1481
+ * Removes the first `n` elements, creating a new array.
1482
+ *
1483
+ * **When to use**
1484
+ *
1485
+ * Use to keep the suffix of an iterable after skipping a fixed number of
1486
+ * leading elements.
1487
+ *
1488
+ * **Details**
1489
+ *
1490
+ * `n` is clamped to `[0, length]`. When `n <= 0`, this returns a copy of the
1491
+ * full array.
1492
+ *
1493
+ * **Example** (Dropping from the start)
1494
+ *
1495
+ * ```ts
1496
+ * import { Array } from "effect"
1497
+ *
1498
+ * console.log(Array.drop([1, 2, 3, 4, 5], 2)) // [3, 4, 5]
1499
+ * ```
1500
+ *
1501
+ * @see {@link dropRight} for removing a fixed number of elements from the end
1502
+ * @see {@link dropWhile} for removing a prefix based on a predicate instead of a fixed count
1503
+ * @see {@link take} for keeping a fixed number of elements from the start
1504
+ *
1505
+ * @category getters
1506
+ * @since 2.0.0
1507
+ */
1508
+ export const drop: {
1509
+ (n: number): <A>(self: Iterable<A>) => Array<A>
1510
+ <A>(self: Iterable<A>, n: number): Array<A>
1511
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<A> => {
1512
+ const input = fromIterable(self)
1513
+ return input.slice(clamp(n, input), input.length)
1514
+ })
1515
+
1516
+ /**
1517
+ * Removes the last `n` elements, creating a new array.
1518
+ *
1519
+ * **When to use**
1520
+ *
1521
+ * Use to remove the last `n` elements from an iterable.
1522
+ *
1523
+ * **Details**
1524
+ *
1525
+ * `n` is clamped to `[0, length]`.
1526
+ *
1527
+ * **Example** (Dropping from the end)
1528
+ *
1529
+ * ```ts
1530
+ * import { Array } from "effect"
1531
+ *
1532
+ * console.log(Array.dropRight([1, 2, 3, 4, 5], 2)) // [1, 2, 3]
1533
+ * ```
1534
+ *
1535
+ * @see {@link drop} — remove from the start
1536
+ * @see {@link takeRight} — keep from the end
1537
+ *
1538
+ * @category getters
1539
+ * @since 2.0.0
1540
+ */
1541
+ export const dropRight: {
1542
+ (n: number): <A>(self: Iterable<A>) => Array<A>
1543
+ <A>(self: Iterable<A>, n: number): Array<A>
1544
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<A> => {
1545
+ const input = fromIterable(self)
1546
+ return input.slice(0, input.length - clamp(n, input))
1547
+ })
1548
+
1549
+ /**
1550
+ * Drops elements from the start while the predicate holds, returning the rest.
1551
+ *
1552
+ * **When to use**
1553
+ *
1554
+ * Use to remove a leading prefix of elements that satisfy a predicate.
1555
+ *
1556
+ * **Details**
1557
+ *
1558
+ * The predicate receives `(element, index)`.
1559
+ *
1560
+ * **Example** (Dropping while condition holds)
1561
+ *
1562
+ * ```ts
1563
+ * import { Array } from "effect"
1564
+ *
1565
+ * console.log(Array.dropWhile([1, 2, 3, 4, 5], (x) => x < 4)) // [4, 5]
1566
+ * ```
1567
+ *
1568
+ * @see {@link takeWhile} — keep the matching prefix instead
1569
+ * @see {@link drop} — drop a fixed count
1570
+ *
1571
+ * @category getters
1572
+ * @since 2.0.0
1573
+ */
1574
+ export const dropWhile: {
1575
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Array<A>
1576
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A>
1577
+ } = dual(2, <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A> => {
1578
+ const input = fromIterable(self)
1579
+ let i = 0
1580
+ while (i < input.length) {
1581
+ if (!predicate(input[i], i)) {
1582
+ break
1583
+ }
1584
+ i++
1585
+ }
1586
+ return input.slice(i)
1587
+ })
1588
+
1589
+ /**
1590
+ * Drops elements from the start while a `Filter` succeeds.
1591
+ *
1592
+ * **When to use**
1593
+ *
1594
+ * Use when you need to drop a prefix from an iterable by computing a `Result`
1595
+ * per element instead of using a simple boolean predicate.
1596
+ *
1597
+ * **Details**
1598
+ *
1599
+ * The filter receives `(element, index)`. The result contains the remaining
1600
+ * original elements after the first filter failure.
1601
+ *
1602
+ * @see {@link dropWhile} for dropping a prefix with a simple boolean predicate
1603
+ * @see {@link takeWhileFilter} for keeping only the matching prefix
1604
+ *
1605
+ * @category getters
1606
+ * @since 4.0.0
1607
+ */
1608
+ export const dropWhileFilter: {
1609
+ <A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (self: Iterable<A>) => Array<A>
1610
+ <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<A>
1611
+ } = dual(
1612
+ 2,
1613
+ <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<A> => {
1614
+ const input = fromIterable(self)
1615
+ let i = 0
1616
+ while (i < input.length) {
1617
+ if (Result.isFailure(f(input[i], i))) {
1618
+ break
1619
+ }
1620
+ i++
1621
+ }
1622
+ return input.slice(i)
1623
+ }
1624
+ )
1625
+
1626
+ /**
1627
+ * Returns the index of the first element matching the predicate, wrapped in an
1628
+ * `Option`.
1629
+ *
1630
+ * **When to use**
1631
+ *
1632
+ * Use to find the index of the first matching element from the start of an
1633
+ * iterable.
1634
+ *
1635
+ * **Example** (Finding an index)
1636
+ *
1637
+ * ```ts
1638
+ * import { Array } from "effect"
1639
+ *
1640
+ * console.log(Array.findFirstIndex([5, 3, 8, 9], (x) => x > 5)) // Option.some(2)
1641
+ * ```
1642
+ *
1643
+ * @see {@link findLastIndex} — search from the end
1644
+ * @see {@link findFirst} — get the element itself
1645
+ *
1646
+ * @category elements
1647
+ * @since 2.0.0
1648
+ */
1649
+ export const findFirstIndex: {
1650
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Option.Option<number>
1651
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<number>
1652
+ } = dual(2, <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<number> => {
1653
+ let i = 0
1654
+ for (const a of self) {
1655
+ if (predicate(a, i)) {
1656
+ return Option.some(i)
1657
+ }
1658
+ i++
1659
+ }
1660
+ return Option.none()
1661
+ })
1662
+
1663
+ /**
1664
+ * Returns the index of the last element matching the predicate, wrapped in an
1665
+ * `Option`.
1666
+ *
1667
+ * **When to use**
1668
+ *
1669
+ * Use to find the index of the last matching element from the end of an array.
1670
+ *
1671
+ * **Example** (Finding the last matching index)
1672
+ *
1673
+ * ```ts
1674
+ * import { Array } from "effect"
1675
+ *
1676
+ * console.log(Array.findLastIndex([1, 3, 8, 9], (x) => x < 5)) // Option.some(1)
1677
+ * ```
1678
+ *
1679
+ * @see {@link findFirstIndex} — search from the start
1680
+ * @see {@link findLast} — get the element itself
1681
+ *
1682
+ * @category elements
1683
+ * @since 2.0.0
1684
+ */
1685
+ export const findLastIndex: {
1686
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Option.Option<number>
1687
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<number>
1688
+ } = dual(2, <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<number> => {
1689
+ const input = fromIterable(self)
1690
+ for (let i = input.length - 1; i >= 0; i--) {
1691
+ if (predicate(input[i], i)) {
1692
+ return Option.some(i)
1693
+ }
1694
+ }
1695
+ return Option.none()
1696
+ })
1697
+
1698
+ /**
1699
+ * Returns the first element matching a predicate, refinement, or mapping
1700
+ * function, wrapped in `Option`.
1701
+ *
1702
+ * **When to use**
1703
+ *
1704
+ * Use to scan an iterable in iteration order and return the first selected
1705
+ * element or mapped value as an `Option`.
1706
+ *
1707
+ * **Details**
1708
+ *
1709
+ * Accepts a predicate `(a, i) => boolean`, a refinement, or a function
1710
+ * `(a, i) => Option<B>` for simultaneous find-and-transform. If no element
1711
+ * matches, this returns `Option.none()`.
1712
+ *
1713
+ * **Example** (Finding the first match)
1714
+ *
1715
+ * ```ts
1716
+ * import { Array } from "effect"
1717
+ *
1718
+ * console.log(Array.findFirst([1, 2, 3, 4, 5], (x) => x > 3)) // Option.some(4)
1719
+ * ```
1720
+ *
1721
+ * @see {@link findLast} — search from the end
1722
+ * @see {@link findFirstIndex} — get the index instead
1723
+ * @see {@link findFirstWithIndex} — get both element and index
1724
+ *
1725
+ * @category elements
1726
+ * @since 2.0.0
1727
+ */
1728
+ export const findFirst: {
1729
+ <A, B>(f: (a: NoInfer<A>, i: number) => Option.Option<B>): (self: Iterable<A>) => Option.Option<B>
1730
+ <A, B extends A>(refinement: (a: NoInfer<A>, i: number) => a is B): (self: Iterable<A>) => Option.Option<B>
1731
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Option.Option<A>
1732
+ <A, B>(self: Iterable<A>, f: (a: A, i: number) => Option.Option<B>): Option.Option<B>
1733
+ <A, B extends A>(self: Iterable<A>, refinement: (a: A, i: number) => a is B): Option.Option<B>
1734
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<A>
1735
+ } = moduleIterable.findFirst
1736
+
1737
+ /**
1738
+ * Returns the first selected value together with its index, wrapped in an
1739
+ * `Option`.
1740
+ *
1741
+ * **When to use**
1742
+ *
1743
+ * Use to find both the first matching element and its index in one pass.
1744
+ *
1745
+ * **Details**
1746
+ *
1747
+ * Accepts a predicate, a refinement, or a function returning `Option`. For an
1748
+ * `Option`-returning function, returns `[mappedValue, index]` for the first
1749
+ * `Some`, or `Option.none()` if no element is selected.
1750
+ *
1751
+ * **Example** (Finding element with its index)
1752
+ *
1753
+ * ```ts
1754
+ * import { Array } from "effect"
1755
+ *
1756
+ * console.log(Array.findFirstWithIndex([1, 2, 3, 4, 5], (x) => x > 3)) // Option.some([4, 3])
1757
+ * ```
1758
+ *
1759
+ * @see {@link findFirst} — get only the element
1760
+ * @see {@link findFirstIndex} — get only the index
1761
+ *
1762
+ * @category elements
1763
+ * @since 3.17.0
1764
+ */
1765
+ export const findFirstWithIndex: {
1766
+ <A, B>(f: (a: NoInfer<A>, i: number) => Option.Option<B>): (self: Iterable<A>) => Option.Option<[B, number]>
1767
+ <A, B extends A>(refinement: (a: NoInfer<A>, i: number) => a is B): (self: Iterable<A>) => Option.Option<[B, number]>
1768
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Option.Option<[A, number]>
1769
+ <A, B>(self: Iterable<A>, f: (a: A, i: number) => Option.Option<B>): Option.Option<[B, number]>
1770
+ <A, B extends A>(self: Iterable<A>, refinement: (a: A, i: number) => a is B): Option.Option<[B, number]>
1771
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<[A, number]>
1772
+ } = dual(
1773
+ 2,
1774
+ <A>(
1775
+ self: Iterable<A>,
1776
+ f: ((a: A, i: number) => boolean) | ((a: A, i: number) => Option.Option<A>)
1777
+ ): Option.Option<[A, number]> => {
1778
+ let i = 0
1779
+ for (const a of self) {
1780
+ const o = f(a, i)
1781
+ if (typeof o === "boolean") {
1782
+ if (o) {
1783
+ return Option.some([a, i])
1784
+ }
1785
+ } else {
1786
+ if (Option.isSome(o)) {
1787
+ return Option.some([o.value, i])
1788
+ }
1789
+ }
1790
+ i++
1791
+ }
1792
+ return Option.none()
1793
+ }
1794
+ )
1795
+
1796
+ /**
1797
+ * Returns the last element matching a predicate, refinement, or mapping
1798
+ * function, wrapped in `Option`.
1799
+ *
1800
+ * **When to use**
1801
+ *
1802
+ * Use to find the last matching element from the end of an array.
1803
+ *
1804
+ * **Details**
1805
+ *
1806
+ * Searches from the end of the array. If no element matches, this returns
1807
+ * `Option.none()`.
1808
+ *
1809
+ * **Example** (Finding the last match)
1810
+ *
1811
+ * ```ts
1812
+ * import { Array } from "effect"
1813
+ *
1814
+ * console.log(Array.findLast([1, 2, 3, 4, 5], (n) => n % 2 === 0)) // Option.some(4)
1815
+ * ```
1816
+ *
1817
+ * @see {@link findFirst} — search from the start
1818
+ * @see {@link findLastIndex} — get the index instead
1819
+ *
1820
+ * @category elements
1821
+ * @since 2.0.0
1822
+ */
1823
+ export const findLast: {
1824
+ <A, B>(f: (a: NoInfer<A>, i: number) => Option.Option<B>): (self: Iterable<A>) => Option.Option<B>
1825
+ <A, B extends A>(refinement: (a: NoInfer<A>, i: number) => a is B): (self: Iterable<A>) => Option.Option<B>
1826
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Option.Option<A>
1827
+ <A, B>(self: Iterable<A>, f: (a: A, i: number) => Option.Option<B>): Option.Option<B>
1828
+ <A, B extends A>(self: Iterable<A>, refinement: (a: A, i: number) => a is B): Option.Option<B>
1829
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Option.Option<A>
1830
+ } = dual(
1831
+ 2,
1832
+ <A>(
1833
+ self: Iterable<A>,
1834
+ f: ((a: A, i: number) => boolean) | ((a: A, i: number) => Option.Option<A>)
1835
+ ): Option.Option<A> => {
1836
+ const input = fromIterable(self)
1837
+ for (let i = input.length - 1; i >= 0; i--) {
1838
+ const a = input[i]
1839
+ const o = f(a, i)
1840
+ if (typeof o === "boolean") {
1841
+ if (o) {
1842
+ return Option.some(a)
1843
+ }
1844
+ } else {
1845
+ if (Option.isSome(o)) {
1846
+ return o
1847
+ }
1848
+ }
1849
+ }
1850
+ return Option.none()
1851
+ }
1852
+ )
1853
+
1854
+ /**
1855
+ * Inserts an element at the specified index safely, returning a new `NonEmptyArray`
1856
+ * wrapped in an `Option`.
1857
+ *
1858
+ * **When to use**
1859
+ *
1860
+ * Use to insert a single element at a specific position in an array.
1861
+ *
1862
+ * **Details**
1863
+ *
1864
+ * Valid indices are `0` to `length`, inclusive. Inserting at `length` appends.
1865
+ *
1866
+ * **Example** (Inserting at an index)
1867
+ *
1868
+ * ```ts
1869
+ * import { Array } from "effect"
1870
+ *
1871
+ * console.log(Array.insertAt(["a", "b", "c", "e"], 3, "d")) // Option.some(["a", "b", "c", "d", "e"])
1872
+ * ```
1873
+ *
1874
+ * @see {@link replace} — replace an existing element
1875
+ * @see {@link modify} — transform an element at an index
1876
+ *
1877
+ * @category elements
1878
+ * @since 2.0.0
1879
+ */
1880
+ export const insertAt: {
1881
+ <B>(i: number, b: B): <A>(self: Iterable<A>) => Option.Option<NonEmptyArray<A | B>>
1882
+ <A, B>(self: Iterable<A>, i: number, b: B): Option.Option<NonEmptyArray<A | B>>
1883
+ } = dual(3, <A, B>(self: Iterable<A>, i: number, b: B): Option.Option<NonEmptyArray<A | B>> => {
1884
+ const out: Array<A | B> = Array.from(self) // copy because `splice` mutates the array
1885
+ if (i < 0 || i > out.length) {
1886
+ return Option.none()
1887
+ }
1888
+ out.splice(i, 0, b)
1889
+ return Option.some(out as any)
1890
+ })
1891
+
1892
+ /**
1893
+ * Replaces the element at the specified index safely with a new value, returning the
1894
+ * updated array in `Option.some`.
1895
+ *
1896
+ * **When to use**
1897
+ *
1898
+ * Use to set a fixed replacement value at a specific index.
1899
+ *
1900
+ * **Details**
1901
+ *
1902
+ * Returns `Option.none()` when the index is out of bounds.
1903
+ *
1904
+ * **Example** (Replacing an element)
1905
+ *
1906
+ * ```ts
1907
+ * import { Array } from "effect"
1908
+ *
1909
+ * console.log(Array.replace([1, 2, 3], 1, 4)) // Option.some([1, 4, 3])
1910
+ * ```
1911
+ *
1912
+ * @see {@link modify} — transform an element with a function
1913
+ * @see {@link insertAt} — insert without removing
1914
+ *
1915
+ * @category elements
1916
+ * @since 2.0.0
1917
+ */
1918
+ export const replace: {
1919
+ <B>(i: number, b: B): <A, S extends Iterable<A> = Iterable<A>>(
1920
+ self: S
1921
+ ) => Option.Option<ReadonlyArray.With<S, ReadonlyArray.Infer<S> | B>>
1922
+ <A, B, S extends Iterable<A> = Iterable<A>>(
1923
+ self: S,
1924
+ i: number,
1925
+ b: B
1926
+ ): Option.Option<ReadonlyArray.With<S, ReadonlyArray.Infer<S> | B>>
1927
+ } = dual(
1928
+ 3,
1929
+ <A, B>(self: Iterable<A>, i: number, b: B): Option.Option<Array<A | B>> => modify(self, i, () => b)
1930
+ )
1931
+
1932
+ /**
1933
+ * Applies a function to the element at the specified index safely, returning the
1934
+ * updated array in `Option.some`.
1935
+ *
1936
+ * **When to use**
1937
+ *
1938
+ * Use to derive a replacement value from an array element at a specific index
1939
+ * while leaving the other elements unchanged.
1940
+ *
1941
+ * **Details**
1942
+ *
1943
+ * Returns `Option.none()` when the index is out of bounds.
1944
+ *
1945
+ * **Example** (Modifying an element)
1946
+ *
1947
+ * ```ts
1948
+ * import { Array } from "effect"
1949
+ *
1950
+ * console.log(Array.modify([1, 2, 3, 4], 2, (n) => n * 2)) // Option.some([1, 2, 6, 4])
1951
+ * console.log(Array.modify([1, 2, 3, 4], 5, (n) => n * 2)) // Option.none()
1952
+ * ```
1953
+ *
1954
+ * @see {@link replace} — set a fixed value at an index
1955
+ * @see {@link modifyHeadNonEmpty} — modify the first element
1956
+ * @see {@link modifyLastNonEmpty} — modify the last element
1957
+ *
1958
+ * @category elements
1959
+ * @since 2.0.0
1960
+ */
1961
+ export const modify: {
1962
+ <A, B, S extends Iterable<A> = Iterable<A>>(
1963
+ i: number,
1964
+ f: (a: ReadonlyArray.Infer<S>) => B
1965
+ ): (self: S) => Option.Option<ReadonlyArray.With<S, ReadonlyArray.Infer<S> | B>>
1966
+ <A, B, S extends Iterable<A> = Iterable<A>>(
1967
+ self: S,
1968
+ i: number,
1969
+ f: (a: ReadonlyArray.Infer<S>) => B
1970
+ ): Option.Option<ReadonlyArray.With<S, ReadonlyArray.Infer<S> | B>>
1971
+ } = dual(3, <A, B>(self: Iterable<A>, i: number, f: (a: A) => B): Option.Option<Array<A | B>> => {
1972
+ const arr = Array.from(self)
1973
+ if (isOutOfBounds(i, arr)) {
1974
+ return Option.none()
1975
+ }
1976
+ const out: Array<A | B> = arr
1977
+ const b = f(arr[i])
1978
+ out[i] = b
1979
+ return Option.some(out)
1980
+ })
1981
+
1982
+ /**
1983
+ * Removes the element at the specified index, returning a new array. If the
1984
+ * index is out of bounds, returns a copy of the original.
1985
+ *
1986
+ * **When to use**
1987
+ *
1988
+ * Use when you want a missing index to be a no-op and need a fresh array result
1989
+ * instead of an optional failure.
1990
+ *
1991
+ * **Example** (Removing an element)
1992
+ *
1993
+ * ```ts
1994
+ * import { Array } from "effect"
1995
+ *
1996
+ * console.log(Array.remove([1, 2, 3, 4], 2)) // [1, 2, 4]
1997
+ * console.log(Array.remove([1, 2, 3, 4], 5)) // [1, 2, 3, 4]
1998
+ * ```
1999
+ *
2000
+ * @see {@link insertAt} — insert an element
2001
+ * @see {@link filter} — remove elements by predicate
2002
+ *
2003
+ * @category elements
2004
+ * @since 2.0.0
2005
+ */
2006
+ export const remove: {
2007
+ (i: number): <A>(self: Iterable<A>) => Array<A>
2008
+ <A>(self: Iterable<A>, i: number): Array<A>
2009
+ } = dual(2, <A>(self: Iterable<A>, i: number): Array<A> => {
2010
+ const out = Array.from(self)
2011
+ if (isOutOfBounds(i, out)) {
2012
+ return out
2013
+ }
2014
+ out.splice(i, 1)
2015
+ return out
2016
+ })
2017
+
2018
+ /**
2019
+ * Reverses an iterable into a new array.
2020
+ *
2021
+ * **When to use**
2022
+ *
2023
+ * Use to reverse an iterable into a new array without mutating the original
2024
+ * input.
2025
+ *
2026
+ * **Details**
2027
+ *
2028
+ * Preserves `NonEmptyArray` in the return type.
2029
+ *
2030
+ * **Example** (Reversing an array)
2031
+ *
2032
+ * ```ts
2033
+ * import { Array } from "effect"
2034
+ *
2035
+ * console.log(Array.reverse([1, 2, 3, 4])) // [4, 3, 2, 1]
2036
+ * ```
2037
+ *
2038
+ * @category elements
2039
+ * @since 2.0.0
2040
+ */
2041
+ export const reverse = <S extends Iterable<any>>(
2042
+ self: S
2043
+ ): S extends NonEmptyReadonlyArray<infer A> ? NonEmptyArray<A> : S extends Iterable<infer A> ? Array<A> : never =>
2044
+ Array.from(self).reverse() as any
2045
+
2046
+ /**
2047
+ * Sorts an array by the given `Order`, returning a new array.
2048
+ *
2049
+ * **When to use**
2050
+ *
2051
+ * Use to sort an array using a single `Order` comparator.
2052
+ *
2053
+ * **Details**
2054
+ *
2055
+ * Preserves `NonEmptyArray` in the return type. Use `sortWith` to sort by a
2056
+ * derived key, or `sortBy` for multi-key sorting.
2057
+ *
2058
+ * **Example** (Sorting numbers)
2059
+ *
2060
+ * ```ts
2061
+ * import { Array, Order } from "effect"
2062
+ *
2063
+ * console.log(Array.sort([3, 1, 4, 1, 5], Order.Number)) // [1, 1, 3, 4, 5]
2064
+ * ```
2065
+ *
2066
+ * @see {@link sortWith} — sort by a mapping function
2067
+ * @see {@link sortBy} — sort by multiple orders
2068
+ *
2069
+ * @category sorting
2070
+ * @since 2.0.0
2071
+ */
2072
+ export const sort: {
2073
+ <B>(
2074
+ O: Order.Order<B>
2075
+ ): <A extends B, S extends Iterable<A>>(self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2076
+ <A extends B, B>(self: NonEmptyReadonlyArray<A>, O: Order.Order<B>): NonEmptyArray<A>
2077
+ <A extends B, B>(self: Iterable<A>, O: Order.Order<B>): Array<A>
2078
+ } = dual(2, <A extends B, B>(self: Iterable<A>, O: Order.Order<B>): Array<A> => {
2079
+ const out = Array.from(self)
2080
+ out.sort(O)
2081
+ return out
2082
+ })
2083
+
2084
+ /**
2085
+ * Sorts an array by a derived key using a mapping function and an `Order` for
2086
+ * that key.
2087
+ *
2088
+ * **When to use**
2089
+ *
2090
+ * Use when you need to sort values by a derived key, such as a string length or
2091
+ * object field, while keeping the original values.
2092
+ *
2093
+ * **Details**
2094
+ *
2095
+ * Equivalent to `sort(Order.mapInput(order, f))`, but more convenient.
2096
+ *
2097
+ * **Example** (Sorting strings by length)
2098
+ *
2099
+ * ```ts
2100
+ * import { Array, Order } from "effect"
2101
+ *
2102
+ * console.log(Array.sortWith(["aaa", "b", "cc"], (s) => s.length, Order.Number))
2103
+ * // ["b", "cc", "aaa"]
2104
+ * ```
2105
+ *
2106
+ * @see {@link sort} for sorting with an `Order` that compares the elements directly
2107
+ * @see {@link sortBy} for sorting with multiple `Order`s applied in sequence
2108
+ *
2109
+ * @category elements
2110
+ * @since 2.0.0
2111
+ */
2112
+ export const sortWith: {
2113
+ <S extends Iterable<any>, B>(
2114
+ f: (a: ReadonlyArray.Infer<S>) => B,
2115
+ order: Order.Order<B>
2116
+ ): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2117
+ <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A) => B, O: Order.Order<B>): NonEmptyArray<A>
2118
+ <A, B>(self: Iterable<A>, f: (a: A) => B, order: Order.Order<B>): Array<A>
2119
+ } = dual(
2120
+ 3,
2121
+ <A, B>(self: Iterable<A>, f: (a: A) => B, order: Order.Order<B>): Array<A> =>
2122
+ Array.from(self).map((a) => [a, f(a)] as const).sort(([, a], [, b]) => order(a, b)).map(([_]) => _)
2123
+ )
2124
+
2125
+ /**
2126
+ * Sorts an array by multiple `Order`s applied in sequence: the first order is
2127
+ * used first; ties are broken by the second order, and so on.
2128
+ *
2129
+ * **When to use**
2130
+ *
2131
+ * Use to sort by multiple criteria where later orders break ties from earlier
2132
+ * ones.
2133
+ *
2134
+ * **Details**
2135
+ *
2136
+ * This is data-last only and returns a function. The return type preserves
2137
+ * `NonEmptyArray`.
2138
+ *
2139
+ * **Example** (Sorting by multiple keys)
2140
+ *
2141
+ * ```ts
2142
+ * import { Array, Order, pipe } from "effect"
2143
+ *
2144
+ * const users = [
2145
+ * { name: "Alice", age: 30 },
2146
+ * { name: "Bob", age: 25 },
2147
+ * { name: "Charlie", age: 30 }
2148
+ * ]
2149
+ *
2150
+ * const result = pipe(
2151
+ * users,
2152
+ * Array.sortBy(
2153
+ * Order.mapInput(Order.Number, (user: (typeof users)[number]) => user.age),
2154
+ * Order.mapInput(Order.String, (user: (typeof users)[number]) => user.name)
2155
+ * )
2156
+ * )
2157
+ * console.log(result)
2158
+ * // [{ name: "Bob", age: 25 }, { name: "Alice", age: 30 }, { name: "Charlie", age: 30 }]
2159
+ * ```
2160
+ *
2161
+ * @see {@link sort} — sort by a single `Order`
2162
+ * @see {@link sortWith} — sort by a derived key
2163
+ *
2164
+ * @category sorting
2165
+ * @since 2.0.0
2166
+ */
2167
+ export const sortBy = <S extends Iterable<any>>(
2168
+ ...orders: ReadonlyArray<Order.Order<ReadonlyArray.Infer<S>>>
2169
+ ) => {
2170
+ const sortByAll = sort(Order.combineAll(orders))
2171
+ return (
2172
+ self: S
2173
+ ): S extends NonEmptyReadonlyArray<infer A> ? NonEmptyArray<A> : S extends Iterable<infer A> ? Array<A> : never => {
2174
+ const input = fromIterable(self)
2175
+ if (isReadonlyArrayNonEmpty(input)) {
2176
+ return sortByAll(input) as any
2177
+ }
2178
+ return [] as any
2179
+ }
2180
+ }
2181
+
2182
+ /**
2183
+ * Pairs elements from two iterables by position. If the iterables differ in
2184
+ * length, the extra elements from the longer one are discarded.
2185
+ *
2186
+ * **When to use**
2187
+ *
2188
+ * Use when you need simple pairs of corresponding elements from two iterables.
2189
+ *
2190
+ * **Details**
2191
+ *
2192
+ * Returns `NonEmptyArray` when both inputs are non-empty.
2193
+ *
2194
+ * **Example** (Zipping two arrays)
2195
+ *
2196
+ * ```ts
2197
+ * import { Array } from "effect"
2198
+ *
2199
+ * console.log(Array.zip([1, 2, 3], ["a", "b"])) // [[1, "a"], [2, "b"]]
2200
+ * ```
2201
+ *
2202
+ * @see {@link zipWith} — zip with a combiner function
2203
+ * @see {@link unzip} — inverse operation
2204
+ *
2205
+ * @category zipping
2206
+ * @since 2.0.0
2207
+ */
2208
+ export const zip: {
2209
+ <B>(that: NonEmptyReadonlyArray<B>): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<[A, B]>
2210
+ <B>(that: Iterable<B>): <A>(self: Iterable<A>) => Array<[A, B]>
2211
+ <A, B>(self: NonEmptyReadonlyArray<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<[A, B]>
2212
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<[A, B]>
2213
+ } = dual(
2214
+ 2,
2215
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<[A, B]> => zipWith(self, that, Tuple.make)
2216
+ )
2217
+
2218
+ /**
2219
+ * Combines elements from two iterables pairwise using a function. If the
2220
+ * iterables differ in length, extra elements are discarded.
2221
+ *
2222
+ * **When to use**
2223
+ *
2224
+ * Use when zipping two iterables in an array pipeline and each pair should
2225
+ * become a computed array element instead of a tuple.
2226
+ *
2227
+ * **Example** (Zipping with addition)
2228
+ *
2229
+ * ```ts
2230
+ * import { Array } from "effect"
2231
+ *
2232
+ * console.log(Array.zipWith([1, 2, 3], [4, 5, 6], (a, b) => a + b)) // [5, 7, 9]
2233
+ * ```
2234
+ *
2235
+ * @see {@link zip} — zip into tuples
2236
+ *
2237
+ * @category zipping
2238
+ * @since 2.0.0
2239
+ */
2240
+ export const zipWith: {
2241
+ <B, A, C>(that: NonEmptyReadonlyArray<B>, f: (a: A, b: B) => C): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<C>
2242
+ <B, A, C>(that: Iterable<B>, f: (a: A, b: B) => C): (self: Iterable<A>) => Array<C>
2243
+ <A, B, C>(self: NonEmptyReadonlyArray<A>, that: NonEmptyReadonlyArray<B>, f: (a: A, b: B) => C): NonEmptyArray<C>
2244
+ <B, A, C>(self: Iterable<A>, that: Iterable<B>, f: (a: A, b: B) => C): Array<C>
2245
+ } = dual(3, <B, A, C>(self: Iterable<A>, that: Iterable<B>, f: (a: A, b: B) => C): Array<C> => {
2246
+ const as = fromIterable(self)
2247
+ const bs = fromIterable(that)
2248
+ if (isReadonlyArrayNonEmpty(as) && isReadonlyArrayNonEmpty(bs)) {
2249
+ const out: NonEmptyArray<C> = [f(headNonEmpty(as), headNonEmpty(bs))]
2250
+ const len = Math.min(as.length, bs.length)
2251
+ for (let i = 1; i < len; i++) {
2252
+ out[i] = f(as[i], bs[i])
2253
+ }
2254
+ return out
2255
+ }
2256
+ return []
2257
+ })
2258
+
2259
+ /**
2260
+ * Splits an array of pairs into two arrays. Inverse of {@link zip}.
2261
+ *
2262
+ * **Example** (Unzipping pairs)
2263
+ *
2264
+ * ```ts
2265
+ * import { Array } from "effect"
2266
+ *
2267
+ * console.log(Array.unzip([[1, "a"], [2, "b"], [3, "c"]])) // [[1, 2, 3], ["a", "b", "c"]]
2268
+ * ```
2269
+ *
2270
+ * @see {@link zip} — combine two arrays into pairs
2271
+ *
2272
+ * @category zipping
2273
+ * @since 2.0.0
2274
+ */
2275
+ export const unzip: <S extends Iterable<readonly [any, any]>>(
2276
+ self: S
2277
+ ) => S extends NonEmptyReadonlyArray<readonly [infer A, infer B]> ? [NonEmptyArray<A>, NonEmptyArray<B>]
2278
+ : S extends Iterable<readonly [infer A, infer B]> ? [Array<A>, Array<B>]
2279
+ : never = (<A, B>(self: Iterable<readonly [A, B]>): [Array<A>, Array<B>] => {
2280
+ const input = fromIterable(self)
2281
+ if (isReadonlyArrayNonEmpty(input)) {
2282
+ const fa: NonEmptyArray<A> = [input[0][0]]
2283
+ const fb: NonEmptyArray<B> = [input[0][1]]
2284
+ for (let i = 1; i < input.length; i++) {
2285
+ fa[i] = input[i][0]
2286
+ fb[i] = input[i][1]
2287
+ }
2288
+ return [fa, fb]
2289
+ }
2290
+ return [[], []]
2291
+ }) as any
2292
+
2293
+ /**
2294
+ * Places a separator element between every pair of elements.
2295
+ *
2296
+ * **When to use**
2297
+ *
2298
+ * Use to insert a separator between elements, for example when preparing data for display or concatenation.
2299
+ *
2300
+ * **Details**
2301
+ *
2302
+ * The return type preserves `NonEmptyArray`. Empty inputs produce an empty
2303
+ * result.
2304
+ *
2305
+ * **Example** (Interspersing a separator)
2306
+ *
2307
+ * ```ts
2308
+ * import { Array } from "effect"
2309
+ *
2310
+ * console.log(Array.intersperse([1, 2, 3], 0)) // [1, 0, 2, 0, 3]
2311
+ * ```
2312
+ *
2313
+ * @see {@link join} — intersperse and join into a string
2314
+ *
2315
+ * @category elements
2316
+ * @since 2.0.0
2317
+ */
2318
+ export const intersperse: {
2319
+ <B>(
2320
+ middle: B
2321
+ ): <S extends Iterable<any>>(self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S> | B>
2322
+ <A, B>(self: NonEmptyReadonlyArray<A>, middle: B): NonEmptyArray<A | B>
2323
+ <A, B>(self: Iterable<A>, middle: B): Array<A | B>
2324
+ } = dual(2, <A, B>(self: Iterable<A>, middle: B): Array<A | B> => {
2325
+ const input = fromIterable(self)
2326
+ if (isReadonlyArrayNonEmpty(input)) {
2327
+ const out: NonEmptyArray<A | B> = [headNonEmpty(input)]
2328
+ const tail = tailNonEmpty(input)
2329
+ for (let i = 0; i < tail.length; i++) {
2330
+ if (i < tail.length) {
2331
+ out.push(middle)
2332
+ }
2333
+ out.push(tail[i])
2334
+ }
2335
+ return out
2336
+ }
2337
+ return []
2338
+ })
2339
+
2340
+ /**
2341
+ * Applies a function to the first element of a non-empty array, returning a
2342
+ * new array.
2343
+ *
2344
+ * **When to use**
2345
+ *
2346
+ * Use to transform the first element of a non-empty array while preserving the rest.
2347
+ *
2348
+ * **Example** (Modifying the head)
2349
+ *
2350
+ * ```ts
2351
+ * import { Array } from "effect"
2352
+ *
2353
+ * console.log(Array.modifyHeadNonEmpty([1, 2, 3], (n) => n * 10)) // [10, 2, 3]
2354
+ * ```
2355
+ *
2356
+ * @see {@link setHeadNonEmpty} — replace with a fixed value
2357
+ * @see {@link modifyLastNonEmpty} — modify the last element
2358
+ *
2359
+ * @category elements
2360
+ * @since 4.0.0
2361
+ */
2362
+ export const modifyHeadNonEmpty: {
2363
+ <A, B>(f: (a: A) => B): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
2364
+ <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A) => B): NonEmptyArray<A | B>
2365
+ } = dual(
2366
+ 2,
2367
+ <A, B>(
2368
+ self: NonEmptyReadonlyArray<A>,
2369
+ f: (a: A) => B
2370
+ ): NonEmptyArray<A | B> => [f(headNonEmpty(self)), ...tailNonEmpty(self)]
2371
+ )
2372
+
2373
+ /**
2374
+ * Replaces the first element of a non-empty array with a new value.
2375
+ *
2376
+ * **When to use**
2377
+ *
2378
+ * Use when you already know the array is non-empty and the replacement value
2379
+ * does not depend on the current first element.
2380
+ *
2381
+ * **Example** (Setting the head)
2382
+ *
2383
+ * ```ts
2384
+ * import { Array } from "effect"
2385
+ *
2386
+ * console.log(Array.setHeadNonEmpty([1, 2, 3], 10)) // [10, 2, 3]
2387
+ * ```
2388
+ *
2389
+ * @see {@link modifyHeadNonEmpty} — transform the head with a function
2390
+ * @see {@link setLastNonEmpty} — replace the last element
2391
+ *
2392
+ * @category elements
2393
+ * @since 4.0.0
2394
+ */
2395
+ export const setHeadNonEmpty: {
2396
+ <B>(b: B): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
2397
+ <A, B>(self: NonEmptyReadonlyArray<A>, b: B): NonEmptyArray<A | B>
2398
+ } = dual(
2399
+ 2,
2400
+ <A, B>(self: NonEmptyReadonlyArray<A>, b: B): NonEmptyArray<A | B> => modifyHeadNonEmpty(self, () => b)
2401
+ )
2402
+
2403
+ /**
2404
+ * Applies a function to the last element of a non-empty array, returning a
2405
+ * new array.
2406
+ *
2407
+ * **When to use**
2408
+ *
2409
+ * Use when you already know the array is non-empty and the new last element
2410
+ * depends on the current last element.
2411
+ *
2412
+ * **Example** (Modifying the last element)
2413
+ *
2414
+ * ```ts
2415
+ * import { Array } from "effect"
2416
+ *
2417
+ * console.log(Array.modifyLastNonEmpty([1, 2, 3], (n) => n * 2)) // [1, 2, 6]
2418
+ * ```
2419
+ *
2420
+ * @see {@link setLastNonEmpty} — replace with a fixed value
2421
+ * @see {@link modifyHeadNonEmpty} — modify the first element
2422
+ *
2423
+ * @category elements
2424
+ * @since 4.0.0
2425
+ */
2426
+ export const modifyLastNonEmpty: {
2427
+ <A, B>(f: (a: A) => B): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
2428
+ <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A) => B): NonEmptyArray<A | B>
2429
+ } = dual(
2430
+ 2,
2431
+ <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A) => B): NonEmptyArray<A | B> =>
2432
+ append(initNonEmpty(self), f(lastNonEmpty(self)))
2433
+ )
2434
+
2435
+ /**
2436
+ * Replaces the last element of a non-empty array with a new value.
2437
+ *
2438
+ * **When to use**
2439
+ *
2440
+ * Use when you already know the array is non-empty and the replacement value
2441
+ * does not depend on the current last element.
2442
+ *
2443
+ * **Example** (Setting the last element)
2444
+ *
2445
+ * ```ts
2446
+ * import { Array } from "effect"
2447
+ *
2448
+ * console.log(Array.setLastNonEmpty([1, 2, 3], 4)) // [1, 2, 4]
2449
+ * ```
2450
+ *
2451
+ * @see {@link modifyLastNonEmpty} — transform the last element with a function
2452
+ * @see {@link setHeadNonEmpty} — replace the first element
2453
+ *
2454
+ * @category elements
2455
+ * @since 4.0.0
2456
+ */
2457
+ export const setLastNonEmpty: {
2458
+ <B>(b: B): <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<A | B>
2459
+ <A, B>(self: NonEmptyReadonlyArray<A>, b: B): NonEmptyArray<A | B>
2460
+ } = dual(
2461
+ 2,
2462
+ <A, B>(self: NonEmptyReadonlyArray<A>, b: B): NonEmptyArray<A | B> => modifyLastNonEmpty(self, () => b)
2463
+ )
2464
+
2465
+ /**
2466
+ * Transforms an array by rotating it `n` steps. Positive `n` rotates right; negative `n`
2467
+ * rotates left.
2468
+ *
2469
+ * **When to use**
2470
+ *
2471
+ * Use when elements should wrap around the end of the array rather than being
2472
+ * dropped.
2473
+ *
2474
+ * **Details**
2475
+ *
2476
+ * `n` is rounded to the nearest integer before rotating. The return type
2477
+ * preserves `NonEmptyArray`. Empty arrays, or rotations normalized to `0`,
2478
+ * return a copy.
2479
+ *
2480
+ * **Example** (Rotating elements)
2481
+ *
2482
+ * ```ts
2483
+ * import { Array } from "effect"
2484
+ *
2485
+ * console.log(Array.rotate(["a", "b", "c", "d"], 2)) // ["c", "d", "a", "b"]
2486
+ * ```
2487
+ *
2488
+ * @see {@link take} for taking a fixed number of elements from the start
2489
+ * @see {@link drop} for dropping a fixed number of elements from the start
2490
+ *
2491
+ * @category elements
2492
+ * @since 2.0.0
2493
+ */
2494
+ export const rotate: {
2495
+ (n: number): <S extends Iterable<any>>(self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2496
+ <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<A>
2497
+ <A>(self: Iterable<A>, n: number): Array<A>
2498
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<A> => {
2499
+ const input = fromIterable(self)
2500
+ if (isReadonlyArrayNonEmpty(input)) {
2501
+ const len = input.length
2502
+ const m = Math.round(n) % len
2503
+ if (isOutOfBounds(Math.abs(m), input) || m === 0) {
2504
+ return copy(input)
2505
+ }
2506
+ if (m < 0) {
2507
+ const [f, s] = splitAtNonEmpty(input, -m)
2508
+ return appendAll(s, f)
2509
+ } else {
2510
+ return rotate(self, m - len)
2511
+ }
2512
+ }
2513
+ return []
2514
+ })
2515
+
2516
+ /**
2517
+ * Returns a membership-test function using a custom equivalence.
2518
+ *
2519
+ * **When to use**
2520
+ *
2521
+ * Use when checking membership with caller-provided equality instead of
2522
+ * `Equal.equivalence()`.
2523
+ *
2524
+ * **Example** (Checking with custom equality)
2525
+ *
2526
+ * ```ts
2527
+ * import { Array, pipe } from "effect"
2528
+ *
2529
+ * const containsNumber = Array.containsWith((a: number, b: number) => a === b)
2530
+ * console.log(pipe([1, 2, 3, 4], containsNumber(3))) // true
2531
+ * ```
2532
+ *
2533
+ * @see {@link contains} for the `Equal.equivalence()` variant
2534
+ *
2535
+ * @category elements
2536
+ * @since 2.0.0
2537
+ */
2538
+ export const containsWith = <A>(isEquivalent: (self: A, that: A) => boolean): {
2539
+ (a: A): (self: Iterable<A>) => boolean
2540
+ (self: Iterable<A>, a: A): boolean
2541
+ } =>
2542
+ dual(2, (self: Iterable<A>, a: A): boolean => {
2543
+ for (const i of self) {
2544
+ if (isEquivalent(a, i)) {
2545
+ return true
2546
+ }
2547
+ }
2548
+ return false
2549
+ })
2550
+
2551
+ /**
2552
+ * Checks whether an array contains a value, using `Equal.equivalence()` for
2553
+ * comparison.
2554
+ *
2555
+ * **When to use**
2556
+ *
2557
+ * Use to check whether an iterable contains a value using Effect's default
2558
+ * equality instead of providing a comparison function.
2559
+ *
2560
+ * **Example** (Checking membership)
2561
+ *
2562
+ * ```ts
2563
+ * import { Array, pipe } from "effect"
2564
+ *
2565
+ * console.log(pipe(["a", "b", "c", "d"], Array.contains("c"))) // true
2566
+ * ```
2567
+ *
2568
+ * @see {@link containsWith} — use custom equality
2569
+ *
2570
+ * @category elements
2571
+ * @since 2.0.0
2572
+ */
2573
+ export const contains: {
2574
+ <A>(a: A): (self: Iterable<A>) => boolean
2575
+ <A>(self: Iterable<A>, a: A): boolean
2576
+ } = containsWith(Equal.asEquivalence())
2577
+
2578
+ /**
2579
+ * Applies a function repeatedly to consume prefixes of the array and collect
2580
+ * the values it produces.
2581
+ *
2582
+ * **When to use**
2583
+ *
2584
+ * Use when you need custom grouping logic where each step returns both a value
2585
+ * and the remaining input.
2586
+ *
2587
+ * **Details**
2588
+ *
2589
+ * The function receives a `NonEmptyReadonlyArray` and returns `[value, rest]`.
2590
+ * Processing continues until the remaining array is empty.
2591
+ *
2592
+ * **Example** (Chopping an array)
2593
+ *
2594
+ * ```ts
2595
+ * import { Array } from "effect"
2596
+ *
2597
+ * const result = Array.chop(
2598
+ * [1, 2, 3, 4, 5],
2599
+ * (as): [number, Array<number>] => [as[0] * 2, as.slice(1)]
2600
+ * )
2601
+ * console.log(result) // [2, 4, 6, 8, 10]
2602
+ * ```
2603
+ *
2604
+ * @see {@link chunksOf} — split into fixed-size chunks
2605
+ * @see {@link splitAt} — split at an index
2606
+ *
2607
+ * @category elements
2608
+ * @since 2.0.0
2609
+ */
2610
+ export const chop: {
2611
+ <S extends Iterable<any>, B>(
2612
+ f: (as: NonEmptyReadonlyArray<ReadonlyArray.Infer<S>>) => readonly [B, ReadonlyArray<ReadonlyArray.Infer<S>>]
2613
+ ): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
2614
+ <A, B>(
2615
+ self: NonEmptyReadonlyArray<A>,
2616
+ f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
2617
+ ): NonEmptyArray<B>
2618
+ <A, B>(
2619
+ self: Iterable<A>,
2620
+ f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
2621
+ ): Array<B>
2622
+ } = dual(2, <A, B>(
2623
+ self: Iterable<A>,
2624
+ f: (as: NonEmptyReadonlyArray<A>) => readonly [B, ReadonlyArray<A>]
2625
+ ): Array<B> => {
2626
+ const input = fromIterable(self)
2627
+ if (isReadonlyArrayNonEmpty(input)) {
2628
+ const [b, rest] = f(input)
2629
+ const out: NonEmptyArray<B> = [b]
2630
+ let next: ReadonlyArray<A> = rest
2631
+ while (internalArray.isArrayNonEmpty(next)) {
2632
+ const [b, rest] = f(next)
2633
+ out.push(b)
2634
+ next = rest
2635
+ }
2636
+ return out
2637
+ }
2638
+ return []
2639
+ })
2640
+
2641
+ /**
2642
+ * Splits an iterable into two arrays at the given index.
2643
+ *
2644
+ * **When to use**
2645
+ *
2646
+ * Use to divide an array into a prefix and suffix at a specific position.
2647
+ *
2648
+ * **Details**
2649
+ *
2650
+ * `n` can be `0`, in which case all elements are placed in the second array.
2651
+ * The index is floored to an integer.
2652
+ *
2653
+ * **Example** (Splitting at an index)
2654
+ *
2655
+ * ```ts
2656
+ * import { Array } from "effect"
2657
+ *
2658
+ * console.log(Array.splitAt([1, 2, 3, 4, 5], 3)) // [[1, 2, 3], [4, 5]]
2659
+ * ```
2660
+ *
2661
+ * @see {@link splitAtNonEmpty} — for non-empty arrays
2662
+ * @see {@link splitWhere} — split at a predicate boundary
2663
+ *
2664
+ * @category splitting
2665
+ * @since 2.0.0
2666
+ */
2667
+ export const splitAt: {
2668
+ (n: number): <A>(self: Iterable<A>) => [beforeIndex: Array<A>, fromIndex: Array<A>]
2669
+ <A>(self: Iterable<A>, n: number): [beforeIndex: Array<A>, fromIndex: Array<A>]
2670
+ } = dual(2, <A>(self: Iterable<A>, n: number): [Array<A>, Array<A>] => {
2671
+ const input = Array.from(self)
2672
+ const _n = Math.floor(n)
2673
+ if (isReadonlyArrayNonEmpty(input)) {
2674
+ if (_n >= 1) {
2675
+ return splitAtNonEmpty(input, _n)
2676
+ }
2677
+ return [[], input]
2678
+ }
2679
+ return [input, []]
2680
+ })
2681
+
2682
+ /**
2683
+ * Splits a non-empty array into two parts at the given index. The first part
2684
+ * is guaranteed to be non-empty (`n` is clamped to >= 1).
2685
+ *
2686
+ * **When to use**
2687
+ *
2688
+ * Use when downstream code requires the left side of the split to contain at
2689
+ * least one element.
2690
+ *
2691
+ * **Example** (Splitting a non-empty array)
2692
+ *
2693
+ * ```ts
2694
+ * import { Array } from "effect"
2695
+ *
2696
+ * console.log(Array.splitAtNonEmpty(["a", "b", "c", "d", "e"], 3))
2697
+ * // [["a", "b", "c"], ["d", "e"]]
2698
+ * ```
2699
+ *
2700
+ * @see {@link splitAt} — for possibly-empty arrays
2701
+ *
2702
+ * @category splitting
2703
+ * @since 4.0.0
2704
+ */
2705
+ export const splitAtNonEmpty: {
2706
+ (n: number): <A>(self: NonEmptyReadonlyArray<A>) => [beforeIndex: NonEmptyArray<A>, fromIndex: Array<A>]
2707
+ <A>(self: NonEmptyReadonlyArray<A>, n: number): [beforeIndex: NonEmptyArray<A>, fromIndex: Array<A>]
2708
+ } = dual(2, <A>(self: NonEmptyReadonlyArray<A>, n: number): [NonEmptyArray<A>, Array<A>] => {
2709
+ const _n = Math.max(1, Math.floor(n))
2710
+ return _n >= self.length ?
2711
+ [copy(self), []] :
2712
+ [prepend(self.slice(1, _n), headNonEmpty(self)), self.slice(_n)]
2713
+ })
2714
+
2715
+ /**
2716
+ * Splits an iterable into `n` roughly equal-sized chunks.
2717
+ *
2718
+ * **When to use**
2719
+ *
2720
+ * Use to distribute elements across a fixed number of groups, such as when splitting work across threads.
2721
+ *
2722
+ * **Details**
2723
+ *
2724
+ * Uses `chunksOf(ceil(length / n))` internally. The last chunk may be shorter.
2725
+ *
2726
+ * **Example** (Splitting into groups)
2727
+ *
2728
+ * ```ts
2729
+ * import { Array } from "effect"
2730
+ *
2731
+ * console.log(Array.split([1, 2, 3, 4, 5, 6, 7, 8], 3)) // [[1, 2, 3], [4, 5, 6], [7, 8]]
2732
+ * ```
2733
+ *
2734
+ * @see {@link chunksOf} — split into fixed-size chunks
2735
+ *
2736
+ * @category splitting
2737
+ * @since 2.0.0
2738
+ */
2739
+ export const split: {
2740
+ (n: number): <A>(self: Iterable<A>) => Array<Array<A>>
2741
+ <A>(self: Iterable<A>, n: number): Array<Array<A>>
2742
+ } = dual(2, <A>(self: Iterable<A>, n: number) => {
2743
+ const input = fromIterable(self)
2744
+ return chunksOf(input, Math.ceil(input.length / Math.floor(n)))
2745
+ })
2746
+
2747
+ /**
2748
+ * Splits an iterable at the first element matching the predicate. The matching
2749
+ * element is included in the second array.
2750
+ *
2751
+ * **When to use**
2752
+ *
2753
+ * Use when you need to split an array at the first element that marks a
2754
+ * condition boundary.
2755
+ *
2756
+ * **Example** (Splitting at a condition)
2757
+ *
2758
+ * ```ts
2759
+ * import { Array } from "effect"
2760
+ *
2761
+ * console.log(Array.splitWhere([1, 2, 3, 4, 5], (n) => n > 3)) // [[1, 2, 3], [4, 5]]
2762
+ * ```
2763
+ *
2764
+ * @see {@link span} — splits at the first element that fails the predicate
2765
+ * @see {@link splitAt} — split at a fixed index
2766
+ *
2767
+ * @category splitting
2768
+ * @since 2.0.0
2769
+ */
2770
+ export const splitWhere: {
2771
+ <A>(
2772
+ predicate: (a: NoInfer<A>, i: number) => boolean
2773
+ ): (self: Iterable<A>) => [beforeMatch: Array<A>, fromMatch: Array<A>]
2774
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): [beforeMatch: Array<A>, fromMatch: Array<A>]
2775
+ } = dual(
2776
+ 2,
2777
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): [beforeMatch: Array<A>, fromMatch: Array<A>] =>
2778
+ span(self, (a: A, i: number) => !predicate(a, i))
2779
+ )
2780
+
2781
+ /**
2782
+ * Creates a shallow copy of an array.
2783
+ *
2784
+ * **When to use**
2785
+ *
2786
+ * Use to create a distinct array reference for an existing array, for example
2787
+ * before mutating the returned array.
2788
+ *
2789
+ * **Details**
2790
+ *
2791
+ * The return type preserves `NonEmptyArray`. Use this when you need a distinct
2792
+ * reference, for example before mutating the returned array.
2793
+ *
2794
+ * **Example** (Copying an array)
2795
+ *
2796
+ * ```ts
2797
+ * import { Array } from "effect"
2798
+ *
2799
+ * const original = [1, 2, 3]
2800
+ * const copied = Array.copy(original)
2801
+ * console.log(copied) // [1, 2, 3]
2802
+ * console.log(original === copied) // false
2803
+ * ```
2804
+ *
2805
+ * @see {@link fromIterable} — returns the same reference for arrays
2806
+ *
2807
+ * @category elements
2808
+ * @since 2.0.0
2809
+ */
2810
+ export const copy: {
2811
+ <A>(self: NonEmptyReadonlyArray<A>): NonEmptyArray<A>
2812
+ <A>(self: ReadonlyArray<A>): Array<A>
2813
+ } = (<A>(self: ReadonlyArray<A>): Array<A> => self.slice()) as any
2814
+
2815
+ /**
2816
+ * Pads or truncates an array to exactly `n` elements, filling with `fill`
2817
+ * if the array is shorter, or slicing if longer.
2818
+ *
2819
+ * **When to use**
2820
+ *
2821
+ * Use to ensure an array has a specific length, padding with a fill value or truncating as needed.
2822
+ *
2823
+ * **Details**
2824
+ *
2825
+ * Returns an empty array when `n <= 0`.
2826
+ *
2827
+ * **Example** (Padding an array)
2828
+ *
2829
+ * ```ts
2830
+ * import { Array } from "effect"
2831
+ *
2832
+ * console.log(Array.pad([1, 2, 3], 6, 0)) // [1, 2, 3, 0, 0, 0]
2833
+ * ```
2834
+ *
2835
+ * @see {@link take} — truncate without padding
2836
+ * @see {@link replicate} — create an array of a single repeated value
2837
+ *
2838
+ * @category elements
2839
+ * @since 3.8.4
2840
+ */
2841
+ export const pad: {
2842
+ <A, T>(
2843
+ n: number,
2844
+ fill: T
2845
+ ): (
2846
+ self: Array<A>
2847
+ ) => Array<A | T>
2848
+ <A, T>(self: Array<A>, n: number, fill: T): Array<A | T>
2849
+ } = dual(3, <A, T>(self: Array<A>, n: number, fill: T): Array<A | T> => {
2850
+ if (self.length >= n) {
2851
+ return take(self, n)
2852
+ }
2853
+ return appendAll(
2854
+ self,
2855
+ makeBy(n - self.length, () => fill)
2856
+ )
2857
+ })
2858
+
2859
+ /**
2860
+ * Splits an iterable into chunks of length `n`. The last chunk may be shorter
2861
+ * if `n` does not evenly divide the length.
2862
+ *
2863
+ * **When to use**
2864
+ *
2865
+ * Use to divide an iterable into a new array of non-overlapping chunks with a
2866
+ * maximum chunk size.
2867
+ *
2868
+ * **Details**
2869
+ *
2870
+ * `chunksOf(n)([])` is `[]`, not `[[]]`. Each chunk is a `NonEmptyArray`, and
2871
+ * the outer return type preserves `NonEmptyArray`.
2872
+ *
2873
+ * **Example** (Chunking an array)
2874
+ *
2875
+ * ```ts
2876
+ * import { Array } from "effect"
2877
+ *
2878
+ * console.log(Array.chunksOf([1, 2, 3, 4, 5], 2)) // [[1, 2], [3, 4], [5]]
2879
+ * ```
2880
+ *
2881
+ * @see {@link split} — split into a given number of groups
2882
+ * @see {@link window} — sliding windows
2883
+ *
2884
+ * @category splitting
2885
+ * @since 2.0.0
2886
+ */
2887
+ export const chunksOf: {
2888
+ (
2889
+ n: number
2890
+ ): <S extends Iterable<any>>(
2891
+ self: S
2892
+ ) => ReadonlyArray.With<S, NonEmptyArray<ReadonlyArray.Infer<S>>>
2893
+ <A>(self: NonEmptyReadonlyArray<A>, n: number): NonEmptyArray<NonEmptyArray<A>>
2894
+ <A>(self: Iterable<A>, n: number): Array<NonEmptyArray<A>>
2895
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<NonEmptyArray<A>> => {
2896
+ const input = fromIterable(self)
2897
+ if (isReadonlyArrayNonEmpty(input)) {
2898
+ return chop(input, splitAtNonEmpty(n))
2899
+ }
2900
+ return []
2901
+ })
2902
+
2903
+ /**
2904
+ * Creates overlapping sliding windows of size `n`.
2905
+ *
2906
+ * **When to use**
2907
+ *
2908
+ * Use to process sequences with a moving window, such as for computing running averages or detecting patterns.
2909
+ *
2910
+ * **Details**
2911
+ *
2912
+ * Returns an empty array if `n <= 0` or the array has fewer than `n` elements.
2913
+ * Each window is a tuple of exactly `n` elements.
2914
+ *
2915
+ * **Example** (Creating sliding windows)
2916
+ *
2917
+ * ```ts
2918
+ * import { Array } from "effect"
2919
+ *
2920
+ * console.log(Array.window([1, 2, 3, 4, 5], 3)) // [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
2921
+ * console.log(Array.window([1, 2, 3, 4, 5], 6)) // []
2922
+ * ```
2923
+ *
2924
+ * @see {@link chunksOf} — non-overlapping chunks
2925
+ *
2926
+ * @category splitting
2927
+ * @since 3.13.2
2928
+ */
2929
+ export const window: {
2930
+ <N extends number>(n: N): <A>(self: Iterable<A>) => Array<TupleOf<N, A>>
2931
+ <A, N extends number>(self: Iterable<A>, n: N): Array<TupleOf<N, A>>
2932
+ } = dual(2, <A>(self: Iterable<A>, n: number): Array<Array<A>> => {
2933
+ const input = fromIterable(self)
2934
+ if (n > 0 && isReadonlyArrayNonEmpty(input)) {
2935
+ return Array.from(
2936
+ { length: input.length - (n - 1) },
2937
+ (_, index) => input.slice(index, index + n)
2938
+ )
2939
+ }
2940
+ return []
2941
+ })
2942
+
2943
+ /**
2944
+ * Groups consecutive equal elements using a custom equivalence function.
2945
+ *
2946
+ * **When to use**
2947
+ *
2948
+ * Use when you already have a non-empty array arranged so matching elements are
2949
+ * adjacent and need a custom equivalence function.
2950
+ *
2951
+ * **Details**
2952
+ *
2953
+ * Only adjacent elements are grouped. Non-adjacent duplicates stay separate.
2954
+ * Requires a `NonEmptyReadonlyArray`.
2955
+ *
2956
+ * **Example** (Grouping consecutive equal elements)
2957
+ *
2958
+ * ```ts
2959
+ * import { Array } from "effect"
2960
+ *
2961
+ * console.log(Array.groupWith(["a", "a", "b", "b", "b", "c", "a"], (x, y) => x === y))
2962
+ * // [["a", "a"], ["b", "b", "b"], ["c"], ["a"]]
2963
+ * ```
2964
+ *
2965
+ * @see {@link group} for grouping adjacent elements with `Equal.equivalence()`
2966
+ * @see {@link groupBy} for grouping all elements into a record by key, regardless of adjacency
2967
+ *
2968
+ * @category grouping
2969
+ * @since 2.0.0
2970
+ */
2971
+ export const groupWith: {
2972
+ <A>(isEquivalent: (self: A, that: A) => boolean): (self: NonEmptyReadonlyArray<A>) => NonEmptyArray<NonEmptyArray<A>>
2973
+ <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<NonEmptyArray<A>>
2974
+ } = dual(
2975
+ 2,
2976
+ <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<NonEmptyArray<A>> =>
2977
+ chop(self, (as) => {
2978
+ const h = headNonEmpty(as)
2979
+ const out: NonEmptyArray<A> = [h]
2980
+ let i = 1
2981
+ for (; i < as.length; i++) {
2982
+ const a = as[i]
2983
+ if (isEquivalent(a, h)) {
2984
+ out.push(a)
2985
+ } else {
2986
+ break
2987
+ }
2988
+ }
2989
+ return [out, as.slice(i)]
2990
+ })
2991
+ )
2992
+
2993
+ /**
2994
+ * Groups consecutive equal elements using `Equal.equivalence()`.
2995
+ *
2996
+ * **When to use**
2997
+ *
2998
+ * Use when you already have adjacent equal values and Effect's default equality
2999
+ * is the right comparison.
3000
+ *
3001
+ * **Details**
3002
+ *
3003
+ * Only adjacent elements are grouped.
3004
+ *
3005
+ * **Example** (Grouping adjacent equal elements)
3006
+ *
3007
+ * ```ts
3008
+ * import { Array } from "effect"
3009
+ *
3010
+ * console.log(Array.group([1, 1, 2, 2, 2, 3, 1])) // [[1, 1], [2, 2, 2], [3], [1]]
3011
+ * ```
3012
+ *
3013
+ * @see {@link groupWith} — use custom equality
3014
+ * @see {@link groupBy} — group by a key function into a record
3015
+ *
3016
+ * @category grouping
3017
+ * @since 2.0.0
3018
+ */
3019
+ export const group: <A>(self: NonEmptyReadonlyArray<A>) => NonEmptyArray<NonEmptyArray<A>> = groupWith(
3020
+ Equal.asEquivalence()
3021
+ )
3022
+
3023
+ /**
3024
+ * Groups elements into a record by a key-returning function. Each key maps
3025
+ * to a `NonEmptyArray` of elements that produced that key.
3026
+ *
3027
+ * **When to use**
3028
+ *
3029
+ * Use to build buckets of elements indexed by a computed string or symbol key.
3030
+ *
3031
+ * **Details**
3032
+ *
3033
+ * Unlike `group` and `groupWith`, elements do not need to be adjacent to be
3034
+ * grouped together. The key function must return a `string` or `symbol`.
3035
+ *
3036
+ * **Example** (Grouping by a property)
3037
+ *
3038
+ * ```ts
3039
+ * import { Array } from "effect"
3040
+ *
3041
+ * const people = [
3042
+ * { name: "Alice", group: "A" },
3043
+ * { name: "Bob", group: "B" },
3044
+ * { name: "Charlie", group: "A" }
3045
+ * ]
3046
+ *
3047
+ * const result = Array.groupBy(people, (person) => person.group)
3048
+ * console.log(result)
3049
+ * // { A: [{ name: "Alice", group: "A" }, { name: "Charlie", group: "A" }], B: [{ name: "Bob", group: "B" }] }
3050
+ * ```
3051
+ *
3052
+ * @see {@link group} — group adjacent equal elements
3053
+ * @see {@link groupWith} — group adjacent elements by custom equality
3054
+ *
3055
+ * @category grouping
3056
+ * @since 2.0.0
3057
+ */
3058
+ export const groupBy: {
3059
+ <A, K extends string | symbol>(
3060
+ f: (a: A) => K
3061
+ ): (self: Iterable<A>) => Record<Record.ReadonlyRecord.NonLiteralKey<K>, NonEmptyArray<A>>
3062
+ <A, K extends string | symbol>(
3063
+ self: Iterable<A>,
3064
+ f: (a: A) => K
3065
+ ): Record<Record.ReadonlyRecord.NonLiteralKey<K>, NonEmptyArray<A>>
3066
+ } = dual(2, <A, K extends string | symbol>(
3067
+ self: Iterable<A>,
3068
+ f: (a: A) => K
3069
+ ): Record<Record.ReadonlyRecord.NonLiteralKey<K>, NonEmptyArray<A>> => {
3070
+ const out: Record<string | symbol, NonEmptyArray<A>> = {}
3071
+ for (const a of self) {
3072
+ const k = f(a)
3073
+ if (Object.hasOwn(out, k)) {
3074
+ out[k].push(a)
3075
+ } else {
3076
+ out[k] = [a]
3077
+ }
3078
+ }
3079
+ return out
3080
+ })
3081
+
3082
+ /**
3083
+ * Computes the union of two arrays using a custom equivalence, removing
3084
+ * duplicates.
3085
+ *
3086
+ * **When to use**
3087
+ *
3088
+ * Use when you need the union of two arrays but duplicate detection must use a
3089
+ * custom equivalence instead of the default `Equal.equivalence()`.
3090
+ *
3091
+ * **Example** (Computing unions with custom equality)
3092
+ *
3093
+ * ```ts
3094
+ * import { Array } from "effect"
3095
+ *
3096
+ * console.log(Array.unionWith([1, 2], [2, 3], (a, b) => a === b)) // [1, 2, 3]
3097
+ * ```
3098
+ *
3099
+ * @see {@link union} for the `Equal.equivalence()` variant
3100
+ * @see {@link intersectionWith} for keeping elements present in both arrays
3101
+ * @see {@link differenceWith} for keeping elements present only in the first array
3102
+ *
3103
+ * @category elements
3104
+ * @since 2.0.0
3105
+ */
3106
+ export const unionWith: {
3107
+ <S extends Iterable<any>, T extends Iterable<any>>(
3108
+ that: T,
3109
+ isEquivalent: (self: ReadonlyArray.Infer<S>, that: ReadonlyArray.Infer<T>) => boolean
3110
+ ): (self: S) => ReadonlyArray.OrNonEmpty<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
3111
+ <A, B>(
3112
+ self: NonEmptyReadonlyArray<A>,
3113
+ that: Iterable<B>,
3114
+ isEquivalent: (self: A, that: B) => boolean
3115
+ ): NonEmptyArray<A | B>
3116
+ <A, B>(
3117
+ self: Iterable<A>,
3118
+ that: NonEmptyReadonlyArray<B>,
3119
+ isEquivalent: (self: A, that: B) => boolean
3120
+ ): NonEmptyArray<A | B>
3121
+ <A, B>(self: Iterable<A>, that: Iterable<B>, isEquivalent: (self: A, that: B) => boolean): Array<A | B>
3122
+ } = dual(3, <A>(self: Iterable<A>, that: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A> => {
3123
+ const a = fromIterable(self)
3124
+ const b = fromIterable(that)
3125
+ if (isReadonlyArrayNonEmpty(a)) {
3126
+ if (isReadonlyArrayNonEmpty(b)) {
3127
+ const dedupe = dedupeWith(isEquivalent)
3128
+ return dedupe(appendAll(a, b))
3129
+ }
3130
+ return a
3131
+ }
3132
+ return b
3133
+ })
3134
+
3135
+ /**
3136
+ * Computes the union of two arrays, removing duplicates using
3137
+ * `Equal.equivalence()`.
3138
+ *
3139
+ * **Example** (Computing array unions)
3140
+ *
3141
+ * ```ts
3142
+ * import { Array } from "effect"
3143
+ *
3144
+ * console.log(Array.union([1, 2], [2, 3])) // [1, 2, 3]
3145
+ * ```
3146
+ *
3147
+ * @see {@link unionWith} — use custom equality
3148
+ * @see {@link intersection} — elements in both arrays
3149
+ * @see {@link difference} — elements only in the first array
3150
+ *
3151
+ * @category elements
3152
+ * @since 2.0.0
3153
+ */
3154
+ export const union: {
3155
+ <T extends Iterable<any>>(
3156
+ that: T
3157
+ ): <S extends Iterable<any>>(
3158
+ self: S
3159
+ ) => ReadonlyArray.OrNonEmpty<S, T, ReadonlyArray.Infer<S> | ReadonlyArray.Infer<T>>
3160
+ <A, B>(self: NonEmptyReadonlyArray<A>, that: ReadonlyArray<B>): NonEmptyArray<A | B>
3161
+ <A, B>(self: ReadonlyArray<A>, that: NonEmptyReadonlyArray<B>): NonEmptyArray<A | B>
3162
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B>
3163
+ } = dual(
3164
+ 2,
3165
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A | B> => unionWith(self, that, Equal.asEquivalence<A | B>())
3166
+ )
3167
+
3168
+ /**
3169
+ * Computes the intersection of two arrays using a custom equivalence. Order is
3170
+ * determined by the first array.
3171
+ *
3172
+ * **When to use**
3173
+ *
3174
+ * Use when you need to keep only values present in both arrays and equality
3175
+ * must be defined by a custom comparator, such as matching objects by id.
3176
+ *
3177
+ * **Example** (Computing intersections with custom equality)
3178
+ *
3179
+ * ```ts
3180
+ * import { Array } from "effect"
3181
+ *
3182
+ * const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }]
3183
+ * const array2 = [{ id: 3 }, { id: 4 }, { id: 1 }]
3184
+ * const isEquivalent = (a: { id: number }, b: { id: number }) => a.id === b.id
3185
+ * console.log(Array.intersectionWith(isEquivalent)(array2)(array1)) // [{ id: 1 }, { id: 3 }]
3186
+ * ```
3187
+ *
3188
+ * @see {@link intersection} for the `Equal.equivalence()` variant
3189
+ * @see {@link unionWith} for keeping values from either array with custom equality
3190
+ * @see {@link differenceWith} for keeping values only from the first array with custom equality
3191
+ *
3192
+ * @category elements
3193
+ * @since 2.0.0
3194
+ */
3195
+ export const intersectionWith = <A>(isEquivalent: (self: A, that: A) => boolean): {
3196
+ (that: Iterable<A>): (self: Iterable<A>) => Array<A>
3197
+ (self: Iterable<A>, that: Iterable<A>): Array<A>
3198
+ } => {
3199
+ const has = containsWith(isEquivalent)
3200
+ return dual(
3201
+ 2,
3202
+ (self: Iterable<A>, that: Iterable<A>): Array<A> => {
3203
+ const thatArray = fromIterable(that)
3204
+ return fromIterable(self).filter((a) => has(thatArray, a))
3205
+ }
3206
+ )
3207
+ }
3208
+
3209
+ /**
3210
+ * Computes the intersection of two arrays using `Equal.equivalence()`. Order is
3211
+ * determined by the first array.
3212
+ *
3213
+ * **When to use**
3214
+ *
3215
+ * Use when Effect equality is the right membership test and you want to keep
3216
+ * values present in both inputs while preserving the first input's order.
3217
+ *
3218
+ * **Example** (Computing array intersections)
3219
+ *
3220
+ * ```ts
3221
+ * import { Array } from "effect"
3222
+ *
3223
+ * console.log(Array.intersection([1, 2, 3], [3, 4, 1])) // [1, 3]
3224
+ * ```
3225
+ *
3226
+ * @see {@link intersectionWith} — use custom equality
3227
+ * @see {@link union} — elements in either array
3228
+ * @see {@link difference} — elements only in the first array
3229
+ *
3230
+ * @category elements
3231
+ * @since 2.0.0
3232
+ */
3233
+ export const intersection: {
3234
+ <B>(that: Iterable<B>): <A>(self: Iterable<A>) => Array<A & B>
3235
+ <A, B>(self: Iterable<A>, that: Iterable<B>): Array<A & B>
3236
+ } = intersectionWith(Equal.asEquivalence())
3237
+
3238
+ /**
3239
+ * Computes elements in the first array that are not in the second, using a
3240
+ * custom equivalence.
3241
+ *
3242
+ * **When to use**
3243
+ *
3244
+ * Use when you need to keep only values from the first array and equality must
3245
+ * be defined by a custom comparator, such as matching objects by id.
3246
+ *
3247
+ * **Example** (Computing differences with custom equality)
3248
+ *
3249
+ * ```ts
3250
+ * import { Array } from "effect"
3251
+ *
3252
+ * const diff = Array.differenceWith<number>((a, b) => a === b)([1, 2, 3], [2, 3, 4])
3253
+ * console.log(diff) // [1]
3254
+ * ```
3255
+ *
3256
+ * @see {@link difference} for the `Equal.equivalence()` variant
3257
+ * @see {@link unionWith} for keeping values from either array with custom equality
3258
+ * @see {@link intersectionWith} for keeping values present in both arrays with custom equality
3259
+ *
3260
+ * @category elements
3261
+ * @since 2.0.0
3262
+ */
3263
+ export const differenceWith = <A>(isEquivalent: (self: A, that: A) => boolean): {
3264
+ (that: Iterable<A>): (self: Iterable<A>) => Array<A>
3265
+ (self: Iterable<A>, that: Iterable<A>): Array<A>
3266
+ } => {
3267
+ const has = containsWith(isEquivalent)
3268
+ return dual(
3269
+ 2,
3270
+ (self: Iterable<A>, that: Iterable<A>): Array<A> => {
3271
+ const thatArray = fromIterable(that)
3272
+ return fromIterable(self).filter((a) => !has(thatArray, a))
3273
+ }
3274
+ )
3275
+ }
3276
+
3277
+ /**
3278
+ * Computes elements in the first array that are not in the second, using
3279
+ * `Equal.equivalence()`.
3280
+ *
3281
+ * **When to use**
3282
+ *
3283
+ * Use when you need to keep values from the first array that are absent from
3284
+ * the second and the default `Equal.equivalence()` comparison is appropriate.
3285
+ *
3286
+ * **Example** (Computing array differences)
3287
+ *
3288
+ * ```ts
3289
+ * import { Array } from "effect"
3290
+ *
3291
+ * console.log(Array.difference([1, 2, 3], [2, 3, 4])) // [1]
3292
+ * ```
3293
+ *
3294
+ * @see {@link differenceWith} — use custom equality
3295
+ * @see {@link union} — elements in either array
3296
+ * @see {@link intersection} — elements in both arrays
3297
+ *
3298
+ * @category elements
3299
+ * @since 2.0.0
3300
+ */
3301
+ export const difference: {
3302
+ <A>(that: Iterable<A>): (self: Iterable<A>) => Array<A>
3303
+ <A>(self: Iterable<A>, that: Iterable<A>): Array<A>
3304
+ } = differenceWith(Equal.asEquivalence())
3305
+
3306
+ /**
3307
+ * Creates an empty array.
3308
+ *
3309
+ * **When to use**
3310
+ *
3311
+ * Use to create a typed empty array without allocating placeholder elements.
3312
+ *
3313
+ * **Example** (Creating an empty array)
3314
+ *
3315
+ * ```ts
3316
+ * import { Array } from "effect"
3317
+ *
3318
+ * const result = Array.empty<number>()
3319
+ * console.log(result) // []
3320
+ * ```
3321
+ *
3322
+ * @see {@link of} — create a single-element array
3323
+ * @see {@link make} — create from multiple values
3324
+ *
3325
+ * @category constructors
3326
+ * @since 2.0.0
3327
+ */
3328
+ export const empty: <A = never>() => Array<A> = () => []
3329
+
3330
+ /**
3331
+ * Wraps a single value in a `NonEmptyArray`.
3332
+ *
3333
+ * **Example** (Creating a single-element array)
3334
+ *
3335
+ * ```ts
3336
+ * import { Array } from "effect"
3337
+ *
3338
+ * console.log(Array.of(1)) // [1]
3339
+ * ```
3340
+ *
3341
+ * @see {@link make} — create from multiple values
3342
+ * @see {@link empty} — create an empty array
3343
+ *
3344
+ * @category constructors
3345
+ * @since 2.0.0
3346
+ */
3347
+ export const of = <A>(a: A): NonEmptyArray<A> => [a]
3348
+
3349
+ /**
3350
+ * Utility types for working with `ReadonlyArray` at the type level. Use these
3351
+ * to infer element types, preserve non-emptiness, and flatten nested arrays.
3352
+ *
3353
+ * @since 2.0.0
3354
+ */
3355
+ export declare namespace ReadonlyArray {
3356
+ /**
3357
+ * Infers the element type of an iterable.
3358
+ *
3359
+ * **Example** (Inferring an element type)
3360
+ *
3361
+ * ```ts
3362
+ * import type { Array } from "effect"
3363
+ *
3364
+ * type StringArrayType = Array.ReadonlyArray.Infer<ReadonlyArray<string>>
3365
+ * // StringArrayType is string
3366
+ * ```
3367
+ *
3368
+ * @category types
3369
+ * @since 2.0.0
3370
+ */
3371
+ export type Infer<S extends Iterable<any>> = S extends ReadonlyArray<infer A> ? A
3372
+ : S extends Iterable<infer A> ? A
3373
+ : never
3374
+
3375
+ /**
3376
+ * Constructs an array type preserving non-emptiness.
3377
+ *
3378
+ * **Example** (Preserving non-emptiness)
3379
+ *
3380
+ * ```ts
3381
+ * import type { Array } from "effect"
3382
+ *
3383
+ * type Result = Array.ReadonlyArray.With<readonly [number], string>
3384
+ * // Result is NonEmptyArray<string>
3385
+ * ```
3386
+ *
3387
+ * @category types
3388
+ * @since 2.0.0
3389
+ */
3390
+ export type With<S extends Iterable<any>, A> = S extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
3391
+ : Array<A>
3392
+
3393
+ /**
3394
+ * Creates a non-empty array if either input is non-empty.
3395
+ *
3396
+ * **Example** (Preserving non-emptiness from either input)
3397
+ *
3398
+ * ```ts
3399
+ * import type { Array } from "effect"
3400
+ *
3401
+ * type Result = Array.ReadonlyArray.OrNonEmpty<
3402
+ * readonly [number],
3403
+ * ReadonlyArray<string>,
3404
+ * number
3405
+ * >
3406
+ * // Result is NonEmptyArray<number>
3407
+ * ```
3408
+ *
3409
+ * @category types
3410
+ * @since 2.0.0
3411
+ */
3412
+ export type OrNonEmpty<
3413
+ S extends Iterable<any>,
3414
+ T extends Iterable<any>,
3415
+ A
3416
+ > = S extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
3417
+ : T extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
3418
+ : Array<A>
3419
+
3420
+ /**
3421
+ * Creates a non-empty array only if both inputs are non-empty.
3422
+ *
3423
+ * **Example** (Preserving non-emptiness from both inputs)
3424
+ *
3425
+ * ```ts
3426
+ * import type { Array } from "effect"
3427
+ *
3428
+ * type Result = Array.ReadonlyArray.AndNonEmpty<
3429
+ * readonly [number],
3430
+ * readonly [string],
3431
+ * boolean
3432
+ * >
3433
+ * // Result is NonEmptyArray<boolean>
3434
+ * ```
3435
+ *
3436
+ * @category types
3437
+ * @since 2.0.0
3438
+ */
3439
+ export type AndNonEmpty<
3440
+ S extends Iterable<any>,
3441
+ T extends Iterable<any>,
3442
+ A
3443
+ > = S extends NonEmptyReadonlyArray<any> ? T extends NonEmptyReadonlyArray<any> ? NonEmptyArray<A>
3444
+ : Array<A>
3445
+ : Array<A>
3446
+
3447
+ /**
3448
+ * Flattens a nested array type.
3449
+ *
3450
+ * **Example** (Flattening nested array types)
3451
+ *
3452
+ * ```ts
3453
+ * import type { Array } from "effect"
3454
+ *
3455
+ * type Nested = ReadonlyArray<ReadonlyArray<number>>
3456
+ * type Flattened = Array.ReadonlyArray.Flatten<Nested>
3457
+ * // Flattened is Array<number>
3458
+ * ```
3459
+ *
3460
+ * @category types
3461
+ * @since 2.0.0
3462
+ */
3463
+ export type Flatten<T extends ReadonlyArray<ReadonlyArray<any>>> = T extends
3464
+ NonEmptyReadonlyArray<NonEmptyReadonlyArray<any>> ? NonEmptyArray<T[number][number]>
3465
+ : Array<T[number][number]>
3466
+ }
3467
+
3468
+ /**
3469
+ * Transforms each element using a function, returning a new array.
3470
+ *
3471
+ * **When to use**
3472
+ *
3473
+ * Use to transform each element independently while preserving the array shape.
3474
+ *
3475
+ * **Details**
3476
+ *
3477
+ * The function receives `(element, index)`. The return type preserves
3478
+ * `NonEmptyArray`.
3479
+ *
3480
+ * **Example** (Doubling values)
3481
+ *
3482
+ * ```ts
3483
+ * import { Array } from "effect"
3484
+ *
3485
+ * console.log(Array.map([1, 2, 3], (x) => x * 2)) // [2, 4, 6]
3486
+ * ```
3487
+ *
3488
+ * @see {@link flatMap} — map and flatten
3489
+ *
3490
+ * @category mapping
3491
+ * @since 2.0.0
3492
+ */
3493
+ export const map: {
3494
+ <S extends ReadonlyArray<any>, B>(
3495
+ f: (a: ReadonlyArray.Infer<S>, i: number) => B
3496
+ ): (self: S) => ReadonlyArray.With<S, B>
3497
+ <S extends ReadonlyArray<any>, B>(self: S, f: (a: ReadonlyArray.Infer<S>, i: number) => B): ReadonlyArray.With<S, B>
3498
+ } = dual(2, <A, B>(self: ReadonlyArray<A>, f: (a: A, i: number) => B): Array<B> => self.map(f))
3499
+
3500
+ /**
3501
+ * Maps each element to an array and flattens the results into a single array.
3502
+ *
3503
+ * **When to use**
3504
+ *
3505
+ * Use to map each array element to zero or more values and concatenate the
3506
+ * results in one pass.
3507
+ *
3508
+ * **Details**
3509
+ *
3510
+ * The function receives `(element, index)`. This returns `NonEmptyArray` when
3511
+ * both the input and mapped arrays are non-empty.
3512
+ *
3513
+ * **Example** (Flat mapping an array)
3514
+ *
3515
+ * ```ts
3516
+ * import { Array } from "effect"
3517
+ *
3518
+ * console.log(Array.flatMap([1, 2, 3], (x) => [x, x * 2])) // [1, 2, 2, 4, 3, 6]
3519
+ * ```
3520
+ *
3521
+ * @see {@link map} — transform without flattening
3522
+ * @see {@link flatten} — flatten without mapping
3523
+ *
3524
+ * @category sequencing
3525
+ * @since 2.0.0
3526
+ */
3527
+ export const flatMap: {
3528
+ <S extends ReadonlyArray<any>, T extends ReadonlyArray<any>>(
3529
+ f: (a: ReadonlyArray.Infer<S>, i: number) => T
3530
+ ): (self: S) => ReadonlyArray.AndNonEmpty<S, T, ReadonlyArray.Infer<T>>
3531
+ <A, B>(self: NonEmptyReadonlyArray<A>, f: (a: A, i: number) => NonEmptyReadonlyArray<B>): NonEmptyArray<B>
3532
+ <A, B>(self: ReadonlyArray<A>, f: (a: A, i: number) => ReadonlyArray<B>): Array<B>
3533
+ } = dual(
3534
+ 2,
3535
+ <A, B>(self: ReadonlyArray<A>, f: (a: A, i: number) => ReadonlyArray<B>): Array<B> => {
3536
+ if (isReadonlyArrayEmpty(self)) {
3537
+ return []
3538
+ }
3539
+ const out: Array<B> = []
3540
+ for (let i = 0; i < self.length; i++) {
3541
+ const inner = f(self[i], i)
3542
+ for (let j = 0; j < inner.length; j++) {
3543
+ out.push(inner[j])
3544
+ }
3545
+ }
3546
+ return out
3547
+ }
3548
+ )
3549
+
3550
+ /**
3551
+ * Flattens a nested array of arrays into a single array.
3552
+ *
3553
+ * **When to use**
3554
+ *
3555
+ * Use to collapse one level of nested arrays when no per-element mapping is
3556
+ * needed.
3557
+ *
3558
+ * **Example** (Flattening nested arrays)
3559
+ *
3560
+ * ```ts
3561
+ * import { Array } from "effect"
3562
+ *
3563
+ * console.log(Array.flatten([[1, 2], [], [3, 4], [], [5, 6]])) // [1, 2, 3, 4, 5, 6]
3564
+ * ```
3565
+ *
3566
+ * @see {@link flatMap} — map then flatten in one step
3567
+ *
3568
+ * @category sequencing
3569
+ * @since 2.0.0
3570
+ */
3571
+ export const flatten: <const S extends ReadonlyArray<ReadonlyArray<any>>>(self: S) => ReadonlyArray.Flatten<S> =
3572
+ flatMap(identity) as any
3573
+
3574
+ /**
3575
+ * Extracts all `Some` values from an iterable of `Option`s, discarding `None`s.
3576
+ *
3577
+ * **When to use**
3578
+ *
3579
+ * Use to collect only present values from an iterable of `Option` values while
3580
+ * discarding `None` values.
3581
+ *
3582
+ * **Example** (Extracting Some values)
3583
+ *
3584
+ * ```ts
3585
+ * import { Array, Option } from "effect"
3586
+ *
3587
+ * console.log(Array.getSomes([Option.some(1), Option.none(), Option.some(2)])) // [1, 2]
3588
+ * ```
3589
+ *
3590
+ * @see {@link fromOption} — convert a single Option
3591
+ * @see {@link getSuccesses} — extract successes from Results
3592
+ *
3593
+ * @category filtering
3594
+ * @since 2.0.0
3595
+ */
3596
+
3597
+ export const getSomes: <T extends Iterable<Option.Option<X>>, X = any>(
3598
+ self: T
3599
+ ) => Array<Option.Option.Value<ReadonlyArray.Infer<T>>> = (self: any) => {
3600
+ const out: Array<any> = []
3601
+ for (const a of self) {
3602
+ if (Option.isSome(a)) {
3603
+ out.push(a.value)
3604
+ }
3605
+ }
3606
+ return out
3607
+ }
3608
+
3609
+ /**
3610
+ * Extracts all failure values from an iterable of `Result`s, discarding
3611
+ * successes.
3612
+ *
3613
+ * **When to use**
3614
+ *
3615
+ * Use when you can drop the success channel and only need the failure
3616
+ * payloads, not the original result wrappers.
3617
+ *
3618
+ * **Example** (Extracting failures)
3619
+ *
3620
+ * ```ts
3621
+ * import { Array, Result } from "effect"
3622
+ *
3623
+ * console.log(Array.getFailures([Result.succeed(1), Result.fail("err"), Result.succeed(2)]))
3624
+ * // ["err"]
3625
+ * ```
3626
+ *
3627
+ * @see {@link getSuccesses} — extract success values
3628
+ * @see {@link separate} — split into failures and successes
3629
+ *
3630
+ * @category filtering
3631
+ * @since 4.0.0
3632
+ */
3633
+ export const getFailures = <T extends Iterable<Result.Result<any, any>>>(
3634
+ self: T
3635
+ ): Array<Result.Result.Failure<ReadonlyArray.Infer<T>>> => {
3636
+ const out: Array<any> = []
3637
+ for (const a of self) {
3638
+ if (Result.isFailure(a)) {
3639
+ out.push(a.failure)
3640
+ }
3641
+ }
3642
+
3643
+ return out
3644
+ }
3645
+
3646
+ /**
3647
+ * Extracts all success values from an iterable of `Result`s, discarding
3648
+ * failures.
3649
+ *
3650
+ * **When to use**
3651
+ *
3652
+ * Use when you can drop the failure channel and only need the success
3653
+ * payloads, not the original result wrappers.
3654
+ *
3655
+ * **Example** (Extracting successes)
3656
+ *
3657
+ * ```ts
3658
+ * import { Array, Result } from "effect"
3659
+ *
3660
+ * console.log(Array.getSuccesses([Result.succeed(1), Result.fail("err"), Result.succeed(2)]))
3661
+ * // [1, 2]
3662
+ * ```
3663
+ *
3664
+ * @see {@link getFailures} — extract failure values
3665
+ * @see {@link separate} — split into failures and successes
3666
+ *
3667
+ * @category filtering
3668
+ * @since 4.0.0
3669
+ */
3670
+ export const getSuccesses = <T extends Iterable<Result.Result<any, any>>>(
3671
+ self: T
3672
+ ): Array<Result.Result.Success<ReadonlyArray.Infer<T>>> => {
3673
+ const out: Array<any> = []
3674
+ for (const a of self) {
3675
+ if (Result.isSuccess(a)) {
3676
+ out.push(a.success)
3677
+ }
3678
+ }
3679
+
3680
+ return out
3681
+ }
3682
+
3683
+ /**
3684
+ * Keeps transformed values for elements where a `Filter` succeeds.
3685
+ *
3686
+ * **When to use**
3687
+ *
3688
+ * Use to filter an iterable with a `Result`-returning transformation while
3689
+ * discarding failures.
3690
+ *
3691
+ * **Details**
3692
+ *
3693
+ * The filter receives `(element, index)`. Failures are discarded.
3694
+ *
3695
+ * **Example** (Filtering and transforming)
3696
+ *
3697
+ * ```ts
3698
+ * import { Array, Result } from "effect"
3699
+ *
3700
+ * console.log(Array.filterMap([1, 2, 3, 4], (n) => n % 2 === 0 ? Result.succeed(n * 10) : Result.failVoid))
3701
+ * // [20, 40]
3702
+ * ```
3703
+ *
3704
+ * @see {@link filter} — keep original elements matching a predicate
3705
+ * @see {@link partition} for keeping both failures and successes
3706
+ *
3707
+ * @category filtering
3708
+ * @since 2.0.0
3709
+ */
3710
+ export const filterMap: {
3711
+ <A, B, X>(f: (input: NoInfer<A>, i: number) => Result.Result<B, X>): (self: Iterable<A>) => Array<B>
3712
+ <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<B>
3713
+ } = dual(2, <A, B, X>(self: Iterable<A>, f: (input: A, i: number) => Result.Result<B, X>): Array<B> => {
3714
+ const as = fromIterable(self)
3715
+ const out: Array<B> = []
3716
+ for (let i = 0; i < as.length; i++) {
3717
+ const result = f(as[i], i)
3718
+ if (Result.isSuccess(result)) {
3719
+ out.push(result.success)
3720
+ }
3721
+ }
3722
+ return out
3723
+ })
3724
+
3725
+ /**
3726
+ * Keeps only elements satisfying a predicate (or refinement).
3727
+ *
3728
+ * **When to use**
3729
+ *
3730
+ * Use to filter an iterable into a new array of original elements that satisfy
3731
+ * a boolean predicate or refinement.
3732
+ *
3733
+ * **Details**
3734
+ *
3735
+ * The predicate receives `(element, index)`. Refinements are supported for type
3736
+ * narrowing.
3737
+ *
3738
+ * **Example** (Filtering even numbers)
3739
+ *
3740
+ * ```ts
3741
+ * import { Array } from "effect"
3742
+ *
3743
+ * console.log(Array.filter([1, 2, 3, 4], (x) => x % 2 === 0)) // [2, 4]
3744
+ * ```
3745
+ *
3746
+ * @see {@link partition} — split into matching and non-matching
3747
+ * @see {@link filterMap} for transforming while filtering
3748
+ *
3749
+ * @category filtering
3750
+ * @since 2.0.0
3751
+ */
3752
+ export const filter: {
3753
+ <A, B extends A>(refinement: (a: NoInfer<A>, i: number) => a is B): (self: Iterable<A>) => Array<B>
3754
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => Array<A>
3755
+ <A, B extends A>(self: Iterable<A>, refinement: (a: A, i: number) => a is B): Array<B>
3756
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A>
3757
+ } = dual(
3758
+ 2,
3759
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): Array<A> => {
3760
+ const as = fromIterable(self)
3761
+ const out: Array<A> = []
3762
+ for (let i = 0; i < as.length; i++) {
3763
+ if (predicate(as[i], i)) {
3764
+ out.push(as[i])
3765
+ }
3766
+ }
3767
+ return out
3768
+ }
3769
+ )
3770
+
3771
+ /**
3772
+ * Splits an iterable using a `Filter` into failures and successes.
3773
+ *
3774
+ * **When to use**
3775
+ *
3776
+ * Use to partition an iterable by evaluating each element with a
3777
+ * `Result`-returning filter and keeping both failure and success values.
3778
+ *
3779
+ * **Details**
3780
+ *
3781
+ * Returns `[excluded, satisfying]`. The filter receives `(element, index)`.
3782
+ *
3783
+ * **Example** (Partitioning with a filter)
3784
+ *
3785
+ * ```ts
3786
+ * import { Array, Result } from "effect"
3787
+ *
3788
+ * console.log(Array.partition([1, -2, 3], (n, i) =>
3789
+ * n > 0 ? Result.succeed(n + i) : Result.fail(`negative:${n}`)
3790
+ * ))
3791
+ * // [["negative:-2"], [1, 5]]
3792
+ * ```
3793
+ *
3794
+ * @see {@link filter} — keep only matching elements
3795
+ * @see {@link filterMap} for discarding failures
3796
+ * @see {@link separate} — split an iterable of `Result` values
3797
+ *
3798
+ * @category filtering
3799
+ * @since 2.0.0
3800
+ */
3801
+ export const partition: {
3802
+ <A, Pass, Fail>(
3803
+ f: (input: NoInfer<A>, i: number) => Result.Result<Pass, Fail>
3804
+ ): (self: Iterable<A>) => [excluded: Array<Fail>, satisfying: Array<Pass>]
3805
+ <A, Pass, Fail>(
3806
+ self: Iterable<A>,
3807
+ f: (input: A, i: number) => Result.Result<Pass, Fail>
3808
+ ): [excluded: Array<Fail>, satisfying: Array<Pass>]
3809
+ } = dual(
3810
+ 2,
3811
+ <A, Pass, Fail>(
3812
+ self: Iterable<A>,
3813
+ f: (input: A, i: number) => Result.Result<Pass, Fail>
3814
+ ): [excluded: Array<Fail>, satisfying: Array<Pass>] => {
3815
+ const excluded: Array<Fail> = []
3816
+ const satisfying: Array<Pass> = []
3817
+ let i = 0
3818
+ for (const a of self) {
3819
+ const result = f(a, i++)
3820
+ if (Result.isSuccess(result)) {
3821
+ satisfying.push(result.success)
3822
+ } else {
3823
+ excluded.push(result.failure)
3824
+ }
3825
+ }
3826
+ return [excluded, satisfying]
3827
+ }
3828
+ )
3829
+
3830
+ /**
3831
+ * Separates an iterable of `Result`s into failure values and success values.
3832
+ *
3833
+ * **When to use**
3834
+ *
3835
+ * Use to split an iterable of `Result` values into failure and success arrays.
3836
+ *
3837
+ * **Details**
3838
+ *
3839
+ * Returns `[failures, successes]`. This is equivalent to
3840
+ * `partition(identity)`.
3841
+ *
3842
+ * **Example** (Separating Results)
3843
+ *
3844
+ * ```ts
3845
+ * import { Array, Result } from "effect"
3846
+ *
3847
+ * const [failures, successes] = Array.separate([
3848
+ * Result.succeed(1), Result.fail("error"), Result.succeed(2)
3849
+ * ])
3850
+ * console.log(failures) // ["error"]
3851
+ * console.log(successes) // [1, 2]
3852
+ * ```
3853
+ *
3854
+ * @see {@link getFailures} — extract only failures
3855
+ * @see {@link getSuccesses} — extract only successes
3856
+ * @see {@link partition} for computing `Result` values while splitting
3857
+ *
3858
+ * @category filtering
3859
+ * @since 2.0.0
3860
+ */
3861
+ export const separate: <T extends Iterable<Result.Result<any, any>>>(
3862
+ self: T
3863
+ ) => [
3864
+ failures: Array<Result.Result.Failure<ReadonlyArray.Infer<T>>>,
3865
+ successes: Array<Result.Result.Success<ReadonlyArray.Infer<T>>>
3866
+ ] = partition(identity)
3867
+
3868
+ /**
3869
+ * Folds an iterable from left to right into a single value.
3870
+ *
3871
+ * **When to use**
3872
+ *
3873
+ * Use to combine all elements into one accumulated value from left to right.
3874
+ *
3875
+ * **Details**
3876
+ *
3877
+ * The function receives `(accumulator, element, index)`.
3878
+ *
3879
+ * **Example** (Summing an array)
3880
+ *
3881
+ * ```ts
3882
+ * import { Array } from "effect"
3883
+ *
3884
+ * console.log(Array.reduce([1, 2, 3], 0, (acc, n) => acc + n)) // 6
3885
+ * ```
3886
+ *
3887
+ * @see {@link reduceRight} — fold from right to left
3888
+ * @see {@link scan} — fold keeping intermediate values
3889
+ *
3890
+ * @category folding
3891
+ * @since 2.0.0
3892
+ */
3893
+ export const reduce: {
3894
+ <B, A>(b: B, f: (b: B, a: A, i: number) => B): (self: Iterable<A>) => B
3895
+ <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A, i: number) => B): B
3896
+ } = dual(
3897
+ 3,
3898
+ <B, A>(self: Iterable<A>, b: B, f: (b: B, a: A, i: number) => B): B =>
3899
+ fromIterable(self).reduce((b, a, i) => f(b, a, i), b)
3900
+ )
3901
+
3902
+ /**
3903
+ * Folds an iterable from right to left into a single value.
3904
+ *
3905
+ * **When to use**
3906
+ *
3907
+ * Use when you need to fold values from right to left.
3908
+ *
3909
+ * **Details**
3910
+ *
3911
+ * The function receives `(accumulator, element, index)`.
3912
+ *
3913
+ * **Example** (Folding from right to left)
3914
+ *
3915
+ * ```ts
3916
+ * import { Array } from "effect"
3917
+ *
3918
+ * console.log(Array.reduceRight([1, 2, 3], 0, (acc, n) => acc + n)) // 6
3919
+ * ```
3920
+ *
3921
+ * @see {@link reduce} — fold from left to right
3922
+ * @see {@link scanRight} — fold keeping intermediate values
3923
+ *
3924
+ * @category folding
3925
+ * @since 2.0.0
3926
+ */
3927
+ export const reduceRight: {
3928
+ <B, A>(b: B, f: (b: B, a: A, i: number) => B): (self: Iterable<A>) => B
3929
+ <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A, i: number) => B): B
3930
+ } = dual(
3931
+ 3,
3932
+ <A, B>(self: Iterable<A>, b: B, f: (b: B, a: A, i: number) => B): B =>
3933
+ fromIterable(self).reduceRight((b, a, i) => f(b, a, i), b)
3934
+ )
3935
+
3936
+ /**
3937
+ * Lifts a predicate into an array: returns `[value]` if the predicate holds,
3938
+ * `[]` otherwise.
3939
+ *
3940
+ * **Example** (Wrapping values conditionally)
3941
+ *
3942
+ * ```ts
3943
+ * import { Array } from "effect"
3944
+ *
3945
+ * const isEven = (n: number) => n % 2 === 0
3946
+ * const to = Array.liftPredicate(isEven)
3947
+ * console.log(to(1)) // []
3948
+ * console.log(to(2)) // [2]
3949
+ * ```
3950
+ *
3951
+ * @see {@link liftOption} — lift an Option-returning function
3952
+ *
3953
+ * @category lifting
3954
+ * @since 2.0.0
3955
+ */
3956
+ export const liftPredicate: { // Note: I intentionally avoid using the NoInfer pattern here.
3957
+ <A, B extends A>(refinement: Predicate.Refinement<A, B>): (a: A) => Array<B>
3958
+ <A>(predicate: Predicate.Predicate<A>): <B extends A>(b: B) => Array<B>
3959
+ } = <A>(predicate: Predicate.Predicate<A>) => <B extends A>(b: B): Array<B> => predicate(b) ? [b] : []
3960
+
3961
+ /**
3962
+ * Lifts an `Option`-returning function into one that returns an array:
3963
+ * `Some(a)` becomes `[a]`, `None` becomes `[]`.
3964
+ *
3965
+ * **When to use**
3966
+ *
3967
+ * Use when an optional parser or lookup should participate in array pipelines
3968
+ * as zero-or-one results.
3969
+ *
3970
+ * **Example** (Lifting an Option function)
3971
+ *
3972
+ * ```ts
3973
+ * import { Array, Option } from "effect"
3974
+ *
3975
+ * const parseNumber = Array.liftOption((s: string) => {
3976
+ * const n = Number(s)
3977
+ * return isNaN(n) ? Option.none() : Option.some(n)
3978
+ * })
3979
+ * console.log(parseNumber("123")) // [123]
3980
+ * console.log(parseNumber("abc")) // []
3981
+ * ```
3982
+ *
3983
+ * @see {@link liftPredicate} — lift a boolean predicate
3984
+ * @see {@link liftResult} — lift a Result-returning function
3985
+ *
3986
+ * @category lifting
3987
+ * @since 2.0.0
3988
+ */
3989
+ export const liftOption = <A extends Array<unknown>, B>(
3990
+ f: (...a: A) => Option.Option<B>
3991
+ ) =>
3992
+ (...a: A): Array<B> => fromOption(f(...a))
3993
+
3994
+ /**
3995
+ * Converts a nullable value to an array: `null`/`undefined` becomes `[]`,
3996
+ * anything else becomes `[value]`.
3997
+ *
3998
+ * **When to use**
3999
+ *
4000
+ * Use to treat a nullable single value as zero or one array element.
4001
+ *
4002
+ * **Example** (Converting nullable values to an array)
4003
+ *
4004
+ * ```ts
4005
+ * import { Array } from "effect"
4006
+ *
4007
+ * console.log(Array.fromNullishOr(1)) // [1]
4008
+ * console.log(Array.fromNullishOr(null)) // []
4009
+ * console.log(Array.fromNullishOr(undefined)) // []
4010
+ * ```
4011
+ *
4012
+ * @see {@link liftNullishOr} — lift a nullable-returning function
4013
+ * @see {@link fromOption} — convert from Option
4014
+ *
4015
+ * @category converting
4016
+ * @since 4.0.0
4017
+ */
4018
+ export const fromNullishOr = <A>(a: A): Array<NonNullable<A>> => a == null ? empty() : [a as NonNullable<A>]
4019
+
4020
+ /**
4021
+ * Lifts a nullable-returning function into one that returns an array:
4022
+ * `null`/`undefined` becomes `[]`, anything else becomes `[value]`.
4023
+ *
4024
+ * **Example** (Lifting a nullable function)
4025
+ *
4026
+ * ```ts
4027
+ * import { Array } from "effect"
4028
+ *
4029
+ * const parseNumber = Array.liftNullishOr((s: string) => {
4030
+ * const n = Number(s)
4031
+ * return isNaN(n) ? null : n
4032
+ * })
4033
+ * console.log(parseNumber("123")) // [123]
4034
+ * console.log(parseNumber("abc")) // []
4035
+ * ```
4036
+ *
4037
+ * @see {@link fromNullishOr} — convert a single nullable value
4038
+ * @see {@link liftOption} — lift an Option-returning function
4039
+ *
4040
+ * @category lifting
4041
+ * @since 4.0.0
4042
+ */
4043
+ export const liftNullishOr = <A extends Array<unknown>, B>(
4044
+ f: (...a: A) => B
4045
+ ): (...a: A) => Array<NonNullable<B>> =>
4046
+ (...a) => fromNullishOr(f(...a))
4047
+
4048
+ /**
4049
+ * Maps each element with a nullable-returning function, keeping only non-null /
4050
+ * non-undefined results.
4051
+ *
4052
+ * **When to use**
4053
+ *
4054
+ * Use when you need to map and filter in one step, where the mapper can return
4055
+ * `null` or `undefined` to skip elements.
4056
+ *
4057
+ * **Example** (Flat mapping with nullable values)
4058
+ *
4059
+ * ```ts
4060
+ * import { Array } from "effect"
4061
+ *
4062
+ * console.log(Array.flatMapNullishOr([1, 2, 3], (n) => (n % 2 === 0 ? null : n)))
4063
+ * // [1, 3]
4064
+ * ```
4065
+ *
4066
+ * @see {@link flatMap} for mapping each element to an array and flattening
4067
+ * @see {@link fromNullishOr} for converting a single nullable value to an array
4068
+ *
4069
+ * @category sequencing
4070
+ * @since 4.0.0
4071
+ */
4072
+ export const flatMapNullishOr: {
4073
+ <A, B>(f: (a: A) => B): (self: ReadonlyArray<A>) => Array<NonNullable<B>>
4074
+ <A, B>(self: ReadonlyArray<A>, f: (a: A) => B): Array<NonNullable<B>>
4075
+ } = dual(
4076
+ 2,
4077
+ <A, B>(self: ReadonlyArray<A>, f: (a: A) => B): Array<NonNullable<B>> => flatMap(self, (a) => fromNullishOr(f(a)))
4078
+ )
4079
+
4080
+ /**
4081
+ * Lifts a `Result`-returning function into one that returns an array: failures
4082
+ * produce `[]`, successes produce `[value]`.
4083
+ *
4084
+ * **When to use**
4085
+ *
4086
+ * Use when a fallible parser or lookup should participate in array pipelines as
4087
+ * zero-or-one results and the failure value should be discarded.
4088
+ *
4089
+ * **Example** (Lifting a Result function)
4090
+ *
4091
+ * ```ts
4092
+ * import { Array, Result } from "effect"
4093
+ *
4094
+ * const parseNumber = (s: string): Result.Result<number, Error> =>
4095
+ * isNaN(Number(s))
4096
+ * ? Result.fail(new Error("Not a number"))
4097
+ * : Result.succeed(Number(s))
4098
+ *
4099
+ * const liftedParseNumber = Array.liftResult(parseNumber)
4100
+ * console.log(liftedParseNumber("42")) // [42]
4101
+ * console.log(liftedParseNumber("not a number")) // []
4102
+ * ```
4103
+ *
4104
+ * @see {@link liftOption} — lift an Option-returning function
4105
+ * @see {@link liftPredicate} — lift a boolean predicate
4106
+ *
4107
+ * @category lifting
4108
+ * @since 4.0.0
4109
+ */
4110
+ export const liftResult = <A extends Array<unknown>, E, B>(
4111
+ f: (...a: A) => Result.Result<B, E>
4112
+ ) =>
4113
+ (...a: A): Array<B> => {
4114
+ const e = f(...a)
4115
+ return Result.isFailure(e) ? [] : [e.success]
4116
+ }
4117
+
4118
+ /**
4119
+ * Checks whether all elements satisfy the predicate. Supports refinements for
4120
+ * type narrowing.
4121
+ *
4122
+ * **When to use**
4123
+ *
4124
+ * Use to check whether every array element satisfies a predicate, including
4125
+ * refinement-based type narrowing.
4126
+ *
4127
+ * **Example** (Testing all elements)
4128
+ *
4129
+ * ```ts
4130
+ * import { Array } from "effect"
4131
+ *
4132
+ * console.log(Array.every([2, 4, 6], (x) => x % 2 === 0)) // true
4133
+ * console.log(Array.every([2, 3, 6], (x) => x % 2 === 0)) // false
4134
+ * ```
4135
+ *
4136
+ * @see {@link some} — test if any element matches
4137
+ *
4138
+ * @category elements
4139
+ * @since 2.0.0
4140
+ */
4141
+ export const every: {
4142
+ <A, B extends A>(
4143
+ refinement: (a: NoInfer<A>, i: number) => a is B
4144
+ ): (self: ReadonlyArray<A>) => self is ReadonlyArray<B>
4145
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: ReadonlyArray<A>) => boolean
4146
+ <A, B extends A>(self: ReadonlyArray<A>, refinement: (a: A, i: number) => a is B): self is ReadonlyArray<B>
4147
+ <A>(self: ReadonlyArray<A>, predicate: (a: A, i: number) => boolean): boolean
4148
+ } = dual(
4149
+ 2,
4150
+ <A, B extends A>(self: ReadonlyArray<A>, refinement: (a: A, i: number) => a is B): self is ReadonlyArray<B> =>
4151
+ self.every(refinement)
4152
+ )
4153
+
4154
+ /**
4155
+ * Checks whether at least one element satisfies the predicate. Narrows the type
4156
+ * to `NonEmptyReadonlyArray` on success.
4157
+ *
4158
+ * **Example** (Testing for any match)
4159
+ *
4160
+ * ```ts
4161
+ * import { Array } from "effect"
4162
+ *
4163
+ * console.log(Array.some([1, 3, 4], (x) => x % 2 === 0)) // true
4164
+ * console.log(Array.some([1, 3, 5], (x) => x % 2 === 0)) // false
4165
+ * ```
4166
+ *
4167
+ * @see {@link every} — test if all elements match
4168
+ * @see {@link contains} — test for a specific value
4169
+ *
4170
+ * @category elements
4171
+ * @since 2.0.0
4172
+ */
4173
+ export const some: {
4174
+ <A>(
4175
+ predicate: (a: NoInfer<A>, i: number) => boolean
4176
+ ): (self: ReadonlyArray<A>) => self is NonEmptyReadonlyArray<A>
4177
+ <A>(self: ReadonlyArray<A>, predicate: (a: A, i: number) => boolean): self is NonEmptyReadonlyArray<A>
4178
+ } = dual(
4179
+ 2,
4180
+ <A>(self: ReadonlyArray<A>, predicate: (a: A, i: number) => boolean): self is NonEmptyReadonlyArray<A> =>
4181
+ self.some(predicate)
4182
+ )
4183
+
4184
+ /**
4185
+ * Applies a function to each suffix of the array (starting from each index),
4186
+ * collecting the results.
4187
+ *
4188
+ * **When to use**
4189
+ *
4190
+ * Use when you need to compute a result from every suffix of an array, such as
4191
+ * cumulative aggregations from each position.
4192
+ *
4193
+ * **Details**
4194
+ *
4195
+ * For index `i`, the function receives `self.slice(i)`.
4196
+ *
4197
+ * **Example** (Computing suffix lengths)
4198
+ *
4199
+ * ```ts
4200
+ * import { Array } from "effect"
4201
+ *
4202
+ * console.log(Array.extend([1, 2, 3], (as) => as.length)) // [3, 2, 1]
4203
+ * ```
4204
+ *
4205
+ * @see {@link scan} for keeping intermediate accumulator values during a fold
4206
+ *
4207
+ * @category mapping
4208
+ * @since 2.0.0
4209
+ */
4210
+ export const extend: {
4211
+ <A, B>(f: (as: ReadonlyArray<A>) => B): (self: ReadonlyArray<A>) => Array<B>
4212
+ <A, B>(self: ReadonlyArray<A>, f: (as: ReadonlyArray<A>) => B): Array<B>
4213
+ } = dual(
4214
+ 2,
4215
+ <A, B>(self: ReadonlyArray<A>, f: (as: ReadonlyArray<A>) => B): Array<B> => self.map((_, i, as) => f(as.slice(i)))
4216
+ )
4217
+
4218
+ /**
4219
+ * Returns the minimum element of a non-empty array according to the given
4220
+ * `Order`.
4221
+ *
4222
+ * **Example** (Finding the minimum)
4223
+ *
4224
+ * ```ts
4225
+ * import { Array, Order } from "effect"
4226
+ *
4227
+ * console.log(Array.min([3, 1, 2], Order.Number)) // 1
4228
+ * ```
4229
+ *
4230
+ * @see {@link max} — find the maximum
4231
+ * @see {@link sort} — sort the entire array
4232
+ *
4233
+ * @category elements
4234
+ * @since 2.0.0
4235
+ */
4236
+ export const min: {
4237
+ <A>(O: Order.Order<A>): (self: NonEmptyReadonlyArray<A>) => A
4238
+ <A>(self: NonEmptyReadonlyArray<A>, O: Order.Order<A>): A
4239
+ } = dual(2, <A>(self: NonEmptyReadonlyArray<A>, O: Order.Order<A>): A => self.reduce(Order.min(O)))
4240
+
4241
+ /**
4242
+ * Returns the maximum element of a non-empty array according to the given
4243
+ * `Order`.
4244
+ *
4245
+ * **Example** (Finding the maximum)
4246
+ *
4247
+ * ```ts
4248
+ * import { Array, Order } from "effect"
4249
+ *
4250
+ * console.log(Array.max([3, 1, 2], Order.Number)) // 3
4251
+ * ```
4252
+ *
4253
+ * @see {@link min} — find the minimum
4254
+ * @see {@link sort} — sort the entire array
4255
+ *
4256
+ * @category elements
4257
+ * @since 2.0.0
4258
+ */
4259
+ export const max: {
4260
+ <A>(O: Order.Order<A>): (self: NonEmptyReadonlyArray<A>) => A
4261
+ <A>(self: NonEmptyReadonlyArray<A>, O: Order.Order<A>): A
4262
+ } = dual(2, <A>(self: NonEmptyReadonlyArray<A>, O: Order.Order<A>): A => self.reduce(Order.max(O)))
4263
+
4264
+ /**
4265
+ * Builds an array by repeatedly applying a function to a seed value. The
4266
+ * function returns `Option.some([element, nextSeed])` to continue, or
4267
+ * `Option.none()` to stop.
4268
+ *
4269
+ * **Example** (Generating a sequence)
4270
+ *
4271
+ * ```ts
4272
+ * import { Array, Option } from "effect"
4273
+ *
4274
+ * console.log(Array.unfold(1, (n) => n <= 5 ? Option.some([n, n + 1]) : Option.none()))
4275
+ * // [1, 2, 3, 4, 5]
4276
+ * ```
4277
+ *
4278
+ * @see {@link makeBy} — generate from index
4279
+ * @see {@link range} — generate a numeric range
4280
+ *
4281
+ * @category constructors
4282
+ * @since 2.0.0
4283
+ */
4284
+ export const unfold = <B, A>(b: B, f: (b: B) => Option.Option<readonly [A, B]>): Array<A> => {
4285
+ const out: Array<A> = []
4286
+ let next: B = b
4287
+ while (true) {
4288
+ const o = f(next)
4289
+ if (Option.isNone(o)) {
4290
+ break
4291
+ }
4292
+ const [a, b] = o.value
4293
+ out.push(a)
4294
+ next = b
4295
+ }
4296
+ return out
4297
+ }
4298
+
4299
+ /**
4300
+ * Creates an `Order` for arrays based on an element `Order`. Arrays are
4301
+ * compared element-wise; if all compared elements are equal, shorter arrays
4302
+ * come first.
4303
+ *
4304
+ * **Example** (Comparing arrays)
4305
+ *
4306
+ * ```ts
4307
+ * import { Array, Order } from "effect"
4308
+ *
4309
+ * const arrayOrder = Array.makeOrder(Order.Number)
4310
+ * console.log(arrayOrder([1, 2], [1, 3])) // -1
4311
+ * ```
4312
+ *
4313
+ * @see {@link makeEquivalence} — create an equivalence for arrays
4314
+ *
4315
+ * @category instances
4316
+ * @since 4.0.0
4317
+ */
4318
+ export const makeOrder: <A>(O: Order.Order<A>) => Order.Order<ReadonlyArray<A>> = Order.Array
4319
+
4320
+ /**
4321
+ * Creates an `Equivalence` for arrays based on an element `Equivalence`. Two
4322
+ * arrays are equivalent when they have the same length and all elements are
4323
+ * pairwise equivalent.
4324
+ *
4325
+ * **Example** (Comparing arrays for equality)
4326
+ *
4327
+ * ```ts
4328
+ * import { Array } from "effect"
4329
+ *
4330
+ * const eq = Array.makeEquivalence<number>((a, b) => a === b)
4331
+ * console.log(eq([1, 2, 3], [1, 2, 3])) // true
4332
+ * ```
4333
+ *
4334
+ * @see {@link makeOrder} — create an ordering for arrays
4335
+ *
4336
+ * @category instances
4337
+ * @since 4.0.0
4338
+ */
4339
+ export const makeEquivalence: <A>(
4340
+ isEquivalent: Equivalence.Equivalence<A>
4341
+ ) => Equivalence.Equivalence<ReadonlyArray<A>> = Equivalence.Array
4342
+
4343
+ /**
4344
+ * Runs a side-effect for each element. The callback receives `(element, index)`.
4345
+ *
4346
+ * **When to use**
4347
+ *
4348
+ * Use to iterate over an array for side-effects only, when no transformed
4349
+ * result is needed.
4350
+ *
4351
+ * **Example** (Iterating with side-effects)
4352
+ *
4353
+ * ```ts
4354
+ * import { Array } from "effect"
4355
+ *
4356
+ * Array.forEach([1, 2, 3], (n) => console.log(n)) // 1, 2, 3
4357
+ * ```
4358
+ *
4359
+ * @see {@link map} for transforming each element into a new array
4360
+ *
4361
+ * @category elements
4362
+ * @since 2.0.0
4363
+ */
4364
+ export const forEach: {
4365
+ <A>(f: (a: A, i: number) => void): (self: Iterable<A>) => void
4366
+ <A>(self: Iterable<A>, f: (a: A, i: number) => void): void
4367
+ } = dual(2, <A>(self: Iterable<A>, f: (a: A, i: number) => void): void => fromIterable(self).forEach((a, i) => f(a, i)))
4368
+
4369
+ /**
4370
+ * Removes duplicates using a custom equivalence, preserving the order of the
4371
+ * first occurrence.
4372
+ *
4373
+ * **When to use**
4374
+ *
4375
+ * Use to remove all duplicate elements with a custom equivalence when default
4376
+ * equality is not appropriate.
4377
+ *
4378
+ * **Example** (Deduplicating with custom equality)
4379
+ *
4380
+ * ```ts
4381
+ * import { Array } from "effect"
4382
+ *
4383
+ * console.log(Array.dedupeWith([1, 2, 2, 3, 3, 3], (a, b) => a === b)) // [1, 2, 3]
4384
+ * ```
4385
+ *
4386
+ * @see {@link dedupe} — uses default equality
4387
+ * @see {@link dedupeAdjacentWith} — only dedupes consecutive elements
4388
+ *
4389
+ * @category elements
4390
+ * @since 2.0.0
4391
+ */
4392
+ export const dedupeWith: {
4393
+ <S extends Iterable<any>>(
4394
+ isEquivalent: (self: ReadonlyArray.Infer<S>, that: ReadonlyArray.Infer<S>) => boolean
4395
+ ): (self: S) => ReadonlyArray.With<S, ReadonlyArray.Infer<S>>
4396
+ <A>(self: NonEmptyReadonlyArray<A>, isEquivalent: (self: A, that: A) => boolean): NonEmptyArray<A>
4397
+ <A>(self: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A>
4398
+ } = dual(
4399
+ 2,
4400
+ <A>(self: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A> => {
4401
+ const input = fromIterable(self)
4402
+ if (isReadonlyArrayNonEmpty(input)) {
4403
+ const out: NonEmptyArray<A> = [headNonEmpty(input)]
4404
+ const rest = tailNonEmpty(input)
4405
+ for (const r of rest) {
4406
+ if (out.every((a) => !isEquivalent(r, a))) {
4407
+ out.push(r)
4408
+ }
4409
+ }
4410
+ return out
4411
+ }
4412
+ return []
4413
+ }
4414
+ )
4415
+
4416
+ /**
4417
+ * Removes duplicates using `Equal.equivalence()`, preserving the order of the
4418
+ * first occurrence.
4419
+ *
4420
+ * **When to use**
4421
+ *
4422
+ * Use to remove repeated values from an iterable when Effect's default equality
4423
+ * is the right comparison, preserving the first occurrence.
4424
+ *
4425
+ * **Example** (Removing duplicates)
4426
+ *
4427
+ * ```ts
4428
+ * import { Array } from "effect"
4429
+ *
4430
+ * console.log(Array.dedupe([1, 2, 1, 3, 2, 4])) // [1, 2, 3, 4]
4431
+ * ```
4432
+ *
4433
+ * @see {@link dedupeWith} — use custom equality
4434
+ * @see {@link dedupeAdjacent} — only dedupes consecutive elements
4435
+ *
4436
+ * @category elements
4437
+ * @since 2.0.0
4438
+ */
4439
+ export const dedupe = <S extends Iterable<any>>(
4440
+ self: S
4441
+ ): S extends NonEmptyReadonlyArray<infer A> ? NonEmptyArray<A> : S extends Iterable<infer A> ? Array<A> : never =>
4442
+ dedupeWith(self, Equal.asEquivalence()) as any
4443
+
4444
+ /**
4445
+ * Removes consecutive duplicate elements using a custom equivalence.
4446
+ *
4447
+ * **When to use**
4448
+ *
4449
+ * Use when consecutive duplicates should be collapsed using a custom
4450
+ * equivalence, while equivalent values that appear later should remain in the
4451
+ * result.
4452
+ *
4453
+ * **Details**
4454
+ *
4455
+ * Non-adjacent duplicates are preserved.
4456
+ *
4457
+ * **Example** (Deduplicating adjacent elements)
4458
+ *
4459
+ * ```ts
4460
+ * import { Array } from "effect"
4461
+ *
4462
+ * console.log(Array.dedupeAdjacentWith([1, 1, 2, 2, 3, 3], (a, b) => a === b))
4463
+ * // [1, 2, 3]
4464
+ * ```
4465
+ *
4466
+ * @see {@link dedupeAdjacent} — uses default equality
4467
+ * @see {@link dedupeWith} — dedupes all duplicates, not just adjacent
4468
+ *
4469
+ * @category elements
4470
+ * @since 2.0.0
4471
+ */
4472
+ export const dedupeAdjacentWith: {
4473
+ <A>(isEquivalent: (self: A, that: A) => boolean): (self: Iterable<A>) => Array<A>
4474
+ <A>(self: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A>
4475
+ } = dual(2, <A>(self: Iterable<A>, isEquivalent: (self: A, that: A) => boolean): Array<A> => {
4476
+ const out: Array<A> = []
4477
+ let lastA: Option.Option<A> = Option.none()
4478
+ for (const a of self) {
4479
+ if (Option.isNone(lastA) || !isEquivalent(a, lastA.value)) {
4480
+ out.push(a)
4481
+ lastA = Option.some(a)
4482
+ }
4483
+ }
4484
+ return out
4485
+ })
4486
+
4487
+ /**
4488
+ * Removes consecutive duplicate elements using `Equal.equivalence()`.
4489
+ *
4490
+ * **When to use**
4491
+ *
4492
+ * Use when you need to collapse consecutive duplicates while preserving later
4493
+ * non-consecutive repeats, and the default equality is sufficient.
4494
+ *
4495
+ * **Example** (Removing adjacent duplicates)
4496
+ *
4497
+ * ```ts
4498
+ * import { Array } from "effect"
4499
+ *
4500
+ * console.log(Array.dedupeAdjacent([1, 1, 2, 2, 3, 3])) // [1, 2, 3]
4501
+ * ```
4502
+ *
4503
+ * @see {@link dedupeAdjacentWith} — use custom equality
4504
+ * @see {@link dedupe} — remove all duplicates
4505
+ *
4506
+ * @category elements
4507
+ * @since 2.0.0
4508
+ */
4509
+ export const dedupeAdjacent: <A>(self: Iterable<A>) => Array<A> = dedupeAdjacentWith(Equal.asEquivalence())
4510
+
4511
+ /**
4512
+ * Joins string elements with a separator.
4513
+ *
4514
+ * **Example** (Joining strings)
4515
+ *
4516
+ * ```ts
4517
+ * import { Array } from "effect"
4518
+ *
4519
+ * console.log(Array.join(["a", "b", "c"], "-")) // "a-b-c"
4520
+ * ```
4521
+ *
4522
+ * @see {@link intersperse} — insert separator elements without joining
4523
+ *
4524
+ * @category folding
4525
+ * @since 2.0.0
4526
+ */
4527
+ export const join: {
4528
+ (sep: string): (self: Iterable<string>) => string
4529
+ (self: Iterable<string>, sep: string): string
4530
+ } = dual(2, (self: Iterable<string>, sep: string): string => fromIterable(self).join(sep))
4531
+
4532
+ /**
4533
+ * Maps over an array while threading an accumulator through each step, returning both the final state and the mapped array.
4534
+ *
4535
+ * **When to use**
4536
+ *
4537
+ * Use when you need to map while threading state through each element and keep
4538
+ * the final state.
4539
+ *
4540
+ * **Details**
4541
+ *
4542
+ * Combines `map` and `reduce` in a single pass. The callback receives the
4543
+ * current state, element, and index, and returns `[nextState, mappedValue]`.
4544
+ * The result is `[finalState, mappedArray]`. This can be used in both
4545
+ * data-first and data-last style.
4546
+ *
4547
+ * **Example** (Running sum alongside mapped values)
4548
+ *
4549
+ * ```ts
4550
+ * import { Array } from "effect"
4551
+ *
4552
+ * const result = Array.mapAccum([1, 2, 3], 0, (acc, n) => [acc + n, acc + n])
4553
+ * console.log(result) // [6, [1, 3, 6]]
4554
+ * ```
4555
+ *
4556
+ * @see {@link scan} — when you only need the accumulated results (not the final state)
4557
+ * @see {@link reduce} — when you only need the final accumulated value
4558
+ *
4559
+ * @category folding
4560
+ * @since 2.0.0
4561
+ */
4562
+ export const mapAccum: {
4563
+ <S, A, B, I extends Iterable<A> = Iterable<A>>(
4564
+ s: S,
4565
+ f: (s: S, a: ReadonlyArray.Infer<I>, i: number) => readonly [S, B]
4566
+ ): (self: I) => [state: S, mappedArray: ReadonlyArray.With<I, B>]
4567
+ <S, A, B, I extends Iterable<A> = Iterable<A>>(
4568
+ self: I,
4569
+ s: S,
4570
+ f: (s: S, a: ReadonlyArray.Infer<I>, i: number) => readonly [S, B]
4571
+ ): [state: S, mappedArray: ReadonlyArray.With<I, B>]
4572
+ } = dual(
4573
+ 3,
4574
+ <S, A, B>(self: Iterable<A>, s: S, f: (s: S, a: A, i: number) => [S, B]): [state: S, mappedArray: Array<B>] => {
4575
+ let i = 0
4576
+ let s1 = s
4577
+ const out: Array<B> = []
4578
+ for (const a of self) {
4579
+ const r = f(s1, a, i)
4580
+ s1 = r[0]
4581
+ out.push(r[1])
4582
+ i++
4583
+ }
4584
+ return [s1, out]
4585
+ }
4586
+ )
4587
+
4588
+ /**
4589
+ * Computes the cartesian product of two arrays, applying a combiner to each pair.
4590
+ *
4591
+ * **When to use**
4592
+ *
4593
+ * Use to compute every combination from two arrays and immediately transform
4594
+ * each pair into a custom result.
4595
+ *
4596
+ * **Details**
4597
+ *
4598
+ * Produces every combination of an element from `self` with an element from
4599
+ * `that`, so the result length is `self.length * that.length`. Iteration visits
4600
+ * every element of `that` for each element of `self`.
4601
+ *
4602
+ * **Example** (Combining numbers and letters)
4603
+ *
4604
+ * ```ts
4605
+ * import { Array } from "effect"
4606
+ *
4607
+ * const result = Array.cartesianWith([1, 2], ["a", "b"], (a, b) => `${a}-${b}`)
4608
+ * console.log(result) // ["1-a", "1-b", "2-a", "2-b"]
4609
+ * ```
4610
+ *
4611
+ * @see {@link cartesian} for returning tuples instead of applying a combiner
4612
+ *
4613
+ * @category elements
4614
+ * @since 2.0.0
4615
+ */
4616
+ export const cartesianWith: {
4617
+ <A, B, C>(that: ReadonlyArray<B>, f: (a: A, b: B) => C): (self: ReadonlyArray<A>) => Array<C>
4618
+ <A, B, C>(self: ReadonlyArray<A>, that: ReadonlyArray<B>, f: (a: A, b: B) => C): Array<C>
4619
+ } = dual(
4620
+ 3,
4621
+ <A, B, C>(self: ReadonlyArray<A>, that: ReadonlyArray<B>, f: (a: A, b: B) => C): Array<C> =>
4622
+ flatMap(self, (a) => map(that, (b) => f(a, b)))
4623
+ )
4624
+
4625
+ /**
4626
+ * Computes the cartesian product of two arrays, returning all pairs as tuples.
4627
+ *
4628
+ * **When to use**
4629
+ *
4630
+ * Use when you need every `[a, b]` pair from two arrays as tuples.
4631
+ *
4632
+ * **Details**
4633
+ *
4634
+ * Produces every `[a, b]` combination of an element from `self` with an element
4635
+ * from `that`, so the result length is `self.length * that.length`.
4636
+ *
4637
+ * **Example** (Generating all pairs from two arrays)
4638
+ *
4639
+ * ```ts
4640
+ * import { Array } from "effect"
4641
+ *
4642
+ * const result = Array.cartesian([1, 2], ["a", "b"])
4643
+ * console.log(result) // [[1, "a"], [1, "b"], [2, "a"], [2, "b"]]
4644
+ * ```
4645
+ *
4646
+ * @see {@link cartesianWith} — apply a combiner to each pair
4647
+ *
4648
+ * @category elements
4649
+ * @since 2.0.0
4650
+ */
4651
+ export const cartesian: {
4652
+ <B>(that: ReadonlyArray<B>): <A>(self: ReadonlyArray<A>) => Array<[A, B]>
4653
+ <A, B>(self: ReadonlyArray<A>, that: ReadonlyArray<B>): Array<[A, B]>
4654
+ } = dual(
4655
+ 2,
4656
+ <A, B>(self: ReadonlyArray<A>, that: ReadonlyArray<B>): Array<[A, B]> => cartesianWith(self, that, (a, b) => [a, b])
4657
+ )
4658
+
4659
+ // -------------------------------------------------------------------------------------
4660
+ // do notation
4661
+ // -------------------------------------------------------------------------------------
4662
+
4663
+ /**
4664
+ * Provides the starting point for the "do simulation" — an array comprehension pattern.
4665
+ *
4666
+ * **When to use**
4667
+ *
4668
+ * Use when you want array-comprehension style code with do notation.
4669
+ *
4670
+ * **Details**
4671
+ *
4672
+ * Use {@link bind} to introduce array variables and {@link let_ let} for plain
4673
+ * values. Each `bind` produces the cartesian product of all bound variables,
4674
+ * like nested loops. Use `filter` and `map` in the pipeline to add conditions
4675
+ * and transformations.
4676
+ *
4677
+ * **Example** (Building array comprehensions with do notation)
4678
+ *
4679
+ * ```ts
4680
+ * import { Array, pipe } from "effect"
4681
+ *
4682
+ * const result = pipe(
4683
+ * Array.Do,
4684
+ * Array.bind("x", () => [1, 3, 5]),
4685
+ * Array.bind("y", () => [2, 4, 6]),
4686
+ * Array.filter(({ x, y }) => x < y),
4687
+ * Array.map(({ x, y }) => [x, y] as const)
4688
+ * )
4689
+ * console.log(result) // [[1, 2], [1, 4], [1, 6], [3, 4], [3, 6], [5, 6]]
4690
+ * ```
4691
+ *
4692
+ * @see {@link bind} — introduce an array variable into the scope
4693
+ * @see {@link bindTo} — start a pipeline by naming the first array
4694
+ * @see {@link let_ let} — introduce a plain computed value
4695
+ *
4696
+ * @category do notation
4697
+ * @since 3.2.0
4698
+ */
4699
+ export const Do: ReadonlyArray<{}> = of({})
4700
+
4701
+ /**
4702
+ * Adds a new array variable to a do-notation scope, producing the cartesian product with all previous bindings.
4703
+ *
4704
+ * **When to use**
4705
+ *
4706
+ * Use to add another array-producing binding to an `Array.Do` pipeline, pairing
4707
+ * each existing scope with every value returned by the callback.
4708
+ *
4709
+ * **Details**
4710
+ *
4711
+ * Each `bind` call adds a named property to the accumulated object. The
4712
+ * callback receives the current scope and must return an array. This is
4713
+ * equivalent to `flatMap` plus merging the new value into the scope object.
4714
+ *
4715
+ * **Example** (Binding two arrays)
4716
+ *
4717
+ * ```ts
4718
+ * import { Array, pipe } from "effect"
4719
+ *
4720
+ * const result = pipe(
4721
+ * Array.Do,
4722
+ * Array.bind("x", () => [1, 2]),
4723
+ * Array.bind("y", () => ["a", "b"])
4724
+ * )
4725
+ * console.log(result)
4726
+ * // [{ x: 1, y: "a" }, { x: 1, y: "b" }, { x: 2, y: "a" }, { x: 2, y: "b" }]
4727
+ * ```
4728
+ *
4729
+ * @see {@link Do} — start a do-notation pipeline
4730
+ * @see {@link bindTo} — name the first array in a pipeline
4731
+ * @see {@link let_ let} — add a plain computed value
4732
+ *
4733
+ * @category do notation
4734
+ * @since 3.2.0
4735
+ */
4736
+ export const bind: {
4737
+ <A extends object, N extends string, B>(
4738
+ tag: Exclude<N, keyof A>,
4739
+ f: (a: NoInfer<A>) => ReadonlyArray<B>
4740
+ ): (
4741
+ self: ReadonlyArray<A>
4742
+ ) => Array<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
4743
+ <A extends object, N extends string, B>(
4744
+ self: ReadonlyArray<A>,
4745
+ tag: Exclude<N, keyof A>,
4746
+ f: (a: NoInfer<A>) => ReadonlyArray<B>
4747
+ ): Array<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
4748
+ } = internalDoNotation.bind<ReadonlyArrayTypeLambda>(map, flatMap) as any
4749
+
4750
+ /**
4751
+ * Wraps each array element in an object with the given key, starting a do-notation scope.
4752
+ *
4753
+ * **When to use**
4754
+ *
4755
+ * Use when you already have an array and want to start a do-notation pipeline
4756
+ * by naming each element.
4757
+ *
4758
+ * **Details**
4759
+ *
4760
+ * Equivalent to `Array.map(self, (a) => ({ [tag]: a }))`. This is an
4761
+ * alternative to starting with `Do` plus `bind` when you already have an array.
4762
+ *
4763
+ * **Example** (Naming an existing array)
4764
+ *
4765
+ * ```ts
4766
+ * import { Array, pipe } from "effect"
4767
+ *
4768
+ * const result = pipe(
4769
+ * [1, 2, 3],
4770
+ * Array.bindTo("x")
4771
+ * )
4772
+ * console.log(result) // [{ x: 1 }, { x: 2 }, { x: 3 }]
4773
+ * ```
4774
+ *
4775
+ * @see {@link Do} — start with an empty scope
4776
+ * @see {@link bind} — add another array variable to the scope
4777
+ *
4778
+ * @category do notation
4779
+ * @since 3.2.0
4780
+ */
4781
+ export const bindTo: {
4782
+ <N extends string>(tag: N): <A>(self: ReadonlyArray<A>) => Array<{ [K in N]: A }>
4783
+ <A, N extends string>(self: ReadonlyArray<A>, tag: N): Array<{ [K in N]: A }>
4784
+ } = internalDoNotation.bindTo<ReadonlyArrayTypeLambda>(map) as any
4785
+
4786
+ const let_: {
4787
+ <N extends string, B, A extends object>(
4788
+ tag: Exclude<N, keyof A>,
4789
+ f: (a: NoInfer<A>) => B
4790
+ ): (self: ReadonlyArray<A>) => Array<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
4791
+ <N extends string, A extends object, B>(
4792
+ self: ReadonlyArray<A>,
4793
+ tag: Exclude<N, keyof A>,
4794
+ f: (a: NoInfer<A>) => B
4795
+ ): Array<{ [K in N | keyof A]: K extends keyof A ? A[K] : B }>
4796
+ } = internalDoNotation.let_<ReadonlyArrayTypeLambda>(map) as any
4797
+
4798
+ export {
4799
+ /**
4800
+ * Adds a computed plain value to the do-notation scope without introducing a new array dimension.
4801
+ *
4802
+ * **When to use**
4803
+ *
4804
+ * Use when each do-notation branch needs a derived field from the current
4805
+ * bindings without multiplying the number of branches.
4806
+ *
4807
+ * **Details**
4808
+ *
4809
+ * Unlike `bind`, the callback returns a single value instead of an array, so
4810
+ * no cartesian product occurs. Use this for derived or intermediate values
4811
+ * that depend on previously bound variables.
4812
+ *
4813
+ * **Example** (Adding a computed value)
4814
+ *
4815
+ * ```ts
4816
+ * import { Array, pipe } from "effect"
4817
+ *
4818
+ * const result = pipe(
4819
+ * Array.Do,
4820
+ * Array.bind("x", () => [1, 2, 3]),
4821
+ * Array.let("doubled", ({ x }) => x * 2)
4822
+ * )
4823
+ * console.log(result)
4824
+ * // [{ x: 1, doubled: 2 }, { x: 2, doubled: 4 }, { x: 3, doubled: 6 }]
4825
+ * ```
4826
+ *
4827
+ * @see {@link Do} — start a do-notation pipeline
4828
+ * @see {@link bind} — introduce an array variable (produces cartesian product)
4829
+ *
4830
+ * @category do notation
4831
+ * @since 3.2.0
4832
+ */
4833
+ let_ as let
4834
+ }
4835
+
4836
+ const reducer = Reducer.make((a, b) => a.concat(b), [] as any)
4837
+
4838
+ /**
4839
+ * Returns a `Reducer` that combines `ReadonlyArray` values by concatenation.
4840
+ *
4841
+ * @see {@link makeReducerConcat} — mutable `Array` variant
4842
+ *
4843
+ * @category folding
4844
+ * @since 4.0.0
4845
+ */
4846
+ export function getReadonlyReducerConcat<A>(): Reducer.Reducer<ReadonlyArray<A>> {
4847
+ return reducer
4848
+ }
4849
+
4850
+ /**
4851
+ * Returns a `Reducer` that combines `Array` values by concatenation.
4852
+ *
4853
+ * @see {@link getReadonlyReducerConcat} — readonly variant
4854
+ *
4855
+ * @category folding
4856
+ * @since 4.0.0
4857
+ */
4858
+ export function makeReducerConcat<A>(): Reducer.Reducer<Array<A>> {
4859
+ return reducer
4860
+ }
4861
+
4862
+ /**
4863
+ * Computes the number of elements in an iterable that satisfy a predicate.
4864
+ *
4865
+ * **When to use**
4866
+ *
4867
+ * Use when you need to count how many elements of an iterable satisfy a
4868
+ * predicate.
4869
+ *
4870
+ * **Details**
4871
+ *
4872
+ * The predicate receives both the element and its index. Empty iterables return
4873
+ * `0`.
4874
+ *
4875
+ * **Example** (Counting even numbers)
4876
+ *
4877
+ * ```ts
4878
+ * import { Array } from "effect"
4879
+ *
4880
+ * const result = Array.countBy([1, 2, 3, 4, 5], (n) => n % 2 === 0)
4881
+ * console.log(result) // 2
4882
+ * ```
4883
+ *
4884
+ * @see {@link filter} — when you need the matching elements, not just the count
4885
+ *
4886
+ * @category folding
4887
+ * @since 3.16.0
4888
+ */
4889
+ export const countBy: {
4890
+ <A>(predicate: (a: NoInfer<A>, i: number) => boolean): (self: Iterable<A>) => number
4891
+ <A>(self: Iterable<A>, predicate: (a: A, i: number) => boolean): number
4892
+ } = dual(
4893
+ 2,
4894
+ <A>(
4895
+ self: Iterable<A>,
4896
+ f: (a: A, i: number) => boolean
4897
+ ): number => {
4898
+ let count = 0
4899
+ const as = fromIterable(self)
4900
+ for (let i = 0; i < as.length; i++) {
4901
+ const a = as[i]
4902
+ if (f(a, i)) {
4903
+ count++
4904
+ }
4905
+ }
4906
+ return count
4907
+ }
4908
+ )