@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,3903 @@
1
+ /**
2
+ * Represents Effect schemas as runtime trees.
3
+ *
4
+ * Every `Schema` has an AST made from nodes for declarations, primitives,
5
+ * literals, arrays, objects, unions, suspended schemas, checks, annotations,
6
+ * encoding links, and parsing context. Most users work with the higher-level
7
+ * `Schema` module. Use `SchemaAST` when you need to inspect schema nodes, build
8
+ * ASTs programmatically, change encoded or decoded views, collect issues, or
9
+ * run low-level schema checks.
10
+ *
11
+ * @since 4.0.0
12
+ */
13
+
14
+ import * as Arr from "./Array.ts"
15
+ import * as Cause from "./Cause.ts"
16
+ import type * as Combiner from "./Combiner.ts"
17
+ import * as Effect from "./Effect.ts"
18
+ import * as Exit from "./Exit.ts"
19
+ import { format, formatPropertyKey } from "./Formatter.ts"
20
+ import { memoize } from "./Function.ts"
21
+ import { effectIsExit, iterateEager } from "./internal/effect.ts"
22
+ import * as internalRecord from "./internal/record.ts"
23
+ import * as InternalAnnotations from "./internal/schema/annotations.ts"
24
+ import * as InternalSchemaCause from "./internal/schema/cause.ts"
25
+ import * as Option from "./Option.ts"
26
+ import * as Pipeable from "./Pipeable.ts"
27
+ import * as Predicate from "./Predicate.ts"
28
+ import * as RegEx from "./RegExp.ts"
29
+ import * as Result from "./Result.ts"
30
+ import type * as Schema from "./Schema.ts"
31
+ import * as SchemaGetter from "./SchemaGetter.ts"
32
+ import * as SchemaIssue from "./SchemaIssue.ts"
33
+ import type * as SchemaParser from "./SchemaParser.ts"
34
+ import * as SchemaTransformation from "./SchemaTransformation.ts"
35
+ import type * as FastCheck from "./testing/FastCheck.ts"
36
+
37
+ /**
38
+ * Discriminated union of all AST node types.
39
+ *
40
+ * **Details**
41
+ *
42
+ * Every `Schema` has an `.ast` property of this type. Use the guard functions
43
+ * ({@link isString}, {@link isObjects}, etc.) to narrow to a specific variant,
44
+ * then access variant-specific fields.
45
+ *
46
+ * - All variants share the {@link Base} fields: `annotations`, `checks`,
47
+ * `encoding`, `context`.
48
+ * - Discriminate on the `_tag` field (e.g. `"String"`, `"Objects"`, `"Union"`).
49
+ *
50
+ * @see {@link Base}
51
+ * @see {@link isAST}
52
+ * @category models
53
+ * @since 3.10.0
54
+ */
55
+ export type AST =
56
+ | Declaration
57
+ | Null
58
+ | Undefined
59
+ | Void
60
+ | Never
61
+ | Unknown
62
+ | Any
63
+ | String
64
+ | Number
65
+ | Boolean
66
+ | BigInt
67
+ | Symbol
68
+ | Literal
69
+ | UniqueSymbol
70
+ | ObjectKeyword
71
+ | Enum
72
+ | TemplateLiteral
73
+ | Arrays
74
+ | Objects
75
+ | Union
76
+ | Suspend
77
+
78
+ function makeGuard<T extends AST["_tag"]>(tag: T) {
79
+ return (ast: AST): ast is Extract<AST, { _tag: T }> => ast._tag === tag
80
+ }
81
+
82
+ /**
83
+ * Returns `true` if the value is an {@link AST} node (any variant).
84
+ *
85
+ * **Details**
86
+ *
87
+ * Uses the internal `TypeId` brand to distinguish AST nodes from arbitrary
88
+ * objects.
89
+ *
90
+ * @see {@link AST}
91
+ * @category guards
92
+ * @since 4.0.0
93
+ */
94
+ export function isAST(u: unknown): u is AST {
95
+ return Predicate.hasProperty(u, TypeId) && u[TypeId] === TypeId
96
+ }
97
+
98
+ /**
99
+ * Narrows an {@link AST} to {@link Declaration}.
100
+ *
101
+ * **When to use**
102
+ *
103
+ * Use to recognize declaration AST nodes before running declaration-specific
104
+ * handling.
105
+ *
106
+ * @see {@link Declaration} for the AST node type narrowed by this guard
107
+ *
108
+ * @category guards
109
+ * @since 3.10.0
110
+ */
111
+ export const isDeclaration = makeGuard("Declaration")
112
+
113
+ /**
114
+ * Narrows an {@link AST} to {@link Null}.
115
+ *
116
+ * **When to use**
117
+ *
118
+ * Use to recognize an AST node that represents exactly the `null` literal when
119
+ * inspecting, traversing, or transforming schema ASTs.
120
+ *
121
+ * @see {@link Null} for the AST node type narrowed by this guard
122
+ * @see {@link null_ null} for the singleton `Null` AST instance
123
+ * @see {@link isLiteral} for exact primitive literal AST nodes
124
+ *
125
+ * @category guards
126
+ * @since 4.0.0
127
+ */
128
+ export const isNull = makeGuard("Null")
129
+
130
+ /**
131
+ * Narrows an {@link AST} to {@link Undefined}.
132
+ *
133
+ * **When to use**
134
+ *
135
+ * Use to identify AST nodes that represent exactly the JavaScript `undefined`
136
+ * value.
137
+ *
138
+ * @see {@link isVoid} for narrowing AST nodes that represent TypeScript `void` instead of exact `undefined`
139
+ *
140
+ * @category guards
141
+ * @since 4.0.0
142
+ */
143
+ export const isUndefined = makeGuard("Undefined")
144
+
145
+ /**
146
+ * Narrows an {@link AST} to {@link Void}.
147
+ *
148
+ * **When to use**
149
+ *
150
+ * Use to identify AST nodes that represent the TypeScript `void` type before
151
+ * handling `Void`-specific schema behavior.
152
+ *
153
+ * @see {@link isUndefined} for narrowing AST nodes that represent the literal `undefined` value instead of TypeScript `void`
154
+ *
155
+ * @category guards
156
+ * @since 4.0.0
157
+ */
158
+ export const isVoid = makeGuard("Void")
159
+
160
+ /**
161
+ * Narrows an {@link AST} to {@link Never}.
162
+ *
163
+ * **When to use**
164
+ *
165
+ * Use to detect the AST node for a schema that can never match before handling
166
+ * other schema variants.
167
+ *
168
+ * @see {@link Never} for the AST node type narrowed by this guard
169
+ * @see {@link never} for the singleton `Never` AST instance
170
+ *
171
+ * @category guards
172
+ * @since 4.0.0
173
+ */
174
+ export const isNever = makeGuard("Never")
175
+
176
+ /**
177
+ * Narrows an {@link AST} to {@link Unknown}.
178
+ *
179
+ * **When to use**
180
+ *
181
+ * Use when you need to inspect a schema AST and handle the `Unknown` node
182
+ * variant specifically.
183
+ *
184
+ * @see {@link isAny} for the guard for the `Any` node, whose parsed result is typed as `any` rather than `unknown`
185
+ *
186
+ * @category guards
187
+ * @since 4.0.0
188
+ */
189
+ export const isUnknown = makeGuard("Unknown")
190
+
191
+ /**
192
+ * Narrows an {@link AST} to {@link Any}.
193
+ *
194
+ * **When to use**
195
+ *
196
+ * Use when you need to inspect a schema AST and handle the `Any` node
197
+ * variant specifically.
198
+ *
199
+ * @see {@link isUnknown} for the guard for the `Unknown` node, whose parsed result is typed as `unknown` rather than `any`
200
+ *
201
+ * @category guards
202
+ * @since 4.0.0
203
+ */
204
+ export const isAny = makeGuard("Any")
205
+
206
+ /**
207
+ * Narrows an {@link AST} to {@link String}.
208
+ *
209
+ * **When to use**
210
+ *
211
+ * Use to detect schema AST nodes that match any string value while inspecting
212
+ * or transforming a Schema AST.
213
+ *
214
+ * @see {@link String} for the AST node class narrowed by this guard
215
+ * @see {@link string} for the singleton `String` AST instance
216
+ * @see {@link isLiteral} for exact primitive literal AST nodes, including exact string literals
217
+ *
218
+ * @category guards
219
+ * @since 4.0.0
220
+ */
221
+ export const isString = makeGuard("String")
222
+
223
+ /**
224
+ * Narrows an {@link AST} to {@link Number}.
225
+ *
226
+ * **When to use**
227
+ *
228
+ * Use to detect `Number` AST nodes while inspecting, traversing, or transforming
229
+ * schema ASTs.
230
+ *
231
+ * @category guards
232
+ * @since 4.0.0
233
+ */
234
+ export const isNumber = makeGuard("Number")
235
+
236
+ /**
237
+ * Narrows an {@link AST} to {@link Boolean}.
238
+ *
239
+ * **When to use**
240
+ *
241
+ * Use to identify the `Boolean` AST variant while inspecting, traversing, or
242
+ * transforming schema definitions.
243
+ *
244
+ * @see {@link Boolean} for the AST node type matched by this guard
245
+ * @see {@link boolean} for the singleton instance to use when constructing a boolean AST directly
246
+ *
247
+ * @category guards
248
+ * @since 4.0.0
249
+ */
250
+ export const isBoolean = makeGuard("Boolean")
251
+
252
+ /**
253
+ * Narrows an {@link AST} to {@link BigInt}.
254
+ *
255
+ * **When to use**
256
+ *
257
+ * Use to identify bigint AST nodes while inspecting or transforming schema ASTs.
258
+ *
259
+ * @see {@link BigInt} for the AST node matched by this guard
260
+ * @see {@link bigInt} for the singleton instance; use `isBigInt` when narrowing an existing `AST` value
261
+ *
262
+ * @category guards
263
+ * @since 4.0.0
264
+ */
265
+ export const isBigInt = makeGuard("BigInt")
266
+
267
+ /**
268
+ * Narrows an {@link AST} to {@link Symbol}.
269
+ *
270
+ * **When to use**
271
+ *
272
+ * Use to narrow an `AST` node before handling the `Symbol` variant for schemas
273
+ * that accept any JavaScript symbol value.
274
+ *
275
+ * @see {@link isUniqueSymbol} for the sibling guard that narrows the `UniqueSymbol` variant for one exact symbol value
276
+ *
277
+ * @category guards
278
+ * @since 4.0.0
279
+ */
280
+ export const isSymbol = makeGuard("Symbol")
281
+
282
+ /**
283
+ * Narrows an {@link AST} to {@link Literal}.
284
+ *
285
+ * **When to use**
286
+ *
287
+ * Use to recognize exact string, number, boolean, or bigint literal AST nodes.
288
+ *
289
+ * @see {@link Literal} for the AST node type narrowed by this guard
290
+ * @see {@link LiteralValue} for the values stored by literal nodes
291
+ *
292
+ * @category guards
293
+ * @since 3.10.0
294
+ */
295
+ export const isLiteral = makeGuard("Literal")
296
+
297
+ /**
298
+ * Narrows an {@link AST} to {@link UniqueSymbol}.
299
+ *
300
+ * @category guards
301
+ * @since 3.10.0
302
+ */
303
+ export const isUniqueSymbol = makeGuard("UniqueSymbol")
304
+
305
+ /**
306
+ * Narrows an {@link AST} to {@link ObjectKeyword}.
307
+ *
308
+ * **When to use**
309
+ *
310
+ * Use to identify the AST node for the TypeScript `object` keyword when
311
+ * inspecting or transforming a Schema AST.
312
+ *
313
+ * @see {@link ObjectKeyword} for the AST node matched by this guard
314
+ * @see {@link objectKeyword} for the singleton `ObjectKeyword` AST instance
315
+ * @see {@link isObjects} for struct and record AST nodes
316
+ *
317
+ * @category guards
318
+ * @since 3.10.0
319
+ */
320
+ export const isObjectKeyword = makeGuard("ObjectKeyword")
321
+
322
+ /**
323
+ * Narrows an {@link AST} to {@link Enum}.
324
+ *
325
+ * **When to use**
326
+ *
327
+ * Use to recognize enum AST nodes before reading enum cases or running
328
+ * enum-specific handling.
329
+ *
330
+ * @see {@link Enum} for the AST node type narrowed by this guard
331
+ *
332
+ * @category guards
333
+ * @since 4.0.0
334
+ */
335
+ export const isEnum = makeGuard("Enum")
336
+
337
+ /**
338
+ * Narrows an {@link AST} to {@link TemplateLiteral}.
339
+ *
340
+ * @category guards
341
+ * @since 3.10.0
342
+ */
343
+ export const isTemplateLiteral = makeGuard("TemplateLiteral")
344
+
345
+ /**
346
+ * Narrows an {@link AST} to {@link Arrays}.
347
+ *
348
+ * **When to use**
349
+ *
350
+ * Use to recognize array-like AST nodes before reading their element, rest, or
351
+ * mutability metadata.
352
+ *
353
+ * @see {@link Arrays} for the AST node type narrowed by this guard
354
+ *
355
+ * @category guards
356
+ * @since 4.0.0
357
+ */
358
+ export const isArrays = makeGuard("Arrays")
359
+
360
+ /**
361
+ * Narrows an {@link AST} to {@link Objects}.
362
+ *
363
+ * @category guards
364
+ * @since 4.0.0
365
+ */
366
+ export const isObjects = makeGuard("Objects")
367
+
368
+ /**
369
+ * Narrows an {@link AST} to {@link Union}.
370
+ *
371
+ * @category guards
372
+ * @since 3.10.0
373
+ */
374
+ export const isUnion = makeGuard("Union")
375
+
376
+ /**
377
+ * Narrows an {@link AST} to {@link Suspend}.
378
+ *
379
+ * @category guards
380
+ * @since 3.10.0
381
+ */
382
+ export const isSuspend = makeGuard("Suspend")
383
+
384
+ /**
385
+ * Represents a single step in an {@link Encoding} chain.
386
+ *
387
+ * **Details**
388
+ *
389
+ * A link pairs a target {@link AST} with a `Transformation` or `Middleware`
390
+ * that converts values between the current node and the target.
391
+ *
392
+ * - `to` — the AST node on the other side of this transformation step.
393
+ * - `transformation` — the bidirectional conversion logic (decode/encode).
394
+ *
395
+ * Links are composed into a non-empty array ({@link Encoding}) attached to
396
+ * AST nodes that have a different encoded representation.
397
+ *
398
+ * @see {@link Encoding}
399
+ * @see {@link decodeTo}
400
+ * @category models
401
+ * @since 4.0.0
402
+ */
403
+ export class Link {
404
+ readonly to: AST
405
+ readonly transformation:
406
+ | SchemaTransformation.Transformation<any, any, any, any>
407
+ | SchemaTransformation.Middleware<any, any, any, any, any, any>
408
+
409
+ constructor(
410
+ to: AST,
411
+ transformation:
412
+ | SchemaTransformation.Transformation<any, any, any, any>
413
+ | SchemaTransformation.Middleware<any, any, any, any, any, any>
414
+ ) {
415
+ this.to = to
416
+ this.transformation = transformation
417
+ }
418
+ }
419
+
420
+ /**
421
+ * A non-empty chain of {@link Link} values representing the transformation
422
+ * steps between a schema's decoded (type) form and its encoded (wire) form.
423
+ *
424
+ * **Details**
425
+ *
426
+ * Stored on {@link Base.encoding}. When `undefined`, the node has no
427
+ * encoding transformation (type and encoded forms are identical).
428
+ *
429
+ * @see {@link Link}
430
+ * @see {@link toEncoded}
431
+ * @category models
432
+ * @since 4.0.0
433
+ */
434
+ export type Encoding = readonly [Link, ...Array<Link>]
435
+
436
+ /**
437
+ * Options that control schema parsing, validation, transformation, and output behavior.
438
+ *
439
+ * **Details**
440
+ *
441
+ * Pass to `Schema.decodeUnknown`, `Schema.encode`, and related APIs to customize
442
+ * error reporting, excess property handling, output key ordering, check
443
+ * execution, and asynchronous parser concurrency.
444
+ *
445
+ * - `errors` — `"first"` (default) stops at the first error; `"all"` collects
446
+ * every error.
447
+ * - `onExcessProperty` — `"ignore"` (default) strips unknown object keys;
448
+ * `"error"` fails; `"preserve"` keeps them.
449
+ * - `propertyOrder` — `"none"` (default) lets the system choose key order;
450
+ * `"original"` preserves input key order.
451
+ * - `disableChecks` — skips validation checks while still applying defaults and
452
+ * transformations.
453
+ * - `concurrency` — maximum number of async parse effects to run concurrently;
454
+ * defaults to `1`, or use `"unbounded"`.
455
+ *
456
+ * @category options
457
+ * @since 3.10.0
458
+ */
459
+ export interface ParseOptions {
460
+ /**
461
+ * Controls how many parsing errors are reported.
462
+ *
463
+ * **Details**
464
+ *
465
+ * The default, `"first"`, stops at the first error. Set the option to `"all"`
466
+ * to collect every parsing error, which can help with debugging or with
467
+ * presenting more complete error messages to a user.
468
+ *
469
+ * @default "first"
470
+ */
471
+ readonly errors?: "first" | "all" | undefined
472
+
473
+ /**
474
+ * Controls how object parsing handles keys that are not declared by the schema.
475
+ *
476
+ * **Details**
477
+ *
478
+ * The default, `"ignore"`, strips unspecified properties from the output. Use
479
+ * `"error"` to fail when an excess property is present, or `"preserve"` to
480
+ * keep excess properties in the output.
481
+ *
482
+ * @default "ignore"
483
+ */
484
+ readonly onExcessProperty?: "ignore" | "error" | "preserve" | undefined
485
+
486
+ /**
487
+ * The `propertyOrder` option provides control over the order of object fields
488
+ * in the output. This feature is useful when the sequence of keys is
489
+ * important for the consuming processes or when maintaining the input order
490
+ * enhances readability and usability.
491
+ *
492
+ * **Details**
493
+ *
494
+ * By default, the `propertyOrder` option is set to `"none"`. This means that
495
+ * the internal system decides the order of keys to optimize parsing speed.
496
+ *
497
+ * Setting `propertyOrder` to `"original"` ensures that the keys are ordered
498
+ * as they appear in the input during the decoding/encoding process.
499
+ *
500
+ * **Gotchas**
501
+ *
502
+ * The key order for `"none"` should not be considered stable and may change
503
+ * in future updates without notice.
504
+ *
505
+ * @default "none"
506
+ */
507
+ readonly propertyOrder?: "none" | "original" | undefined
508
+
509
+ /**
510
+ * Whether to disable checks while still applying defaults and
511
+ * transformations.
512
+ */
513
+ readonly disableChecks?: boolean | undefined
514
+
515
+ /**
516
+ * The maximum number of async effects to run concurrently.
517
+ *
518
+ * @default 1
519
+ */
520
+ readonly concurrency?: number | "unbounded" | undefined
521
+ }
522
+
523
+ /** @internal */
524
+ export const defaultParseOptions: ParseOptions = {}
525
+
526
+ /**
527
+ * Represents per-property metadata attached to AST nodes via {@link Base.context}.
528
+ *
529
+ * **Details**
530
+ *
531
+ * Tracks whether a property key is optional, mutable, has a constructor
532
+ * default, or carries key-level annotations. Typically set by helpers like
533
+ * {@link optionalKey} and `Schema.mutableKey`.
534
+ *
535
+ * - `isOptional` — the property key may be absent from the input.
536
+ * - `isMutable` — the property is `readonly` when `false`.
537
+ * - `defaultValue` — an {@link Encoding} applied during construction to
538
+ * supply missing values.
539
+ * - `annotations` — key-level annotations (e.g. description of the key
540
+ * itself).
541
+ *
542
+ * @see {@link optionalKey}
543
+ * @see {@link isOptional}
544
+ * @category models
545
+ * @since 4.0.0
546
+ */
547
+ export class Context {
548
+ readonly isOptional: boolean
549
+ readonly isMutable: boolean
550
+ /** Used for constructor default values (e.g. `withConstructorDefault` API) */
551
+ readonly defaultValue: Encoding | undefined
552
+ readonly annotations: Schema.Annotations.Key<unknown> | undefined
553
+
554
+ constructor(
555
+ isOptional: boolean,
556
+ isMutable: boolean,
557
+ /** Used for constructor default values (e.g. `withConstructorDefault` API) */
558
+ defaultValue: Encoding | undefined = undefined,
559
+ annotations: Schema.Annotations.Key<unknown> | undefined = undefined
560
+ ) {
561
+ this.isOptional = isOptional
562
+ this.isMutable = isMutable
563
+ this.defaultValue = defaultValue
564
+ this.annotations = annotations
565
+ }
566
+ }
567
+
568
+ /**
569
+ * Non-empty array of validation {@link Check} values attached to an AST node
570
+ * via {@link Base.checks}.
571
+ *
572
+ * **Details**
573
+ *
574
+ * Checks are run after basic type matching succeeds. They represent
575
+ * refinements like `minLength`, `pattern`, `int`, etc.
576
+ *
577
+ * @see {@link Check}
578
+ * @see {@link Filter}
579
+ * @see {@link FilterGroup}
580
+ * @category models
581
+ * @since 4.0.0
582
+ */
583
+ export type Checks = readonly [Check<any>, ...Array<Check<any>>]
584
+
585
+ const TypeId = "~effect/Schema"
586
+
587
+ /**
588
+ * Represents the abstract base class for all {@link AST} node variants.
589
+ *
590
+ * **Details**
591
+ *
592
+ * Every AST node extends `Base` and inherits these fields:
593
+ *
594
+ * - `annotations` — user-supplied metadata (identifier, title, description,
595
+ * arbitrary keys).
596
+ * - `checks` — optional {@link Checks} for post-type-match validation.
597
+ * - `encoding` — optional {@link Encoding} chain for type ↔ wire
598
+ * transformations.
599
+ * - `context` — optional {@link Context} for per-property metadata.
600
+ *
601
+ * Subclasses add a `_tag` discriminant and variant-specific data.
602
+ *
603
+ * @see {@link AST}
604
+ * @category models
605
+ * @since 4.0.0
606
+ */
607
+ export abstract class Base {
608
+ readonly [TypeId] = TypeId
609
+ abstract readonly _tag: string
610
+ readonly annotations: Schema.Annotations.Annotations | undefined
611
+ readonly checks: Checks | undefined
612
+ readonly encoding: Encoding | undefined
613
+ readonly context: Context | undefined
614
+
615
+ constructor(
616
+ annotations: Schema.Annotations.Annotations | undefined = undefined,
617
+ checks: Checks | undefined = undefined,
618
+ encoding: Encoding | undefined = undefined,
619
+ context: Context | undefined = undefined
620
+ ) {
621
+ this.annotations = annotations
622
+ this.checks = checks
623
+ this.encoding = encoding
624
+ this.context = context
625
+ }
626
+ toString() {
627
+ return `<${this._tag}>`
628
+ }
629
+ }
630
+
631
+ /**
632
+ * AST node for user-defined opaque types with custom parsing logic.
633
+ *
634
+ * **When to use**
635
+ *
636
+ * Use when you need a custom schema AST node because none of the built-in
637
+ * nodes fit.
638
+ *
639
+ * **Details**
640
+ *
641
+ * - `typeParameters` — inner schemas this declaration is parameterized over
642
+ * (e.g. the element type for a custom collection).
643
+ * - `run` — factory that receives `typeParameters` and returns a parser that
644
+ * validates or transforms raw input.
645
+ *
646
+ * @see {@link isDeclaration}
647
+ * @category models
648
+ * @since 3.10.0
649
+ */
650
+ export class Declaration extends Base {
651
+ readonly _tag = "Declaration"
652
+ readonly typeParameters: ReadonlyArray<AST>
653
+ readonly run: (
654
+ typeParameters: ReadonlyArray<AST>
655
+ ) => (input: unknown, self: Declaration, options: ParseOptions) => Effect.Effect<any, SchemaIssue.Issue, any>
656
+ readonly encodingChecks: Checks | undefined
657
+
658
+ constructor(
659
+ typeParameters: ReadonlyArray<AST>,
660
+ run: (
661
+ typeParameters: ReadonlyArray<AST>
662
+ ) => (input: unknown, self: Declaration, options: ParseOptions) => Effect.Effect<any, SchemaIssue.Issue, any>,
663
+ annotations?: Schema.Annotations.Annotations,
664
+ checks?: Checks,
665
+ encoding?: Encoding,
666
+ context?: Context,
667
+ encodingChecks?: Checks
668
+ ) {
669
+ super(annotations, checks, encoding, context)
670
+ this.typeParameters = typeParameters
671
+ this.run = run
672
+ this.encodingChecks = encodingChecks
673
+ }
674
+ /** @internal */
675
+ getParser(): SchemaParser.Parser {
676
+ const run = this.run(this.typeParameters)
677
+ return (oinput, options) => {
678
+ if (Option.isNone(oinput)) return Effect.succeedNone
679
+ return Effect.mapEager(run(oinput.value, this, options), Option.some)
680
+ }
681
+ }
682
+ private rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
683
+ const tps = mapOrSame(this.typeParameters, recur)
684
+ return tps === this.typeParameters ?
685
+ this :
686
+ new Declaration(tps, this.run, this.annotations, checks, undefined, this.context, encodingChecks)
687
+ }
688
+ /** @internal */
689
+ recur(recur: (ast: AST) => AST) {
690
+ return this.rebuild(recur, this.checks, this.encodingChecks)
691
+ }
692
+ /** @internal */
693
+ flip(recur: (ast: AST) => AST) {
694
+ return this.rebuild(recur, this.encodingChecks, this.checks)
695
+ }
696
+ /** @internal */
697
+ getExpected(): string {
698
+ const expected = this.annotations?.expected
699
+ if (typeof expected === "string") return expected
700
+ return "<Declaration>"
701
+ }
702
+ }
703
+
704
+ /**
705
+ * AST node matching the `null` literal value.
706
+ *
707
+ * **Details**
708
+ *
709
+ * Parsing succeeds only when the input is exactly `null`.
710
+ *
711
+ * @see {@link null_ null}
712
+ * @see {@link isNull}
713
+ * @category models
714
+ * @since 4.0.0
715
+ */
716
+ export class Null extends Base {
717
+ readonly _tag = "Null"
718
+ /** @internal */
719
+ getParser() {
720
+ return fromConst(this, null)
721
+ }
722
+ /** @internal */
723
+ getExpected(): string {
724
+ return "null"
725
+ }
726
+ }
727
+
728
+ const null_ = new Null()
729
+ export {
730
+ /**
731
+ * Provides the singleton {@link Null} AST instance.
732
+ *
733
+ * **When to use**
734
+ *
735
+ * Use when you need the shared AST node for exact null values while inspecting
736
+ * or constructing schema ASTs.
737
+ *
738
+ * @category constants
739
+ * @since 4.0.0
740
+ */
741
+ null_ as null
742
+ }
743
+
744
+ /**
745
+ * AST node matching the `undefined` value.
746
+ *
747
+ * **Details**
748
+ *
749
+ * Parsing succeeds only when the input is exactly `undefined`.
750
+ *
751
+ * @see {@link undefined}
752
+ * @see {@link isUndefined}
753
+ * @category models
754
+ * @since 4.0.0
755
+ */
756
+ export class Undefined extends Base {
757
+ readonly _tag = "Undefined"
758
+ /** @internal */
759
+ getParser() {
760
+ return fromConst(this, undefined)
761
+ }
762
+ /** @internal */
763
+ toCodecJson(): AST {
764
+ return replaceEncoding(this, [undefinedToNull])
765
+ }
766
+ /** @internal */
767
+ getExpected(): string {
768
+ return "undefined"
769
+ }
770
+ }
771
+
772
+ const undefinedToNull = new Link(
773
+ null_,
774
+ new SchemaTransformation.Transformation(
775
+ SchemaGetter.transform(() => undefined),
776
+ SchemaGetter.transform(() => null)
777
+ )
778
+ )
779
+
780
+ const undefined_ = new Undefined()
781
+ export {
782
+ /**
783
+ * Provides the singleton {@link Undefined} AST instance.
784
+ *
785
+ * **When to use**
786
+ *
787
+ * Use when you need the shared AST node for exact undefined values while
788
+ * inspecting or constructing schema ASTs.
789
+ *
790
+ * @category constants
791
+ * @since 4.0.0
792
+ */
793
+ undefined_ as undefined
794
+ }
795
+
796
+ /**
797
+ * AST node matching the `void` type (accepts `undefined` at runtime).
798
+ *
799
+ * **Details**
800
+ *
801
+ * Behaves like {@link Undefined} for parsing but represents the TypeScript
802
+ * `void` type semantically.
803
+ *
804
+ * @see {@link void_ void}
805
+ * @see {@link isVoid}
806
+ * @category models
807
+ * @since 4.0.0
808
+ */
809
+ export class Void extends Base {
810
+ readonly _tag = "Void"
811
+ /** @internal */
812
+ getParser() {
813
+ return fromConst(this, undefined)
814
+ }
815
+ /** @internal */
816
+ toCodecJson(): AST {
817
+ return replaceEncoding(this, [undefinedToNull])
818
+ }
819
+ /** @internal */
820
+ getExpected(): string {
821
+ return "void"
822
+ }
823
+ }
824
+
825
+ const void_ = new Void()
826
+ export {
827
+ /**
828
+ * Provides the singleton {@link Void} AST instance.
829
+ *
830
+ * **When to use**
831
+ *
832
+ * Use when constructing or comparing AST nodes that represent the TypeScript
833
+ * `void` type and accept `undefined` at runtime.
834
+ *
835
+ * @see {@link Void} for the AST node class
836
+ * @see {@link undefined} for the sibling AST singleton that matches exactly `undefined`
837
+ * @see {@link isVoid} for narrowing an AST to a `Void` node
838
+ *
839
+ * @category constructors
840
+ * @since 4.0.0
841
+ */
842
+ void_ as void
843
+ }
844
+
845
+ /**
846
+ * AST node representing the `never` type — no value matches.
847
+ *
848
+ * **Details**
849
+ *
850
+ * Parsing always fails. Useful as a placeholder in unions or as the result
851
+ * of narrowing that eliminates all options.
852
+ *
853
+ * @see {@link never}
854
+ * @see {@link isNever}
855
+ * @category models
856
+ * @since 4.0.0
857
+ */
858
+ export class Never extends Base {
859
+ readonly _tag = "Never"
860
+ /** @internal */
861
+ getParser() {
862
+ return fromRefinement(this, Predicate.isNever)
863
+ }
864
+ /** @internal */
865
+ getExpected(): string {
866
+ return "never"
867
+ }
868
+ }
869
+
870
+ /**
871
+ * Provides the singleton {@link Never} AST instance.
872
+ *
873
+ * **When to use**
874
+ *
875
+ * Use to reuse the canonical bottom-type AST node when constructing,
876
+ * comparing, or returning ASTs.
877
+ *
878
+ * @see {@link Never} for the AST node class
879
+ * @see {@link isNever} for narrowing an AST to a `Never` node
880
+ *
881
+ * @category constructors
882
+ * @since 4.0.0
883
+ */
884
+ export const never = new Never()
885
+
886
+ /**
887
+ * AST node representing the `any` type — every value matches.
888
+ *
889
+ * @see {@link any}
890
+ * @see {@link isAny}
891
+ *
892
+ * @category models
893
+ * @since 4.0.0
894
+ */
895
+ export class Any extends Base {
896
+ readonly _tag = "Any"
897
+ /** @internal */
898
+ getParser() {
899
+ return fromRefinement(this, Predicate.isUnknown)
900
+ }
901
+ /** @internal */
902
+ getExpected(): string {
903
+ return "any"
904
+ }
905
+ }
906
+
907
+ /**
908
+ * Provides the singleton {@link Any} AST instance.
909
+ *
910
+ * **When to use**
911
+ *
912
+ * Use when you need the singleton AST node for the TypeScript `any` type and
913
+ * intentionally want parsing to accept every input value.
914
+ *
915
+ * @see {@link unknown} for the sibling AST singleton that also accepts every value while preserving the safer `unknown` type
916
+ *
917
+ * @category constructors
918
+ * @since 4.0.0
919
+ */
920
+ export const any = new Any()
921
+
922
+ /**
923
+ * AST node representing the `unknown` type — every value matches.
924
+ *
925
+ * **Details**
926
+ *
927
+ * Unlike {@link Any}, this is type-safe: the parsed result is typed as
928
+ * `unknown` rather than `any`.
929
+ *
930
+ * @see {@link unknown}
931
+ * @see {@link isUnknown}
932
+ * @category models
933
+ * @since 4.0.0
934
+ */
935
+ export class Unknown extends Base {
936
+ readonly _tag = "Unknown"
937
+ /** @internal */
938
+ getParser() {
939
+ return fromRefinement(this, Predicate.isUnknown)
940
+ }
941
+ /** @internal */
942
+ getExpected(): string {
943
+ return "unknown"
944
+ }
945
+ }
946
+
947
+ /**
948
+ * Provides the singleton {@link Unknown} AST instance.
949
+ *
950
+ * **When to use**
951
+ *
952
+ * Use when you need the reusable AST singleton for a schema node that accepts
953
+ * every value while keeping parsed values opaque.
954
+ *
955
+ * @see {@link any} for the singleton that accepts every value as `any`
956
+ *
957
+ * @category constructors
958
+ * @since 4.0.0
959
+ */
960
+ export const unknown = new Unknown()
961
+
962
+ /**
963
+ * AST node matching the TypeScript `object` type — accepts objects, arrays,
964
+ * and functions (anything non-primitive and non-null).
965
+ *
966
+ * @see {@link objectKeyword}
967
+ * @see {@link isObjectKeyword}
968
+ *
969
+ * @category models
970
+ * @since 3.10.0
971
+ */
972
+ export class ObjectKeyword extends Base {
973
+ readonly _tag = "ObjectKeyword"
974
+ /** @internal */
975
+ getParser() {
976
+ return fromRefinement(this, Predicate.isObjectKeyword)
977
+ }
978
+ /** @internal */
979
+ getExpected(): string {
980
+ return "object | array | function"
981
+ }
982
+ }
983
+
984
+ /**
985
+ * Provides the singleton {@link ObjectKeyword} AST instance.
986
+ *
987
+ * **When to use**
988
+ *
989
+ * Use to reuse the canonical AST node for the TypeScript `object` keyword when
990
+ * building or comparing `SchemaAST` values directly.
991
+ *
992
+ * @see {@link ObjectKeyword} for the AST node class
993
+ * @see {@link isObjectKeyword} for narrowing an AST to an `ObjectKeyword` node
994
+ *
995
+ * @category constructors
996
+ * @since 3.10.0
997
+ */
998
+ export const objectKeyword = new ObjectKeyword()
999
+
1000
+ /**
1001
+ * AST node representing a TypeScript `enum`.
1002
+ *
1003
+ * **Details**
1004
+ *
1005
+ * Holds `enums` as an array of `[name, value]` pairs where values are
1006
+ * `string | number`. Parsing succeeds when the input matches any enum value.
1007
+ *
1008
+ * @see {@link isEnum}
1009
+ * @category models
1010
+ * @since 4.0.0
1011
+ */
1012
+ export class Enum extends Base {
1013
+ readonly _tag = "Enum"
1014
+ readonly enums: ReadonlyArray<readonly [string, string | number]>
1015
+
1016
+ constructor(
1017
+ enums: ReadonlyArray<readonly [string, string | number]>,
1018
+ annotations?: Schema.Annotations.Annotations,
1019
+ checks?: Checks,
1020
+ encoding?: Encoding,
1021
+ context?: Context
1022
+ ) {
1023
+ super(annotations, checks, encoding, context)
1024
+ this.enums = enums
1025
+ }
1026
+ /** @internal */
1027
+ getParser() {
1028
+ const values = new Set<unknown>(this.enums.map(([, v]) => v))
1029
+ return fromRefinement(
1030
+ this,
1031
+ (input): input is typeof this.enums[number][1] => values.has(input)
1032
+ )
1033
+ }
1034
+ /** @internal */
1035
+ toCodecStringTree(): AST {
1036
+ if (this.enums.some(([_, v]) => typeof v === "number")) {
1037
+ const coercions = Object.fromEntries(this.enums.map(([_, v]) => [globalThis.String(v), v]))
1038
+ return replaceEncoding(this, [
1039
+ new Link(
1040
+ new Union(Object.keys(coercions).map((k) => new Literal(k)), "anyOf"),
1041
+ new SchemaTransformation.Transformation(
1042
+ SchemaGetter.transform((s) => coercions[s]),
1043
+ SchemaGetter.String()
1044
+ )
1045
+ )
1046
+ ])
1047
+ }
1048
+ return this
1049
+ }
1050
+ /** @internal */
1051
+ getExpected(): string {
1052
+ return this.enums.map(([_, value]) => JSON.stringify(value)).join(" | ")
1053
+ }
1054
+ }
1055
+
1056
+ type TemplateLiteralPart =
1057
+ | String
1058
+ | Number
1059
+ | BigInt
1060
+ | Literal
1061
+ | TemplateLiteral
1062
+ | Union<TemplateLiteralPart>
1063
+
1064
+ function isTemplateLiteralPart(ast: AST): ast is TemplateLiteralPart {
1065
+ switch (ast._tag) {
1066
+ case "String":
1067
+ case "Number":
1068
+ case "BigInt":
1069
+ case "Literal":
1070
+ case "TemplateLiteral":
1071
+ return true
1072
+ case "Union":
1073
+ return ast.types.every(isTemplateLiteralPart)
1074
+ default:
1075
+ return false
1076
+ }
1077
+ }
1078
+
1079
+ /**
1080
+ * AST node representing a TypeScript template literal type
1081
+ * (e.g. `` `user_${string}` ``).
1082
+ *
1083
+ * **Details**
1084
+ *
1085
+ * `parts` is an array of AST nodes; each part contributes to the
1086
+ * template literal pattern. A regex is derived from the parts to validate
1087
+ * strings at runtime.
1088
+ *
1089
+ * @see {@link isTemplateLiteral}
1090
+ * @category models
1091
+ * @since 3.10.0
1092
+ */
1093
+ export class TemplateLiteral extends Base {
1094
+ readonly _tag = "TemplateLiteral"
1095
+ readonly parts: ReadonlyArray<AST>
1096
+ /** @internal */
1097
+ readonly encodedParts: ReadonlyArray<TemplateLiteralPart>
1098
+
1099
+ constructor(
1100
+ parts: ReadonlyArray<AST>,
1101
+ annotations?: Schema.Annotations.Annotations,
1102
+ checks?: Checks,
1103
+ encoding?: Encoding,
1104
+ context?: Context
1105
+ ) {
1106
+ super(annotations, checks, encoding, context)
1107
+ const encodedParts: Array<TemplateLiteralPart> = []
1108
+ for (const part of parts) {
1109
+ const encoded = toEncoded(part)
1110
+ if (isTemplateLiteralPart(encoded)) {
1111
+ encodedParts.push(encoded)
1112
+ } else {
1113
+ throw new Error(`Invalid TemplateLiteral part ${encoded._tag}`)
1114
+ }
1115
+ }
1116
+ this.parts = parts
1117
+ this.encodedParts = encodedParts
1118
+ }
1119
+ /** @internal */
1120
+ getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
1121
+ const parser = recur(this.asTemplateLiteralParser())
1122
+ return (oinput: Option.Option<unknown>, options: ParseOptions) =>
1123
+ Effect.mapBothEager(parser(oinput, options), {
1124
+ onSuccess: () => oinput,
1125
+ onFailure: (issue) => new SchemaIssue.Composite(this, oinput, [issue])
1126
+ })
1127
+ }
1128
+ /** @internal */
1129
+ getExpected(): string {
1130
+ return "string"
1131
+ }
1132
+ /** @internal */
1133
+ asTemplateLiteralParser(): Arrays {
1134
+ const tuple = new Arrays(false, this.parts.map(templateLiteralPartFromString), [])
1135
+ const regExp = getTemplateLiteralRegExp(this)
1136
+ return decodeTo(
1137
+ string,
1138
+ tuple,
1139
+ new SchemaTransformation.Transformation(
1140
+ SchemaGetter.transformOrFail((s: string) => {
1141
+ const match = regExp.exec(s)
1142
+ if (match) return Effect.succeed(match.slice(1, this.parts.length + 1))
1143
+ return Effect.fail(
1144
+ new SchemaIssue.InvalidValue(Option.some(s), {
1145
+ message: `Expected a value matching ${regExp.source}, got ${format(s)}`
1146
+ })
1147
+ )
1148
+ }),
1149
+ SchemaGetter.transform((parts) => parts.join(""))
1150
+ )
1151
+ )
1152
+ }
1153
+ }
1154
+
1155
+ /**
1156
+ * AST node matching a specific `unique symbol` value.
1157
+ *
1158
+ * **Details**
1159
+ *
1160
+ * Parsing succeeds only when the input is reference-equal to the stored
1161
+ * `symbol`.
1162
+ *
1163
+ * @see {@link isUniqueSymbol}
1164
+ * @category models
1165
+ * @since 3.10.0
1166
+ */
1167
+ export class UniqueSymbol extends Base {
1168
+ readonly _tag = "UniqueSymbol"
1169
+ readonly symbol: symbol
1170
+
1171
+ constructor(
1172
+ symbol: symbol,
1173
+ annotations?: Schema.Annotations.Annotations,
1174
+ checks?: Checks,
1175
+ encoding?: Encoding,
1176
+ context?: Context
1177
+ ) {
1178
+ super(annotations, checks, encoding, context)
1179
+ this.symbol = symbol
1180
+ }
1181
+ /** @internal */
1182
+ getParser() {
1183
+ return fromConst(this, this.symbol)
1184
+ }
1185
+ /** @internal */
1186
+ toCodecStringTree(): AST {
1187
+ return replaceEncoding(this, [symbolToString])
1188
+ }
1189
+ /** @internal */
1190
+ getExpected(): string {
1191
+ return globalThis.String(this.symbol)
1192
+ }
1193
+ }
1194
+
1195
+ /**
1196
+ * The set of primitive types that can appear as a {@link Literal} value.
1197
+ *
1198
+ * @see {@link Literal}
1199
+ *
1200
+ * @category models
1201
+ * @since 3.10.0
1202
+ */
1203
+ export type LiteralValue = string | number | boolean | bigint
1204
+
1205
+ /**
1206
+ * AST node matching an exact primitive value (string, number, boolean, or
1207
+ * bigint).
1208
+ *
1209
+ * **Details**
1210
+ *
1211
+ * Parsing succeeds only when the input is strictly equal (`===`) to the
1212
+ * stored `literal`. Numeric literals must be finite — `Infinity`, `-Infinity`,
1213
+ * and `NaN` are rejected at construction time.
1214
+ *
1215
+ * **Example** (Creating a literal AST)
1216
+ *
1217
+ * ```ts
1218
+ * import { SchemaAST } from "effect"
1219
+ *
1220
+ * const ast = new SchemaAST.Literal("active")
1221
+ * console.log(ast.literal) // "active"
1222
+ * ```
1223
+ *
1224
+ * @see {@link LiteralValue}
1225
+ * @see {@link isLiteral}
1226
+ * @category models
1227
+ * @since 3.10.0
1228
+ */
1229
+ export class Literal extends Base {
1230
+ readonly _tag = "Literal"
1231
+ readonly literal: LiteralValue
1232
+
1233
+ constructor(
1234
+ literal: LiteralValue,
1235
+ annotations?: Schema.Annotations.Annotations,
1236
+ checks?: Checks,
1237
+ encoding?: Encoding,
1238
+ context?: Context
1239
+ ) {
1240
+ super(annotations, checks, encoding, context)
1241
+ if (typeof literal === "number" && !globalThis.Number.isFinite(literal)) {
1242
+ throw new Error(`A numeric literal must be finite, got ${format(literal)}`)
1243
+ }
1244
+ this.literal = literal
1245
+ }
1246
+ /** @internal */
1247
+ getParser() {
1248
+ return fromConst(this, this.literal)
1249
+ }
1250
+ /** @internal */
1251
+ toCodecJson(): AST {
1252
+ return typeof this.literal === "bigint" ? literalToString(this) : this
1253
+ }
1254
+ /** @internal */
1255
+ toCodecStringTree(): AST {
1256
+ return typeof this.literal === "string" ? this : literalToString(this)
1257
+ }
1258
+ /** @internal */
1259
+ getExpected(): string {
1260
+ return typeof this.literal === "string" ? JSON.stringify(this.literal) : globalThis.String(this.literal)
1261
+ }
1262
+ }
1263
+
1264
+ function literalToString(ast: Literal): Literal {
1265
+ const literalAsString = globalThis.String(ast.literal)
1266
+ return replaceEncoding(ast, [
1267
+ new Link(
1268
+ new Literal(literalAsString),
1269
+ new SchemaTransformation.Transformation(
1270
+ SchemaGetter.transform(() => ast.literal),
1271
+ SchemaGetter.transform(() => literalAsString)
1272
+ )
1273
+ )
1274
+ ])
1275
+ }
1276
+
1277
+ /**
1278
+ * AST node matching any `string` value.
1279
+ *
1280
+ * @see {@link string}
1281
+ * @see {@link isString}
1282
+ *
1283
+ * @category models
1284
+ * @since 4.0.0
1285
+ */
1286
+ export class String extends Base {
1287
+ readonly _tag = "String"
1288
+ /** @internal */
1289
+ getParser() {
1290
+ return fromRefinement(this, Predicate.isString)
1291
+ }
1292
+ /** @internal */
1293
+ getExpected(): string {
1294
+ return "string"
1295
+ }
1296
+ }
1297
+
1298
+ /**
1299
+ * Provides the singleton {@link String} AST instance.
1300
+ *
1301
+ * **When to use**
1302
+ *
1303
+ * Use as the shared `SchemaAST` node for unconstrained JavaScript strings.
1304
+ *
1305
+ * @see {@link String} for the AST node class
1306
+ * @see {@link isString} for narrowing an AST to a string node
1307
+ *
1308
+ * @category constructors
1309
+ * @since 4.0.0
1310
+ */
1311
+ export const string = new String()
1312
+
1313
+ /**
1314
+ * AST node matching any `number` value (including `NaN`, `Infinity`,
1315
+ * `-Infinity`).
1316
+ *
1317
+ * **Details**
1318
+ *
1319
+ * Default JSON serialization:
1320
+ *
1321
+ * - Finite numbers are serialized as JSON numbers.
1322
+ * - `Infinity`, `-Infinity`, and `NaN` are serialized as JSON strings.
1323
+ *
1324
+ * If the node has an `isFinite` or `isInt` check, the string fallback is
1325
+ * skipped since non-finite values cannot occur.
1326
+ *
1327
+ * @see {@link number}
1328
+ * @see {@link isNumber}
1329
+ * @category models
1330
+ * @since 4.0.0
1331
+ */
1332
+ export class Number extends Base {
1333
+ readonly _tag = "Number"
1334
+ /** @internal */
1335
+ getParser() {
1336
+ return fromRefinement(this, Predicate.isNumber)
1337
+ }
1338
+ /** @internal */
1339
+ toCodecJson(): AST {
1340
+ if (this.checks && (hasCheck(this.checks, "isFinite") || hasCheck(this.checks, "isInt"))) {
1341
+ return this
1342
+ }
1343
+ return replaceEncoding(this, [numberToJson])
1344
+ }
1345
+ /** @internal */
1346
+ toCodecStringTree(): AST {
1347
+ if (this.checks && (hasCheck(this.checks, "isFinite") || hasCheck(this.checks, "isInt"))) {
1348
+ return replaceEncoding(this, [finiteToString])
1349
+ }
1350
+ return replaceEncoding(this, [numberToString])
1351
+ }
1352
+ /** @internal */
1353
+ getExpected(): string {
1354
+ return "number"
1355
+ }
1356
+ }
1357
+
1358
+ // oxlint-disable-next-line only-used-in-recursion - @gcanti what's this? :-)
1359
+ function hasCheck(checks: ReadonlyArray<Check<unknown>>, tag: string): boolean {
1360
+ return checks.some((c) => {
1361
+ switch (c._tag) {
1362
+ case "Filter":
1363
+ return c.annotations?.meta?._tag === tag
1364
+ case "FilterGroup":
1365
+ return hasCheck(c.checks, tag)
1366
+ }
1367
+ })
1368
+ }
1369
+
1370
+ /**
1371
+ * Provides the singleton {@link Number} AST instance.
1372
+ *
1373
+ * **When to use**
1374
+ *
1375
+ * Use when you need the canonical `SchemaAST` node for schemas that accept any
1376
+ * JavaScript number value.
1377
+ *
1378
+ * @see {@link Number} for the AST node class and serialization behavior
1379
+ * @see {@link Literal} for exact finite numeric literal AST nodes
1380
+ *
1381
+ * @category constructors
1382
+ * @since 4.0.0
1383
+ */
1384
+ export const number = new Number()
1385
+
1386
+ /**
1387
+ * AST node matching any `boolean` value (`true` or `false`).
1388
+ *
1389
+ * @see {@link boolean}
1390
+ * @see {@link isBoolean}
1391
+ *
1392
+ * @category models
1393
+ * @since 4.0.0
1394
+ */
1395
+ export class Boolean extends Base {
1396
+ readonly _tag = "Boolean"
1397
+ /** @internal */
1398
+ getParser() {
1399
+ return fromRefinement(this, Predicate.isBoolean)
1400
+ }
1401
+ /** @internal */
1402
+ getExpected(): string {
1403
+ return "boolean"
1404
+ }
1405
+ }
1406
+
1407
+ /**
1408
+ * Provides the singleton {@link Boolean} AST instance.
1409
+ *
1410
+ * **When to use**
1411
+ *
1412
+ * Use to reuse the standard AST node that accepts either `true` or `false` when
1413
+ * constructing schema ASTs directly.
1414
+ *
1415
+ * @see {@link Boolean} for the AST node class
1416
+ * @see {@link Literal} for exact boolean literal AST nodes
1417
+ *
1418
+ * @category constructors
1419
+ * @since 4.0.0
1420
+ */
1421
+ export const boolean = new Boolean()
1422
+
1423
+ /**
1424
+ * AST node matching any `symbol` value.
1425
+ *
1426
+ * **When to use**
1427
+ *
1428
+ * Use when you need the AST node class for schemas that match any JavaScript
1429
+ * symbol value.
1430
+ *
1431
+ * **Details**
1432
+ *
1433
+ * When serialized to a string-based codec, symbols are converted via
1434
+ * `Symbol.keyFor` and must be registered with `Symbol.for`.
1435
+ *
1436
+ * @see {@link symbol}
1437
+ * @see {@link isSymbol}
1438
+ * @category models
1439
+ * @since 4.0.0
1440
+ */
1441
+ export class Symbol extends Base {
1442
+ readonly _tag = "Symbol"
1443
+ /** @internal */
1444
+ getParser() {
1445
+ return fromRefinement(this, Predicate.isSymbol)
1446
+ }
1447
+ /** @internal */
1448
+ toCodecStringTree(): AST {
1449
+ return replaceEncoding(this, [symbolToString])
1450
+ }
1451
+ /** @internal */
1452
+ getExpected(): string {
1453
+ return "symbol"
1454
+ }
1455
+ }
1456
+
1457
+ /**
1458
+ * Provides the singleton {@link Symbol} AST instance.
1459
+ *
1460
+ * **When to use**
1461
+ *
1462
+ * Use to reuse the singleton AST node for schemas that match any JavaScript
1463
+ * symbol value.
1464
+ *
1465
+ * **Gotchas**
1466
+ *
1467
+ * String-based codecs can encode only symbols registered with `Symbol.for`,
1468
+ * because the implementation uses `Symbol.keyFor`.
1469
+ *
1470
+ * @see {@link UniqueSymbol} for an AST node that matches one specific symbol
1471
+ *
1472
+ * @category constructors
1473
+ * @since 4.0.0
1474
+ */
1475
+ export const symbol = new Symbol()
1476
+
1477
+ /**
1478
+ * AST node matching any `bigint` value.
1479
+ *
1480
+ * **Details**
1481
+ *
1482
+ * When serialized to a string-based codec, bigints are converted to/from
1483
+ * their decimal string representation.
1484
+ *
1485
+ * @see {@link bigInt}
1486
+ * @see {@link isBigInt}
1487
+ * @category models
1488
+ * @since 4.0.0
1489
+ */
1490
+ export class BigInt extends Base {
1491
+ readonly _tag = "BigInt"
1492
+ /** @internal */
1493
+ getParser() {
1494
+ return fromRefinement(this, Predicate.isBigInt)
1495
+ }
1496
+ /** @internal */
1497
+ toCodecStringTree(): AST {
1498
+ return replaceEncoding(this, [bigIntToString])
1499
+ }
1500
+ /** @internal */
1501
+ getExpected(): string {
1502
+ return "bigint"
1503
+ }
1504
+ }
1505
+
1506
+ /**
1507
+ * Provides the singleton {@link BigInt} AST instance.
1508
+ *
1509
+ * **When to use**
1510
+ *
1511
+ * Use to reuse the canonical `BigInt` AST node when constructing, inspecting,
1512
+ * or transforming schemas at the AST level.
1513
+ *
1514
+ * @see {@link BigInt} for the AST node class and string-codec behavior
1515
+ * @see {@link isBigInt} for narrowing an AST to a `BigInt` node
1516
+ *
1517
+ * @category constructors
1518
+ * @since 4.0.0
1519
+ */
1520
+ export const bigInt = new BigInt()
1521
+
1522
+ /**
1523
+ * AST node for array-like types — both tuples and arrays.
1524
+ *
1525
+ * **When to use**
1526
+ *
1527
+ * Use when constructing or inspecting AST nodes for tuple or array-like schemas,
1528
+ * including rest elements.
1529
+ *
1530
+ * **Details**
1531
+ *
1532
+ * - `elements` — positional element types (tuple elements). An element is
1533
+ * optional if its {@link Context.isOptional} is `true`.
1534
+ * - `rest` — the rest/variadic element types. When non-empty, the first
1535
+ * entry is the "spread" type (e.g. `...Array<string>`), and subsequent
1536
+ * entries are trailing positional elements after the spread.
1537
+ * - `isMutable` — whether the resulting array is `readonly` (`false`) or
1538
+ * mutable (`true`).
1539
+ *
1540
+ * **Gotchas**
1541
+ *
1542
+ * Construction enforces TypeScript ordering rules: a required element
1543
+ * cannot follow an optional one, and an optional element cannot follow a
1544
+ * rest element.
1545
+ *
1546
+ * **Example** (Inspecting a tuple AST)
1547
+ *
1548
+ * ```ts
1549
+ * import { Schema, SchemaAST } from "effect"
1550
+ *
1551
+ * const schema = Schema.Tuple([Schema.String, Schema.Number])
1552
+ * const ast = schema.ast
1553
+ *
1554
+ * if (SchemaAST.isArrays(ast)) {
1555
+ * console.log(ast.elements.length) // 2
1556
+ * console.log(ast.rest.length) // 0
1557
+ * }
1558
+ * ```
1559
+ *
1560
+ * @see {@link isArrays}
1561
+ * @see {@link Objects}
1562
+ * @category models
1563
+ * @since 4.0.0
1564
+ */
1565
+ export class Arrays extends Base {
1566
+ readonly _tag = "Arrays"
1567
+ readonly isMutable: boolean
1568
+ readonly elements: ReadonlyArray<AST>
1569
+ readonly rest: ReadonlyArray<AST>
1570
+ readonly encodingChecks: Checks | undefined
1571
+
1572
+ constructor(
1573
+ isMutable: boolean,
1574
+ elements: ReadonlyArray<AST>,
1575
+ rest: ReadonlyArray<AST>,
1576
+ annotations?: Schema.Annotations.Annotations,
1577
+ checks?: Checks,
1578
+ encoding?: Encoding,
1579
+ context?: Context,
1580
+ encodingChecks?: Checks
1581
+ ) {
1582
+ super(annotations, checks, encoding, context)
1583
+ this.isMutable = isMutable
1584
+ this.elements = elements
1585
+ this.rest = rest
1586
+ this.encodingChecks = encodingChecks
1587
+
1588
+ // A required element cannot follow an optional element. ts(1257)
1589
+ const i = elements.findIndex(isOptional)
1590
+ if (i !== -1 && (elements.slice(i + 1).some((e) => !isOptional(e)) || rest.length > 1)) {
1591
+ throw new Error("A required element cannot follow an optional element. ts(1257)")
1592
+ }
1593
+
1594
+ // An optional element cannot follow a rest element.ts(1266)
1595
+ if (rest.length > 1 && rest.slice(1).some(isOptional)) {
1596
+ throw new Error("An optional element cannot follow a rest element. ts(1266)")
1597
+ }
1598
+ }
1599
+ /** @internal */
1600
+ getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
1601
+ // oxlint-disable-next-line @typescript-eslint/no-this-alias
1602
+ const ast = this
1603
+ const elements = ast.elements.map((ast) => ({ ast, parser: recur(ast) }))
1604
+ const rest = ast.rest.map((ast) => ({ ast, parser: recur(ast) }))
1605
+ const elementLen = elements.length
1606
+
1607
+ const [head, ...tail] = rest
1608
+ const tailLen = tail.length
1609
+
1610
+ function getParser(
1611
+ tailThreshold: number,
1612
+ index: number
1613
+ ): { readonly ast: AST; readonly parser: SchemaParser.Parser } {
1614
+ if (index < elementLen) {
1615
+ return elements[index]
1616
+ } else if (index >= tailThreshold) {
1617
+ return tail[index - tailThreshold]
1618
+ }
1619
+ return head
1620
+ }
1621
+
1622
+ return Effect.fnUntracedEager(function*(oinput, options) {
1623
+ if (oinput._tag === "None") {
1624
+ return oinput
1625
+ }
1626
+ const input = oinput.value
1627
+
1628
+ // If the input is not an array, return early with an error
1629
+ if (!Array.isArray(input)) {
1630
+ return yield* Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
1631
+ }
1632
+
1633
+ const len = input.length
1634
+ const state = {
1635
+ ast,
1636
+ getParser,
1637
+ oinput,
1638
+ len,
1639
+ tailThreshold: resolveTailThreshold(len, elementLen, tailLen),
1640
+ output: new globalThis.Array(len),
1641
+ issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
1642
+ options
1643
+ }
1644
+ const concurrency = resolveConcurrency(options?.concurrency)
1645
+ const eff = parseArray(state, input, {
1646
+ concurrency: concurrency?.concurrency,
1647
+ end: ast.rest.length === 0 ? elementLen : Math.max(len, elementLen + tailLen)
1648
+ })
1649
+ if (eff) yield* eff
1650
+
1651
+ // ---------------------------------------------
1652
+ // handle excess indexes
1653
+ // ---------------------------------------------
1654
+ if (ast.rest.length === 0 && len > elementLen) {
1655
+ for (let i = elementLen; i <= len - 1; i++) {
1656
+ const issue = new SchemaIssue.Pointer([i], new SchemaIssue.UnexpectedKey(ast, input[i]))
1657
+ if (options.errors === "all") {
1658
+ if (state.issues) state.issues.push(issue)
1659
+ else state.issues = [issue]
1660
+ } else {
1661
+ return yield* Effect.fail(new SchemaIssue.Composite(ast, oinput, [issue]))
1662
+ }
1663
+ }
1664
+ }
1665
+ if (state.issues) {
1666
+ return yield* Effect.fail(new SchemaIssue.Composite(ast, oinput, state.issues))
1667
+ }
1668
+ return Option.some(state.output)
1669
+ })
1670
+ }
1671
+ private rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
1672
+ const elements = mapOrSame(this.elements, recur)
1673
+ const rest = mapOrSame(this.rest, recur)
1674
+ return elements === this.elements && rest === this.rest ?
1675
+ this :
1676
+ new Arrays(
1677
+ this.isMutable,
1678
+ elements,
1679
+ rest,
1680
+ this.annotations,
1681
+ checks,
1682
+ undefined,
1683
+ this.context,
1684
+ encodingChecks
1685
+ )
1686
+ }
1687
+ /** @internal */
1688
+ recur(recur: (ast: AST) => AST) {
1689
+ return this.rebuild(recur, this.checks, this.encodingChecks)
1690
+ }
1691
+ /** @internal */
1692
+ flip(recur: (ast: AST) => AST) {
1693
+ return this.rebuild(recur, this.encodingChecks, this.checks)
1694
+ }
1695
+ /** @internal */
1696
+ getExpected(): string {
1697
+ return "array"
1698
+ }
1699
+ }
1700
+ const parseArray = iterateEager<{
1701
+ readonly ast: AST
1702
+ readonly oinput: Option.Option<unknown>
1703
+ readonly len: number
1704
+ readonly getParser: (
1705
+ tailThreshold: number,
1706
+ index: number
1707
+ ) => { readonly ast: AST; readonly parser: SchemaParser.Parser }
1708
+ readonly tailThreshold: number
1709
+ readonly options: ParseOptions
1710
+ readonly output: Array<unknown>
1711
+ issues: Array<SchemaIssue.Issue> | undefined
1712
+ }, unknown>()({
1713
+ onItem(s, item, i) {
1714
+ const value = i < s.len ? Option.some(item) : Option.none()
1715
+ return s.getParser(s.tailThreshold, i).parser(value, s.options)
1716
+ },
1717
+ step(s, _, exit, i) {
1718
+ if (exit._tag === "Failure") {
1719
+ return wrapPropertyKeyIssue(s, s.ast, i, exit)
1720
+ } else if (exit.value._tag === "Some") {
1721
+ s.output[i] = exit.value.value
1722
+ } else {
1723
+ const p = s.getParser(s.tailThreshold, i)
1724
+ if (isOptional(p.ast)) return
1725
+ const issue = new SchemaIssue.Pointer([i], new SchemaIssue.MissingKey(p.ast.context?.annotations))
1726
+ if (s.options.errors === "all") {
1727
+ if (s.issues) s.issues.push(issue)
1728
+ else s.issues = [issue]
1729
+ } else {
1730
+ return Exit.fail(new SchemaIssue.Composite(s.ast, s.oinput, [issue]))
1731
+ }
1732
+ }
1733
+ }
1734
+ })
1735
+
1736
+ function resolveTailThreshold(
1737
+ inputLen: number,
1738
+ elementLen: number,
1739
+ tailLen: number
1740
+ ) {
1741
+ return Math.max(elementLen, inputLen - tailLen)
1742
+ }
1743
+
1744
+ const resolveConcurrency = (value: number | "unbounded" | undefined) => {
1745
+ value = value === "unbounded" ? Infinity : value ?? 1
1746
+ return value > 1 ? { concurrency: value } : undefined
1747
+ }
1748
+
1749
+ const wrapPropertyKeyIssue = (
1750
+ s: {
1751
+ readonly oinput: Option.Option<unknown>
1752
+ readonly options: ParseOptions
1753
+ issues: Array<SchemaIssue.Issue> | undefined
1754
+ },
1755
+ ast: AST,
1756
+ key: PropertyKey,
1757
+ exit: Exit.Failure<any, SchemaIssue.Issue>
1758
+ ) => {
1759
+ if (exit.cause.reasons.length === 0) {
1760
+ return exit
1761
+ }
1762
+ const issue = InternalSchemaCause.getSchemaIssue(exit.cause)
1763
+ if (issue === undefined) {
1764
+ return Exit.failCause(
1765
+ Cause.map(
1766
+ exit.cause,
1767
+ (issue) => new SchemaIssue.Composite(ast, s.oinput, [new SchemaIssue.Pointer([key], issue)])
1768
+ )
1769
+ )
1770
+ }
1771
+ const pointer = new SchemaIssue.Pointer([key], issue)
1772
+ if (s.options.errors === "all") {
1773
+ if (s.issues) s.issues.push(pointer)
1774
+ else s.issues = [pointer]
1775
+ } else {
1776
+ return Exit.fail(new SchemaIssue.Composite(ast, s.oinput, [pointer]))
1777
+ }
1778
+ }
1779
+
1780
+ /**
1781
+ * floating point or integer, with optional exponent
1782
+ * @internal
1783
+ */
1784
+ export const FINITE_PATTERN = "[+-]?\\d*\\.?\\d+(?:[Ee][+-]?\\d+)?"
1785
+
1786
+ const isNumberStringRegExp = new globalThis.RegExp(`(?:${FINITE_PATTERN}|Infinity|-Infinity|NaN)`)
1787
+
1788
+ /**
1789
+ * Returns the object keys that match the index signature parameter schema.
1790
+ * @internal
1791
+ */
1792
+ export function getIndexSignatureKeys(
1793
+ input: { readonly [x: PropertyKey]: unknown },
1794
+ parameter: AST
1795
+ ): ReadonlyArray<PropertyKey> {
1796
+ const encoded = toEncoded(parameter)
1797
+ switch (encoded._tag) {
1798
+ case "String":
1799
+ return Object.keys(input)
1800
+ case "TemplateLiteral": {
1801
+ const regExp = getTemplateLiteralRegExp(encoded)
1802
+ return Object.keys(input).filter((k) => regExp.test(k))
1803
+ }
1804
+ case "Symbol":
1805
+ return Object.getOwnPropertySymbols(input)
1806
+ case "Number":
1807
+ return Object.keys(input).filter((k) => isNumberStringRegExp.test(k))
1808
+ case "Union":
1809
+ return [...new Set(encoded.types.flatMap((t) => getIndexSignatureKeys(input, t)))]
1810
+ default:
1811
+ return []
1812
+ }
1813
+ }
1814
+
1815
+ /**
1816
+ * Represents a named property within an {@link Objects} node.
1817
+ *
1818
+ * **Details**
1819
+ *
1820
+ * Pairs a `name` (any `PropertyKey`) with a `type` ({@link AST}). The
1821
+ * property's optionality and mutability are determined by the `type`'s
1822
+ * {@link Context}.
1823
+ *
1824
+ * @see {@link Objects}
1825
+ * @category models
1826
+ * @since 3.10.0
1827
+ */
1828
+ export class PropertySignature {
1829
+ readonly name: PropertyKey
1830
+ readonly type: AST
1831
+
1832
+ constructor(
1833
+ name: PropertyKey,
1834
+ type: AST
1835
+ ) {
1836
+ this.name = name
1837
+ this.type = type
1838
+ }
1839
+ }
1840
+
1841
+ /**
1842
+ * Represents a bidirectional merge strategy for index signature key-value pairs.
1843
+ *
1844
+ * **Details**
1845
+ *
1846
+ * Used by {@link IndexSignature} when the same key appears multiple times
1847
+ * (e.g. from `Schema.extend` or overlapping records). Provides separate
1848
+ * `decode` and `encode` combiners that determine how duplicate entries are
1849
+ * merged.
1850
+ *
1851
+ * @see {@link IndexSignature}
1852
+ * @category models
1853
+ * @since 4.0.0
1854
+ */
1855
+ export class KeyValueCombiner {
1856
+ readonly decode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined
1857
+ readonly encode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined
1858
+
1859
+ constructor(
1860
+ decode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined,
1861
+ encode: Combiner.Combiner<readonly [key: PropertyKey, value: any]> | undefined
1862
+ ) {
1863
+ this.decode = decode
1864
+ this.encode = encode
1865
+ }
1866
+ /** @internal */
1867
+ flip(): KeyValueCombiner {
1868
+ return new KeyValueCombiner(this.encode, this.decode)
1869
+ }
1870
+ }
1871
+
1872
+ /**
1873
+ * Represents an index signature entry within an {@link Objects} node.
1874
+ *
1875
+ * **When to use**
1876
+ *
1877
+ * Use when constructing or inspecting object AST entries for record-like keys
1878
+ * and values.
1879
+ *
1880
+ * **Details**
1881
+ *
1882
+ * - `parameter` — the key type AST (e.g. {@link String} for `string` keys,
1883
+ * {@link TemplateLiteral} for patterned keys).
1884
+ * - `type` — the value type SchemaAST.
1885
+ * - `merge` — optional {@link KeyValueCombiner} for handling duplicate keys.
1886
+ *
1887
+ * **Gotchas**
1888
+ *
1889
+ * Using `Schema.optionalKey` on the value type is not allowed for index
1890
+ * signatures (throws at construction); use `Schema.optional` instead.
1891
+ *
1892
+ * @see {@link Objects}
1893
+ * @see {@link PropertySignature}
1894
+ * @category models
1895
+ * @since 3.10.0
1896
+ */
1897
+ export class IndexSignature {
1898
+ readonly parameter: AST
1899
+ readonly type: AST
1900
+ readonly merge: KeyValueCombiner | undefined
1901
+
1902
+ constructor(
1903
+ parameter: AST,
1904
+ type: AST,
1905
+ merge: KeyValueCombiner | undefined
1906
+ ) {
1907
+ this.parameter = parameter
1908
+ this.type = type
1909
+ this.merge = merge
1910
+ if (isOptional(type) && !containsUndefined(type)) {
1911
+ throw new Error("Cannot use `Schema.optionalKey` with index signatures, use `Schema.optional` instead.")
1912
+ }
1913
+ }
1914
+ }
1915
+
1916
+ /**
1917
+ * AST node for object-like schemas, including structs and records.
1918
+ *
1919
+ * **When to use**
1920
+ *
1921
+ * Use when constructing or inspecting AST nodes for structs or records rather
1922
+ * than array-like schemas.
1923
+ *
1924
+ * **Details**
1925
+ *
1926
+ * - `propertySignatures` — named properties with their types (struct fields).
1927
+ * - `indexSignatures` — index signature entries (record patterns), each with
1928
+ * a `parameter` AST for matching keys and a `type` AST for values.
1929
+ *
1930
+ * An `Objects` node with no properties and no index signatures performs only a
1931
+ * non-nullish check: it accepts any value except `null` and `undefined`,
1932
+ * including primitive values.
1933
+ *
1934
+ * **Gotchas**
1935
+ *
1936
+ * Duplicate property names throw at construction time.
1937
+ *
1938
+ * **Example** (Inspecting a struct AST)
1939
+ *
1940
+ * ```ts
1941
+ * import { Schema, SchemaAST } from "effect"
1942
+ *
1943
+ * const schema = Schema.Struct({ name: Schema.String })
1944
+ * const ast = schema.ast
1945
+ *
1946
+ * if (SchemaAST.isObjects(ast)) {
1947
+ * for (const ps of ast.propertySignatures) {
1948
+ * console.log(ps.name, ps.type._tag)
1949
+ * }
1950
+ * // "name" "String"
1951
+ * }
1952
+ * ```
1953
+ *
1954
+ * @see {@link isObjects}
1955
+ * @see {@link PropertySignature}
1956
+ * @see {@link IndexSignature}
1957
+ * @see {@link Arrays}
1958
+ * @category models
1959
+ * @since 4.0.0
1960
+ */
1961
+ export class Objects extends Base {
1962
+ readonly _tag = "Objects"
1963
+ readonly propertySignatures: ReadonlyArray<PropertySignature>
1964
+ readonly indexSignatures: ReadonlyArray<IndexSignature>
1965
+ readonly encodingChecks: Checks | undefined
1966
+
1967
+ constructor(
1968
+ propertySignatures: ReadonlyArray<PropertySignature>,
1969
+ indexSignatures: ReadonlyArray<IndexSignature>,
1970
+ annotations?: Schema.Annotations.Annotations,
1971
+ checks?: Checks,
1972
+ encoding?: Encoding,
1973
+ context?: Context,
1974
+ encodingChecks?: Checks
1975
+ ) {
1976
+ super(annotations, checks, encoding, context)
1977
+ this.propertySignatures = propertySignatures
1978
+ this.indexSignatures = indexSignatures
1979
+ this.encodingChecks = encodingChecks
1980
+
1981
+ // Duplicate property signatures
1982
+ const duplicates = propertySignatures.map((ps) => ps.name).filter((name, i, arr) => arr.indexOf(name) !== i)
1983
+ if (duplicates.length > 0) {
1984
+ throw new Error(`Duplicate identifiers: ${JSON.stringify(duplicates)}. ts(2300)`)
1985
+ }
1986
+ }
1987
+ /** @internal */
1988
+ getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
1989
+ // oxlint-disable-next-line @typescript-eslint/no-this-alias
1990
+ const ast = this
1991
+ const expectedKeys: Array<PropertyKey> = []
1992
+ const expectedKeysSet = new Set<PropertyKey>()
1993
+ const properties: Array<{
1994
+ readonly ps: PropertySignature | IndexSignature
1995
+ readonly parser: SchemaParser.Parser
1996
+ readonly name: PropertyKey
1997
+ readonly type: AST
1998
+ }> = []
1999
+ for (const ps of ast.propertySignatures) {
2000
+ expectedKeys.push(ps.name)
2001
+ expectedKeysSet.add(ps.name)
2002
+ properties.push({
2003
+ ps,
2004
+ parser: recur(ps.type),
2005
+ name: ps.name,
2006
+ type: ps.type
2007
+ })
2008
+ }
2009
+ const indexCount = ast.indexSignatures.length
2010
+ // ---------------------------------------------
2011
+ // handle empty struct
2012
+ // ---------------------------------------------
2013
+ if (ast.propertySignatures.length === 0 && ast.indexSignatures.length === 0) {
2014
+ return fromRefinement(ast, Predicate.isNotNullish)
2015
+ }
2016
+
2017
+ const parseIndexes = indexCount > 0 ?
2018
+ iterateEager<{
2019
+ readonly oinput: Option.Option<unknown>
2020
+ readonly input: Record<PropertyKey, unknown>
2021
+ readonly options: ParseOptions
2022
+ readonly out: Record<PropertyKey, unknown>
2023
+ issues: Array<SchemaIssue.Issue> | undefined
2024
+ }, [key: PropertyKey, is: IndexSignature]>()({
2025
+ onItem: Effect.fnUntracedEager(function*(
2026
+ s,
2027
+ [key, is]
2028
+ ) {
2029
+ const parserKey = recur(indexSignatureParameterFromString(is.parameter))
2030
+ const effKey = parserKey(Option.some(key), s.options)
2031
+ const exitKey = (effectIsExit(effKey) ? effKey : yield* Effect.exit(effKey)) as Exit.Exit<
2032
+ Option.Option<PropertyKey>,
2033
+ SchemaIssue.Issue
2034
+ >
2035
+ if (exitKey._tag === "Failure") {
2036
+ const eff = wrapPropertyKeyIssue(s, ast, key, exitKey)
2037
+ if (eff) yield* eff
2038
+ return
2039
+ }
2040
+
2041
+ const value: Option.Option<unknown> = Option.some(s.input[key])
2042
+ const parserValue = recur(is.type)
2043
+ const effValue = parserValue(value, s.options)
2044
+ const exitValue = effectIsExit(effValue) ? effValue : yield* Effect.exit(effValue)
2045
+ if (exitValue._tag === "Failure") {
2046
+ const eff = wrapPropertyKeyIssue(s, ast, key, exitValue)
2047
+ if (eff) yield* eff
2048
+ return
2049
+ } else if (exitKey.value._tag === "Some" && exitValue.value._tag === "Some") {
2050
+ const k2 = exitKey.value.value
2051
+ if (expectedKeysSet.has(key) || expectedKeysSet.has(k2)) {
2052
+ return
2053
+ }
2054
+ const v2 = exitValue.value.value
2055
+ if (is.merge && is.merge.decode && Object.hasOwn(s.out, k2)) {
2056
+ const [k, v] = is.merge.decode.combine([k2, s.out[k2]], [k2, v2])
2057
+ internalRecord.set(s.out, k, v)
2058
+ } else {
2059
+ internalRecord.set(s.out, k2, v2)
2060
+ }
2061
+ }
2062
+ }),
2063
+ step: (_s, _, exit: Exit.Exit<void, SchemaIssue.Issue>) => exit._tag === "Failure" ? exit : undefined
2064
+ }) :
2065
+ undefined
2066
+
2067
+ return Effect.fnUntracedEager(function*(oinput, options) {
2068
+ if (oinput._tag === "None") {
2069
+ return oinput
2070
+ }
2071
+ const input = oinput.value as Record<PropertyKey, unknown>
2072
+
2073
+ // If the input is not a record, return early with an error
2074
+ if (!(typeof input === "object" && input !== null && !Array.isArray(input))) {
2075
+ return yield* Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
2076
+ }
2077
+
2078
+ const out: Record<PropertyKey, unknown> = {}
2079
+ const state = {
2080
+ ast,
2081
+ oinput,
2082
+ input,
2083
+ out,
2084
+ issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
2085
+ options
2086
+ }
2087
+ const errorsAllOption = options.errors === "all"
2088
+ const onExcessPropertyError = options.onExcessProperty === "error"
2089
+ const onExcessPropertyPreserve = options.onExcessProperty === "preserve"
2090
+
2091
+ // ---------------------------------------------
2092
+ // handle excess properties
2093
+ // ---------------------------------------------
2094
+ let inputKeys: Array<PropertyKey> | undefined
2095
+ if (ast.indexSignatures.length === 0 && (onExcessPropertyError || onExcessPropertyPreserve)) {
2096
+ inputKeys = Reflect.ownKeys(input)
2097
+ for (let i = 0; i < inputKeys.length; i++) {
2098
+ const key = inputKeys[i]
2099
+ if (!expectedKeysSet.has(key)) {
2100
+ // key is unexpected
2101
+ if (onExcessPropertyError) {
2102
+ const issue = new SchemaIssue.Pointer([key], new SchemaIssue.UnexpectedKey(ast, input[key]))
2103
+ if (errorsAllOption) {
2104
+ if (state.issues) {
2105
+ state.issues.push(issue)
2106
+ } else {
2107
+ state.issues = [issue]
2108
+ }
2109
+ continue
2110
+ } else {
2111
+ return yield* Effect.fail(new SchemaIssue.Composite(ast, oinput, [issue]))
2112
+ }
2113
+ } else {
2114
+ // preserve key
2115
+ internalRecord.set(out, key, input[key])
2116
+ }
2117
+ }
2118
+ }
2119
+ }
2120
+
2121
+ const concurrency = resolveConcurrency(options?.concurrency)
2122
+
2123
+ // ---------------------------------------------
2124
+ // handle property signatures
2125
+ // ---------------------------------------------
2126
+ const eff = parseProperties(state, properties, concurrency)
2127
+ if (eff) yield* eff
2128
+
2129
+ // ---------------------------------------------
2130
+ // handle index signatures
2131
+ // ---------------------------------------------
2132
+ if (parseIndexes) {
2133
+ const keyPairs = Arr.empty<[PropertyKey, IndexSignature]>()
2134
+ for (let i = 0; i < indexCount; i++) {
2135
+ const is = ast.indexSignatures[i]
2136
+ const keys = getIndexSignatureKeys(input, is.parameter)
2137
+ for (let j = 0; j < keys.length; j++) {
2138
+ const key = keys[j]
2139
+ keyPairs.push([key, is])
2140
+ }
2141
+ }
2142
+ const eff = parseIndexes(state, keyPairs, concurrency)
2143
+ if (eff) yield* eff
2144
+ }
2145
+
2146
+ if (state.issues) {
2147
+ return yield* Effect.fail(new SchemaIssue.Composite(ast, oinput, state.issues))
2148
+ }
2149
+ if (options.propertyOrder === "original") {
2150
+ // preserve input keys order
2151
+ const keys = (inputKeys ?? Reflect.ownKeys(input)).concat(expectedKeys)
2152
+ const preserved: Record<PropertyKey, unknown> = {}
2153
+ for (const key of keys) {
2154
+ if (Object.hasOwn(out, key)) {
2155
+ internalRecord.set(preserved, key, out[key])
2156
+ }
2157
+ }
2158
+ return Option.some(preserved)
2159
+ }
2160
+ return Option.some(out)
2161
+ })
2162
+ }
2163
+ private rebuild(
2164
+ recur: (ast: AST) => AST,
2165
+ flipMerge: boolean,
2166
+ checks: Checks | undefined,
2167
+ encodingChecks: Checks | undefined
2168
+ ): Objects {
2169
+ const props = mapOrSame(this.propertySignatures, (ps) => {
2170
+ const t = recur(ps.type)
2171
+ return t === ps.type ? ps : new PropertySignature(ps.name, t)
2172
+ })
2173
+
2174
+ const indexes = mapOrSame(this.indexSignatures, (is) => {
2175
+ const p = recur(is.parameter)
2176
+ const t = recur(is.type)
2177
+ const merge = flipMerge ? is.merge?.flip() : is.merge
2178
+ return p === is.parameter && t === is.type && merge === is.merge
2179
+ ? is
2180
+ : new IndexSignature(p, t, merge)
2181
+ })
2182
+
2183
+ return props === this.propertySignatures && indexes === this.indexSignatures
2184
+ ? this
2185
+ : new Objects(
2186
+ props,
2187
+ indexes,
2188
+ this.annotations,
2189
+ checks,
2190
+ undefined,
2191
+ this.context,
2192
+ encodingChecks
2193
+ )
2194
+ }
2195
+ /** @internal */
2196
+ flip(recur: (ast: AST) => AST): AST {
2197
+ return this.rebuild(recur, true, this.encodingChecks, this.checks)
2198
+ }
2199
+ /** @internal */
2200
+ recur(recur: (ast: AST) => AST): AST {
2201
+ return this.rebuild(recur, false, this.checks, this.encodingChecks)
2202
+ }
2203
+ /** @internal */
2204
+ getExpected(): string {
2205
+ if (this.propertySignatures.length === 0 && this.indexSignatures.length === 0) return "object | array"
2206
+ return "object"
2207
+ }
2208
+ }
2209
+
2210
+ type ParsedProperty = {
2211
+ readonly ps: PropertySignature | IndexSignature
2212
+ readonly parser: SchemaParser.Parser
2213
+ readonly name: PropertyKey
2214
+ readonly type: AST
2215
+ }
2216
+
2217
+ const parseProperties = iterateEager<{
2218
+ readonly ast: AST
2219
+ readonly oinput: Option.Option<unknown>
2220
+ readonly input: Record<PropertyKey, unknown>
2221
+ readonly options: ParseOptions
2222
+ readonly out: Record<PropertyKey, unknown>
2223
+ issues: Array<SchemaIssue.Issue> | undefined
2224
+ }, ParsedProperty>()({
2225
+ onItem(
2226
+ s: {
2227
+ readonly oinput: Option.Option<unknown>
2228
+ readonly input: Record<PropertyKey, unknown>
2229
+ readonly options: ParseOptions
2230
+ readonly out: Record<PropertyKey, unknown>
2231
+ issues: Array<SchemaIssue.Issue> | undefined
2232
+ },
2233
+ p
2234
+ ) {
2235
+ const value: Option.Option<unknown> = Object.hasOwn(s.input, p.name)
2236
+ ? Option.some(s.input[p.name])
2237
+ : Option.none()
2238
+ return p.parser(value, s.options)
2239
+ },
2240
+ step(s, p, exit) {
2241
+ if (exit._tag === "Failure") {
2242
+ return wrapPropertyKeyIssue(s, s.ast, p.name, exit)
2243
+ } else if (exit.value._tag === "Some") {
2244
+ internalRecord.set(s.out, p.name, exit.value.value)
2245
+ } else if (!isOptional(p.type)) {
2246
+ const issue = new SchemaIssue.Pointer([p.name], new SchemaIssue.MissingKey(p.type.context?.annotations))
2247
+ if (s.options.errors === "all") {
2248
+ if (s.issues) s.issues.push(issue)
2249
+ else s.issues = [issue]
2250
+ return
2251
+ } else {
2252
+ return Exit.fail(
2253
+ new SchemaIssue.Composite(s.ast, s.oinput, [issue])
2254
+ )
2255
+ }
2256
+ }
2257
+ }
2258
+ })
2259
+
2260
+ function mergeChecks(checks: Checks | undefined, b: AST): Checks | undefined {
2261
+ if (!checks) {
2262
+ return b.checks
2263
+ }
2264
+ if (!b.checks) {
2265
+ return checks
2266
+ }
2267
+ return [...checks, ...b.checks]
2268
+ }
2269
+
2270
+ /** @internal */
2271
+ export function struct<Fields extends Schema.Struct.Fields>(
2272
+ fields: Fields,
2273
+ checks: Checks | undefined,
2274
+ annotations?: Schema.Annotations.Annotations
2275
+ ): Objects {
2276
+ return new Objects(
2277
+ Reflect.ownKeys(fields).map((key) => {
2278
+ return new PropertySignature(key, fields[key].ast)
2279
+ }),
2280
+ [],
2281
+ annotations,
2282
+ checks
2283
+ )
2284
+ }
2285
+
2286
+ /** @internal */
2287
+ export function getAST<S extends Schema.Top>(self: S): S["ast"] {
2288
+ return self.ast
2289
+ }
2290
+
2291
+ /** @internal */
2292
+ export function tuple<Elements extends Schema.Tuple.Elements>(
2293
+ elements: Elements,
2294
+ checks: Checks | undefined = undefined
2295
+ ): Arrays {
2296
+ return new Arrays(false, elements.map((e) => e.ast), [], undefined, checks)
2297
+ }
2298
+
2299
+ /** @internal */
2300
+ export function union<Members extends ReadonlyArray<Schema.Top>>(
2301
+ members: Members,
2302
+ mode: "anyOf" | "oneOf",
2303
+ checks: Checks | undefined
2304
+ ): Union<Members[number]["ast"]> {
2305
+ return new Union(members.map(getAST), mode, undefined, checks)
2306
+ }
2307
+
2308
+ /** @internal */
2309
+ export function structWithRest(ast: Objects, records: ReadonlyArray<Objects>): Objects {
2310
+ if (ast.encoding || records.some((r) => r.encoding)) {
2311
+ throw new Error("StructWithRest does not support encodings")
2312
+ }
2313
+ let propertySignatures = ast.propertySignatures
2314
+ let indexSignatures = ast.indexSignatures
2315
+ let checks = ast.checks
2316
+ for (const r of records) {
2317
+ propertySignatures = propertySignatures.concat(r.propertySignatures)
2318
+ indexSignatures = indexSignatures.concat(r.indexSignatures)
2319
+ checks = mergeChecks(checks, r)
2320
+ }
2321
+ return new Objects(propertySignatures, indexSignatures, undefined, checks)
2322
+ }
2323
+
2324
+ /** @internal */
2325
+ export function tupleWithRest(ast: Arrays, rest: ReadonlyArray<AST>): Arrays {
2326
+ if (ast.encoding) {
2327
+ throw new Error("TupleWithRest does not support encodings")
2328
+ }
2329
+ return new Arrays(ast.isMutable, ast.elements, rest, undefined, ast.checks)
2330
+ }
2331
+
2332
+ type Type =
2333
+ | "null"
2334
+ | "array"
2335
+ | "object"
2336
+ | "string"
2337
+ | "number"
2338
+ | "boolean"
2339
+ | "symbol"
2340
+ | "undefined"
2341
+ | "bigint"
2342
+ | "function"
2343
+
2344
+ /** @internal */
2345
+ export type Sentinel = {
2346
+ readonly key: PropertyKey
2347
+ readonly literal: LiteralValue | symbol
2348
+ }
2349
+
2350
+ function getCandidateTypes(ast: AST): ReadonlyArray<Type> {
2351
+ switch (ast._tag) {
2352
+ case "Null":
2353
+ return ["null"]
2354
+ case "Undefined":
2355
+ case "Void":
2356
+ return ["undefined"]
2357
+ case "String":
2358
+ case "TemplateLiteral":
2359
+ return ["string"]
2360
+ case "Number":
2361
+ return ["number"]
2362
+ case "Boolean":
2363
+ return ["boolean"]
2364
+ case "Symbol":
2365
+ case "UniqueSymbol":
2366
+ return ["symbol"]
2367
+ case "BigInt":
2368
+ return ["bigint"]
2369
+ case "Arrays":
2370
+ return ["array"]
2371
+ case "ObjectKeyword":
2372
+ return ["object", "array", "function"]
2373
+ case "Objects":
2374
+ return ast.propertySignatures.length || ast.indexSignatures.length
2375
+ ? ["object"]
2376
+ : ["object", "array"]
2377
+ case "Enum":
2378
+ return Array.from(new Set(ast.enums.map(([, v]) => typeof v)))
2379
+ case "Literal":
2380
+ return [typeof ast.literal]
2381
+ case "Union":
2382
+ return Array.from(new Set(ast.types.flatMap(getCandidateTypes)))
2383
+ default:
2384
+ return [
2385
+ "null",
2386
+ "undefined",
2387
+ "string",
2388
+ "number",
2389
+ "boolean",
2390
+ "symbol",
2391
+ "bigint",
2392
+ "object",
2393
+ "array",
2394
+ "function"
2395
+ ]
2396
+ }
2397
+ }
2398
+
2399
+ /** @internal */
2400
+ export function collectSentinels(ast: AST): Array<Sentinel> {
2401
+ switch (ast._tag) {
2402
+ default:
2403
+ return []
2404
+ case "Declaration": {
2405
+ const s = ast.annotations?.["~sentinels"]
2406
+ return Array.isArray(s) ? s : []
2407
+ }
2408
+ case "Objects":
2409
+ return ast.propertySignatures.flatMap((ps): Array<Sentinel> => {
2410
+ const type = ps.type
2411
+ if (!isOptional(type)) {
2412
+ if (isLiteral(type)) {
2413
+ return [{ key: ps.name, literal: type.literal }]
2414
+ }
2415
+ if (isUniqueSymbol(type)) {
2416
+ return [{ key: ps.name, literal: type.symbol }]
2417
+ }
2418
+ }
2419
+ return []
2420
+ })
2421
+ case "Arrays":
2422
+ return ast.elements.flatMap((e, i) => {
2423
+ return isLiteral(e) && !isOptional(e)
2424
+ ? [{ key: i, literal: e.literal }]
2425
+ : []
2426
+ })
2427
+ case "Suspend":
2428
+ return collectSentinels(ast.thunk())
2429
+ }
2430
+ }
2431
+
2432
+ type CandidateIndex = {
2433
+ byType?: { [K in Type]?: Array<AST> }
2434
+ bySentinel?: Map<PropertyKey, Map<LiteralValue | symbol, Array<AST>>>
2435
+ otherwise?: { [K in Type]?: Array<AST> }
2436
+ }
2437
+
2438
+ const candidateIndexCache = new WeakMap<ReadonlyArray<AST>, CandidateIndex>()
2439
+
2440
+ function getIndex(types: ReadonlyArray<AST>): CandidateIndex {
2441
+ let idx = candidateIndexCache.get(types)
2442
+ if (idx) return idx
2443
+
2444
+ idx = {}
2445
+ for (const a of types) {
2446
+ const encoded = toEncoded(a)
2447
+ if (isNever(encoded)) continue
2448
+
2449
+ const types = getCandidateTypes(encoded)
2450
+ const sentinels = collectSentinels(encoded)
2451
+
2452
+ // by-type (always filled – cheap primary filter)
2453
+ idx.byType ??= {}
2454
+ for (const t of types) (idx.byType[t] ??= []).push(a)
2455
+
2456
+ if (sentinels.length > 0) { // discriminated variants
2457
+ idx.bySentinel ??= new Map()
2458
+ for (const { key, literal } of sentinels) {
2459
+ let m = idx.bySentinel.get(key)
2460
+ if (!m) idx.bySentinel.set(key, m = new Map())
2461
+ let arr = m.get(literal)
2462
+ if (!arr) m.set(literal, arr = [])
2463
+ arr.push(a)
2464
+ }
2465
+ } else { // non-discriminated
2466
+ idx.otherwise ??= {}
2467
+ for (const t of types) (idx.otherwise[t] ??= []).push(a)
2468
+ }
2469
+ }
2470
+
2471
+ candidateIndexCache.set(types, idx)
2472
+ return idx
2473
+ }
2474
+
2475
+ function filterLiterals(input: any) {
2476
+ return (ast: AST) => {
2477
+ const encoded = toEncoded(ast)
2478
+ return encoded._tag === "Literal" ?
2479
+ encoded.literal === input
2480
+ : encoded._tag === "UniqueSymbol" ?
2481
+ encoded.symbol === input
2482
+ : true
2483
+ }
2484
+ }
2485
+
2486
+ /**
2487
+ * The goal is to reduce the number of a union members that will be checked.
2488
+ * This is useful to reduce the number of issues that will be returned.
2489
+ *
2490
+ * @internal
2491
+ */
2492
+ export function getCandidates(input: any, types: ReadonlyArray<AST>): ReadonlyArray<AST> {
2493
+ const idx = getIndex(types)
2494
+ const runtimeType: Type = input === null ? "null" : Array.isArray(input) ? "array" : typeof input
2495
+
2496
+ // 1. Try sentinel-based dispatch (most selective)
2497
+ if (idx.bySentinel) {
2498
+ const base = idx.otherwise?.[runtimeType] ?? []
2499
+ if (runtimeType === "object" || runtimeType === "array") {
2500
+ for (const [k, m] of idx.bySentinel) {
2501
+ if (Object.hasOwn(input, k)) {
2502
+ const match = m.get((input as any)[k])
2503
+ if (match) return [...match, ...base].filter(filterLiterals(input))
2504
+ }
2505
+ }
2506
+ }
2507
+ return base
2508
+ }
2509
+
2510
+ // 2. Fallback: runtime-type dispatch only
2511
+ return (idx.byType?.[runtimeType] ?? []).filter(filterLiterals(input))
2512
+ }
2513
+
2514
+ /**
2515
+ * AST node representing a union of schemas.
2516
+ *
2517
+ * **Details**
2518
+ *
2519
+ * - `types` — the member AST nodes.
2520
+ * - `mode` — `"anyOf"` succeeds on the first match (like TypeScript unions);
2521
+ * `"oneOf"` requires exactly one member to match (fails if multiple do).
2522
+ *
2523
+ * During parsing, members are tried in order. An internal candidate index
2524
+ * narrows which members to try based on the runtime type of the input and
2525
+ * discriminant ("sentinel") fields, making large unions efficient.
2526
+ *
2527
+ * **Example** (Inspecting a union AST)
2528
+ *
2529
+ * ```ts
2530
+ * import { Schema, SchemaAST } from "effect"
2531
+ *
2532
+ * const schema = Schema.Union([Schema.String, Schema.Number])
2533
+ * const ast = schema.ast
2534
+ *
2535
+ * if (SchemaAST.isUnion(ast)) {
2536
+ * console.log(ast.types.length) // 2
2537
+ * console.log(ast.mode) // "anyOf"
2538
+ * }
2539
+ * ```
2540
+ *
2541
+ * @see {@link isUnion}
2542
+ * @category models
2543
+ * @since 3.10.0
2544
+ */
2545
+ export class Union<A extends AST = AST> extends Base {
2546
+ readonly _tag = "Union"
2547
+ readonly types: ReadonlyArray<A>
2548
+ readonly mode: "anyOf" | "oneOf"
2549
+ readonly encodingChecks: Checks | undefined
2550
+
2551
+ constructor(
2552
+ types: ReadonlyArray<A>,
2553
+ mode: "anyOf" | "oneOf",
2554
+ annotations?: Schema.Annotations.Annotations,
2555
+ checks?: Checks,
2556
+ encoding?: Encoding,
2557
+ context?: Context,
2558
+ encodingChecks?: Checks
2559
+ ) {
2560
+ super(annotations, checks, encoding, context)
2561
+ this.types = types
2562
+ this.mode = mode
2563
+ this.encodingChecks = encodingChecks
2564
+ }
2565
+ /** @internal */
2566
+ getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
2567
+ // oxlint-disable-next-line @typescript-eslint/no-this-alias
2568
+ const ast = this
2569
+
2570
+ return (oinput, options) => {
2571
+ if (oinput._tag === "None") {
2572
+ return Effect.succeed(oinput)
2573
+ }
2574
+ const input = oinput.value
2575
+ const candidates = getCandidates(input, ast.types)
2576
+
2577
+ const state = {
2578
+ ast,
2579
+ recur,
2580
+ oinput,
2581
+ input,
2582
+ out: undefined,
2583
+ successes: [],
2584
+ issues: undefined as Arr.NonEmptyArray<SchemaIssue.Issue> | undefined,
2585
+ options
2586
+ }
2587
+ const concurrency = resolveConcurrency(options?.concurrency)
2588
+ const eff = parseUnion(state, candidates, concurrency)
2589
+ if (!eff) {
2590
+ return state.out
2591
+ ? Effect.succeed(state.out)
2592
+ : Effect.fail(new SchemaIssue.AnyOf(ast, input, state.issues ?? []))
2593
+ }
2594
+ return Effect.flatMap(eff, (_) => {
2595
+ return state.out
2596
+ ? Effect.succeed(state.out)
2597
+ : Effect.fail(new SchemaIssue.AnyOf(ast, input, state.issues ?? []))
2598
+ })
2599
+ }
2600
+ }
2601
+ private rebuild(recur: (ast: AST) => AST, checks: Checks | undefined, encodingChecks: Checks | undefined) {
2602
+ const types = mapOrSame(this.types, recur)
2603
+ return types === this.types ?
2604
+ this :
2605
+ new Union(types, this.mode, this.annotations, checks, undefined, this.context, encodingChecks)
2606
+ }
2607
+ /** @internal */
2608
+ recur(recur: (ast: AST) => AST) {
2609
+ return this.rebuild(recur, this.checks, this.encodingChecks)
2610
+ }
2611
+ /** @internal */
2612
+ flip(recur: (ast: AST) => AST) {
2613
+ return this.rebuild(recur, this.encodingChecks, this.checks)
2614
+ }
2615
+ /** @internal */
2616
+ getExpected(getExpected: (ast: AST) => string): string {
2617
+ const expected = this.annotations?.expected
2618
+ if (typeof expected === "string") return expected
2619
+
2620
+ if (this.types.length === 0) return "never"
2621
+
2622
+ const types = this.types.map((type) => {
2623
+ const encoded = toEncoded(type)
2624
+ switch (encoded._tag) {
2625
+ case "Arrays": {
2626
+ const literals = encoded.elements.filter(isLiteral)
2627
+ if (literals.length > 0) {
2628
+ return `${formatIsMutable(encoded.isMutable)}[ ${
2629
+ literals.map((e) => getExpected(e) + formatIsOptional(e.context?.isOptional)).join(", ")
2630
+ }, ... ]`
2631
+ }
2632
+ break
2633
+ }
2634
+ case "Objects": {
2635
+ const literals = encoded.propertySignatures.filter((ps) => isLiteral(ps.type))
2636
+ if (literals.length > 0) {
2637
+ return `{ ${
2638
+ literals.map((ps) =>
2639
+ `${formatIsMutable(ps.type.context?.isMutable)}${formatPropertyKey(ps.name)}${
2640
+ formatIsOptional(ps.type.context?.isOptional)
2641
+ }: ${getExpected(ps.type)}`
2642
+ ).join(", ")
2643
+ }, ... }`
2644
+ }
2645
+ break
2646
+ }
2647
+ }
2648
+ return getExpected(encoded)
2649
+ })
2650
+ return Array.from(new Set(types)).join(" | ")
2651
+ }
2652
+ }
2653
+
2654
+ const parseUnion = iterateEager<{
2655
+ readonly recur: (ast: AST) => SchemaParser.Parser
2656
+ readonly ast: Union
2657
+ readonly oinput: Option.Option<unknown>
2658
+ readonly input: unknown
2659
+ readonly options: ParseOptions
2660
+ out: Option.Option<unknown> | undefined
2661
+ successes: Array<AST>
2662
+ issues: Array<SchemaIssue.Issue> | undefined
2663
+ }, AST>()({
2664
+ onItem(s, ast) {
2665
+ const parser = s.recur(ast)
2666
+ return parser(s.oinput, s.options)
2667
+ },
2668
+ step(s, candidate, exit) {
2669
+ if (exit._tag === "Failure") {
2670
+ const issue = InternalSchemaCause.getSchemaIssue(exit.cause)
2671
+ if (issue === undefined) {
2672
+ return exit
2673
+ }
2674
+ if (s.issues) s.issues.push(issue)
2675
+ else s.issues = [issue]
2676
+ } else {
2677
+ if (s.out && s.ast.mode === "oneOf") {
2678
+ s.successes.push(candidate)
2679
+ return Exit.fail(new SchemaIssue.OneOf(s.ast, s.input, s.successes))
2680
+ }
2681
+ s.out = exit.value
2682
+ s.successes.push(candidate)
2683
+ if (s.ast.mode === "anyOf") {
2684
+ return Exit.void
2685
+ }
2686
+ }
2687
+ }
2688
+ })
2689
+
2690
+ const nonFiniteLiterals = new Union([
2691
+ new Literal("Infinity"),
2692
+ new Literal("-Infinity"),
2693
+ new Literal("NaN")
2694
+ ], "anyOf")
2695
+
2696
+ const numberToJson = new Link(
2697
+ new Union([number, nonFiniteLiterals], "anyOf"),
2698
+ new SchemaTransformation.Transformation(
2699
+ SchemaGetter.Number(),
2700
+ SchemaGetter.transform((n) => globalThis.Number.isFinite(n) ? n : globalThis.String(n))
2701
+ )
2702
+ )
2703
+
2704
+ function formatIsMutable(isMutable: boolean | undefined): string {
2705
+ return isMutable ? "" : "readonly "
2706
+ }
2707
+
2708
+ function formatIsOptional(isOptional: boolean | undefined): string {
2709
+ return isOptional ? "?" : ""
2710
+ }
2711
+
2712
+ /** @internal */
2713
+ export function memoizeThunk<A>(f: () => A): () => A {
2714
+ let done = false
2715
+ let a: A
2716
+ return () => {
2717
+ if (done) {
2718
+ return a
2719
+ }
2720
+ a = f()
2721
+ done = true
2722
+ return a
2723
+ }
2724
+ }
2725
+
2726
+ /**
2727
+ * AST node for lazy/recursive schemas.
2728
+ *
2729
+ * **Details**
2730
+ *
2731
+ * Wraps a thunk (`() => AST`) that is memoized on first call. Use this to
2732
+ * define recursive or mutually recursive schemas without infinite loops at
2733
+ * construction time.
2734
+ *
2735
+ * **Example** (Defining recursive schema ASTs)
2736
+ *
2737
+ * ```ts
2738
+ * import { Schema, SchemaAST } from "effect"
2739
+ *
2740
+ * interface Category {
2741
+ * readonly name: string
2742
+ * readonly children: ReadonlyArray<Category>
2743
+ * }
2744
+ *
2745
+ * const Category = Schema.Struct({
2746
+ * name: Schema.String,
2747
+ * children: Schema.Array(Schema.suspend((): Schema.Codec<Category> => Category))
2748
+ * })
2749
+ *
2750
+ * // The recursive branch is a Suspend node
2751
+ * ```
2752
+ *
2753
+ * @see {@link isSuspend}
2754
+ * @category models
2755
+ * @since 3.10.0
2756
+ */
2757
+ export class Suspend extends Base {
2758
+ readonly _tag = "Suspend"
2759
+ readonly thunk: () => AST
2760
+
2761
+ constructor(
2762
+ thunk: () => AST,
2763
+ annotations?: Schema.Annotations.Annotations,
2764
+ checks?: Checks,
2765
+ encoding?: Encoding,
2766
+ context?: Context
2767
+ ) {
2768
+ if (checks !== undefined) {
2769
+ throw new Error("Cannot add checks to Suspend")
2770
+ }
2771
+ super(annotations, undefined, encoding, context)
2772
+ this.thunk = memoizeThunk(thunk)
2773
+ }
2774
+ /** @internal */
2775
+ getParser(recur: (ast: AST) => SchemaParser.Parser): SchemaParser.Parser {
2776
+ return recur(this.thunk())
2777
+ }
2778
+ /** @internal */
2779
+ recur(recur: (ast: AST) => AST) {
2780
+ return new Suspend(
2781
+ () => recur(this.thunk()),
2782
+ this.annotations,
2783
+ undefined,
2784
+ undefined,
2785
+ this.context
2786
+ )
2787
+ }
2788
+ /** @internal */
2789
+ getExpected(getExpected: (ast: AST) => string): string {
2790
+ return getExpected(this.thunk())
2791
+ }
2792
+ }
2793
+
2794
+ /** @internal */
2795
+ export function getEncodingChecks(ast: AST): Checks | undefined {
2796
+ switch (ast._tag) {
2797
+ case "Declaration":
2798
+ case "Arrays":
2799
+ case "Objects":
2800
+ case "Union":
2801
+ return ast.encodingChecks
2802
+ default:
2803
+ return undefined
2804
+ }
2805
+ }
2806
+
2807
+ // -----------------------------------------------------------------------------
2808
+ // Checks
2809
+ // -----------------------------------------------------------------------------
2810
+
2811
+ /**
2812
+ * Represents a single validation check attached to an AST node.
2813
+ *
2814
+ * **Details**
2815
+ *
2816
+ * - `run` — the validation function. Returns `undefined` on success, or an
2817
+ * `Issue` on failure.
2818
+ * - `annotations` — optional filter-level metadata (expected message, meta
2819
+ * tags, arbitrary constraint hints).
2820
+ * - `aborted` — when `true`, parsing stops immediately after this filter
2821
+ * fails (no further checks run).
2822
+ *
2823
+ * Use `.annotate()` to add metadata and `.abort()` to mark as aborting.
2824
+ * Combine with another check via `.and()` to form a {@link FilterGroup}.
2825
+ *
2826
+ * @see {@link FilterGroup}
2827
+ * @see {@link Check}
2828
+ * @see {@link isPattern}
2829
+ * @category models
2830
+ * @since 4.0.0
2831
+ */
2832
+ export class Filter<in E> extends Pipeable.Class {
2833
+ readonly _tag = "Filter"
2834
+ readonly run: (input: E, self: AST, options: ParseOptions) => SchemaIssue.Issue | undefined
2835
+ readonly annotations: Schema.Annotations.Filter | undefined
2836
+ /**
2837
+ * Whether the parsing process should be aborted after this check has failed.
2838
+ */
2839
+ readonly aborted: boolean
2840
+
2841
+ constructor(
2842
+ run: (input: E, self: AST, options: ParseOptions) => SchemaIssue.Issue | undefined,
2843
+ annotations: Schema.Annotations.Filter | undefined = undefined,
2844
+ /**
2845
+ * Whether the parsing process should be aborted after this check has failed.
2846
+ */
2847
+ aborted: boolean = false
2848
+ ) {
2849
+ super()
2850
+ this.run = run
2851
+ this.annotations = annotations
2852
+ this.aborted = aborted
2853
+ }
2854
+ annotate(annotations: Schema.Annotations.Filter): Filter<E> {
2855
+ return new Filter(this.run, { ...this.annotations, ...annotations }, this.aborted)
2856
+ }
2857
+ abort(): Filter<E> {
2858
+ return new Filter(this.run, this.annotations, true)
2859
+ }
2860
+ and(other: Check<E>, annotations?: Schema.Annotations.Filter): FilterGroup<E>
2861
+ and(other: Check<E>, annotations?: Schema.Annotations.Filter): FilterGroup<E> {
2862
+ return new FilterGroup([this, other], annotations)
2863
+ }
2864
+ }
2865
+
2866
+ /**
2867
+ * Represents a composite validation check grouping multiple {@link Check} values.
2868
+ *
2869
+ * **Details**
2870
+ *
2871
+ * Created by calling `.and()` on a {@link Filter} or another `FilterGroup`.
2872
+ * All inner checks are run; failures from aborted filters still stop
2873
+ * evaluation.
2874
+ *
2875
+ * @see {@link Filter}
2876
+ * @see {@link Check}
2877
+ * @category models
2878
+ * @since 4.0.0
2879
+ */
2880
+ export class FilterGroup<in E> extends Pipeable.Class {
2881
+ readonly _tag = "FilterGroup"
2882
+ readonly checks: readonly [Check<E>, ...Array<Check<E>>]
2883
+ readonly annotations: Schema.Annotations.Filter | undefined
2884
+
2885
+ constructor(
2886
+ checks: readonly [Check<E>, ...Array<Check<E>>],
2887
+ annotations: Schema.Annotations.Filter | undefined = undefined
2888
+ ) {
2889
+ super()
2890
+ this.checks = checks
2891
+ this.annotations = annotations
2892
+ }
2893
+ annotate(annotations: Schema.Annotations.Filter): FilterGroup<E> {
2894
+ return new FilterGroup(this.checks, { ...this.annotations, ...annotations })
2895
+ }
2896
+ and(other: Check<E>, annotations?: Schema.Annotations.Filter): FilterGroup<E>
2897
+ and(other: Check<E>, annotations?: Schema.Annotations.Filter): FilterGroup<E> {
2898
+ return new FilterGroup([this, other], annotations)
2899
+ }
2900
+ }
2901
+
2902
+ /**
2903
+ * A validation check — either a single {@link Filter} or a composite
2904
+ * {@link FilterGroup}.
2905
+ *
2906
+ * **Details**
2907
+ *
2908
+ * Stored in the {@link Checks} array on {@link Base.checks}.
2909
+ *
2910
+ * @see {@link Filter}
2911
+ * @see {@link FilterGroup}
2912
+ * @category models
2913
+ * @since 4.0.0
2914
+ */
2915
+ export type Check<T> = Filter<T> | FilterGroup<T>
2916
+
2917
+ /** @internal */
2918
+ export function makeFilter<T>(
2919
+ filter: (input: T, ast: AST, options: ParseOptions) => Schema.FilterOutput,
2920
+ annotations?: Schema.Annotations.Filter | undefined,
2921
+ aborted: boolean = false
2922
+ ): Filter<T> {
2923
+ return new Filter(
2924
+ (input, ast, options) => SchemaIssue.make(input, ast, filter(input, ast, options)),
2925
+ annotations,
2926
+ aborted
2927
+ )
2928
+ }
2929
+
2930
+ /** @internal */
2931
+ export function makeFilterByGuard<T extends E, E>(
2932
+ is: (value: E) => value is T,
2933
+ annotations?: Schema.Annotations.Filter
2934
+ ): Filter<any> {
2935
+ return new Filter(
2936
+ (input: E) => is(input) ? undefined : new SchemaIssue.InvalidValue(Option.some(input)),
2937
+ annotations,
2938
+ true // after a guard, we always want to abort
2939
+ )
2940
+ }
2941
+
2942
+ /**
2943
+ * Creates a {@link Filter} that validates strings by running `RegExp.test`.
2944
+ *
2945
+ * **When to use**
2946
+ *
2947
+ * Use when string validation should be represented as a schema `Filter` backed
2948
+ * by a regular expression.
2949
+ *
2950
+ * **Details**
2951
+ *
2952
+ * The filter can be used with `Schema.filter` or attached directly to a
2953
+ * `String` AST node through checks. The regular expression source is stored in
2954
+ * annotations for serialization and arbitrary generation.
2955
+ *
2956
+ * **Gotchas**
2957
+ *
2958
+ * Use a non-global, non-sticky regular expression, or reset `lastIndex`
2959
+ * yourself, because `RegExp.test` is stateful for expressions with the `g` or
2960
+ * `y` flag.
2961
+ *
2962
+ * **Example** (Validating an email pattern)
2963
+ *
2964
+ * ```ts
2965
+ * import { SchemaAST } from "effect"
2966
+ *
2967
+ * const emailFilter = SchemaAST.isPattern(/^[^@]+@[^@]+$/)
2968
+ * ```
2969
+ *
2970
+ * @see {@link Filter}
2971
+ * @category constructors
2972
+ * @since 4.0.0
2973
+ */
2974
+ export function isPattern(regExp: globalThis.RegExp, annotations?: Schema.Annotations.Filter) {
2975
+ const source = regExp.source
2976
+ return makeFilter(
2977
+ (s: string) => regExp.test(s),
2978
+ {
2979
+ expected: `a string matching the RegExp ${source}`,
2980
+ meta: {
2981
+ _tag: "isPattern",
2982
+ regExp
2983
+ },
2984
+ arbitrary: {
2985
+ constraint: {
2986
+ patterns: [regExp.source]
2987
+ }
2988
+ },
2989
+ ...annotations
2990
+ }
2991
+ )
2992
+ }
2993
+
2994
+ function modifyOwnPropertyDescriptors<A extends AST>(
2995
+ ast: A,
2996
+ f: (
2997
+ d: { [P in keyof A]: TypedPropertyDescriptor<A[P]> }
2998
+ ) => void
2999
+ ): A {
3000
+ const d = Object.getOwnPropertyDescriptors(ast)
3001
+ f(d)
3002
+ return Object.create(Object.getPrototypeOf(ast), d)
3003
+ }
3004
+
3005
+ /** @internal */
3006
+ export function replaceEncoding<A extends AST>(ast: A, encoding: Encoding | undefined): A {
3007
+ if (ast.encoding === encoding) {
3008
+ return ast
3009
+ }
3010
+ return modifyOwnPropertyDescriptors(ast, (d) => {
3011
+ d.encoding.value = encoding
3012
+ })
3013
+ }
3014
+
3015
+ /** @internal */
3016
+ export function replaceContext<A extends AST>(ast: A, context: Context | undefined): A {
3017
+ if (ast.context === context) {
3018
+ return ast
3019
+ }
3020
+ return modifyOwnPropertyDescriptors(ast, (d) => {
3021
+ d.context.value = context
3022
+ })
3023
+ }
3024
+
3025
+ /** @internal */
3026
+ export function getLastEncoding(ast: AST): AST {
3027
+ return ast.encoding ? getLastEncoding(ast.encoding[ast.encoding.length - 1].to) : ast
3028
+ }
3029
+
3030
+ /** @internal */
3031
+ export function annotate<A extends AST>(ast: A, annotations: Schema.Annotations.Annotations): A {
3032
+ if (ast.checks) {
3033
+ const last = ast.checks[ast.checks.length - 1]
3034
+ return replaceChecks(ast, Arr.append(ast.checks.slice(0, -1), last.annotate(annotations)))
3035
+ }
3036
+ return modifyOwnPropertyDescriptors(ast, (d) => {
3037
+ d.annotations.value = { ...d.annotations.value, ...annotations }
3038
+ })
3039
+ }
3040
+
3041
+ /** @internal */
3042
+ export function replaceChecks<A extends AST>(ast: A, checks: Checks | undefined): A {
3043
+ if (ast._tag === "Suspend" && checks !== undefined) {
3044
+ throw new Error("Cannot add checks to Suspend")
3045
+ }
3046
+ if (ast.checks === checks) {
3047
+ return ast
3048
+ }
3049
+ return modifyOwnPropertyDescriptors(ast, (d) => {
3050
+ d.checks.value = checks
3051
+ })
3052
+ }
3053
+
3054
+ /** @internal */
3055
+ export function appendChecks<A extends AST>(ast: A, checks: Checks): A {
3056
+ return replaceChecks(ast, ast.checks ? [...ast.checks, ...checks] : checks)
3057
+ }
3058
+
3059
+ function updateLastLink(encoding: Encoding, f: (ast: AST) => AST): Encoding {
3060
+ const links = encoding
3061
+ const last = links[links.length - 1]
3062
+ const to = f(last.to)
3063
+ if (to !== last.to) {
3064
+ return Arr.append(encoding.slice(0, encoding.length - 1), new Link(to, last.transformation))
3065
+ }
3066
+ return encoding
3067
+ }
3068
+
3069
+ /** @internal */
3070
+ export function applyToLastLink(f: (ast: AST) => AST) {
3071
+ return <A extends AST>(ast: A): A => ast.encoding ? replaceEncoding(ast, updateLastLink(ast.encoding, f)) : ast
3072
+ }
3073
+
3074
+ /** @internal */
3075
+ export function middlewareDecoding(
3076
+ ast: AST,
3077
+ middleware: SchemaTransformation.Middleware<any, any, any, any, any, any>
3078
+ ): AST {
3079
+ return appendTransformation(ast, middleware, toType(ast))
3080
+ }
3081
+
3082
+ /** @internal */
3083
+ export function middlewareEncoding(
3084
+ ast: AST,
3085
+ middleware: SchemaTransformation.Middleware<any, any, any, any, any, any>
3086
+ ): AST {
3087
+ return appendTransformation(toEncoded(ast), middleware, ast)
3088
+ }
3089
+
3090
+ function appendTransformation<A extends AST>(
3091
+ from: AST,
3092
+ transformation:
3093
+ | SchemaTransformation.Transformation<any, any, any, any>
3094
+ | SchemaTransformation.Middleware<any, any, any, any, any, any>,
3095
+ to: A
3096
+ ): A {
3097
+ const link = new Link(from, transformation)
3098
+ return replaceEncoding(to, to.encoding ? [...to.encoding, link] : [link])
3099
+ }
3100
+
3101
+ /** @internal */
3102
+ export function brand(ast: AST, brand: string): AST {
3103
+ const existing = InternalAnnotations.resolveBrands(ast)
3104
+ const brands = existing ? [...existing, brand] : [brand]
3105
+ return annotate(ast, { brands })
3106
+ }
3107
+
3108
+ /**
3109
+ * Maps over the array but will return the original array if no changes occur.
3110
+ * @internal
3111
+ */
3112
+ export function mapOrSame<A>(as: Arr.NonEmptyReadonlyArray<A>, f: (a: A) => A): Arr.NonEmptyReadonlyArray<A>
3113
+ export function mapOrSame<A>(as: ReadonlyArray<A>, f: (a: A) => A): ReadonlyArray<A>
3114
+ export function mapOrSame<A>(as: ReadonlyArray<A>, f: (a: A) => A): ReadonlyArray<A> {
3115
+ let changed = false
3116
+ const out: Array<A> = new Array(as.length)
3117
+ for (let i = 0; i < as.length; i++) {
3118
+ const a = as[i]
3119
+ const fa = f(a)
3120
+ if (fa !== a) {
3121
+ changed = true
3122
+ }
3123
+ out[i] = fa
3124
+ }
3125
+ return changed ? out : as
3126
+ }
3127
+
3128
+ /** @internal */
3129
+ export function annotateKey<A extends AST>(ast: A, annotations: Schema.Annotations.Key<unknown>): A {
3130
+ const context = ast.context ?
3131
+ new Context(
3132
+ ast.context.isOptional,
3133
+ ast.context.isMutable,
3134
+ ast.context.defaultValue,
3135
+ { ...ast.context.annotations, ...annotations }
3136
+ ) :
3137
+ new Context(false, false, undefined, annotations)
3138
+ return replaceContext(ast, context)
3139
+ }
3140
+
3141
+ /** @internal */
3142
+ export const optionalKeyLastLink = applyToLastLink(optionalKey)
3143
+
3144
+ /**
3145
+ * Marks an AST node's property key as optional by setting
3146
+ * {@link Context.isOptional} to `true`.
3147
+ *
3148
+ * **Details**
3149
+ *
3150
+ * Also propagates the optional flag through the last link of the encoding
3151
+ * chain if present.
3152
+ *
3153
+ * @see {@link isOptional}
3154
+ * @see {@link Context}
3155
+ * @category transforming
3156
+ * @since 4.0.0
3157
+ */
3158
+ export function optionalKey<A extends AST>(ast: A): A {
3159
+ const context = ast.context ?
3160
+ ast.context.isOptional === false ?
3161
+ new Context(true, ast.context.isMutable, ast.context.defaultValue, ast.context.annotations) :
3162
+ ast.context :
3163
+ new Context(true, false)
3164
+ return optionalKeyLastLink(replaceContext(ast, context))
3165
+ }
3166
+
3167
+ const mutableKeyLastLink = applyToLastLink(mutableKey)
3168
+
3169
+ /** @internal */
3170
+ export function mutableKey<A extends AST>(ast: A): A {
3171
+ const context = ast.context ?
3172
+ ast.context.isMutable === false ?
3173
+ new Context(ast.context.isOptional, true, ast.context.defaultValue, ast.context.annotations) :
3174
+ ast.context :
3175
+ new Context(false, true)
3176
+ return mutableKeyLastLink(replaceContext(ast, context))
3177
+ }
3178
+
3179
+ /** @internal */
3180
+ export function withConstructorDefault<A extends AST>(
3181
+ ast: A,
3182
+ defaultValue: Effect.Effect<unknown, SchemaIssue.Issue>
3183
+ ): A {
3184
+ const transformation = new SchemaTransformation.Transformation(
3185
+ SchemaGetter.withDefault(defaultValue),
3186
+ SchemaGetter.passthrough()
3187
+ )
3188
+ const encoding: Encoding = [new Link(unknown, transformation)]
3189
+ const context = ast.context ?
3190
+ new Context(ast.context.isOptional, ast.context.isMutable, encoding, ast.context.annotations) :
3191
+ new Context(false, false, encoding)
3192
+ return replaceContext(ast, context)
3193
+ }
3194
+
3195
+ /**
3196
+ * Attaches a `Transformation` to the `to` AST, making it decode from the
3197
+ * `from` AST and encode back to it.
3198
+ *
3199
+ * **Details**
3200
+ *
3201
+ * This is the low-level primitive behind `Schema.transform` and
3202
+ * `Schema.transformOrFail`. It appends a {@link Link} to the `to` node's
3203
+ * encoding chain.
3204
+ *
3205
+ * - Returns a new AST with the same type as `to`.
3206
+ *
3207
+ * @see {@link Link}
3208
+ * @see {@link Encoding}
3209
+ * @see {@link flip}
3210
+ * @category transforming
3211
+ * @since 4.0.0
3212
+ */
3213
+ export function decodeTo<A extends AST>(
3214
+ from: AST,
3215
+ to: A,
3216
+ transformation: SchemaTransformation.Transformation<any, any, any, any>
3217
+ ): A {
3218
+ return appendTransformation(from, transformation, to)
3219
+ }
3220
+
3221
+ function parseParameter(ast: AST): {
3222
+ literals: ReadonlyArray<PropertyKey>
3223
+ parameters: ReadonlyArray<AST>
3224
+ } {
3225
+ switch (ast._tag) {
3226
+ case "Literal":
3227
+ return {
3228
+ literals: Predicate.isPropertyKey(ast.literal) ? [ast.literal] : [],
3229
+ parameters: []
3230
+ }
3231
+ case "UniqueSymbol":
3232
+ return {
3233
+ literals: [ast.symbol],
3234
+ parameters: []
3235
+ }
3236
+ case "String":
3237
+ case "Number":
3238
+ case "Symbol":
3239
+ case "TemplateLiteral":
3240
+ return {
3241
+ literals: [],
3242
+ parameters: [ast]
3243
+ }
3244
+ case "Union": {
3245
+ const out: {
3246
+ literals: ReadonlyArray<PropertyKey>
3247
+ parameters: ReadonlyArray<AST>
3248
+ } = { literals: [], parameters: [] }
3249
+ for (let i = 0; i < ast.types.length; i++) {
3250
+ const parsed = parseParameter(ast.types[i])
3251
+ out.literals = out.literals.concat(parsed.literals)
3252
+ out.parameters = out.parameters.concat(parsed.parameters)
3253
+ }
3254
+ return out
3255
+ }
3256
+ }
3257
+ return { literals: [], parameters: [] }
3258
+ }
3259
+
3260
+ /** @internal */
3261
+ export function record(key: AST, value: AST, keyValueCombiner: KeyValueCombiner | undefined): Objects {
3262
+ const { literals, parameters: indexSignatures } = parseParameter(key)
3263
+ return new Objects(
3264
+ literals.map((literal) => new PropertySignature(literal, value)),
3265
+ indexSignatures.map((parameter) => new IndexSignature(parameter, value, keyValueCombiner))
3266
+ )
3267
+ }
3268
+
3269
+ // -------------------------------------------------------------------------------------
3270
+ // Public APIs
3271
+ // -------------------------------------------------------------------------------------
3272
+
3273
+ /**
3274
+ * Returns `true` if the AST node represents an optional property.
3275
+ *
3276
+ * **Details**
3277
+ *
3278
+ * Checks `ast.context?.isOptional`. Defaults to `false` when no
3279
+ * {@link Context} is set.
3280
+ *
3281
+ * @see {@link optionalKey}
3282
+ * @see {@link Context}
3283
+ * @category predicates
3284
+ * @since 4.0.0
3285
+ */
3286
+ export function isOptional(ast: AST): boolean {
3287
+ return ast.context?.isOptional ?? false
3288
+ }
3289
+
3290
+ /** @internal */
3291
+ export function isMutable(ast: AST): boolean {
3292
+ return ast.context?.isMutable ?? false
3293
+ }
3294
+
3295
+ /**
3296
+ * Strips all encoding transformations from an AST, returning the decoded
3297
+ * (type-level) representation.
3298
+ *
3299
+ * **Details**
3300
+ *
3301
+ * - Memoized: same input reference → same output reference.
3302
+ * - Recursively walks into composite nodes ({@link Arrays}, {@link Objects},
3303
+ * {@link Union}, {@link Suspend}).
3304
+ *
3305
+ * **Example** (Getting the type AST)
3306
+ *
3307
+ * ```ts
3308
+ * import { Schema, SchemaAST } from "effect"
3309
+ *
3310
+ * const schema = Schema.NumberFromString
3311
+ * const typeAst = SchemaAST.toType(schema.ast)
3312
+ * console.log(typeAst._tag) // "Number"
3313
+ * ```
3314
+ *
3315
+ * @see {@link toEncoded}
3316
+ * @see {@link flip}
3317
+ * @category transforming
3318
+ * @since 4.0.0
3319
+ */
3320
+ export const toType = memoize(<A extends AST>(ast: A): A => {
3321
+ if (ast.encoding) {
3322
+ return toType(replaceEncoding(ast, undefined))
3323
+ }
3324
+ const out: any = ast
3325
+ const type = out.recur?.(toType) ?? out
3326
+ if (getEncodingChecks(type)) {
3327
+ return modifyOwnPropertyDescriptors(type, (d) => {
3328
+ d.encodingChecks.value = undefined
3329
+ })
3330
+ }
3331
+ return type
3332
+ })
3333
+
3334
+ /**
3335
+ * Returns the encoded (wire-format) AST by flipping and then stripping
3336
+ * encodings.
3337
+ *
3338
+ * **Details**
3339
+ *
3340
+ * Equivalent to `toType(flip(ast))`. This gives you the AST that describes
3341
+ * the shape of the serialized/encoded data.
3342
+ *
3343
+ * - Memoized: same input reference → same output reference.
3344
+ *
3345
+ * **Example** (Getting the encoded AST)
3346
+ *
3347
+ * ```ts
3348
+ * import { Schema, SchemaAST } from "effect"
3349
+ *
3350
+ * const schema = Schema.NumberFromString
3351
+ * const encodedAst = SchemaAST.toEncoded(schema.ast)
3352
+ * console.log(encodedAst._tag) // "String"
3353
+ * ```
3354
+ *
3355
+ * @see {@link toType}
3356
+ * @see {@link flip}
3357
+ * @category transforming
3358
+ * @since 4.0.0
3359
+ */
3360
+ export const toEncoded = memoize((ast: AST): AST => {
3361
+ return toType(flip(ast))
3362
+ })
3363
+
3364
+ function flipEncoding(ast: AST, encoding: Encoding): AST {
3365
+ const links = encoding
3366
+ const len = links.length
3367
+ const last = links[len - 1]
3368
+ const ls: Arr.NonEmptyArray<Link> = [
3369
+ new Link(flip(replaceEncoding(ast, undefined)), links[0].transformation.flip())
3370
+ ]
3371
+ for (let i = 1; i < len; i++) {
3372
+ ls.unshift(new Link(flip(links[i - 1].to), links[i].transformation.flip()))
3373
+ }
3374
+ const to = flip(last.to)
3375
+ if (to.encoding) {
3376
+ return replaceEncoding(to, [...to.encoding, ...ls])
3377
+ } else {
3378
+ return replaceEncoding(to, ls)
3379
+ }
3380
+ }
3381
+
3382
+ /**
3383
+ * Swaps the decode and encode directions of an AST's {@link Encoding} chain.
3384
+ *
3385
+ * **Details**
3386
+ *
3387
+ * After flipping, what was decoding becomes encoding and vice versa. This is
3388
+ * the core operation behind `Schema.encode` — encoding a value is decoding
3389
+ * with a flipped SchemaAST.
3390
+ *
3391
+ * - Memoized: same input reference → same output reference.
3392
+ * - Recursively walks composite nodes.
3393
+ *
3394
+ * @see {@link toType}
3395
+ * @see {@link toEncoded}
3396
+ * @category transforming
3397
+ * @since 4.0.0
3398
+ */
3399
+ export const flip = memoize((ast: AST): AST => {
3400
+ if (ast.encoding) {
3401
+ return flipEncoding(ast, ast.encoding)
3402
+ }
3403
+ const out: any = ast
3404
+ return out.flip?.(flip) ?? out.recur?.(flip) ?? out
3405
+ })
3406
+
3407
+ /** @internal */
3408
+ export function containsUndefined(ast: AST): boolean {
3409
+ switch (ast._tag) {
3410
+ case "Undefined":
3411
+ return true
3412
+ case "Union":
3413
+ return ast.types.some(containsUndefined)
3414
+ default:
3415
+ return false
3416
+ }
3417
+ }
3418
+
3419
+ function getTemplateLiteralSource(ast: TemplateLiteral, top: boolean): string {
3420
+ return ast.encodedParts.map((part) =>
3421
+ handleTemplateLiteralASTPartParens(part, getTemplateLiteralASTPartPattern(part), top)
3422
+ ).join("")
3423
+ }
3424
+
3425
+ /** @internal */
3426
+ export const getTemplateLiteralRegExp = memoize((ast: TemplateLiteral): RegExp => {
3427
+ return new globalThis.RegExp(`^${getTemplateLiteralSource(ast, true)}$`)
3428
+ })
3429
+
3430
+ function getTemplateLiteralASTPartPattern(part: TemplateLiteralPart): string {
3431
+ switch (part._tag) {
3432
+ case "Literal":
3433
+ return RegEx.escape(globalThis.String(part.literal))
3434
+ case "String":
3435
+ return STRING_PATTERN
3436
+ case "Number":
3437
+ return FINITE_PATTERN
3438
+ case "BigInt":
3439
+ return BIGINT_PATTERN
3440
+ case "TemplateLiteral":
3441
+ return getTemplateLiteralSource(part, false)
3442
+ case "Union":
3443
+ return part.types.map(getTemplateLiteralASTPartPattern).join("|")
3444
+ }
3445
+ }
3446
+
3447
+ function handleTemplateLiteralASTPartParens(part: TemplateLiteralPart, s: string, top: boolean): string {
3448
+ if (isUnion(part)) {
3449
+ if (!top) {
3450
+ return `(?:${s})`
3451
+ }
3452
+ } else if (!top) {
3453
+ return s
3454
+ }
3455
+ return `(${s})`
3456
+ }
3457
+
3458
+ function fromConst<const T>(
3459
+ ast: AST,
3460
+ value: T
3461
+ ): SchemaParser.Parser {
3462
+ const succeed = Effect.succeedSome(value)
3463
+ return (oinput) => {
3464
+ if (oinput._tag === "None") {
3465
+ return Effect.succeedNone
3466
+ }
3467
+ return oinput.value === value
3468
+ ? succeed
3469
+ : Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
3470
+ }
3471
+ }
3472
+
3473
+ function fromRefinement<T>(
3474
+ ast: AST,
3475
+ refinement: (input: unknown) => input is T
3476
+ ): SchemaParser.Parser {
3477
+ return (oinput) => {
3478
+ if (oinput._tag === "None") {
3479
+ return Effect.succeedNone
3480
+ }
3481
+ return refinement(oinput.value)
3482
+ ? Effect.succeed(oinput)
3483
+ : Effect.fail(new SchemaIssue.InvalidType(ast, oinput))
3484
+ }
3485
+ }
3486
+
3487
+ /** @internal */
3488
+ export const enumsToLiterals = memoize((ast: Enum): Union<Literal> => {
3489
+ return new Union(
3490
+ ast.enums.map((e) => new Literal(e[1], { title: e[0] })),
3491
+ "anyOf"
3492
+ )
3493
+ })
3494
+
3495
+ /** @internal */
3496
+ export function toCodec(f: (ast: AST) => AST) {
3497
+ function out(ast: AST): AST {
3498
+ return ast.encoding ? replaceEncoding(ast, updateLastLink(ast.encoding, out)) : f(ast)
3499
+ }
3500
+ return memoize(out)
3501
+ }
3502
+
3503
+ const indexSignatureParameterFromString = toCodec((ast) => {
3504
+ switch (ast._tag) {
3505
+ default:
3506
+ return ast
3507
+ case "Number":
3508
+ return ast.toCodecStringTree()
3509
+ case "Union":
3510
+ return ast.recur(indexSignatureParameterFromString)
3511
+ }
3512
+ })
3513
+
3514
+ const templateLiteralPartFromString = toCodec((ast) => {
3515
+ switch (ast._tag) {
3516
+ default:
3517
+ return ast
3518
+ case "String":
3519
+ case "TemplateLiteral":
3520
+ return ast
3521
+ case "BigInt":
3522
+ case "Number":
3523
+ case "Literal":
3524
+ return ast.toCodecStringTree()
3525
+ case "Union":
3526
+ return ast.recur(templateLiteralPartFromString)
3527
+ }
3528
+ })
3529
+
3530
+ /**
3531
+ * any string, including newlines
3532
+ * @internal
3533
+ */
3534
+ export const STRING_PATTERN = "[\\s\\S]*?"
3535
+
3536
+ const isStringFiniteRegExp = new globalThis.RegExp(`^${FINITE_PATTERN}$`)
3537
+
3538
+ /** @internal */
3539
+ export function isStringFinite(annotations?: Schema.Annotations.Filter) {
3540
+ return isPattern(
3541
+ isStringFiniteRegExp,
3542
+ {
3543
+ expected: "a string representing a finite number",
3544
+ meta: {
3545
+ _tag: "isStringFinite",
3546
+ regExp: isStringFiniteRegExp
3547
+ },
3548
+ ...annotations
3549
+ }
3550
+ )
3551
+ }
3552
+
3553
+ const finiteString = appendChecks(string, [isStringFinite()])
3554
+
3555
+ const finiteToString = new Link(
3556
+ finiteString,
3557
+ SchemaTransformation.numberFromString
3558
+ )
3559
+
3560
+ const numberToString = new Link(
3561
+ new Union([finiteString, nonFiniteLiterals], "anyOf"),
3562
+ SchemaTransformation.numberFromString
3563
+ )
3564
+
3565
+ /**
3566
+ * signed integer only (no leading "+" because TypeScript doesn't support it)
3567
+ */
3568
+ const BIGINT_PATTERN = "-?\\d+"
3569
+
3570
+ const isStringBigIntRegExp = new globalThis.RegExp(`^${BIGINT_PATTERN}$`)
3571
+
3572
+ /** @internal */
3573
+ export function isStringBigInt(annotations?: Schema.Annotations.Filter) {
3574
+ return isPattern(
3575
+ isStringBigIntRegExp,
3576
+ {
3577
+ expected: "a string representing a bigint",
3578
+ meta: {
3579
+ _tag: "isStringBigInt",
3580
+ regExp: isStringBigIntRegExp
3581
+ },
3582
+ ...annotations
3583
+ }
3584
+ )
3585
+ }
3586
+
3587
+ /** @internal */
3588
+ export const bigIntString = appendChecks(string, [isStringBigInt({
3589
+ expected: "a string representing a bigint"
3590
+ })])
3591
+
3592
+ const bigIntToString = new Link(
3593
+ bigIntString,
3594
+ SchemaTransformation.bigintFromString
3595
+ )
3596
+
3597
+ const REGEXP_PATTERN = "Symbol\\((.*)\\)"
3598
+
3599
+ const isStringSymbolRegExp = new globalThis.RegExp(`^${REGEXP_PATTERN}$`)
3600
+
3601
+ /** @internal */
3602
+ export const symbolString = appendChecks(string, [isStringSymbol()])
3603
+
3604
+ /**
3605
+ * to distinguish between Symbol and String, we need to add a check to the string keyword
3606
+ */
3607
+ const symbolToString = new Link(
3608
+ symbolString,
3609
+ new SchemaTransformation.Transformation(
3610
+ SchemaGetter.transform((description) => globalThis.Symbol.for(isStringSymbolRegExp.exec(description)![1])),
3611
+ SchemaGetter.transformOrFail((sym: symbol) => {
3612
+ const key = globalThis.Symbol.keyFor(sym)
3613
+ if (key !== undefined) {
3614
+ return Effect.succeed(globalThis.String(sym))
3615
+ }
3616
+ return Effect.fail(
3617
+ new SchemaIssue.Forbidden(Option.some(sym), { message: "cannot serialize to string, Symbol is not registered" })
3618
+ )
3619
+ })
3620
+ )
3621
+ )
3622
+
3623
+ /** @internal */
3624
+ export function isStringSymbol(annotations?: Schema.Annotations.Filter) {
3625
+ return isPattern(
3626
+ isStringSymbolRegExp,
3627
+ {
3628
+ expected: "a string representing a symbol",
3629
+ meta: {
3630
+ _tag: "isStringSymbol",
3631
+ regExp: isStringSymbolRegExp
3632
+ },
3633
+ ...annotations
3634
+ }
3635
+ )
3636
+ }
3637
+
3638
+ /** @internal */
3639
+ export function collectIssues<T>(
3640
+ checks: ReadonlyArray<Check<T>>,
3641
+ value: T,
3642
+ issues: Array<SchemaIssue.Issue>,
3643
+ ast: AST,
3644
+ options: ParseOptions
3645
+ ) {
3646
+ for (let i = 0; i < checks.length; i++) {
3647
+ const check = checks[i]
3648
+ if (check._tag === "FilterGroup") {
3649
+ collectIssues(check.checks, value, issues, ast, options)
3650
+ } else {
3651
+ const issue = check.run(value, ast, options)
3652
+ if (issue) {
3653
+ issues.push(new SchemaIssue.Filter(value, check, issue))
3654
+ if (check.aborted || options?.errors !== "all") {
3655
+ return
3656
+ }
3657
+ }
3658
+ }
3659
+ }
3660
+ }
3661
+
3662
+ /** @internal */
3663
+ export function runChecks<T>(
3664
+ checks: readonly [Check<T>, ...Array<Check<T>>],
3665
+ s: T
3666
+ ): Result.Result<T, SchemaIssue.Issue> {
3667
+ const issues: Array<SchemaIssue.Issue> = []
3668
+ collectIssues(checks, s, issues, unknown, { errors: "all" })
3669
+ if (Arr.isArrayNonEmpty(issues)) {
3670
+ const issue = new SchemaIssue.Composite(unknown, Option.some(s), issues)
3671
+ return Result.fail(issue)
3672
+ }
3673
+ return Result.succeed(s)
3674
+ }
3675
+
3676
+ /** @internal */
3677
+ export const ClassTypeId = "~effect/Schema/Class"
3678
+
3679
+ /** @internal */
3680
+ export const STRUCTURAL_ANNOTATION_KEY = "~structural"
3681
+
3682
+ /**
3683
+ * Returns all annotations from the AST node.
3684
+ *
3685
+ * **Details**
3686
+ *
3687
+ * If the node has {@link Checks}, returns annotations from the last check
3688
+ * (which is where user-supplied annotations end up after `.pipe(Schema.annotations(...))`).
3689
+ * Otherwise returns `Base.annotations` directly.
3690
+ *
3691
+ * **Example** (Reading annotations)
3692
+ *
3693
+ * ```ts
3694
+ * import { Schema, SchemaAST } from "effect"
3695
+ *
3696
+ * const schema = Schema.String.annotate({ title: "Name" })
3697
+ * const annotations = SchemaAST.resolve(schema.ast)
3698
+ * console.log(annotations?.title) // "Name"
3699
+ * ```
3700
+ *
3701
+ * @see {@link resolveAt}
3702
+ * @see {@link resolveIdentifier}
3703
+ * @see {@link resolveTitle}
3704
+ * @see {@link resolveDescription}
3705
+ * @category annotations
3706
+ * @since 4.0.0
3707
+ */
3708
+ export const resolve: (ast: AST) => Schema.Annotations.Annotations | undefined = InternalAnnotations.resolve
3709
+
3710
+ /**
3711
+ * Returns a single annotation value by key from the AST node.
3712
+ *
3713
+ * **Details**
3714
+ *
3715
+ * Like {@link resolve}, reads from the last check's annotations when checks
3716
+ * are present. Returns `undefined` if the key is not found.
3717
+ *
3718
+ * @see {@link resolve}
3719
+ * @category annotations
3720
+ * @since 4.0.0
3721
+ */
3722
+ export const resolveAt: <A>(key: string) => (ast: AST) => A | undefined = InternalAnnotations.resolveAt
3723
+
3724
+ /**
3725
+ * Returns the `identifier` annotation from the AST node, if set.
3726
+ *
3727
+ * **Details**
3728
+ *
3729
+ * The identifier is typically set by `Schema.annotations({ identifier: "..." })`
3730
+ * and is used for error messages and schema identification.
3731
+ *
3732
+ * @see {@link resolve}
3733
+ * @see {@link resolveTitle}
3734
+ * @category annotations
3735
+ * @since 4.0.0
3736
+ */
3737
+ export const resolveIdentifier: (ast: AST) => string | undefined = InternalAnnotations.resolveIdentifier
3738
+
3739
+ /**
3740
+ * Returns the `title` annotation from the AST node, if set.
3741
+ *
3742
+ * @see {@link resolve}
3743
+ * @see {@link resolveIdentifier}
3744
+ * @see {@link resolveDescription}
3745
+ *
3746
+ * @category annotations
3747
+ * @since 4.0.0
3748
+ */
3749
+ export const resolveTitle: (ast: AST) => string | undefined = InternalAnnotations.resolveTitle
3750
+
3751
+ /**
3752
+ * Returns the `description` annotation from the AST node, if set.
3753
+ *
3754
+ * @see {@link resolve}
3755
+ * @see {@link resolveTitle}
3756
+ * @see {@link resolveIdentifier}
3757
+ *
3758
+ * @category annotations
3759
+ * @since 4.0.0
3760
+ */
3761
+ export const resolveDescription: (ast: AST) => string | undefined = InternalAnnotations.resolveDescription
3762
+
3763
+ /**
3764
+ * Returns true if the value is a JSON value.
3765
+ *
3766
+ * When a cyclic reference is detected, returns false.
3767
+ *
3768
+ * @internal
3769
+ */
3770
+ export function isJson(u: unknown): u is Schema.Json {
3771
+ // `onPath` is the current recursion stack: nodes between the root and the
3772
+ // one being visited. A hit here means we looped back to an ancestor — a
3773
+ // real cycle, not a DAG — so the value is not JSON.
3774
+ const onPath = new Set<unknown>()
3775
+ // `validated` memoizes subtrees we've already fully checked. Without it, a
3776
+ // diamond-shaped DAG (same node reached through multiple parents) would be
3777
+ // re-traversed once per parent, which is exponential in the nesting depth.
3778
+ const validated = new Set<unknown>()
3779
+ return recur(u)
3780
+
3781
+ function recur(u: unknown): boolean {
3782
+ if (u === null || typeof u === "string" || typeof u === "boolean") {
3783
+ return true
3784
+ }
3785
+ if (typeof u === "number") {
3786
+ return globalThis.Number.isFinite(u)
3787
+ }
3788
+ if (typeof u !== "object" || u === undefined) {
3789
+ return false
3790
+ }
3791
+ if (onPath.has(u)) {
3792
+ return false
3793
+ }
3794
+ if (validated.has(u)) {
3795
+ return true
3796
+ }
3797
+ onPath.add(u)
3798
+ const ok = Array.isArray(u)
3799
+ ? u.every(recur)
3800
+ : Object.keys(u).every((key) => recur((u as Record<string, unknown>)[key]))
3801
+ // Pop on exit so siblings reaching the same node via a different path
3802
+ // don't see it as an ancestor (that would reject valid DAGs).
3803
+ onPath.delete(u)
3804
+ if (ok) {
3805
+ validated.add(u)
3806
+ }
3807
+ return ok
3808
+ }
3809
+ }
3810
+
3811
+ /** @internal */
3812
+ export const Json = new Declaration(
3813
+ [],
3814
+ () => (input, ast) =>
3815
+ isJson(input) ?
3816
+ Effect.succeed(input) :
3817
+ Effect.fail(new SchemaIssue.InvalidType(ast, Option.some(input))),
3818
+ {
3819
+ typeConstructor: {
3820
+ _tag: "effect/Json"
3821
+ },
3822
+ generation: {
3823
+ runtime: `Schema.Json`,
3824
+ Type: `Schema.Json`
3825
+ },
3826
+ expected: "JSON value",
3827
+ toCodecJson: () => new Link(unknown, SchemaTransformation.passthrough()),
3828
+ toArbitrary: () => (fc: typeof FastCheck) => fc.jsonValue()
3829
+ }
3830
+ )
3831
+
3832
+ /** @internal */
3833
+ export const MutableJson = annotate(Json, {
3834
+ typeConstructor: {
3835
+ _tag: "effect/MutableJson"
3836
+ },
3837
+ generation: {
3838
+ runtime: `Schema.MutableJson`,
3839
+ Type: `Schema.MutableJson`
3840
+ }
3841
+ })
3842
+
3843
+ /** @internal */
3844
+ export const unknownToNull = new Link(
3845
+ null_,
3846
+ new SchemaTransformation.Transformation(
3847
+ SchemaGetter.passthrough(),
3848
+ SchemaGetter.transform(() => null)
3849
+ )
3850
+ )
3851
+
3852
+ /** @internal */
3853
+ export const unknownToJson = new Link(
3854
+ Json,
3855
+ SchemaTransformation.passthrough()
3856
+ )
3857
+
3858
+ /**
3859
+ * Returns true if the value is a StringTree value.
3860
+ *
3861
+ * When a cyclic reference is detected, returns false.
3862
+ *
3863
+ * @internal
3864
+ */
3865
+ export function isStringTree(u: unknown): u is Schema.StringTree {
3866
+ const seen = new Set<unknown>()
3867
+ return recur(u)
3868
+
3869
+ function recur(u: unknown): boolean {
3870
+ if (u === undefined || typeof u === "string") {
3871
+ return true
3872
+ }
3873
+ if (typeof u !== "object" || u === null) {
3874
+ return false
3875
+ }
3876
+ if (seen.has(u)) {
3877
+ return false
3878
+ }
3879
+ seen.add(u)
3880
+ if (Array.isArray(u)) {
3881
+ return u.every(recur)
3882
+ }
3883
+ return Object.keys(u).every((key) => recur((u as Record<string, unknown>)[key]))
3884
+ }
3885
+ }
3886
+
3887
+ const StringTree = new Declaration(
3888
+ [],
3889
+ () => (input, ast) =>
3890
+ isStringTree(input) ?
3891
+ Effect.succeed(input) :
3892
+ Effect.fail(new SchemaIssue.InvalidType(ast, Option.some(input))),
3893
+ {
3894
+ expected: "StringTree",
3895
+ toCodecStringTree: () => new Link(unknown, SchemaTransformation.passthrough())
3896
+ }
3897
+ )
3898
+
3899
+ /** @internal */
3900
+ export const unknownToStringTree = new Link(
3901
+ StringTree,
3902
+ SchemaTransformation.passthrough()
3903
+ )