@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.
- package/HARNESS.md +34 -0
- package/README.md +113 -0
- package/dist/bin/effect-harness.d.ts +2 -0
- package/dist/bin/effect-harness.js +39 -0
- package/dist/bin/effect-harness.js.map +1 -0
- package/dist/src/cli/Main.d.ts +6 -0
- package/dist/src/cli/Main.js +141 -0
- package/dist/src/cli/Main.js.map +1 -0
- package/dist/src/harness/CraftSkills.d.ts +14 -0
- package/dist/src/harness/CraftSkills.js +164 -0
- package/dist/src/harness/CraftSkills.js.map +1 -0
- package/dist/src/harness/Errors.d.ts +24 -0
- package/dist/src/harness/Errors.js +26 -0
- package/dist/src/harness/Errors.js.map +1 -0
- package/dist/src/harness/GuardrailRules.d.ts +6 -0
- package/dist/src/harness/GuardrailRules.js +303 -0
- package/dist/src/harness/GuardrailRules.js.map +1 -0
- package/dist/src/harness/Guardrails.d.ts +10 -0
- package/dist/src/harness/Guardrails.js +69 -0
- package/dist/src/harness/Guardrails.js.map +1 -0
- package/dist/src/harness/Init.d.ts +9 -0
- package/dist/src/harness/Init.js +234 -0
- package/dist/src/harness/Init.js.map +1 -0
- package/dist/src/harness/Model.d.ts +44 -0
- package/dist/src/harness/Model.js +169 -0
- package/dist/src/harness/Model.js.map +1 -0
- package/dist/src/harness/ModuleSources.d.ts +5 -0
- package/dist/src/harness/ModuleSources.js +47 -0
- package/dist/src/harness/ModuleSources.js.map +1 -0
- package/dist/src/harness/PnpmWorkspace.d.ts +2 -0
- package/dist/src/harness/PnpmWorkspace.js +23 -0
- package/dist/src/harness/PnpmWorkspace.js.map +1 -0
- package/dist/src/harness/Publish.d.ts +53 -0
- package/dist/src/harness/Publish.js +282 -0
- package/dist/src/harness/Publish.js.map +1 -0
- package/dist/src/harness/SelfVerify.d.ts +4 -0
- package/dist/src/harness/SelfVerify.js +56 -0
- package/dist/src/harness/SelfVerify.js.map +1 -0
- package/dist/src/harness/SourcePin.d.ts +12 -0
- package/dist/src/harness/SourcePin.js +320 -0
- package/dist/src/harness/SourcePin.js.map +1 -0
- package/dist/src/harness/Status.d.ts +12 -0
- package/dist/src/harness/Status.js +88 -0
- package/dist/src/harness/Status.js.map +1 -0
- package/dist/src/harness/TargetVerify.d.ts +8 -0
- package/dist/src/harness/TargetVerify.js +432 -0
- package/dist/src/harness/TargetVerify.js.map +1 -0
- package/dist/src/harness/TestContract.d.ts +6 -0
- package/dist/src/harness/TestContract.js +45 -0
- package/dist/src/harness/TestContract.js.map +1 -0
- package/dist/src/platform/Json.d.ts +8 -0
- package/dist/src/platform/Json.js +35 -0
- package/dist/src/platform/Json.js.map +1 -0
- package/dist/src/platform/ManagedFiles.d.ts +8 -0
- package/dist/src/platform/ManagedFiles.js +59 -0
- package/dist/src/platform/ManagedFiles.js.map +1 -0
- package/dist/src/platform/Process.d.ts +8 -0
- package/dist/src/platform/Process.js +80 -0
- package/dist/src/platform/Process.js.map +1 -0
- package/guide/default-capabilities.md +38 -0
- package/guide/index.md +49 -0
- package/guide/setup.md +64 -0
- package/harness/default-capabilities.md +32 -0
- package/harness/exposure.md +46 -0
- package/harness/feedback/index.md +60 -0
- package/harness/index.md +22 -0
- package/harness/official-inventory.md +85 -0
- package/harness/runtime/codex/AGENTS.fragment.md +28 -0
- package/harness/runtime/codex/agents/effect-worker.md +26 -0
- package/harness/runtime/codex/skills/effect-code/SKILL.md +72 -0
- package/harness/runtime/codex/skills/effect-code/agents/openai.yaml +4 -0
- package/harness/runtime/codex/skills/effect-feedback/SKILL.md +66 -0
- package/harness/runtime/codex/skills/effect-feedback/agents/openai.yaml +4 -0
- package/harness/source.md +52 -0
- package/harness/target-agent-contract.md +205 -0
- package/package.json +68 -0
- package/repos/craft-skills.manifest.json +34 -0
- package/repos/effect/.agents/skills/grill-me/SKILL.md +43 -0
- package/repos/effect/.agents/skills/jsdocs/SKILL.md +203 -0
- package/repos/effect/.agents/skills/scratchpad/SKILL.md +44 -0
- package/repos/effect/.agents/skills/scratchpad/agents/openai.yaml +7 -0
- package/repos/effect/.agents/skills/scratchpad/scripts/extract-example.mjs +260 -0
- package/repos/effect/.changeset/add-bigdecimal-sumall-multiplyall.md +5 -0
- package/repos/effect/.changeset/add-chunk-schema.md +5 -0
- package/repos/effect/.changeset/add-command-hidden.md +19 -0
- package/repos/effect/.changeset/add-config-nested.md +5 -0
- package/repos/effect/.changeset/add-flag-hidden.md +15 -0
- package/repos/effect/.changeset/add-from-string-schemas.md +5 -0
- package/repos/effect/.changeset/add-headers-remove-many.md +5 -0
- package/repos/effect/.changeset/add-indexeddb-kvs-layer.md +5 -0
- package/repos/effect/.changeset/add-make-msgpack.md +5 -0
- package/repos/effect/.changeset/add-make-option.md +5 -0
- package/repos/effect/.changeset/add-missing-tx-modules.md +11 -0
- package/repos/effect/.changeset/add-newtype-module.md +5 -0
- package/repos/effect/.changeset/add-scalar-show-operation-id.md +5 -0
- package/repos/effect/.changeset/add-schedule-tap.md +5 -0
- package/repos/effect/.changeset/add-schema-annotate-encoded.md +5 -0
- package/repos/effect/.changeset/add-schema-array-ensure.md +5 -0
- package/repos/effect/.changeset/add-schema-bigdecimal.md +5 -0
- package/repos/effect/.changeset/add-schema-datetime.md +5 -0
- package/repos/effect/.changeset/add-schema-option-from-optional-nullor.md +5 -0
- package/repos/effect/.changeset/add-schema-option-from-undefined-nullish.md +5 -0
- package/repos/effect/.changeset/add-schema-string-encoding.md +5 -0
- package/repos/effect/.changeset/add-sql-pglite.md +5 -0
- package/repos/effect/.changeset/add-standard-jsdoc-rule.md +5 -0
- package/repos/effect/.changeset/add-stream-broadcastn.md +5 -0
- package/repos/effect/.changeset/add-unstable-encoding-export.md +5 -0
- package/repos/effect/.changeset/afraid-cobras-like.md +5 -0
- package/repos/effect/.changeset/ai-openai-config-field-leak.md +6 -0
- package/repos/effect/.changeset/ai-openai-file-nullable-fields.md +5 -0
- package/repos/effect/.changeset/anthropic-4-6-structured-output.md +5 -0
- package/repos/effect/.changeset/asyncresult-exhaustive.md +5 -0
- package/repos/effect/.changeset/atom-stream-error-type.md +5 -0
- package/repos/effect/.changeset/beige-paths-sort.md +5 -0
- package/repos/effect/.changeset/better-apples-nail.md +5 -0
- package/repos/effect/.changeset/better-rocks-arrive.md +5 -0
- package/repos/effect/.changeset/big-pans-look.md +5 -0
- package/repos/effect/.changeset/blue-dingos-greet.md +5 -0
- package/repos/effect/.changeset/blue-ligers-cheat.md +5 -0
- package/repos/effect/.changeset/blue-onions-smile.md +5 -0
- package/repos/effect/.changeset/blue-ravens-type.md +5 -0
- package/repos/effect/.changeset/blue-trams-kiss.md +7 -0
- package/repos/effect/.changeset/bold-chairs-yawn.md +5 -0
- package/repos/effect/.changeset/bold-planets-shout.md +30 -0
- package/repos/effect/.changeset/breezy-meals-see.md +5 -0
- package/repos/effect/.changeset/bright-bugs-bow.md +5 -0
- package/repos/effect/.changeset/bright-canyons-clean.md +5 -0
- package/repos/effect/.changeset/bright-dogs-fail.md +5 -0
- package/repos/effect/.changeset/bright-flags-stand.md +5 -0
- package/repos/effect/.changeset/bright-laws-teach.md +5 -0
- package/repos/effect/.changeset/bright-lemons-dance.md +5 -0
- package/repos/effect/.changeset/bright-planes-smash.md +5 -0
- package/repos/effect/.changeset/bright-rats-attend.md +5 -0
- package/repos/effect/.changeset/bright-toes-rush.md +5 -0
- package/repos/effect/.changeset/bumpy-boxes-teach.md +5 -0
- package/repos/effect/.changeset/busy-lions-sneeze.md +5 -0
- package/repos/effect/.changeset/busy-maps-attend.md +7 -0
- package/repos/effect/.changeset/calm-buckets-own.md +5 -0
- package/repos/effect/.changeset/calm-carrots-march.md +7 -0
- package/repos/effect/.changeset/calm-cars-rest.md +5 -0
- package/repos/effect/.changeset/calm-panthers-nail.md +5 -0
- package/repos/effect/.changeset/calm-seas-smile.md +5 -0
- package/repos/effect/.changeset/calm-squids-hug.md +5 -0
- package/repos/effect/.changeset/chatty-poets-type.md +5 -0
- package/repos/effect/.changeset/chilled-mice-wash.md +5 -0
- package/repos/effect/.changeset/chilly-pumas-rule.md +5 -0
- package/repos/effect/.changeset/chubby-buckets-feel.md +5 -0
- package/repos/effect/.changeset/chubby-parents-flow.md +5 -0
- package/repos/effect/.changeset/chubby-planets-fall.md +5 -0
- package/repos/effect/.changeset/clean-balloons-tan.md +5 -0
- package/repos/effect/.changeset/clean-bulldogs-care.md +5 -0
- package/repos/effect/.changeset/clean-dryers-sneeze.md +5 -0
- package/repos/effect/.changeset/clean-geese-work.md +5 -0
- package/repos/effect/.changeset/clean-goats-wave.md +5 -0
- package/repos/effect/.changeset/clean-needles-shake.md +23 -0
- package/repos/effect/.changeset/clean-tires-guess.md +5 -0
- package/repos/effect/.changeset/clear-spies-boil.md +5 -0
- package/repos/effect/.changeset/cli-help-choices.md +5 -0
- package/repos/effect/.changeset/cold-knives-lie.md +35 -0
- package/repos/effect/.changeset/cold-rooms-show.md +5 -0
- package/repos/effect/.changeset/cold-sloths-wave.md +5 -0
- package/repos/effect/.changeset/compact-json-schema-enum.md +25 -0
- package/repos/effect/.changeset/config-withdefault-eager.md +7 -0
- package/repos/effect/.changeset/config.json +24 -0
- package/repos/effect/.changeset/consolidate-encoding.md +5 -0
- package/repos/effect/.changeset/consolidate-sql-error.md +16 -0
- package/repos/effect/.changeset/crisp-seas-warn.md +5 -0
- package/repos/effect/.changeset/cuddly-rooms-bet.md +5 -0
- package/repos/effect/.changeset/curly-poems-talk.md +5 -0
- package/repos/effect/.changeset/curly-spies-relax.md +5 -0
- package/repos/effect/.changeset/curvy-apples-float.md +5 -0
- package/repos/effect/.changeset/custom-http-security-openapi-generator.md +5 -0
- package/repos/effect/.changeset/cute-heads-thank.md +5 -0
- package/repos/effect/.changeset/cyan-loops-grow.md +5 -0
- package/repos/effect/.changeset/cyan-radios-switch.md +5 -0
- package/repos/effect/.changeset/deep-rivers-spend.md +5 -0
- package/repos/effect/.changeset/dirty-lamps-trade.md +5 -0
- package/repos/effect/.changeset/dirty-laws-wear.md +5 -0
- package/repos/effect/.changeset/duration-temporal-object-input.md +7 -0
- package/repos/effect/.changeset/eager-coats-cheat.md +5 -0
- package/repos/effect/.changeset/early-birds-dream.md +5 -0
- package/repos/effect/.changeset/early-donuts-argue.md +5 -0
- package/repos/effect/.changeset/early-peaches-check.md +6 -0
- package/repos/effect/.changeset/eff-691-default-logger-ordering.md +5 -0
- package/repos/effect/.changeset/eff-693-rpcgroup-handler-deps.md +5 -0
- package/repos/effect/.changeset/eff-694-cli-completions-module.md +5 -0
- package/repos/effect/.changeset/eff-695-layer-mock-dual-api.md +5 -0
- package/repos/effect/.changeset/eff-697-rpcserialization-json-array-decode.md +5 -0
- package/repos/effect/.changeset/eff-698-rpcserialization-unreachable-branch.md +5 -0
- package/repos/effect/.changeset/eff-700-httpapi-middleware-errors.md +12 -0
- package/repos/effect/.changeset/eff-701-httpapierror-respondable.md +5 -0
- package/repos/effect/.changeset/eff-704-stream-merge-predicate.md +5 -0
- package/repos/effect/.changeset/eff-705-layer-tap-apis.md +5 -0
- package/repos/effect/.changeset/eff-706-servicemap-mutate.md +6 -0
- package/repos/effect/.changeset/eff-716-response-id-tracker-map.md +5 -0
- package/repos/effect/.changeset/eff-717-openai-socket-cancel.md +5 -0
- package/repos/effect/.changeset/eff-718-embedding-model-surface.md +13 -0
- package/repos/effect/.changeset/eff-725-fix-catch-jsdoc.md +5 -0
- package/repos/effect/.changeset/eff-726-model-dimensions.md +7 -0
- package/repos/effect/.changeset/eff-727-cli-help-alignment.md +5 -0
- package/repos/effect/.changeset/eff-730-language-model-incremental-fallback.md +5 -0
- package/repos/effect/.changeset/eff-736-cached-with-ttl.md +5 -0
- package/repos/effect/.changeset/eff-738-cron-prev.md +5 -0
- package/repos/effect/.changeset/eff-739-openai-function-call-done.md +5 -0
- package/repos/effect/.changeset/eff-740-missing-summary-parts.md +5 -0
- package/repos/effect/.changeset/eff-742-http-client-request-web.md +5 -0
- package/repos/effect/.changeset/eff-744-sqlite-migrator-lock.md +5 -0
- package/repos/effect/.changeset/eff-746-fixed-iteration-catchup.md +5 -0
- package/repos/effect/.changeset/eff-747-unify-effect.md +5 -0
- package/repos/effect/.changeset/eff-754-url-builder-any.md +6 -0
- package/repos/effect/.changeset/eff-755-references-core.md +5 -0
- package/repos/effect/.changeset/eff-769-select-text-highlight.md +5 -0
- package/repos/effect/.changeset/eff-774-mutable-list-append-all-empty-array.md +5 -0
- package/repos/effect/.changeset/eff-777-schema-make-effect.md +5 -0
- package/repos/effect/.changeset/eff-778-http-middleware-path-logger.md +5 -0
- package/repos/effect/.changeset/eff-779-keyvaluestore-layer-sql.md +5 -0
- package/repos/effect/.changeset/eff-780-layer-unify.md +5 -0
- package/repos/effect/.changeset/eff-781-fix-stream-toqueue-types.md +5 -0
- package/repos/effect/.changeset/eff-782-httpapi-status-literals.md +5 -0
- package/repos/effect/.changeset/eff-783-atom-http-api-errors.md +5 -0
- package/repos/effect/.changeset/eff-819-cluster-workflow-shard-groups.md +5 -0
- package/repos/effect/.changeset/eight-turkeys-own.md +7 -0
- package/repos/effect/.changeset/eighty-lies-deny.md +5 -0
- package/repos/effect/.changeset/eighty-poets-draw.md +9 -0
- package/repos/effect/.changeset/eighty-swans-scream.md +5 -0
- package/repos/effect/.changeset/eighty-teeth-sniff.md +5 -0
- package/repos/effect/.changeset/eleven-apes-share.md +5 -0
- package/repos/effect/.changeset/eleven-numbers-bake.md +5 -0
- package/repos/effect/.changeset/empty-gifts-beg.md +5 -0
- package/repos/effect/.changeset/empty-http-rpc-client.md +5 -0
- package/repos/effect/.changeset/eventlog-unencrypted.md +5 -0
- package/repos/effect/.changeset/expand-schema-filter-output.md +24 -0
- package/repos/effect/.changeset/export-schema-encode-keys-interface.md +7 -0
- package/repos/effect/.changeset/extract-semaphore-latch.md +10 -0
- package/repos/effect/.changeset/fair-bees-relax.md +5 -0
- package/repos/effect/.changeset/fair-buttons-share.md +7 -0
- package/repos/effect/.changeset/fair-cooks-stop.md +5 -0
- package/repos/effect/.changeset/fair-cups-train.md +5 -0
- package/repos/effect/.changeset/fair-dryers-speak.md +5 -0
- package/repos/effect/.changeset/fair-forks-shake.md +5 -0
- package/repos/effect/.changeset/fair-pandas-prove.md +5 -0
- package/repos/effect/.changeset/fair-pants-float.md +5 -0
- package/repos/effect/.changeset/fair-poems-visit.md +5 -0
- package/repos/effect/.changeset/famous-wolves-lead.md +5 -0
- package/repos/effect/.changeset/fancy-glasses-grow.md +5 -0
- package/repos/effect/.changeset/fast-times-camp.md +5 -0
- package/repos/effect/.changeset/few-birds-matter.md +5 -0
- package/repos/effect/.changeset/few-cougars-dig.md +5 -0
- package/repos/effect/.changeset/few-foxes-grin.md +5 -0
- package/repos/effect/.changeset/few-mirrors-pull.md +14 -0
- package/repos/effect/.changeset/few-socks-poke.md +5 -0
- package/repos/effect/.changeset/fiber-runtime-start-metrics.md +5 -0
- package/repos/effect/.changeset/fiery-jokes-care.md +5 -0
- package/repos/effect/.changeset/fiery-mammals-call.md +5 -0
- package/repos/effect/.changeset/fine-walls-decide.md +5 -0
- package/repos/effect/.changeset/first-success-of.md +5 -0
- package/repos/effect/.changeset/five-parents-relax.md +5 -0
- package/repos/effect/.changeset/five-worms-rhyme.md +5 -0
- package/repos/effect/.changeset/fix-1332.md +5 -0
- package/repos/effect/.changeset/fix-1917.md +11 -0
- package/repos/effect/.changeset/fix-1927.md +5 -0
- package/repos/effect/.changeset/fix-1940.md +7 -0
- package/repos/effect/.changeset/fix-1947.md +7 -0
- package/repos/effect/.changeset/fix-2002.md +5 -0
- package/repos/effect/.changeset/fix-2012.md +5 -0
- package/repos/effect/.changeset/fix-2015.md +5 -0
- package/repos/effect/.changeset/fix-2260.md +5 -0
- package/repos/effect/.changeset/fix-2268.md +5 -0
- package/repos/effect/.changeset/fix-2271.md +5 -0
- package/repos/effect/.changeset/fix-2384.md +7 -0
- package/repos/effect/.changeset/fix-ai-empty-params-structured-output.md +5 -0
- package/repos/effect/.changeset/fix-ai-text-toolkit-typing.md +5 -0
- package/repos/effect/.changeset/fix-catch-orelse-error-erasure.md +5 -0
- package/repos/effect/.changeset/fix-class-constructor-defaults.md +5 -0
- package/repos/effect/.changeset/fix-cli-mixed-global-flag-context.md +7 -0
- package/repos/effect/.changeset/fix-config-withDefault.md +5 -0
- package/repos/effect/.changeset/fix-config-withdefault-filter.md +7 -0
- package/repos/effect/.changeset/fix-datetime-gmt.md +5 -0
- package/repos/effect/.changeset/fix-devtools-flush-on-teardown.md +10 -0
- package/repos/effect/.changeset/fix-duration-symmetric-rounding.md +5 -0
- package/repos/effect/.changeset/fix-entity-manager-defect-replay.md +5 -0
- package/repos/effect/.changeset/fix-entity-proxy-rpc-handler-context.md +5 -0
- package/repos/effect/.changeset/fix-entity-proxy-server-path-params.md +5 -0
- package/repos/effect/.changeset/fix-from-readable-stream-cancel-defect.md +5 -0
- package/repos/effect/.changeset/fix-graph-undirected-traversal.md +5 -0
- package/repos/effect/.changeset/fix-has-interrupts-only-empty.md +5 -0
- package/repos/effect/.changeset/fix-hashmap-bit31-ordering.md +5 -0
- package/repos/effect/.changeset/fix-headers-proto-enumerability.md +5 -0
- package/repos/effect/.changeset/fix-http-incoming-message-parse-options.md +5 -0
- package/repos/effect/.changeset/fix-httpapi-endpoint-error-inference.md +5 -0
- package/repos/effect/.changeset/fix-httpapi-schema-types.md +5 -0
- package/repos/effect/.changeset/fix-httpapi-security-middleware-cache.md +5 -0
- package/repos/effect/.changeset/fix-is-json-dag.md +7 -0
- package/repos/effect/.changeset/fix-json-schema-anyof-oneof-siblings.md +5 -0
- package/repos/effect/.changeset/fix-json-schema-import-json.md +5 -0
- package/repos/effect/.changeset/fix-keepalive-blocked-timers.md +5 -0
- package/repos/effect/.changeset/fix-mcp-param-name-resolution.md +5 -0
- package/repos/effect/.changeset/fix-mermaid-escape-special-chars.md +5 -0
- package/repos/effect/.changeset/fix-mutable-list-filter-length.md +5 -0
- package/repos/effect/.changeset/fix-object-keyword-json-schema.md +5 -0
- package/repos/effect/.changeset/fix-openai-mcp-tool-names.md +5 -0
- package/repos/effect/.changeset/fix-openapi-generator-form-urlencoded.md +5 -0
- package/repos/effect/.changeset/fix-openapi-generator-swagger2openapi.md +5 -0
- package/repos/effect/.changeset/fix-openapi-preserve-multiple-response-content-types.md +5 -0
- package/repos/effect/.changeset/fix-openrouter-sparse-array.md +5 -0
- package/repos/effect/.changeset/fix-otel-logger-clock-skew.md +7 -0
- package/repos/effect/.changeset/fix-otel-logger-severity-number.md +20 -0
- package/repos/effect/.changeset/fix-queue-collect-duplication.md +5 -0
- package/repos/effect/.changeset/fix-random-string-seeds.md +5 -0
- package/repos/effect/.changeset/fix-ratelimiter-tokenbucket-redis-ttl.md +5 -0
- package/repos/effect/.changeset/fix-remainder-scientific-notation.md +5 -0
- package/repos/effect/.changeset/fix-request-resolver-pending-batches-leak.md +5 -0
- package/repos/effect/.changeset/fix-retry-transient-autocomplete.md +5 -0
- package/repos/effect/.changeset/fix-rpc-http-requestids-finalizer.md +5 -0
- package/repos/effect/.changeset/fix-rpc-json-id-edges.md +5 -0
- package/repos/effect/.changeset/fix-schedule-fixed-double-exec.md +9 -0
- package/repos/effect/.changeset/fix-schedule-reduce-sync-state.md +5 -0
- package/repos/effect/.changeset/fix-schema-arbitrary-exclusive-bounds.md +5 -0
- package/repos/effect/.changeset/fix-schema-defect-message.md +5 -0
- package/repos/effect/.changeset/fix-schema-encode-keys-property-keys.md +5 -0
- package/repos/effect/.changeset/fix-schema-encodekeys-class.md +5 -0
- package/repos/effect/.changeset/fix-schema-encodekeys-struct.md +5 -0
- package/repos/effect/.changeset/fix-schema-identifier-expected-message.md +5 -0
- package/repos/effect/.changeset/fix-schema-is-uuid.md +5 -0
- package/repos/effect/.changeset/fix-schema-option-non-schema-failures.md +17 -0
- package/repos/effect/.changeset/fix-schema-parser-checks.md +9 -0
- package/repos/effect/.changeset/fix-searchparam-initial-decode.md +5 -0
- package/repos/effect/.changeset/fix-serializable-wire-transfer.md +7 -0
- package/repos/effect/.changeset/fix-stream-grouped-within-flush.md +5 -0
- package/repos/effect/.changeset/fix-stream-run-for-each-while.md +5 -0
- package/repos/effect/.changeset/fix-stream-scan-effect.md +5 -0
- package/repos/effect/.changeset/fix-stream-scoped-scope.md +5 -0
- package/repos/effect/.changeset/fix-strip-approval-artifacts-multi-round.md +13 -0
- package/repos/effect/.changeset/fix-struct-utility-types-simplify.md +5 -0
- package/repos/effect/.changeset/fix-structwithrest-index-signatures.md +6 -0
- package/repos/effect/.changeset/fix-tagged-union-class-sentinels.md +5 -0
- package/repos/effect/.changeset/fix-tagged-union-match-unify.md +6 -0
- package/repos/effect/.changeset/fix-to-tagged-union-isanyof-custom-tags.md +10 -0
- package/repos/effect/.changeset/fix-tuple-with-rest-post-rest-index-drift.md +5 -0
- package/repos/effect/.changeset/fix-tuple-with-rest-post-rest-validation.md +5 -0
- package/repos/effect/.changeset/fix-types-voidifempty.md +5 -0
- package/repos/effect/.changeset/fix-void-response-encoding.md +5 -0
- package/repos/effect/.changeset/fix-workflow-proxy-rpc-handler-context.md +5 -0
- package/repos/effect/.changeset/flat-chicken-remain.md +5 -0
- package/repos/effect/.changeset/floppy-cows-spend.md +5 -0
- package/repos/effect/.changeset/floppy-items-admire.md +5 -0
- package/repos/effect/.changeset/floppy-pigs-kiss.md +5 -0
- package/repos/effect/.changeset/fluffy-meals-matter.md +5 -0
- package/repos/effect/.changeset/fluffy-pumas-push.md +5 -0
- package/repos/effect/.changeset/forked-memo-maps.md +6 -0
- package/repos/effect/.changeset/forty-hounds-cheer.md +5 -0
- package/repos/effect/.changeset/forty-otters-cry.md +5 -0
- package/repos/effect/.changeset/forty-rings-film.md +7 -0
- package/repos/effect/.changeset/forty-signs-stay.md +5 -0
- package/repos/effect/.changeset/forty-swans-divide.md +5 -0
- package/repos/effect/.changeset/forty-trees-pay.md +5 -0
- package/repos/effect/.changeset/four-papayas-bow.md +5 -0
- package/repos/effect/.changeset/four-points-repeat.md +5 -0
- package/repos/effect/.changeset/fresh-cats-smash.md +5 -0
- package/repos/effect/.changeset/fresh-emus-cheat.md +5 -0
- package/repos/effect/.changeset/fresh-monkeys-smoke.md +9 -0
- package/repos/effect/.changeset/fruity-houses-learn.md +6 -0
- package/repos/effect/.changeset/full-adults-double.md +5 -0
- package/repos/effect/.changeset/funny-crabs-hang.md +6 -0
- package/repos/effect/.changeset/funny-forks-move.md +5 -0
- package/repos/effect/.changeset/fuzzy-camels-hunt.md +5 -0
- package/repos/effect/.changeset/fuzzy-dodos-help.md +5 -0
- package/repos/effect/.changeset/fuzzy-lions-perform.md +5 -0
- package/repos/effect/.changeset/fuzzy-planets-sneeze.md +5 -0
- package/repos/effect/.changeset/gold-meteors-move.md +5 -0
- package/repos/effect/.changeset/gold-readers-hug.md +5 -0
- package/repos/effect/.changeset/gold-rings-start.md +5 -0
- package/repos/effect/.changeset/good-tools-work.md +7 -0
- package/repos/effect/.changeset/graph-algorithm-fixes.md +5 -0
- package/repos/effect/.changeset/great-trains-mate.md +5 -0
- package/repos/effect/.changeset/great-trams-report.md +5 -0
- package/repos/effect/.changeset/green-beds-unref.md +7 -0
- package/repos/effect/.changeset/green-chips-wash.md +5 -0
- package/repos/effect/.changeset/green-moons-smile.md +5 -0
- package/repos/effect/.changeset/green-pugs-play.md +5 -0
- package/repos/effect/.changeset/green-rings-prove.md +5 -0
- package/repos/effect/.changeset/happy-mirrors-dream.md +5 -0
- package/repos/effect/.changeset/heavy-loops-cut.md +5 -0
- package/repos/effect/.changeset/heavy-trams-fix.md +5 -0
- package/repos/effect/.changeset/hip-socks-travel.md +5 -0
- package/repos/effect/.changeset/honest-pens-thank.md +5 -0
- package/repos/effect/.changeset/honest-rivers-notice.md +5 -0
- package/repos/effect/.changeset/hot-taxis-fry.md +5 -0
- package/repos/effect/.changeset/httpapi-endpoint-relax-constraints.md +5 -0
- package/repos/effect/.changeset/httpapi-schema-service-types.md +6 -0
- package/repos/effect/.changeset/huge-moons-rhyme.md +5 -0
- package/repos/effect/.changeset/humble-pigs-dig.md +5 -0
- package/repos/effect/.changeset/icy-flies-cross.md +5 -0
- package/repos/effect/.changeset/itchy-radios-poke.md +5 -0
- package/repos/effect/.changeset/itchy-results-bet.md +5 -0
- package/repos/effect/.changeset/itchy-shrimps-deny.md +5 -0
- package/repos/effect/.changeset/itchy-toes-promise.md +5 -0
- package/repos/effect/.changeset/k8s-last-transition-null.md +5 -0
- package/repos/effect/.changeset/khaki-cats-learn.md +5 -0
- package/repos/effect/.changeset/khaki-melons-appear.md +5 -0
- package/repos/effect/.changeset/kind-hounds-float.md +5 -0
- package/repos/effect/.changeset/kind-windows-fall.md +5 -0
- package/repos/effect/.changeset/late-hotels-rule.md +5 -0
- package/repos/effect/.changeset/late-lamps-care.md +5 -0
- package/repos/effect/.changeset/late-rivers-applaud.md +5 -0
- package/repos/effect/.changeset/layer-map-dynamic-idle-ttl.md +5 -0
- package/repos/effect/.changeset/lazy-queens-rush.md +5 -0
- package/repos/effect/.changeset/lazy-recursive-forward-refs.md +5 -0
- package/repos/effect/.changeset/lazy-timers-exist.md +5 -0
- package/repos/effect/.changeset/legal-pants-drop.md +5 -0
- package/repos/effect/.changeset/lemon-taxis-sin.md +5 -0
- package/repos/effect/.changeset/light-kids-sneeze.md +5 -0
- package/repos/effect/.changeset/little-dryers-allow.md +7 -0
- package/repos/effect/.changeset/long-cameras-think.md +5 -0
- package/repos/effect/.changeset/lovely-cobras-change.md +5 -0
- package/repos/effect/.changeset/lovely-frogs-rescue.md +5 -0
- package/repos/effect/.changeset/lucky-buttons-jump.md +5 -0
- package/repos/effect/.changeset/lucky-phones-listen.md +5 -0
- package/repos/effect/.changeset/lucky-worms-type.md +5 -0
- package/repos/effect/.changeset/mean-dingos-share.md +5 -0
- package/repos/effect/.changeset/mean-trains-smash.md +5 -0
- package/repos/effect/.changeset/metal-parts-yell.md +5 -0
- package/repos/effect/.changeset/mighty-games-matter.md +5 -0
- package/repos/effect/.changeset/modern-uuid-guid-filter.md +5 -0
- package/repos/effect/.changeset/nasty-geese-grow.md +5 -0
- package/repos/effect/.changeset/neat-goats-wave.md +5 -0
- package/repos/effect/.changeset/neat-kings-chew.md +5 -0
- package/repos/effect/.changeset/neat-lions-rest.md +5 -0
- package/repos/effect/.changeset/neat-snails-wash.md +5 -0
- package/repos/effect/.changeset/neat-taxis-notice.md +5 -0
- package/repos/effect/.changeset/new-dogs-swim.md +5 -0
- package/repos/effect/.changeset/new-toes-stop.md +5 -0
- package/repos/effect/.changeset/ninety-geese-exist.md +5 -0
- package/repos/effect/.changeset/odd-boats-think.md +5 -0
- package/repos/effect/.changeset/odd-bulldogs-sleep.md +5 -0
- package/repos/effect/.changeset/odd-fans-glow.md +5 -0
- package/repos/effect/.changeset/odd-forks-talk.md +5 -0
- package/repos/effect/.changeset/odd-laws-draw.md +5 -0
- package/repos/effect/.changeset/odd-owls-smoke.md +5 -0
- package/repos/effect/.changeset/odd-socks-boil.md +5 -0
- package/repos/effect/.changeset/odd-suns-dance.md +5 -0
- package/repos/effect/.changeset/old-brooms-cry.md +5 -0
- package/repos/effect/.changeset/old-facts-stand.md +5 -0
- package/repos/effect/.changeset/old-mirrors-float.md +5 -0
- package/repos/effect/.changeset/olive-poems-visit.md +5 -0
- package/repos/effect/.changeset/open-hotels-remain.md +5 -0
- package/repos/effect/.changeset/openai-compat-nullable-tool-name.md +7 -0
- package/repos/effect/.changeset/openai-compat-reasoning.md +5 -0
- package/repos/effect/.changeset/otel-resource-env-precedence.md +5 -0
- package/repos/effect/.changeset/perfect-buckets-tickle.md +5 -0
- package/repos/effect/.changeset/petite-months-allow.md +6 -0
- package/repos/effect/.changeset/platform-crypto-service.md +9 -0
- package/repos/effect/.changeset/platform-node-shared-barrel.md +5 -0
- package/repos/effect/.changeset/plenty-moons-pull.md +5 -0
- package/repos/effect/.changeset/polite-brooms-tickle.md +5 -0
- package/repos/effect/.changeset/polite-pigs-speak.md +5 -0
- package/repos/effect/.changeset/polite-tables-kneel.md +5 -0
- package/repos/effect/.changeset/port-react-hydration.md +8 -0
- package/repos/effect/.changeset/pre.json +588 -0
- package/repos/effect/.changeset/public-deer-ring.md +5 -0
- package/repos/effect/.changeset/public-jeans-stop.md +5 -0
- package/repos/effect/.changeset/pubsub-publish-false.md +5 -0
- package/repos/effect/.changeset/puny-pens-clap.md +6 -0
- package/repos/effect/.changeset/purple-bars-prove.md +5 -0
- package/repos/effect/.changeset/purple-schools-float.md +5 -0
- package/repos/effect/.changeset/purple-turtles-draw.md +5 -0
- package/repos/effect/.changeset/quick-dragons-fix.md +5 -0
- package/repos/effect/.changeset/quick-falcons-travel.md +5 -0
- package/repos/effect/.changeset/quick-geese-relax.md +5 -0
- package/repos/effect/.changeset/quick-lamps-dig.md +5 -0
- package/repos/effect/.changeset/quick-lizards-fall.md +5 -0
- package/repos/effect/.changeset/quick-trees-join.md +5 -0
- package/repos/effect/.changeset/quiet-carpets-grin.md +5 -0
- package/repos/effect/.changeset/quiet-files-hunt.md +5 -0
- package/repos/effect/.changeset/quiet-lamps-jam.md +5 -0
- package/repos/effect/.changeset/quiet-radios-wave.md +5 -0
- package/repos/effect/.changeset/quiet-redis-scripts.md +5 -0
- package/repos/effect/.changeset/ready-olives-divide.md +5 -0
- package/repos/effect/.changeset/real-trains-ring.md +5 -0
- package/repos/effect/.changeset/red-pigs-repair.md +5 -0
- package/repos/effect/.changeset/redacted-representation-options.md +7 -0
- package/repos/effect/.changeset/refactor-cli-global-flags.md +27 -0
- package/repos/effect/.changeset/refactor-config-provider.md +23 -0
- package/repos/effect/.changeset/refactor-representation-references.md +5 -0
- package/repos/effect/.changeset/remove-effect-transactionwith.md +5 -0
- package/repos/effect/.changeset/remove-http-span-counter.md +5 -0
- package/repos/effect/.changeset/remove-nullor.md +5 -0
- package/repos/effect/.changeset/remove-openapi-fromapi-options.md +7 -0
- package/repos/effect/.changeset/remove-types-mergerecord.md +5 -0
- package/repos/effect/.changeset/remove-unused-utils-apis.md +5 -0
- package/repos/effect/.changeset/rename-rebuild-out.md +5 -0
- package/repos/effect/.changeset/restore-schema-parse-options.md +5 -0
- package/repos/effect/.changeset/rich-dots-push.md +5 -0
- package/repos/effect/.changeset/rich-hoops-nail.md +5 -0
- package/repos/effect/.changeset/rich-sloths-draw.md +5 -0
- package/repos/effect/.changeset/ripe-lies-battle.md +5 -0
- package/repos/effect/.changeset/rpc-middleware-provides-fix.md +5 -0
- package/repos/effect/.changeset/scalar-custom-fetch.md +5 -0
- package/repos/effect/.changeset/schema-as-class.md +17 -0
- package/repos/effect/.changeset/schema-asserts-signature.md +5 -0
- package/repos/effect/.changeset/schema-clean-up-additionalProperties.md +7 -0
- package/repos/effect/.changeset/schema-datetime-utc-from-string.md +5 -0
- package/repos/effect/.changeset/schema-decoding-defaults-services.md +7 -0
- package/repos/effect/.changeset/schema-defaults-issue-channel.md +7 -0
- package/repos/effect/.changeset/schema-dollar-prefix.md +5 -0
- package/repos/effect/.changeset/schema-missing-self-generic.md +5 -0
- package/repos/effect/.changeset/schema-ordered-arbitrary-constraints.md +12 -0
- package/repos/effect/.changeset/schema-parser-adapter-errors.md +5 -0
- package/repos/effect/.changeset/schema-refactor-toCodecJson.md +5 -0
- package/repos/effect/.changeset/schema-remove-annotate-in.md +5 -0
- package/repos/effect/.changeset/schema-rename-makeUnsafe-to-make.md +7 -0
- package/repos/effect/.changeset/schema-rename-parser-makeUnsafe.md +5 -0
- package/repos/effect/.changeset/schema-result-combinators.md +5 -0
- package/repos/effect/.changeset/schema-struct-simplify.md +5 -0
- package/repos/effect/.changeset/seven-mugs-marry.md +5 -0
- package/repos/effect/.changeset/shaggy-birds-stay.md +5 -0
- package/repos/effect/.changeset/shaggy-cities-push.md +5 -0
- package/repos/effect/.changeset/shaggy-numbers-accept.md +5 -0
- package/repos/effect/.changeset/sharp-emus-applaud.md +5 -0
- package/repos/effect/.changeset/sharp-goats-wink.md +5 -0
- package/repos/effect/.changeset/sharp-pandas-care.md +5 -0
- package/repos/effect/.changeset/sharp-peas-march.md +5 -0
- package/repos/effect/.changeset/sharp-rules-draw.md +5 -0
- package/repos/effect/.changeset/sharp-singers-sort.md +5 -0
- package/repos/effect/.changeset/shiny-trains-hug.md +5 -0
- package/repos/effect/.changeset/short-cows-relate.md +5 -0
- package/repos/effect/.changeset/short-foxes-admire.md +5 -0
- package/repos/effect/.changeset/shy-cycles-flow.md +5 -0
- package/repos/effect/.changeset/shy-geckos-sniff.md +30 -0
- package/repos/effect/.changeset/silent-geckos-matter.md +5 -0
- package/repos/effect/.changeset/silent-needles-design.md +6 -0
- package/repos/effect/.changeset/silent-plants-matter.md +8 -0
- package/repos/effect/.changeset/silent-spoons-stare.md +5 -0
- package/repos/effect/.changeset/silly-loops-tickle.md +5 -0
- package/repos/effect/.changeset/silver-bulk-indexeddb.md +5 -0
- package/repos/effect/.changeset/silver-emus-smoke.md +5 -0
- package/repos/effect/.changeset/silver-kings-poke.md +5 -0
- package/repos/effect/.changeset/silver-snails-sqlite.md +17 -0
- package/repos/effect/.changeset/silver-wings-watch.md +5 -0
- package/repos/effect/.changeset/six-cups-taste.md +5 -0
- package/repos/effect/.changeset/sixty-mails-shout.md +5 -0
- package/repos/effect/.changeset/sixty-socks-yell.md +5 -0
- package/repos/effect/.changeset/slimy-planets-divide.md +5 -0
- package/repos/effect/.changeset/slimy-turtles-juggle.md +5 -0
- package/repos/effect/.changeset/slow-beans-battle.md +28 -0
- package/repos/effect/.changeset/slow-berries-enjoy.md +5 -0
- package/repos/effect/.changeset/small-bugs-hunt.md +5 -0
- package/repos/effect/.changeset/small-crabs-care.md +9 -0
- package/repos/effect/.changeset/small-pets-sit.md +6 -0
- package/repos/effect/.changeset/smart-ducks-jump.md +6 -0
- package/repos/effect/.changeset/smart-pillows-buy.md +6 -0
- package/repos/effect/.changeset/smart-timers-fly.md +5 -0
- package/repos/effect/.changeset/smart-tips-sort.md +5 -0
- package/repos/effect/.changeset/social-pumas-prove.md +5 -0
- package/repos/effect/.changeset/soft-comics-wink.md +5 -0
- package/repos/effect/.changeset/soft-delete-sqlmodel.md +5 -0
- package/repos/effect/.changeset/soft-seals-allow.md +5 -0
- package/repos/effect/.changeset/solid-cougars-attack.md +5 -0
- package/repos/effect/.changeset/solid-doors-ring.md +5 -0
- package/repos/effect/.changeset/solid-items-tease.md +5 -0
- package/repos/effect/.changeset/solid-towns-smoke.md +5 -0
- package/repos/effect/.changeset/sour-canyons-rescue.md +5 -0
- package/repos/effect/.changeset/sparkly-bears-act.md +5 -0
- package/repos/effect/.changeset/sparkly-coins-sit.md +5 -0
- package/repos/effect/.changeset/spotty-comics-fry.md +5 -0
- package/repos/effect/.changeset/sql-migrator-mjs-mts.md +5 -0
- package/repos/effect/.changeset/stale-dots-tell.md +5 -0
- package/repos/effect/.changeset/stale-snakes-know.md +5 -0
- package/repos/effect/.changeset/strict-areas-end.md +5 -0
- package/repos/effect/.changeset/strict-buckets-hug.md +8 -0
- package/repos/effect/.changeset/strip-resolved-approvals.md +5 -0
- package/repos/effect/.changeset/strong-balloons-tickle.md +5 -0
- package/repos/effect/.changeset/strong-bees-queue.md +5 -0
- package/repos/effect/.changeset/struct-record.md +5 -0
- package/repos/effect/.changeset/sunny-ads-hang.md +5 -0
- package/repos/effect/.changeset/sunny-bikes-sleep.md +5 -0
- package/repos/effect/.changeset/sunny-rooms-invent.md +5 -0
- package/repos/effect/.changeset/sweet-donuts-bet.md +5 -0
- package/repos/effect/.changeset/sweet-hotels-give.md +5 -0
- package/repos/effect/.changeset/sweet-views-learn.md +5 -0
- package/repos/effect/.changeset/swift-spiders-unpack.md +5 -0
- package/repos/effect/.changeset/swift-symbols-stand.md +5 -0
- package/repos/effect/.changeset/tagged-error-class-optional-empty-props.md +5 -0
- package/repos/effect/.changeset/tall-hairs-return.md +5 -0
- package/repos/effect/.changeset/tall-mails-listen.md +5 -0
- package/repos/effect/.changeset/tall-queens-cheer.md +5 -0
- package/repos/effect/.changeset/tall-wombats-wave.md +5 -0
- package/repos/effect/.changeset/tangy-colts-lose.md +5 -0
- package/repos/effect/.changeset/tasty-comics-send.md +5 -0
- package/repos/effect/.changeset/ten-kings-fry.md +5 -0
- package/repos/effect/.changeset/thick-pandas-wait.md +5 -0
- package/repos/effect/.changeset/thin-ducks-wonder.md +5 -0
- package/repos/effect/.changeset/thirty-ducks-go.md +5 -0
- package/repos/effect/.changeset/thirty-pans-love.md +5 -0
- package/repos/effect/.changeset/three-corners-sort.md +5 -0
- package/repos/effect/.changeset/three-ravens-jam.md +5 -0
- package/repos/effect/.changeset/three-tomatoes-wave.md +5 -0
- package/repos/effect/.changeset/tidy-foxes-own.md +5 -0
- package/repos/effect/.changeset/tidy-icons-glow.md +5 -0
- package/repos/effect/.changeset/tidy-stacks-encode.md +5 -0
- package/repos/effect/.changeset/tidy-stars-drive.md +5 -0
- package/repos/effect/.changeset/tiny-buckets-wave.md +5 -0
- package/repos/effect/.changeset/tiny-lilies-flash.md +5 -0
- package/repos/effect/.changeset/tiny-rabbits-smile.md +5 -0
- package/repos/effect/.changeset/tocodecjson-return-json-type.md +10 -0
- package/repos/effect/.changeset/tool-get-json-schema-tests.md +5 -0
- package/repos/effect/.changeset/true-actors-battle.md +5 -0
- package/repos/effect/.changeset/twenty-buttons-cheer.md +5 -0
- package/repos/effect/.changeset/two-roses-double.md +5 -0
- package/repos/effect/.changeset/unify-error-defect-stack-options.md +23 -0
- package/repos/effect/.changeset/update-schema-arbitrary-report.md +22 -0
- package/repos/effect/.changeset/upset-colts-stick.md +5 -0
- package/repos/effect/.changeset/vast-bananas-send.md +5 -0
- package/repos/effect/.changeset/vast-deserts-travel.md +5 -0
- package/repos/effect/.changeset/violet-peaches-feel.md +5 -0
- package/repos/effect/.changeset/vitest-layer-top-level-options.md +5 -0
- package/repos/effect/.changeset/wacky-grapes-poke.md +5 -0
- package/repos/effect/.changeset/wacky-rice-add.md +5 -0
- package/repos/effect/.changeset/warm-dolls-brake.md +5 -0
- package/repos/effect/.changeset/warm-friends-tie.md +5 -0
- package/repos/effect/.changeset/warm-snails-shop.md +7 -0
- package/repos/effect/.changeset/wet-news-invent.md +5 -0
- package/repos/effect/.changeset/wild-readers-clean.md +5 -0
- package/repos/effect/.changeset/wild-suns-bearer-space.md +5 -0
- package/repos/effect/.changeset/wise-ants-wave.md +6 -0
- package/repos/effect/.changeset/wise-flags-shift.md +22 -0
- package/repos/effect/.changeset/wise-oranges-stay.md +5 -0
- package/repos/effect/.changeset/witty-lobsters-share.md +5 -0
- package/repos/effect/.changeset/yellow-adults-study.md +5 -0
- package/repos/effect/.changeset/yellow-clocks-dance.md +5 -0
- package/repos/effect/.changeset/yellow-dingos-jump.md +5 -0
- package/repos/effect/.changeset/young-doors-change.md +5 -0
- package/repos/effect/.envrc +1 -0
- package/repos/effect/.github/actions/setup/action.yaml +33 -0
- package/repos/effect/.github/workflows/ai-codegen.yml +66 -0
- package/repos/effect/.github/workflows/bundle-comment.yml +72 -0
- package/repos/effect/.github/workflows/check.yml +195 -0
- package/repos/effect/.github/workflows/release.yml +47 -0
- package/repos/effect/.github/workflows/snapshot.yml +34 -0
- package/repos/effect/.oxlintrc.json +25 -0
- package/repos/effect/.patterns/effect.md +102 -0
- package/repos/effect/.patterns/jsdoc.md +53 -0
- package/repos/effect/.patterns/testing.md +44 -0
- package/repos/effect/.specs/README.md +2 -0
- package/repos/effect/.vscode/extensions.json +6 -0
- package/repos/effect/.vscode/settings.json +44 -0
- package/repos/effect/AGENTS.md +139 -0
- package/repos/effect/LICENSE +21 -0
- package/repos/effect/LLMS.md +343 -0
- package/repos/effect/MIGRATION.md +83 -0
- package/repos/effect/README.md +3 -0
- package/repos/effect/TODOS.md +28 -0
- package/repos/effect/ai-docs/README.md +44 -0
- package/repos/effect/ai-docs/package.json +36 -0
- package/repos/effect/ai-docs/src/01_effect/01_basics/01_effect-gen.ts +30 -0
- package/repos/effect/ai-docs/src/01_effect/01_basics/02_effect-fn.ts +39 -0
- package/repos/effect/ai-docs/src/01_effect/01_basics/10_creating-effects.ts +74 -0
- package/repos/effect/ai-docs/src/01_effect/01_basics/index.md +5 -0
- package/repos/effect/ai-docs/src/01_effect/02_services/01_service.ts +45 -0
- package/repos/effect/ai-docs/src/01_effect/02_services/10_reference.ts +10 -0
- package/repos/effect/ai-docs/src/01_effect/02_services/20_layer-composition.ts +70 -0
- package/repos/effect/ai-docs/src/01_effect/02_services/20_layer-unwrap.ts +66 -0
- package/repos/effect/ai-docs/src/01_effect/02_services/index.md +5 -0
- package/repos/effect/ai-docs/src/01_effect/03_errors/01_error-handling.ts +30 -0
- package/repos/effect/ai-docs/src/01_effect/03_errors/10_catch-tags.ts +24 -0
- package/repos/effect/ai-docs/src/01_effect/03_errors/20_reason-errors.ts +64 -0
- package/repos/effect/ai-docs/src/01_effect/03_errors/index.md +1 -0
- package/repos/effect/ai-docs/src/01_effect/04_resources/10_acquire-release.ts +105 -0
- package/repos/effect/ai-docs/src/01_effect/04_resources/20_layer-side-effects.ts +31 -0
- package/repos/effect/ai-docs/src/01_effect/04_resources/30_layer-map.ts +86 -0
- package/repos/effect/ai-docs/src/01_effect/04_resources/index.md +3 -0
- package/repos/effect/ai-docs/src/01_effect/05_running/10_run-main.ts +30 -0
- package/repos/effect/ai-docs/src/01_effect/05_running/20_layer-launch.ts +27 -0
- package/repos/effect/ai-docs/src/01_effect/05_running/index.md +1 -0
- package/repos/effect/ai-docs/src/01_effect/06_pubsub/10_pubsub.ts +56 -0
- package/repos/effect/ai-docs/src/01_effect/06_pubsub/index.md +3 -0
- package/repos/effect/ai-docs/src/02_stream/10_creating-streams.ts +103 -0
- package/repos/effect/ai-docs/src/02_stream/20_consuming-streams.ts +137 -0
- package/repos/effect/ai-docs/src/02_stream/30_encoding.ts +165 -0
- package/repos/effect/ai-docs/src/02_stream/index.md +4 -0
- package/repos/effect/ai-docs/src/03_integration/10_managed-runtime.ts +129 -0
- package/repos/effect/ai-docs/src/03_integration/index.md +5 -0
- package/repos/effect/ai-docs/src/05_batching/10_request-resolver.ts +89 -0
- package/repos/effect/ai-docs/src/05_batching/index.md +3 -0
- package/repos/effect/ai-docs/src/06_schedule/10_schedules.ts +102 -0
- package/repos/effect/ai-docs/src/06_schedule/index.md +3 -0
- package/repos/effect/ai-docs/src/07_datetime/10_creating-and-formatting.ts +30 -0
- package/repos/effect/ai-docs/src/07_datetime/20_time-zones.ts +44 -0
- package/repos/effect/ai-docs/src/07_datetime/index.md +5 -0
- package/repos/effect/ai-docs/src/08_observability/10_logging.ts +66 -0
- package/repos/effect/ai-docs/src/08_observability/20_otlp-tracing.ts +95 -0
- package/repos/effect/ai-docs/src/08_observability/index.md +7 -0
- package/repos/effect/ai-docs/src/09_testing/10_effect-tests.ts +55 -0
- package/repos/effect/ai-docs/src/09_testing/20_layer-tests.ts +138 -0
- package/repos/effect/ai-docs/src/09_testing/index.md +1 -0
- package/repos/effect/ai-docs/src/50_http-client/10_basics.ts +102 -0
- package/repos/effect/ai-docs/src/50_http-client/index.md +3 -0
- package/repos/effect/ai-docs/src/51_http-server/10_basics.ts +116 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/api/Api.ts +14 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/api/Authorization.ts +36 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/api/System.ts +10 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/api/Users.ts +91 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/domain/User.ts +12 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/domain/UserErrors.ts +22 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +36 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +71 -0
- package/repos/effect/ai-docs/src/51_http-server/fixtures/server/Users.ts +62 -0
- package/repos/effect/ai-docs/src/51_http-server/index.md +3 -0
- package/repos/effect/ai-docs/src/60_child-process/10_working-with-child-processes.ts +117 -0
- package/repos/effect/ai-docs/src/60_child-process/index.md +3 -0
- package/repos/effect/ai-docs/src/70_cli/10_basics.ts +136 -0
- package/repos/effect/ai-docs/src/70_cli/index.md +5 -0
- package/repos/effect/ai-docs/src/71_ai/10_language-model.ts +156 -0
- package/repos/effect/ai-docs/src/71_ai/20_tools.ts +226 -0
- package/repos/effect/ai-docs/src/71_ai/30_chat.ts +158 -0
- package/repos/effect/ai-docs/src/71_ai/fixtures/domain/LaunchPlan.ts +9 -0
- package/repos/effect/ai-docs/src/71_ai/index.md +5 -0
- package/repos/effect/ai-docs/src/80_cluster/10_entities.ts +97 -0
- package/repos/effect/ai-docs/src/80_cluster/index.md +4 -0
- package/repos/effect/ai-docs/src/index.md +12 -0
- package/repos/effect/ai-docs/tsconfig.json +24 -0
- package/repos/effect/cookbooks/schedule.md +3507 -0
- package/repos/effect/deno.json +33 -0
- package/repos/effect/docker-compose.yaml +18 -0
- package/repos/effect/dprint.json +32 -0
- package/repos/effect/flake.lock +27 -0
- package/repos/effect/flake.nix +24 -0
- package/repos/effect/jsdocs.config.json +16 -0
- package/repos/effect/migration/cause.md +163 -0
- package/repos/effect/migration/equality.md +72 -0
- package/repos/effect/migration/error-handling.md +106 -0
- package/repos/effect/migration/fiber-keep-alive.md +74 -0
- package/repos/effect/migration/fiberref.md +109 -0
- package/repos/effect/migration/forking.md +94 -0
- package/repos/effect/migration/generators.md +32 -0
- package/repos/effect/migration/layer-memoization.md +98 -0
- package/repos/effect/migration/runtime.md +88 -0
- package/repos/effect/migration/schema.md +1032 -0
- package/repos/effect/migration/scope.md +50 -0
- package/repos/effect/migration/services.md +235 -0
- package/repos/effect/migration/v3-to-v4.md +421 -0
- package/repos/effect/migration/yieldable.md +173 -0
- package/repos/effect/package.json +104 -0
- package/repos/effect/packages/ai/anthropic/CHANGELOG.md +611 -0
- package/repos/effect/packages/ai/anthropic/codegen.yml +63 -0
- package/repos/effect/packages/ai/anthropic/docgen.json +26 -0
- package/repos/effect/packages/ai/anthropic/package.json +67 -0
- package/repos/effect/packages/ai/anthropic/src/AnthropicClient.ts +432 -0
- package/repos/effect/packages/ai/anthropic/src/AnthropicConfig.ts +84 -0
- package/repos/effect/packages/ai/anthropic/src/AnthropicError.ts +212 -0
- package/repos/effect/packages/ai/anthropic/src/AnthropicLanguageModel.ts +3098 -0
- package/repos/effect/packages/ai/anthropic/src/AnthropicTelemetry.ts +132 -0
- package/repos/effect/packages/ai/anthropic/src/AnthropicTool.ts +2512 -0
- package/repos/effect/packages/ai/anthropic/src/Generated.ts +12600 -0
- package/repos/effect/packages/ai/anthropic/src/index.ts +40 -0
- package/repos/effect/packages/ai/anthropic/src/internal/errors.ts +370 -0
- package/repos/effect/packages/ai/anthropic/src/internal/utilities.ts +26 -0
- package/repos/effect/packages/ai/anthropic/test/AnthropicLanguageModel.test.ts +300 -0
- package/repos/effect/packages/ai/anthropic/tsconfig.json +8 -0
- package/repos/effect/packages/ai/anthropic/vitest.config.ts +6 -0
- package/repos/effect/packages/ai/openai/CHANGELOG.md +668 -0
- package/repos/effect/packages/ai/openai/codegen.yaml +41 -0
- package/repos/effect/packages/ai/openai/docgen.json +24 -0
- package/repos/effect/packages/ai/openai/package.json +67 -0
- package/repos/effect/packages/ai/openai/src/Generated.ts +35774 -0
- package/repos/effect/packages/ai/openai/src/OpenAiClient.ts +730 -0
- package/repos/effect/packages/ai/openai/src/OpenAiClientGenerated.ts +202 -0
- package/repos/effect/packages/ai/openai/src/OpenAiConfig.ts +93 -0
- package/repos/effect/packages/ai/openai/src/OpenAiEmbeddingModel.ts +258 -0
- package/repos/effect/packages/ai/openai/src/OpenAiError.ts +242 -0
- package/repos/effect/packages/ai/openai/src/OpenAiLanguageModel.ts +3133 -0
- package/repos/effect/packages/ai/openai/src/OpenAiSchema.ts +1286 -0
- package/repos/effect/packages/ai/openai/src/OpenAiTelemetry.ts +162 -0
- package/repos/effect/packages/ai/openai/src/OpenAiTool.ts +342 -0
- package/repos/effect/packages/ai/openai/src/index.ts +55 -0
- package/repos/effect/packages/ai/openai/src/internal/errors.ts +349 -0
- package/repos/effect/packages/ai/openai/src/internal/utilities.ts +33 -0
- package/repos/effect/packages/ai/openai/test/OpenAiClient.test.ts +798 -0
- package/repos/effect/packages/ai/openai/test/OpenAiEmbeddingModel.test.ts +289 -0
- package/repos/effect/packages/ai/openai/test/OpenAiLanguageModel.test.ts +1528 -0
- package/repos/effect/packages/ai/openai/test/OpenAiSchema.test.ts +273 -0
- package/repos/effect/packages/ai/openai/tsconfig.json +8 -0
- package/repos/effect/packages/ai/openai/vitest.config.ts +6 -0
- package/repos/effect/packages/ai/openai-compat/CHANGELOG.md +626 -0
- package/repos/effect/packages/ai/openai-compat/docgen.json +24 -0
- package/repos/effect/packages/ai/openai-compat/package.json +69 -0
- package/repos/effect/packages/ai/openai-compat/src/OpenAiClient.ts +1221 -0
- package/repos/effect/packages/ai/openai-compat/src/OpenAiConfig.ts +87 -0
- package/repos/effect/packages/ai/openai-compat/src/OpenAiEmbeddingModel.ts +254 -0
- package/repos/effect/packages/ai/openai-compat/src/OpenAiError.ts +178 -0
- package/repos/effect/packages/ai/openai-compat/src/OpenAiLanguageModel.ts +1951 -0
- package/repos/effect/packages/ai/openai-compat/src/OpenAiTelemetry.ts +164 -0
- package/repos/effect/packages/ai/openai-compat/src/index.ts +35 -0
- package/repos/effect/packages/ai/openai-compat/src/internal/errors.ts +327 -0
- package/repos/effect/packages/ai/openai-compat/src/internal/utilities.ts +33 -0
- package/repos/effect/packages/ai/openai-compat/test/OpenAiClient.test.ts +474 -0
- package/repos/effect/packages/ai/openai-compat/test/OpenAiEmbeddingModel.test.ts +216 -0
- package/repos/effect/packages/ai/openai-compat/test/OpenAiLanguageModel.test.ts +1505 -0
- package/repos/effect/packages/ai/openai-compat/tsconfig.json +8 -0
- package/repos/effect/packages/ai/openai-compat/vitest.config.ts +6 -0
- package/repos/effect/packages/ai/openrouter/CHANGELOG.md +607 -0
- package/repos/effect/packages/ai/openrouter/codegen.yml +35 -0
- package/repos/effect/packages/ai/openrouter/docgen.json +24 -0
- package/repos/effect/packages/ai/openrouter/package.json +67 -0
- package/repos/effect/packages/ai/openrouter/src/Generated.ts +10028 -0
- package/repos/effect/packages/ai/openrouter/src/OpenRouterClient.ts +357 -0
- package/repos/effect/packages/ai/openrouter/src/OpenRouterConfig.ts +99 -0
- package/repos/effect/packages/ai/openrouter/src/OpenRouterError.ts +225 -0
- package/repos/effect/packages/ai/openrouter/src/OpenRouterLanguageModel.ts +1796 -0
- package/repos/effect/packages/ai/openrouter/src/index.ts +30 -0
- package/repos/effect/packages/ai/openrouter/src/internal/errors.ts +375 -0
- package/repos/effect/packages/ai/openrouter/src/internal/utilities.ts +92 -0
- package/repos/effect/packages/ai/openrouter/tsconfig.json +10 -0
- package/repos/effect/packages/ai/openrouter/vitest.config.ts +6 -0
- package/repos/effect/packages/atom/react/CHANGELOG.md +599 -0
- package/repos/effect/packages/atom/react/LICENSE +21 -0
- package/repos/effect/packages/atom/react/README.md +7 -0
- package/repos/effect/packages/atom/react/docgen.json +25 -0
- package/repos/effect/packages/atom/react/package.json +79 -0
- package/repos/effect/packages/atom/react/src/Hooks.ts +476 -0
- package/repos/effect/packages/atom/react/src/ReactHydration.ts +109 -0
- package/repos/effect/packages/atom/react/src/RegistryContext.ts +108 -0
- package/repos/effect/packages/atom/react/src/ScopedAtom.ts +151 -0
- package/repos/effect/packages/atom/react/src/index.ts +23 -0
- package/repos/effect/packages/atom/react/test/index.test.tsx +650 -0
- package/repos/effect/packages/atom/react/tsconfig.json +8 -0
- package/repos/effect/packages/atom/react/vitest.config.ts +9 -0
- package/repos/effect/packages/atom/react/vitest.setup.ts +8 -0
- package/repos/effect/packages/atom/solid/CHANGELOG.md +595 -0
- package/repos/effect/packages/atom/solid/LICENSE +21 -0
- package/repos/effect/packages/atom/solid/README.md +7 -0
- package/repos/effect/packages/atom/solid/docgen.json +26 -0
- package/repos/effect/packages/atom/solid/package.json +72 -0
- package/repos/effect/packages/atom/solid/src/Hooks.ts +359 -0
- package/repos/effect/packages/atom/solid/src/RegistryContext.ts +80 -0
- package/repos/effect/packages/atom/solid/src/index.ts +13 -0
- package/repos/effect/packages/atom/solid/test/index.test.tsx +296 -0
- package/repos/effect/packages/atom/solid/tsconfig.json +8 -0
- package/repos/effect/packages/atom/solid/vitest.config.ts +15 -0
- package/repos/effect/packages/atom/solid/vitest.setup.ts +8 -0
- package/repos/effect/packages/atom/vue/CHANGELOG.md +593 -0
- package/repos/effect/packages/atom/vue/LICENSE +21 -0
- package/repos/effect/packages/atom/vue/README.md +7 -0
- package/repos/effect/packages/atom/vue/docgen.json +24 -0
- package/repos/effect/packages/atom/vue/package.json +68 -0
- package/repos/effect/packages/atom/vue/src/index.ts +211 -0
- package/repos/effect/packages/atom/vue/test/index.test.ts +5 -0
- package/repos/effect/packages/atom/vue/tsconfig.json +14 -0
- package/repos/effect/packages/atom/vue/vitest.config.ts +8 -0
- package/repos/effect/packages/effect/CHANGELOG.md +1607 -0
- package/repos/effect/packages/effect/CONFIG.md +690 -0
- package/repos/effect/packages/effect/HTTPAPI.md +3213 -0
- package/repos/effect/packages/effect/LICENSE +21 -0
- package/repos/effect/packages/effect/MCP.md +369 -0
- package/repos/effect/packages/effect/OPTIC.md +620 -0
- package/repos/effect/packages/effect/README.md +53 -0
- package/repos/effect/packages/effect/SCHEMA.md +7284 -0
- package/repos/effect/packages/effect/benchmark/schema/Enums.ts +40 -0
- package/repos/effect/packages/effect/benchmark/schema/Optic.ts +79 -0
- package/repos/effect/packages/effect/benchmark/schema/array.ts +74 -0
- package/repos/effect/packages/effect/benchmark/schema/filter.ts +74 -0
- package/repos/effect/packages/effect/benchmark/schema/object.ts +82 -0
- package/repos/effect/packages/effect/benchmark/schema/tagged-union.ts +69 -0
- package/repos/effect/packages/effect/benchmark/schema/transformation.ts +91 -0
- package/repos/effect/packages/effect/benchmark/stream/splitLines.ts +46 -0
- package/repos/effect/packages/effect/docgen.json +38 -0
- package/repos/effect/packages/effect/package.json +127 -0
- package/repos/effect/packages/effect/src/Array.ts +4908 -0
- package/repos/effect/packages/effect/src/BigDecimal.ts +1943 -0
- package/repos/effect/packages/effect/src/BigInt.ts +1029 -0
- package/repos/effect/packages/effect/src/Boolean.ts +481 -0
- package/repos/effect/packages/effect/src/Brand.ts +318 -0
- package/repos/effect/packages/effect/src/Cache.ts +1295 -0
- package/repos/effect/packages/effect/src/Cause.ts +1939 -0
- package/repos/effect/packages/effect/src/Channel.ts +8615 -0
- package/repos/effect/packages/effect/src/ChannelSchema.ts +308 -0
- package/repos/effect/packages/effect/src/Chunk.ts +2976 -0
- package/repos/effect/packages/effect/src/Clock.ts +194 -0
- package/repos/effect/packages/effect/src/Combiner.ts +316 -0
- package/repos/effect/packages/effect/src/Config.ts +1416 -0
- package/repos/effect/packages/effect/src/ConfigProvider.ts +1159 -0
- package/repos/effect/packages/effect/src/Console.ts +653 -0
- package/repos/effect/packages/effect/src/Context.ts +1339 -0
- package/repos/effect/packages/effect/src/Cron.ts +1212 -0
- package/repos/effect/packages/effect/src/Crypto.ts +318 -0
- package/repos/effect/packages/effect/src/Data.ts +774 -0
- package/repos/effect/packages/effect/src/DateTime.ts +2922 -0
- package/repos/effect/packages/effect/src/Deferred.ts +917 -0
- package/repos/effect/packages/effect/src/Differ.ts +32 -0
- package/repos/effect/packages/effect/src/Duration.ts +1827 -0
- package/repos/effect/packages/effect/src/Effect.ts +15347 -0
- package/repos/effect/packages/effect/src/Effectable.ts +68 -0
- package/repos/effect/packages/effect/src/Encoding.ts +1046 -0
- package/repos/effect/packages/effect/src/Equal.ts +550 -0
- package/repos/effect/packages/effect/src/Equivalence.ts +870 -0
- package/repos/effect/packages/effect/src/ErrorReporter.ts +543 -0
- package/repos/effect/packages/effect/src/ExecutionPlan.ts +416 -0
- package/repos/effect/packages/effect/src/Exit.ts +1085 -0
- package/repos/effect/packages/effect/src/Fiber.ts +632 -0
- package/repos/effect/packages/effect/src/FiberHandle.ts +815 -0
- package/repos/effect/packages/effect/src/FiberMap.ts +1030 -0
- package/repos/effect/packages/effect/src/FiberSet.ts +713 -0
- package/repos/effect/packages/effect/src/FileSystem.ts +1394 -0
- package/repos/effect/packages/effect/src/Filter.ts +827 -0
- package/repos/effect/packages/effect/src/Formatter.ts +319 -0
- package/repos/effect/packages/effect/src/Function.ts +1415 -0
- package/repos/effect/packages/effect/src/Graph.ts +4892 -0
- package/repos/effect/packages/effect/src/HKT.ts +213 -0
- package/repos/effect/packages/effect/src/Hash.ts +539 -0
- package/repos/effect/packages/effect/src/HashMap.ts +1236 -0
- package/repos/effect/packages/effect/src/HashRing.ts +426 -0
- package/repos/effect/packages/effect/src/HashSet.ts +605 -0
- package/repos/effect/packages/effect/src/Inspectable.ts +329 -0
- package/repos/effect/packages/effect/src/Iterable.ts +2483 -0
- package/repos/effect/packages/effect/src/JsonPatch.ts +469 -0
- package/repos/effect/packages/effect/src/JsonPointer.ts +80 -0
- package/repos/effect/packages/effect/src/JsonSchema.ts +948 -0
- package/repos/effect/packages/effect/src/Latch.ts +373 -0
- package/repos/effect/packages/effect/src/Layer.ts +2773 -0
- package/repos/effect/packages/effect/src/LayerMap.ts +468 -0
- package/repos/effect/packages/effect/src/LogLevel.ts +412 -0
- package/repos/effect/packages/effect/src/Logger.ts +1284 -0
- package/repos/effect/packages/effect/src/ManagedRuntime.ts +381 -0
- package/repos/effect/packages/effect/src/Match.ts +2606 -0
- package/repos/effect/packages/effect/src/Metric.ts +4058 -0
- package/repos/effect/packages/effect/src/MutableHashMap.ts +845 -0
- package/repos/effect/packages/effect/src/MutableHashSet.ts +422 -0
- package/repos/effect/packages/effect/src/MutableList.ts +967 -0
- package/repos/effect/packages/effect/src/MutableRef.ts +822 -0
- package/repos/effect/packages/effect/src/Newtype.ts +319 -0
- package/repos/effect/packages/effect/src/NonEmptyIterable.ts +221 -0
- package/repos/effect/packages/effect/src/Number.ts +860 -0
- package/repos/effect/packages/effect/src/Optic.ts +1701 -0
- package/repos/effect/packages/effect/src/Option.ts +2664 -0
- package/repos/effect/packages/effect/src/Order.ts +982 -0
- package/repos/effect/packages/effect/src/Ordering.ts +182 -0
- package/repos/effect/packages/effect/src/PartitionedSemaphore.ts +561 -0
- package/repos/effect/packages/effect/src/Path.ts +870 -0
- package/repos/effect/packages/effect/src/Pipeable.ts +674 -0
- package/repos/effect/packages/effect/src/PlatformError.ts +221 -0
- package/repos/effect/packages/effect/src/Pool.ts +699 -0
- package/repos/effect/packages/effect/src/Predicate.ts +1872 -0
- package/repos/effect/packages/effect/src/PrimaryKey.ts +123 -0
- package/repos/effect/packages/effect/src/PubSub.ts +2797 -0
- package/repos/effect/packages/effect/src/Pull.ts +376 -0
- package/repos/effect/packages/effect/src/Queue.ts +1962 -0
- package/repos/effect/packages/effect/src/Random.ts +549 -0
- package/repos/effect/packages/effect/src/RcMap.ts +612 -0
- package/repos/effect/packages/effect/src/RcRef.ts +225 -0
- package/repos/effect/packages/effect/src/Record.ts +1563 -0
- package/repos/effect/packages/effect/src/Redactable.ts +168 -0
- package/repos/effect/packages/effect/src/Redacted.ts +314 -0
- package/repos/effect/packages/effect/src/Reducer.ts +178 -0
- package/repos/effect/packages/effect/src/Ref.ts +801 -0
- package/repos/effect/packages/effect/src/References.ts +786 -0
- package/repos/effect/packages/effect/src/RegExp.ts +82 -0
- package/repos/effect/packages/effect/src/Request.ts +598 -0
- package/repos/effect/packages/effect/src/RequestResolver.ts +1249 -0
- package/repos/effect/packages/effect/src/Resource.ts +184 -0
- package/repos/effect/packages/effect/src/Result.ts +1939 -0
- package/repos/effect/packages/effect/src/Runtime.ts +432 -0
- package/repos/effect/packages/effect/src/Schedule.ts +3564 -0
- package/repos/effect/packages/effect/src/Scheduler.ts +285 -0
- package/repos/effect/packages/effect/src/Schema.ts +14653 -0
- package/repos/effect/packages/effect/src/SchemaAST.ts +3903 -0
- package/repos/effect/packages/effect/src/SchemaGetter.ts +1870 -0
- package/repos/effect/packages/effect/src/SchemaIssue.ts +1176 -0
- package/repos/effect/packages/effect/src/SchemaParser.ts +1105 -0
- package/repos/effect/packages/effect/src/SchemaRepresentation.ts +3944 -0
- package/repos/effect/packages/effect/src/SchemaTransformation.ts +1818 -0
- package/repos/effect/packages/effect/src/SchemaUtils.ts +51 -0
- package/repos/effect/packages/effect/src/Scope.ts +572 -0
- package/repos/effect/packages/effect/src/ScopedCache.ts +820 -0
- package/repos/effect/packages/effect/src/ScopedRef.ts +192 -0
- package/repos/effect/packages/effect/src/Semaphore.ts +517 -0
- package/repos/effect/packages/effect/src/Sink.ts +2174 -0
- package/repos/effect/packages/effect/src/Stdio.ts +143 -0
- package/repos/effect/packages/effect/src/Stream.ts +11722 -0
- package/repos/effect/packages/effect/src/String.ts +1427 -0
- package/repos/effect/packages/effect/src/Struct.ts +979 -0
- package/repos/effect/packages/effect/src/SubscriptionRef.ts +1021 -0
- package/repos/effect/packages/effect/src/Symbol.ts +31 -0
- package/repos/effect/packages/effect/src/SynchronizedRef.ts +668 -0
- package/repos/effect/packages/effect/src/Take.ts +46 -0
- package/repos/effect/packages/effect/src/Terminal.ts +188 -0
- package/repos/effect/packages/effect/src/Tracer.ts +683 -0
- package/repos/effect/packages/effect/src/Trie.ts +953 -0
- package/repos/effect/packages/effect/src/Tuple.ts +737 -0
- package/repos/effect/packages/effect/src/TxChunk.ts +822 -0
- package/repos/effect/packages/effect/src/TxDeferred.ts +319 -0
- package/repos/effect/packages/effect/src/TxHashMap.ts +2165 -0
- package/repos/effect/packages/effect/src/TxHashSet.ts +908 -0
- package/repos/effect/packages/effect/src/TxPriorityQueue.ts +567 -0
- package/repos/effect/packages/effect/src/TxPubSub.ts +684 -0
- package/repos/effect/packages/effect/src/TxQueue.ts +1488 -0
- package/repos/effect/packages/effect/src/TxReentrantLock.ts +655 -0
- package/repos/effect/packages/effect/src/TxRef.ts +282 -0
- package/repos/effect/packages/effect/src/TxSemaphore.ts +707 -0
- package/repos/effect/packages/effect/src/TxSubscriptionRef.ts +518 -0
- package/repos/effect/packages/effect/src/Types.ts +1121 -0
- package/repos/effect/packages/effect/src/UndefinedOr.ts +239 -0
- package/repos/effect/packages/effect/src/Unify.ts +314 -0
- package/repos/effect/packages/effect/src/Utils.ts +221 -0
- package/repos/effect/packages/effect/src/index.ts +712 -0
- package/repos/effect/packages/effect/src/internal/array.ts +8 -0
- package/repos/effect/packages/effect/src/internal/concurrency.ts +52 -0
- package/repos/effect/packages/effect/src/internal/core.ts +666 -0
- package/repos/effect/packages/effect/src/internal/dateTime.ts +1264 -0
- package/repos/effect/packages/effect/src/internal/doNotation.ts +117 -0
- package/repos/effect/packages/effect/src/internal/effect.ts +6427 -0
- package/repos/effect/packages/effect/src/internal/equal.ts +28 -0
- package/repos/effect/packages/effect/src/internal/errors.ts +9 -0
- package/repos/effect/packages/effect/src/internal/executionPlan.ts +120 -0
- package/repos/effect/packages/effect/src/internal/hashMap.ts +1309 -0
- package/repos/effect/packages/effect/src/internal/hashSet.ts +190 -0
- package/repos/effect/packages/effect/src/internal/layer.ts +88 -0
- package/repos/effect/packages/effect/src/internal/matcher.ts +637 -0
- package/repos/effect/packages/effect/src/internal/metric.ts +2 -0
- package/repos/effect/packages/effect/src/internal/option.ts +98 -0
- package/repos/effect/packages/effect/src/internal/random.ts +20 -0
- package/repos/effect/packages/effect/src/internal/rcRef.ts +189 -0
- package/repos/effect/packages/effect/src/internal/record.ts +18 -0
- package/repos/effect/packages/effect/src/internal/redacted.ts +19 -0
- package/repos/effect/packages/effect/src/internal/references.ts +72 -0
- package/repos/effect/packages/effect/src/internal/request.ts +205 -0
- package/repos/effect/packages/effect/src/internal/result.ts +112 -0
- package/repos/effect/packages/effect/src/internal/schedule.ts +248 -0
- package/repos/effect/packages/effect/src/internal/schema/annotations.ts +37 -0
- package/repos/effect/packages/effect/src/internal/schema/arbitrary.ts +894 -0
- package/repos/effect/packages/effect/src/internal/schema/cause.ts +26 -0
- package/repos/effect/packages/effect/src/internal/schema/equivalence.ts +154 -0
- package/repos/effect/packages/effect/src/internal/schema/representation.ts +799 -0
- package/repos/effect/packages/effect/src/internal/schema/schema.ts +128 -0
- package/repos/effect/packages/effect/src/internal/stream.ts +28 -0
- package/repos/effect/packages/effect/src/internal/tracer.ts +41 -0
- package/repos/effect/packages/effect/src/internal/trie.ts +733 -0
- package/repos/effect/packages/effect/src/internal/version.ts +2 -0
- package/repos/effect/packages/effect/src/testing/FastCheck.ts +89 -0
- package/repos/effect/packages/effect/src/testing/TestClock.ts +547 -0
- package/repos/effect/packages/effect/src/testing/TestConsole.ts +369 -0
- package/repos/effect/packages/effect/src/testing/TestSchema.ts +567 -0
- package/repos/effect/packages/effect/src/testing/index.ts +25 -0
- package/repos/effect/packages/effect/src/unstable/ai/AiError.ts +1629 -0
- package/repos/effect/packages/effect/src/unstable/ai/AnthropicStructuredOutput.ts +407 -0
- package/repos/effect/packages/effect/src/unstable/ai/Chat.ts +931 -0
- package/repos/effect/packages/effect/src/unstable/ai/EmbeddingModel.ts +269 -0
- package/repos/effect/packages/effect/src/unstable/ai/IdGenerator.ts +300 -0
- package/repos/effect/packages/effect/src/unstable/ai/LanguageModel.ts +2221 -0
- package/repos/effect/packages/effect/src/unstable/ai/McpSchema.ts +2527 -0
- package/repos/effect/packages/effect/src/unstable/ai/McpServer.ts +1468 -0
- package/repos/effect/packages/effect/src/unstable/ai/Model.ts +166 -0
- package/repos/effect/packages/effect/src/unstable/ai/OpenAiStructuredOutput.ts +476 -0
- package/repos/effect/packages/effect/src/unstable/ai/Prompt.ts +2234 -0
- package/repos/effect/packages/effect/src/unstable/ai/Response.ts +2582 -0
- package/repos/effect/packages/effect/src/unstable/ai/ResponseIdTracker.ts +139 -0
- package/repos/effect/packages/effect/src/unstable/ai/Telemetry.ts +515 -0
- package/repos/effect/packages/effect/src/unstable/ai/Tokenizer.ts +176 -0
- package/repos/effect/packages/effect/src/unstable/ai/Tool.ts +2003 -0
- package/repos/effect/packages/effect/src/unstable/ai/Toolkit.ts +554 -0
- package/repos/effect/packages/effect/src/unstable/ai/index.ts +90 -0
- package/repos/effect/packages/effect/src/unstable/ai/internal/codec-transformer.ts +13 -0
- package/repos/effect/packages/effect/src/unstable/cli/Argument.ts +749 -0
- package/repos/effect/packages/effect/src/unstable/cli/CliError.ts +549 -0
- package/repos/effect/packages/effect/src/unstable/cli/CliOutput.ts +607 -0
- package/repos/effect/packages/effect/src/unstable/cli/Command.ts +1610 -0
- package/repos/effect/packages/effect/src/unstable/cli/Completions.ts +123 -0
- package/repos/effect/packages/effect/src/unstable/cli/Flag.ts +986 -0
- package/repos/effect/packages/effect/src/unstable/cli/GlobalFlag.ts +295 -0
- package/repos/effect/packages/effect/src/unstable/cli/HelpDoc.ts +323 -0
- package/repos/effect/packages/effect/src/unstable/cli/Param.ts +2193 -0
- package/repos/effect/packages/effect/src/unstable/cli/Primitive.ts +766 -0
- package/repos/effect/packages/effect/src/unstable/cli/Prompt.ts +3852 -0
- package/repos/effect/packages/effect/src/unstable/cli/SEMANTICS.md +157 -0
- package/repos/effect/packages/effect/src/unstable/cli/index.ts +60 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/ansi.ts +152 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/auto-suggest.ts +41 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/command.ts +340 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/completions/bash.ts +222 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/completions/descriptor.ts +133 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/completions/fish.ts +253 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/completions/zsh.ts +220 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/config.ts +272 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/help.ts +181 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/lexer.ts +70 -0
- package/repos/effect/packages/effect/src/unstable/cli/internal/parser.ts +932 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ClusterCron.ts +163 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ClusterError.ts +238 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ClusterMetrics.ts +112 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ClusterSchema.ts +170 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ClusterWorkflowEngine.ts +778 -0
- package/repos/effect/packages/effect/src/unstable/cluster/DeliverAt.ts +58 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Entity.ts +779 -0
- package/repos/effect/packages/effect/src/unstable/cluster/EntityAddress.ts +93 -0
- package/repos/effect/packages/effect/src/unstable/cluster/EntityId.ts +50 -0
- package/repos/effect/packages/effect/src/unstable/cluster/EntityProxy.ts +263 -0
- package/repos/effect/packages/effect/src/unstable/cluster/EntityProxyServer.ts +149 -0
- package/repos/effect/packages/effect/src/unstable/cluster/EntityResource.ts +184 -0
- package/repos/effect/packages/effect/src/unstable/cluster/EntityType.ts +52 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Envelope.ts +433 -0
- package/repos/effect/packages/effect/src/unstable/cluster/HttpRunner.ts +345 -0
- package/repos/effect/packages/effect/src/unstable/cluster/K8sHttpClient.ts +297 -0
- package/repos/effect/packages/effect/src/unstable/cluster/MachineId.ts +54 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Message.ts +314 -0
- package/repos/effect/packages/effect/src/unstable/cluster/MessageStorage.ts +1072 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Reply.ts +455 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Runner.ts +129 -0
- package/repos/effect/packages/effect/src/unstable/cluster/RunnerAddress.ts +112 -0
- package/repos/effect/packages/effect/src/unstable/cluster/RunnerHealth.ts +145 -0
- package/repos/effect/packages/effect/src/unstable/cluster/RunnerServer.ts +220 -0
- package/repos/effect/packages/effect/src/unstable/cluster/RunnerStorage.ts +243 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Runners.ts +690 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ShardId.ts +178 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Sharding.ts +1488 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ShardingConfig.ts +367 -0
- package/repos/effect/packages/effect/src/unstable/cluster/ShardingRegistrationEvent.ts +76 -0
- package/repos/effect/packages/effect/src/unstable/cluster/SingleRunner.ts +75 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Singleton.ts +56 -0
- package/repos/effect/packages/effect/src/unstable/cluster/SingletonAddress.ts +49 -0
- package/repos/effect/packages/effect/src/unstable/cluster/Snowflake.ts +282 -0
- package/repos/effect/packages/effect/src/unstable/cluster/SocketRunner.ts +96 -0
- package/repos/effect/packages/effect/src/unstable/cluster/SqlMessageStorage.ts +1045 -0
- package/repos/effect/packages/effect/src/unstable/cluster/SqlRunnerStorage.ts +700 -0
- package/repos/effect/packages/effect/src/unstable/cluster/TestRunner.ts +36 -0
- package/repos/effect/packages/effect/src/unstable/cluster/index.ts +195 -0
- package/repos/effect/packages/effect/src/unstable/cluster/internal/entityManager.ts +678 -0
- package/repos/effect/packages/effect/src/unstable/cluster/internal/entityReaper.ts +58 -0
- package/repos/effect/packages/effect/src/unstable/cluster/internal/hash.ts +23 -0
- package/repos/effect/packages/effect/src/unstable/cluster/internal/interruptors.ts +2 -0
- package/repos/effect/packages/effect/src/unstable/cluster/internal/resourceMap.ts +100 -0
- package/repos/effect/packages/effect/src/unstable/cluster/internal/resourceRef.ts +99 -0
- package/repos/effect/packages/effect/src/unstable/devtools/DevTools.ts +68 -0
- package/repos/effect/packages/effect/src/unstable/devtools/DevToolsClient.ts +236 -0
- package/repos/effect/packages/effect/src/unstable/devtools/DevToolsSchema.ts +558 -0
- package/repos/effect/packages/effect/src/unstable/devtools/DevToolsServer.ts +94 -0
- package/repos/effect/packages/effect/src/unstable/devtools/index.ts +25 -0
- package/repos/effect/packages/effect/src/unstable/encoding/Msgpack.ts +383 -0
- package/repos/effect/packages/effect/src/unstable/encoding/Ndjson.ts +602 -0
- package/repos/effect/packages/effect/src/unstable/encoding/Sse.ts +593 -0
- package/repos/effect/packages/effect/src/unstable/encoding/index.ts +20 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/Event.ts +447 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventGroup.ts +193 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventJournal.ts +795 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLog.ts +1030 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogEncryption.ts +169 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogMessage.ts +354 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogRemote.ts +377 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogServer.ts +242 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogServerEncrypted.ts +268 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogServerUnencrypted.ts +898 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/EventLogSessionAuth.ts +524 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/SqlEventJournal.ts +353 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/SqlEventLogServerEncrypted.ts +343 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +527 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/index.ts +75 -0
- package/repos/effect/packages/effect/src/unstable/eventlog/internal/identityRootSecretDerivation.ts +153 -0
- package/repos/effect/packages/effect/src/unstable/http/Cookies.ts +952 -0
- package/repos/effect/packages/effect/src/unstable/http/Etag.ts +141 -0
- package/repos/effect/packages/effect/src/unstable/http/FetchHttpClient.ts +123 -0
- package/repos/effect/packages/effect/src/unstable/http/FindMyWay.ts +15 -0
- package/repos/effect/packages/effect/src/unstable/http/Headers.ts +438 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpBody.ts +545 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpClient.ts +1630 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpClientError.ts +328 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpClientRequest.ts +968 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpClientResponse.ts +408 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpEffect.ts +400 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpIncomingMessage.ts +153 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpMethod.ts +124 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpMiddleware.ts +394 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpPlatform.ts +165 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpRouter.ts +1341 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpServer.ts +329 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpServerError.ts +374 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpServerRequest.ts +1081 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpServerRespondable.ts +115 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpServerResponse.ts +1381 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpStaticServer.ts +464 -0
- package/repos/effect/packages/effect/src/unstable/http/HttpTraceContext.ts +160 -0
- package/repos/effect/packages/effect/src/unstable/http/Multipart.ts +830 -0
- package/repos/effect/packages/effect/src/unstable/http/Multipasta/HeadersParser.ts +14 -0
- package/repos/effect/packages/effect/src/unstable/http/Multipasta/Node.ts +14 -0
- package/repos/effect/packages/effect/src/unstable/http/Multipasta/Search.ts +14 -0
- package/repos/effect/packages/effect/src/unstable/http/Multipasta/Web.ts +14 -0
- package/repos/effect/packages/effect/src/unstable/http/Multipasta.ts +15 -0
- package/repos/effect/packages/effect/src/unstable/http/Template.ts +262 -0
- package/repos/effect/packages/effect/src/unstable/http/Url.ts +330 -0
- package/repos/effect/packages/effect/src/unstable/http/UrlParams.ts +678 -0
- package/repos/effect/packages/effect/src/unstable/http/index.ts +145 -0
- package/repos/effect/packages/effect/src/unstable/http/internal/preResponseHandler.ts +15 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApi.ts +316 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiBuilder.ts +1015 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiClient.ts +1005 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiEndpoint.ts +1545 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiError.ts +443 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiGroup.ts +381 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiMiddleware.ts +478 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiScalar.ts +267 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiSchema.ts +733 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiSecurity.ts +244 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiSwagger.ts +68 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/HttpApiTest.ts +112 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/OpenApi.ts +1098 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/index.ts +70 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/internal/html.ts +18 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/internal/httpApiScalar.ts +5 -0
- package/repos/effect/packages/effect/src/unstable/httpapi/internal/httpApiSwagger.ts +9 -0
- package/repos/effect/packages/effect/src/unstable/observability/Otlp.ts +172 -0
- package/repos/effect/packages/effect/src/unstable/observability/OtlpExporter.ts +149 -0
- package/repos/effect/packages/effect/src/unstable/observability/OtlpLogger.ts +340 -0
- package/repos/effect/packages/effect/src/unstable/observability/OtlpMetrics.ts +826 -0
- package/repos/effect/packages/effect/src/unstable/observability/OtlpResource.ts +288 -0
- package/repos/effect/packages/effect/src/unstable/observability/OtlpSerialization.ts +66 -0
- package/repos/effect/packages/effect/src/unstable/observability/OtlpTracer.ts +442 -0
- package/repos/effect/packages/effect/src/unstable/observability/PrometheusMetrics.ts +468 -0
- package/repos/effect/packages/effect/src/unstable/observability/index.ts +45 -0
- package/repos/effect/packages/effect/src/unstable/observability/internal/otlpEnv.ts +39 -0
- package/repos/effect/packages/effect/src/unstable/observability/internal/otlpProtobuf.ts +779 -0
- package/repos/effect/packages/effect/src/unstable/observability/internal/protobuf.ts +262 -0
- package/repos/effect/packages/effect/src/unstable/persistence/KeyValueStore.ts +864 -0
- package/repos/effect/packages/effect/src/unstable/persistence/Persistable.ts +252 -0
- package/repos/effect/packages/effect/src/unstable/persistence/PersistedCache.ts +111 -0
- package/repos/effect/packages/effect/src/unstable/persistence/PersistedQueue.ts +1196 -0
- package/repos/effect/packages/effect/src/unstable/persistence/Persistence.ts +1071 -0
- package/repos/effect/packages/effect/src/unstable/persistence/RateLimiter.ts +748 -0
- package/repos/effect/packages/effect/src/unstable/persistence/Redis.ts +188 -0
- package/repos/effect/packages/effect/src/unstable/persistence/index.ts +40 -0
- package/repos/effect/packages/effect/src/unstable/process/ChildProcess.ts +1036 -0
- package/repos/effect/packages/effect/src/unstable/process/ChildProcessSpawner.ts +285 -0
- package/repos/effect/packages/effect/src/unstable/process/index.ts +15 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/AsyncResult.ts +1081 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/Atom.ts +2520 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/AtomHttpApi.ts +352 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/AtomRef.ts +352 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/AtomRegistry.ts +1127 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/AtomRpc.ts +305 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/Hydration.ts +155 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/Reactivity.ts +348 -0
- package/repos/effect/packages/effect/src/unstable/reactivity/index.ts +45 -0
- package/repos/effect/packages/effect/src/unstable/rpc/Rpc.ts +1255 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcClient.ts +1370 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcClientError.ts +57 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcGroup.ts +409 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcMessage.ts +402 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcMiddleware.ts +344 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcSchema.ts +97 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcSerialization.ts +546 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcServer.ts +1492 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcTest.ts +56 -0
- package/repos/effect/packages/effect/src/unstable/rpc/RpcWorker.ts +118 -0
- package/repos/effect/packages/effect/src/unstable/rpc/Utils.ts +120 -0
- package/repos/effect/packages/effect/src/unstable/rpc/index.ts +65 -0
- package/repos/effect/packages/effect/src/unstable/schema/Model.ts +862 -0
- package/repos/effect/packages/effect/src/unstable/schema/VariantSchema.ts +604 -0
- package/repos/effect/packages/effect/src/unstable/schema/index.ts +15 -0
- package/repos/effect/packages/effect/src/unstable/socket/Socket.ts +911 -0
- package/repos/effect/packages/effect/src/unstable/socket/SocketServer.ts +147 -0
- package/repos/effect/packages/effect/src/unstable/socket/index.ts +15 -0
- package/repos/effect/packages/effect/src/unstable/sql/Migrator.ts +440 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlClient.ts +342 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlConnection.ts +83 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlError.ts +590 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlModel.ts +359 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlResolver.ts +380 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlSchema.ts +172 -0
- package/repos/effect/packages/effect/src/unstable/sql/SqlStream.ts +81 -0
- package/repos/effect/packages/effect/src/unstable/sql/Statement.ts +1500 -0
- package/repos/effect/packages/effect/src/unstable/sql/index.ts +50 -0
- package/repos/effect/packages/effect/src/unstable/workers/Transferable.ts +191 -0
- package/repos/effect/packages/effect/src/unstable/workers/Worker.ts +245 -0
- package/repos/effect/packages/effect/src/unstable/workers/WorkerError.ts +148 -0
- package/repos/effect/packages/effect/src/unstable/workers/WorkerRunner.ts +57 -0
- package/repos/effect/packages/effect/src/unstable/workers/index.ts +25 -0
- package/repos/effect/packages/effect/src/unstable/workflow/Activity.ts +322 -0
- package/repos/effect/packages/effect/src/unstable/workflow/DurableClock.ts +117 -0
- package/repos/effect/packages/effect/src/unstable/workflow/DurableDeferred.ts +653 -0
- package/repos/effect/packages/effect/src/unstable/workflow/DurableQueue.ts +360 -0
- package/repos/effect/packages/effect/src/unstable/workflow/Workflow.ts +898 -0
- package/repos/effect/packages/effect/src/unstable/workflow/WorkflowEngine.ts +759 -0
- package/repos/effect/packages/effect/src/unstable/workflow/WorkflowProxy.ts +212 -0
- package/repos/effect/packages/effect/src/unstable/workflow/WorkflowProxyServer.ts +151 -0
- package/repos/effect/packages/effect/src/unstable/workflow/index.ts +45 -0
- package/repos/effect/packages/effect/src/unstable/workflow/internal/crypto.ts +15 -0
- package/repos/effect/packages/effect/test/Array.test.ts +1579 -0
- package/repos/effect/packages/effect/test/AtomRef.test.ts +27 -0
- package/repos/effect/packages/effect/test/BigDecimal.test.ts +525 -0
- package/repos/effect/packages/effect/test/BigInt.test.ts +57 -0
- package/repos/effect/packages/effect/test/Boolean.test.ts +289 -0
- package/repos/effect/packages/effect/test/Brand.test.ts +160 -0
- package/repos/effect/packages/effect/test/Cache.test.ts +1423 -0
- package/repos/effect/packages/effect/test/Cause.test.ts +834 -0
- package/repos/effect/packages/effect/test/Channel.test.ts +556 -0
- package/repos/effect/packages/effect/test/Chunk.test.ts +874 -0
- package/repos/effect/packages/effect/test/Combiner.test.ts +42 -0
- package/repos/effect/packages/effect/test/Config.test.ts +1416 -0
- package/repos/effect/packages/effect/test/ConfigProvider.test.ts +726 -0
- package/repos/effect/packages/effect/test/Cron.test.ts +401 -0
- package/repos/effect/packages/effect/test/Crypto.test.ts +86 -0
- package/repos/effect/packages/effect/test/Data.test.ts +269 -0
- package/repos/effect/packages/effect/test/DateTime.test.ts +953 -0
- package/repos/effect/packages/effect/test/Deferred.test.ts +165 -0
- package/repos/effect/packages/effect/test/Duration.test.ts +679 -0
- package/repos/effect/packages/effect/test/Effect.test.ts +2658 -0
- package/repos/effect/packages/effect/test/EffectEager.test.ts +678 -0
- package/repos/effect/packages/effect/test/EffectKeepAlive.test.ts +71 -0
- package/repos/effect/packages/effect/test/Equal.test.ts +1278 -0
- package/repos/effect/packages/effect/test/Equivalence.test.ts +170 -0
- package/repos/effect/packages/effect/test/ExecutionPlan.test.ts +117 -0
- package/repos/effect/packages/effect/test/Exit.test.ts +12 -0
- package/repos/effect/packages/effect/test/Fiber.test.ts +9 -0
- package/repos/effect/packages/effect/test/FiberHandle.test.ts +146 -0
- package/repos/effect/packages/effect/test/FiberMap.test.ts +171 -0
- package/repos/effect/packages/effect/test/FiberSet.test.ts +119 -0
- package/repos/effect/packages/effect/test/Formatter.test.ts +247 -0
- package/repos/effect/packages/effect/test/Function.test.ts +333 -0
- package/repos/effect/packages/effect/test/Graph.test.ts +3505 -0
- package/repos/effect/packages/effect/test/HashMap.test.ts +618 -0
- package/repos/effect/packages/effect/test/HashSet.test.ts +298 -0
- package/repos/effect/packages/effect/test/HttpClient.test.ts +131 -0
- package/repos/effect/packages/effect/test/Iterable.test.ts +486 -0
- package/repos/effect/packages/effect/test/JsonPatch.test.ts +948 -0
- package/repos/effect/packages/effect/test/JsonPointer.test.ts +353 -0
- package/repos/effect/packages/effect/test/JsonSchema.test.ts +1253 -0
- package/repos/effect/packages/effect/test/Latch.test.ts +21 -0
- package/repos/effect/packages/effect/test/Layer.test.ts +648 -0
- package/repos/effect/packages/effect/test/LayerMap.test.ts +98 -0
- package/repos/effect/packages/effect/test/LogLevel.test.ts +28 -0
- package/repos/effect/packages/effect/test/Logger.test.ts +154 -0
- package/repos/effect/packages/effect/test/ManagedRuntime.test.ts +58 -0
- package/repos/effect/packages/effect/test/Match.test.ts +27 -0
- package/repos/effect/packages/effect/test/Metric.test.ts +682 -0
- package/repos/effect/packages/effect/test/Migrator.test.ts +69 -0
- package/repos/effect/packages/effect/test/MutableHashMap.test.ts +309 -0
- package/repos/effect/packages/effect/test/MutableHashSet.test.ts +10 -0
- package/repos/effect/packages/effect/test/MutableList.test.ts +58 -0
- package/repos/effect/packages/effect/test/Newtype.test.ts +90 -0
- package/repos/effect/packages/effect/test/Number.test.ts +422 -0
- package/repos/effect/packages/effect/test/Optic.test.ts +452 -0
- package/repos/effect/packages/effect/test/Option.test.ts +564 -0
- package/repos/effect/packages/effect/test/Order.test.ts +163 -0
- package/repos/effect/packages/effect/test/Ordering.test.ts +18 -0
- package/repos/effect/packages/effect/test/PartitionedSemaphore.test.ts +74 -0
- package/repos/effect/packages/effect/test/Pathfinding.test.ts +426 -0
- package/repos/effect/packages/effect/test/Pool.test.ts +422 -0
- package/repos/effect/packages/effect/test/Predicate.test.ts +555 -0
- package/repos/effect/packages/effect/test/PubSub.test.ts +538 -0
- package/repos/effect/packages/effect/test/Queue.test.ts +317 -0
- package/repos/effect/packages/effect/test/Random.test.ts +238 -0
- package/repos/effect/packages/effect/test/RcMap.test.ts +237 -0
- package/repos/effect/packages/effect/test/RcRef.test.ts +97 -0
- package/repos/effect/packages/effect/test/Record.test.ts +395 -0
- package/repos/effect/packages/effect/test/Redacted.test.ts +59 -0
- package/repos/effect/packages/effect/test/Reducer.test.ts +12 -0
- package/repos/effect/packages/effect/test/Ref.test.ts +187 -0
- package/repos/effect/packages/effect/test/Request.test.ts +305 -0
- package/repos/effect/packages/effect/test/Resource.test.ts +59 -0
- package/repos/effect/packages/effect/test/Result.test.ts +517 -0
- package/repos/effect/packages/effect/test/Schedule.test.ts +395 -0
- package/repos/effect/packages/effect/test/Scheduler.test.ts +70 -0
- package/repos/effect/packages/effect/test/Scope.test.ts +19 -0
- package/repos/effect/packages/effect/test/ScopedCache.test.ts +2316 -0
- package/repos/effect/packages/effect/test/ScopedRef.test.ts +80 -0
- package/repos/effect/packages/effect/test/Semaphore.test.ts +469 -0
- package/repos/effect/packages/effect/test/Sink.test.ts +230 -0
- package/repos/effect/packages/effect/test/Stream.test.ts +4712 -0
- package/repos/effect/packages/effect/test/String.test.ts +690 -0
- package/repos/effect/packages/effect/test/Struct.test.ts +216 -0
- package/repos/effect/packages/effect/test/SubscriptionRef.test.ts +90 -0
- package/repos/effect/packages/effect/test/Symbol.test.ts +50 -0
- package/repos/effect/packages/effect/test/SynchronizedRef.test.ts +105 -0
- package/repos/effect/packages/effect/test/TestClock.test.ts +71 -0
- package/repos/effect/packages/effect/test/Tracer.test.ts +410 -0
- package/repos/effect/packages/effect/test/Trie.test.ts +531 -0
- package/repos/effect/packages/effect/test/Tuple.test.ts +127 -0
- package/repos/effect/packages/effect/test/TxChunk.test.ts +342 -0
- package/repos/effect/packages/effect/test/TxDeferred.test.ts +197 -0
- package/repos/effect/packages/effect/test/TxHashMap.test.ts +963 -0
- package/repos/effect/packages/effect/test/TxHashSet.test.ts +442 -0
- package/repos/effect/packages/effect/test/TxPriorityQueue.test.ts +187 -0
- package/repos/effect/packages/effect/test/TxPubSub.test.ts +391 -0
- package/repos/effect/packages/effect/test/TxQueue.test.ts +1260 -0
- package/repos/effect/packages/effect/test/TxReentrantLock.test.ts +413 -0
- package/repos/effect/packages/effect/test/TxSemaphore.test.ts +283 -0
- package/repos/effect/packages/effect/test/TxSubscriptionRef.test.ts +197 -0
- package/repos/effect/packages/effect/test/UndefinedOr.test.ts +65 -0
- package/repos/effect/packages/effect/test/cluster/ClusterWorkflowEngine.test.ts +652 -0
- package/repos/effect/packages/effect/test/cluster/Entity.test.ts +81 -0
- package/repos/effect/packages/effect/test/cluster/K8sHttpClient.test.ts +34 -0
- package/repos/effect/packages/effect/test/cluster/MessageStorage.test.ts +196 -0
- package/repos/effect/packages/effect/test/cluster/Sharding.test.ts +578 -0
- package/repos/effect/packages/effect/test/cluster/TestEntity.ts +132 -0
- package/repos/effect/packages/effect/test/reactivity/AsyncResult.test.ts +41 -0
- package/repos/effect/packages/effect/test/reactivity/Atom.test.ts +2551 -0
- package/repos/effect/packages/effect/test/reactivity/AtomHttpApi.test.ts +86 -0
- package/repos/effect/packages/effect/test/reactivity/AtomRpc.test.ts +70 -0
- package/repos/effect/packages/effect/test/rpc/Rpc.test.ts +73 -0
- package/repos/effect/packages/effect/test/rpc/RpcClient.test.ts +58 -0
- package/repos/effect/packages/effect/test/rpc/RpcSerialization.test.ts +171 -0
- package/repos/effect/packages/effect/test/schema/HMR.test.ts +72 -0
- package/repos/effect/packages/effect/test/schema/Schema.test.ts +9133 -0
- package/repos/effect/packages/effect/test/schema/SchemaAST.test.ts +280 -0
- package/repos/effect/packages/effect/test/schema/SchemaGetter.test.ts +383 -0
- package/repos/effect/packages/effect/test/schema/SchemaIssue.test.ts +9 -0
- package/repos/effect/packages/effect/test/schema/SchemaParser.test.ts +323 -0
- package/repos/effect/packages/effect/test/schema/fixtures/HMR-Class.ts +5 -0
- package/repos/effect/packages/effect/test/schema/fixtures/HMR-sanity-check.ts +3 -0
- package/repos/effect/packages/effect/test/schema/representation/fromASTs.test.ts +820 -0
- package/repos/effect/packages/effect/test/schema/representation/fromJsonSchemaDocument.test.ts +2137 -0
- package/repos/effect/packages/effect/test/schema/representation/toCodeDocument.test.ts +2089 -0
- package/repos/effect/packages/effect/test/schema/representation/toJsonSchemaMultiDocument.test.ts +39 -0
- package/repos/effect/packages/effect/test/schema/representation/toSchema.test.ts +506 -0
- package/repos/effect/packages/effect/test/schema/toArbitrary.test.ts +1693 -0
- package/repos/effect/packages/effect/test/schema/toCodec.test.ts +3149 -0
- package/repos/effect/packages/effect/test/schema/toDifferJsonPatch.test.ts +239 -0
- package/repos/effect/packages/effect/test/schema/toEquivalence.test.ts +519 -0
- package/repos/effect/packages/effect/test/schema/toFormatter.test.ts +565 -0
- package/repos/effect/packages/effect/test/schema/toIso.test.ts +394 -0
- package/repos/effect/packages/effect/test/schema/toJsonSchemaDocument.test.ts +3630 -0
- package/repos/effect/packages/effect/test/schema/toStandardJSONSchemaV1.test.ts +126 -0
- package/repos/effect/packages/effect/test/schema/toStandardSchemaV1.test.ts +495 -0
- package/repos/effect/packages/effect/test/schema/v3-v4.test.ts +250 -0
- package/repos/effect/packages/effect/test/testing/TestSchema.test.ts +78 -0
- package/repos/effect/packages/effect/test/unstable/ai/AiError.test.ts +823 -0
- package/repos/effect/packages/effect/test/unstable/ai/AnthropicStructuredOutput.test.ts +593 -0
- package/repos/effect/packages/effect/test/unstable/ai/Chat.test.ts +147 -0
- package/repos/effect/packages/effect/test/unstable/ai/EmbeddingModel.test.ts +185 -0
- package/repos/effect/packages/effect/test/unstable/ai/LanguageModel.test.ts +1714 -0
- package/repos/effect/packages/effect/test/unstable/ai/LanguageModelTrackerLifecycle.test.ts +413 -0
- package/repos/effect/packages/effect/test/unstable/ai/McpServer.test.ts +82 -0
- package/repos/effect/packages/effect/test/unstable/ai/Model.test.ts +16 -0
- package/repos/effect/packages/effect/test/unstable/ai/OpenAiStructuredOutput.test.ts +723 -0
- package/repos/effect/packages/effect/test/unstable/ai/Prompt.test.ts +346 -0
- package/repos/effect/packages/effect/test/unstable/ai/ResponseIdTracker.test.ts +424 -0
- package/repos/effect/packages/effect/test/unstable/ai/Tool.test.ts +1264 -0
- package/repos/effect/packages/effect/test/unstable/ai/utils.ts +68 -0
- package/repos/effect/packages/effect/test/unstable/cli/Arguments.test.ts +390 -0
- package/repos/effect/packages/effect/test/unstable/cli/Command.test.ts +1801 -0
- package/repos/effect/packages/effect/test/unstable/cli/Errors.test.ts +150 -0
- package/repos/effect/packages/effect/test/unstable/cli/Help.test.ts +572 -0
- package/repos/effect/packages/effect/test/unstable/cli/LogLevel.test.ts +202 -0
- package/repos/effect/packages/effect/test/unstable/cli/Param.test.ts +391 -0
- package/repos/effect/packages/effect/test/unstable/cli/Primitive.test.ts +321 -0
- package/repos/effect/packages/effect/test/unstable/cli/Prompt.test.ts +597 -0
- package/repos/effect/packages/effect/test/unstable/cli/completions/completions.test.ts +656 -0
- package/repos/effect/packages/effect/test/unstable/cli/completions/descriptor.test.ts +245 -0
- package/repos/effect/packages/effect/test/unstable/cli/fixtures/ComprehensiveCli.ts +422 -0
- package/repos/effect/packages/effect/test/unstable/cli/services/MockTerminal.ts +135 -0
- package/repos/effect/packages/effect/test/unstable/cli/services/TestActions.ts +36 -0
- package/repos/effect/packages/effect/test/unstable/encoding/Ndjson.test.ts +18 -0
- package/repos/effect/packages/effect/test/unstable/encoding/Sse.test.ts +62 -0
- package/repos/effect/packages/effect/test/unstable/eventlog/EventJournal.test.ts +25 -0
- package/repos/effect/packages/effect/test/unstable/eventlog/EventLog.test.ts +104 -0
- package/repos/effect/packages/effect/test/unstable/eventlog/EventLogIdentityDerivation.test.ts +85 -0
- package/repos/effect/packages/effect/test/unstable/eventlog/EventLogRemote.test.ts +176 -0
- package/repos/effect/packages/effect/test/unstable/eventlog/EventLogSessionAuth.test.ts +130 -0
- package/repos/effect/packages/effect/test/unstable/eventlog/SqlEventLogServerUnencryptedStorageTest.ts +169 -0
- package/repos/effect/packages/effect/test/unstable/http/Cookies.test.ts +80 -0
- package/repos/effect/packages/effect/test/unstable/http/Headers.test.ts +73 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpClient.test.ts +306 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpClientRequest.test.ts +164 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpEffect.test.ts +254 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpMiddleware.test.ts +57 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpServerError.test.ts +121 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpServerRequest.test.ts +157 -0
- package/repos/effect/packages/effect/test/unstable/http/HttpServerResponse.test.ts +76 -0
- package/repos/effect/packages/effect/test/unstable/http/Multipart.test.ts +69 -0
- package/repos/effect/packages/effect/test/unstable/http/Url.test.ts +98 -0
- package/repos/effect/packages/effect/test/unstable/http/UrlParams.test.ts +30 -0
- package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiBuilder.test.ts +186 -0
- package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiClient.test.ts +446 -0
- package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiEndpoint.test.ts +160 -0
- package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiSchema.test.ts +108 -0
- package/repos/effect/packages/effect/test/unstable/httpapi/HttpApiSecurity.test.ts +41 -0
- package/repos/effect/packages/effect/test/unstable/httpapi/OpenApi.test.ts +39 -0
- package/repos/effect/packages/effect/test/unstable/observability/OtlpConfig.test.ts +151 -0
- package/repos/effect/packages/effect/test/unstable/observability/OtlpExporter.test.ts +108 -0
- package/repos/effect/packages/effect/test/unstable/observability/OtlpMetrics.test.ts +518 -0
- package/repos/effect/packages/effect/test/unstable/observability/OtlpResource.test.ts +84 -0
- package/repos/effect/packages/effect/test/unstable/observability/PrometheusMetrics.test.ts +417 -0
- package/repos/effect/packages/effect/test/unstable/persistence/KeyValueStore.test.ts +164 -0
- package/repos/effect/packages/effect/test/unstable/persistence/KeyValueStoreTest.ts +85 -0
- package/repos/effect/packages/effect/test/unstable/persistence/PersistedCache.test.ts +4 -0
- package/repos/effect/packages/effect/test/unstable/persistence/PersistedCacheTest.ts +111 -0
- package/repos/effect/packages/effect/test/unstable/persistence/PersistedQueue.test.ts +4 -0
- package/repos/effect/packages/effect/test/unstable/persistence/PersistedQueueTest.ts +106 -0
- package/repos/effect/packages/effect/test/unstable/persistence/RateLimiter.test.ts +145 -0
- package/repos/effect/packages/effect/test/unstable/persistence/Redis.test.ts +43 -0
- package/repos/effect/packages/effect/test/unstable/process/ChildProcess.test.ts +352 -0
- package/repos/effect/packages/effect/test/unstable/schema/VariantSchema.test.ts +72 -0
- package/repos/effect/packages/effect/test/unstable/sql/SqlError.test.ts +228 -0
- package/repos/effect/packages/effect/test/unstable/sql/SqlSchema.test.ts +168 -0
- package/repos/effect/packages/effect/test/unstable/workers/WorkerError.test.ts +90 -0
- package/repos/effect/packages/effect/test/unstable/workflow/DurableQueue.test.ts +105 -0
- package/repos/effect/packages/effect/test/unstable/workflow/WorkflowEngine.test.ts +60 -0
- package/repos/effect/packages/effect/test/utils/assert.ts +182 -0
- package/repos/effect/packages/effect/test/utils/chunkCoordination.ts +36 -0
- package/repos/effect/packages/effect/test/utils/counter.ts +54 -0
- package/repos/effect/packages/effect/tsconfig.json +8 -0
- package/repos/effect/packages/effect/typetest/AiError.tst.ts +49 -0
- package/repos/effect/packages/effect/typetest/Array.tst.ts +1289 -0
- package/repos/effect/packages/effect/typetest/Brand.tst.ts +51 -0
- package/repos/effect/packages/effect/typetest/Channel.tst.ts +112 -0
- package/repos/effect/packages/effect/typetest/Config.tst.ts +31 -0
- package/repos/effect/packages/effect/typetest/Data.tst.ts +121 -0
- package/repos/effect/packages/effect/typetest/Effect.tst.ts +976 -0
- package/repos/effect/packages/effect/typetest/Equivalence.tst.ts +19 -0
- package/repos/effect/packages/effect/typetest/Newtype.tst.ts +72 -0
- package/repos/effect/packages/effect/typetest/Optic.tst.ts +130 -0
- package/repos/effect/packages/effect/typetest/Option.tst.ts +72 -0
- package/repos/effect/packages/effect/typetest/Order.tst.ts +19 -0
- package/repos/effect/packages/effect/typetest/Predicate.tst.ts +251 -0
- package/repos/effect/packages/effect/typetest/Result.tst.ts +353 -0
- package/repos/effect/packages/effect/typetest/Schedule.tst.ts +21 -0
- package/repos/effect/packages/effect/typetest/Stream.tst.ts +197 -0
- package/repos/effect/packages/effect/typetest/Struct.tst.ts +422 -0
- package/repos/effect/packages/effect/typetest/Tuple.tst.ts +177 -0
- package/repos/effect/packages/effect/typetest/Types.tst.ts +364 -0
- package/repos/effect/packages/effect/typetest/VariantSchema.tst.ts +76 -0
- package/repos/effect/packages/effect/typetest/schema/Array.tst.ts +46 -0
- package/repos/effect/packages/effect/typetest/schema/Literals.tst.ts +58 -0
- package/repos/effect/packages/effect/typetest/schema/Record.tst.ts +145 -0
- package/repos/effect/packages/effect/typetest/schema/Schema.tst.ts +1854 -0
- package/repos/effect/packages/effect/typetest/schema/Struct.tst.ts +745 -0
- package/repos/effect/packages/effect/typetest/schema/Tuple.tst.ts +199 -0
- package/repos/effect/packages/effect/typetest/schema/Union.tst.ts +198 -0
- package/repos/effect/packages/effect/typetest/schema/api.tst.ts +276 -0
- package/repos/effect/packages/effect/typetest/schema/toArbitrary.tst.ts +65 -0
- package/repos/effect/packages/effect/typetest/schema/toIso.tst.ts +282 -0
- package/repos/effect/packages/effect/typetest/unstable/ai/LanguageModel.tst.ts +191 -0
- package/repos/effect/packages/effect/typetest/unstable/ai/Tool.tst.ts +33 -0
- package/repos/effect/packages/effect/typetest/unstable/cli/Command.tst.ts +124 -0
- package/repos/effect/packages/effect/typetest/unstable/cli/Param.tst.ts +20 -0
- package/repos/effect/packages/effect/typetest/unstable/cli/Prompt.tst.ts +97 -0
- package/repos/effect/packages/effect/typetest/unstable/encoding/Ndjson.tst.ts +24 -0
- package/repos/effect/packages/effect/typetest/unstable/http/HttpClient.tst.ts +143 -0
- package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiBuilder.tst.ts +98 -0
- package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiClient.tst.ts +677 -0
- package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiEndpoint.tst.ts +466 -0
- package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiMiddleware.tst.ts +90 -0
- package/repos/effect/packages/effect/typetest/unstable/httpapi/HttpApiSchema.tst.ts +135 -0
- package/repos/effect/packages/effect/typetest/unstable/reactivity/AsyncResult.tst.ts +65 -0
- package/repos/effect/packages/effect/typetest/unstable/reactivity/AtomHttpApi.tst.ts +63 -0
- package/repos/effect/packages/effect/typetest/unstable/rpc/Rpc.tst.ts +74 -0
- package/repos/effect/packages/effect/typetest/unstable/rpc/RpcGroup.tst.ts +61 -0
- package/repos/effect/packages/effect/typetest/unstable/rpc/RpcMiddleware.tst.ts +41 -0
- package/repos/effect/packages/effect/typetest/unstable/rpc/RpcServer.tst.ts +26 -0
- package/repos/effect/packages/effect/typetest/unstable/sql/SqlSchema.tst.ts +75 -0
- package/repos/effect/packages/effect/typetest/unstable/workflow/Workflow.tst.ts +16 -0
- package/repos/effect/packages/effect/vitest.config.ts +11 -0
- package/repos/effect/packages/opentelemetry/CHANGELOG.md +620 -0
- package/repos/effect/packages/opentelemetry/LICENSE +21 -0
- package/repos/effect/packages/opentelemetry/README.md +5 -0
- package/repos/effect/packages/opentelemetry/docgen.json +30 -0
- package/repos/effect/packages/opentelemetry/package.json +126 -0
- package/repos/effect/packages/opentelemetry/src/Logger.ts +193 -0
- package/repos/effect/packages/opentelemetry/src/Metrics.ts +138 -0
- package/repos/effect/packages/opentelemetry/src/NodeSdk.ts +162 -0
- package/repos/effect/packages/opentelemetry/src/Resource.ts +147 -0
- package/repos/effect/packages/opentelemetry/src/Tracer.ts +594 -0
- package/repos/effect/packages/opentelemetry/src/WebSdk.ts +140 -0
- package/repos/effect/packages/opentelemetry/src/index.ts +35 -0
- package/repos/effect/packages/opentelemetry/src/internal/attributes.ts +28 -0
- package/repos/effect/packages/opentelemetry/src/internal/metrics.ts +463 -0
- package/repos/effect/packages/opentelemetry/src/internal/utilities.ts +5 -0
- package/repos/effect/packages/opentelemetry/test/Logger.test.ts +122 -0
- package/repos/effect/packages/opentelemetry/test/Metrics.test.ts +339 -0
- package/repos/effect/packages/opentelemetry/test/Tracer.test.ts +167 -0
- package/repos/effect/packages/opentelemetry/tsconfig.json +8 -0
- package/repos/effect/packages/opentelemetry/vitest.config.ts +6 -0
- package/repos/effect/packages/platform-browser/CHANGELOG.md +637 -0
- package/repos/effect/packages/platform-browser/LICENSE +21 -0
- package/repos/effect/packages/platform-browser/README.md +1 -0
- package/repos/effect/packages/platform-browser/docgen.json +21 -0
- package/repos/effect/packages/platform-browser/package.json +74 -0
- package/repos/effect/packages/platform-browser/src/BrowserCrypto.ts +97 -0
- package/repos/effect/packages/platform-browser/src/BrowserHttpClient.ts +430 -0
- package/repos/effect/packages/platform-browser/src/BrowserKeyValueStore.ts +177 -0
- package/repos/effect/packages/platform-browser/src/BrowserPersistence.ts +334 -0
- package/repos/effect/packages/platform-browser/src/BrowserRuntime.ts +53 -0
- package/repos/effect/packages/platform-browser/src/BrowserSocket.ts +52 -0
- package/repos/effect/packages/platform-browser/src/BrowserStream.ts +56 -0
- package/repos/effect/packages/platform-browser/src/BrowserWorker.ts +98 -0
- package/repos/effect/packages/platform-browser/src/BrowserWorkerRunner.ts +199 -0
- package/repos/effect/packages/platform-browser/src/Clipboard.ts +143 -0
- package/repos/effect/packages/platform-browser/src/Geolocation.ts +233 -0
- package/repos/effect/packages/platform-browser/src/IndexedDb.ts +113 -0
- package/repos/effect/packages/platform-browser/src/IndexedDbDatabase.ts +648 -0
- package/repos/effect/packages/platform-browser/src/IndexedDbQueryBuilder.ts +2032 -0
- package/repos/effect/packages/platform-browser/src/IndexedDbTable.ts +260 -0
- package/repos/effect/packages/platform-browser/src/IndexedDbVersion.ts +138 -0
- package/repos/effect/packages/platform-browser/src/Permissions.ts +146 -0
- package/repos/effect/packages/platform-browser/src/index.ts +90 -0
- package/repos/effect/packages/platform-browser/test/BrowserCrypto.test.ts +74 -0
- package/repos/effect/packages/platform-browser/test/BrowserHttpClient.test.ts +91 -0
- package/repos/effect/packages/platform-browser/test/BrowserKeyValueStore.test.ts +23 -0
- package/repos/effect/packages/platform-browser/test/BrowserPersistence.test.ts +209 -0
- package/repos/effect/packages/platform-browser/test/BrowserPersistencePersistedCache.test.ts +29 -0
- package/repos/effect/packages/platform-browser/test/IndexedDbDatabase.test.ts +253 -0
- package/repos/effect/packages/platform-browser/test/IndexedDbQueryBuilder.test.ts +1459 -0
- package/repos/effect/packages/platform-browser/test/IndexedDbTable.test.ts +101 -0
- package/repos/effect/packages/platform-browser/test/IndexedDbVersion.test.ts +50 -0
- package/repos/effect/packages/platform-browser/test/Permissions.test.ts +12 -0
- package/repos/effect/packages/platform-browser/test/RpcWorker.test.ts +19 -0
- package/repos/effect/packages/platform-browser/test/fixtures/rpc-e2e.ts +141 -0
- package/repos/effect/packages/platform-browser/test/fixtures/rpc-schemas.ts +157 -0
- package/repos/effect/packages/platform-browser/test/fixtures/rpc-worker.ts +12 -0
- package/repos/effect/packages/platform-browser/tsconfig.json +8 -0
- package/repos/effect/packages/platform-browser/vitest.config.ts +17 -0
- package/repos/effect/packages/platform-browser/vitest.setup.ts +5 -0
- package/repos/effect/packages/platform-bun/CHANGELOG.md +691 -0
- package/repos/effect/packages/platform-bun/LICENSE +21 -0
- package/repos/effect/packages/platform-bun/README.md +7 -0
- package/repos/effect/packages/platform-bun/docgen.json +20 -0
- package/repos/effect/packages/platform-bun/package.json +73 -0
- package/repos/effect/packages/platform-bun/src/BunChildProcessSpawner.ts +6 -0
- package/repos/effect/packages/platform-bun/src/BunClusterHttp.ts +174 -0
- package/repos/effect/packages/platform-bun/src/BunClusterSocket.ts +153 -0
- package/repos/effect/packages/platform-bun/src/BunCrypto.ts +24 -0
- package/repos/effect/packages/platform-bun/src/BunFileSystem.ts +20 -0
- package/repos/effect/packages/platform-bun/src/BunHttpClient.ts +9 -0
- package/repos/effect/packages/platform-bun/src/BunHttpPlatform.ts +50 -0
- package/repos/effect/packages/platform-bun/src/BunHttpServer.ts +600 -0
- package/repos/effect/packages/platform-bun/src/BunHttpServerRequest.ts +19 -0
- package/repos/effect/packages/platform-bun/src/BunMultipart.ts +54 -0
- package/repos/effect/packages/platform-bun/src/BunPath.ts +37 -0
- package/repos/effect/packages/platform-bun/src/BunRedis.ts +88 -0
- package/repos/effect/packages/platform-bun/src/BunRuntime.ts +52 -0
- package/repos/effect/packages/platform-bun/src/BunServices.ts +49 -0
- package/repos/effect/packages/platform-bun/src/BunSink.ts +8 -0
- package/repos/effect/packages/platform-bun/src/BunSocket.ts +54 -0
- package/repos/effect/packages/platform-bun/src/BunSocketServer.ts +8 -0
- package/repos/effect/packages/platform-bun/src/BunStdio.ts +22 -0
- package/repos/effect/packages/platform-bun/src/BunStream.ts +68 -0
- package/repos/effect/packages/platform-bun/src/BunTerminal.ts +32 -0
- package/repos/effect/packages/platform-bun/src/BunWorker.ts +92 -0
- package/repos/effect/packages/platform-bun/src/BunWorkerRunner.ts +113 -0
- package/repos/effect/packages/platform-bun/src/index.ts +115 -0
- package/repos/effect/packages/platform-bun/tsconfig.json +12 -0
- package/repos/effect/packages/platform-node/CHANGELOG.md +695 -0
- package/repos/effect/packages/platform-node/LICENSE +21 -0
- package/repos/effect/packages/platform-node/README.md +7 -0
- package/repos/effect/packages/platform-node/docgen.json +24 -0
- package/repos/effect/packages/platform-node/package.json +82 -0
- package/repos/effect/packages/platform-node/src/Mime.ts +25 -0
- package/repos/effect/packages/platform-node/src/NodeChildProcessSpawner.ts +6 -0
- package/repos/effect/packages/platform-node/src/NodeClusterHttp.ts +155 -0
- package/repos/effect/packages/platform-node/src/NodeClusterSocket.ts +176 -0
- package/repos/effect/packages/platform-node/src/NodeCrypto.ts +24 -0
- package/repos/effect/packages/platform-node/src/NodeFileSystem.ts +21 -0
- package/repos/effect/packages/platform-node/src/NodeHttpClient.ts +664 -0
- package/repos/effect/packages/platform-node/src/NodeHttpIncomingMessage.ts +141 -0
- package/repos/effect/packages/platform-node/src/NodeHttpPlatform.ts +70 -0
- package/repos/effect/packages/platform-node/src/NodeHttpServer.ts +646 -0
- package/repos/effect/packages/platform-node/src/NodeHttpServerRequest.ts +33 -0
- package/repos/effect/packages/platform-node/src/NodeMultipart.ts +183 -0
- package/repos/effect/packages/platform-node/src/NodePath.ts +40 -0
- package/repos/effect/packages/platform-node/src/NodeRedis.ts +92 -0
- package/repos/effect/packages/platform-node/src/NodeRuntime.ts +53 -0
- package/repos/effect/packages/platform-node/src/NodeServices.ts +50 -0
- package/repos/effect/packages/platform-node/src/NodeSink.ts +8 -0
- package/repos/effect/packages/platform-node/src/NodeSocket.ts +72 -0
- package/repos/effect/packages/platform-node/src/NodeSocketServer.ts +8 -0
- package/repos/effect/packages/platform-node/src/NodeStdio.ts +22 -0
- package/repos/effect/packages/platform-node/src/NodeStream.ts +8 -0
- package/repos/effect/packages/platform-node/src/NodeTerminal.ts +32 -0
- package/repos/effect/packages/platform-node/src/NodeWorker.ts +121 -0
- package/repos/effect/packages/platform-node/src/NodeWorkerRunner.ts +110 -0
- package/repos/effect/packages/platform-node/src/Undici.ts +29 -0
- package/repos/effect/packages/platform-node/src/index.ts +130 -0
- package/repos/effect/packages/platform-node/test/HttpApi.test.ts +1831 -0
- package/repos/effect/packages/platform-node/test/HttpStaticServer.test.ts +253 -0
- package/repos/effect/packages/platform-node/test/HttpStaticServerConditional.test.ts +296 -0
- package/repos/effect/packages/platform-node/test/NodeCrypto.test.ts +59 -0
- package/repos/effect/packages/platform-node/test/NodeHttpClient.test.ts +157 -0
- package/repos/effect/packages/platform-node/test/NodeHttpPlatform.test.ts +51 -0
- package/repos/effect/packages/platform-node/test/NodeHttpServer.test.ts +598 -0
- package/repos/effect/packages/platform-node/test/NodeRedis.test.ts +31 -0
- package/repos/effect/packages/platform-node/test/NodeSocket.test.ts +153 -0
- package/repos/effect/packages/platform-node/test/OpenApi.test.ts +1573 -0
- package/repos/effect/packages/platform-node/test/RpcServer.test.ts +213 -0
- package/repos/effect/packages/platform-node/test/__snapshots__/HttpApi.test.ts.snap +715 -0
- package/repos/effect/packages/platform-node/test/cluster/MessageStorageTest.ts +196 -0
- package/repos/effect/packages/platform-node/test/cluster/SocketRunner.test.ts +120 -0
- package/repos/effect/packages/platform-node/test/cluster/SqlMessageStorage.test.ts +222 -0
- package/repos/effect/packages/platform-node/test/cluster/SqlRunnerStorage.test.ts +101 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/conditional.txt +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/custom/home.html +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/file.binx +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/guide/index.html +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/hello.txt +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/index.html +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server/range.txt +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/http-static-server-outside.txt +1 -0
- package/repos/effect/packages/platform-node/test/fixtures/mysql2-utils.ts +64 -0
- package/repos/effect/packages/platform-node/test/fixtures/pg-utils.ts +39 -0
- package/repos/effect/packages/platform-node/test/fixtures/rpc-e2e.ts +149 -0
- package/repos/effect/packages/platform-node/test/fixtures/rpc-schemas.ts +175 -0
- package/repos/effect/packages/platform-node/test/fixtures/text.txt +1 -0
- package/repos/effect/packages/platform-node/tsconfig.json +12 -0
- package/repos/effect/packages/platform-node/vitest.config.ts +6 -0
- package/repos/effect/packages/platform-node-shared/CHANGELOG.md +617 -0
- package/repos/effect/packages/platform-node-shared/LICENSE +21 -0
- package/repos/effect/packages/platform-node-shared/README.md +7 -0
- package/repos/effect/packages/platform-node-shared/docgen.json +38 -0
- package/repos/effect/packages/platform-node-shared/package.json +76 -0
- package/repos/effect/packages/platform-node-shared/src/NodeChildProcessSpawner.ts +713 -0
- package/repos/effect/packages/platform-node-shared/src/NodeClusterSocket.ts +70 -0
- package/repos/effect/packages/platform-node-shared/src/NodeCrypto.ts +60 -0
- package/repos/effect/packages/platform-node-shared/src/NodeFileSystem.ts +652 -0
- package/repos/effect/packages/platform-node-shared/src/NodePath.ts +80 -0
- package/repos/effect/packages/platform-node-shared/src/NodeRuntime.ts +59 -0
- package/repos/effect/packages/platform-node-shared/src/NodeSink.ts +116 -0
- package/repos/effect/packages/platform-node-shared/src/NodeSocket.ts +269 -0
- package/repos/effect/packages/platform-node-shared/src/NodeSocketServer.ts +301 -0
- package/repos/effect/packages/platform-node-shared/src/NodeStdio.ts +67 -0
- package/repos/effect/packages/platform-node-shared/src/NodeStream.ts +445 -0
- package/repos/effect/packages/platform-node-shared/src/NodeTerminal.ts +129 -0
- package/repos/effect/packages/platform-node-shared/src/index.ts +65 -0
- package/repos/effect/packages/platform-node-shared/src/internal/utils.ts +51 -0
- package/repos/effect/packages/platform-node-shared/test/NodeChildProcessSpawner.test.ts +1069 -0
- package/repos/effect/packages/platform-node-shared/test/NodeFileSystem.test.ts +214 -0
- package/repos/effect/packages/platform-node-shared/test/NodeSink.test.ts +153 -0
- package/repos/effect/packages/platform-node-shared/test/NodeStream.test.ts +173 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/bash/no-permissions.sh +3 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/bash/parent-exits-early.sh +31 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/bash/spawn-children.sh +32 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/config/SHOUTING +1 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/config/integer +1 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/config/nested/config +1 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/config/secret +1 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/helloworld.tar.gz +0 -0
- package/repos/effect/packages/platform-node-shared/test/fixtures/text.txt +1 -0
- package/repos/effect/packages/platform-node-shared/tsconfig.json +11 -0
- package/repos/effect/packages/platform-node-shared/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/clickhouse/CHANGELOG.md +681 -0
- package/repos/effect/packages/sql/clickhouse/LICENSE +21 -0
- package/repos/effect/packages/sql/clickhouse/README.md +7 -0
- package/repos/effect/packages/sql/clickhouse/docgen.json +24 -0
- package/repos/effect/packages/sql/clickhouse/package.json +72 -0
- package/repos/effect/packages/sql/clickhouse/src/ClickhouseClient.ts +546 -0
- package/repos/effect/packages/sql/clickhouse/src/ClickhouseMigrator.ts +51 -0
- package/repos/effect/packages/sql/clickhouse/src/index.ts +15 -0
- package/repos/effect/packages/sql/clickhouse/test/Client.test.ts +6 -0
- package/repos/effect/packages/sql/clickhouse/test/SqlErrorClassification.test.ts +75 -0
- package/repos/effect/packages/sql/clickhouse/tsconfig.json +12 -0
- package/repos/effect/packages/sql/clickhouse/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/d1/CHANGELOG.md +597 -0
- package/repos/effect/packages/sql/d1/LICENSE +21 -0
- package/repos/effect/packages/sql/d1/README.md +7 -0
- package/repos/effect/packages/sql/d1/docgen.json +24 -0
- package/repos/effect/packages/sql/d1/package.json +75 -0
- package/repos/effect/packages/sql/d1/src/D1Client.ts +249 -0
- package/repos/effect/packages/sql/d1/src/index.ts +10 -0
- package/repos/effect/packages/sql/d1/test/Client.test.ts +65 -0
- package/repos/effect/packages/sql/d1/test/Resolver.test.ts +176 -0
- package/repos/effect/packages/sql/d1/test/utils.ts +38 -0
- package/repos/effect/packages/sql/d1/tsconfig.json +8 -0
- package/repos/effect/packages/sql/d1/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/libsql/CHANGELOG.md +601 -0
- package/repos/effect/packages/sql/libsql/LICENSE +21 -0
- package/repos/effect/packages/sql/libsql/README.md +7 -0
- package/repos/effect/packages/sql/libsql/docgen.json +24 -0
- package/repos/effect/packages/sql/libsql/package.json +73 -0
- package/repos/effect/packages/sql/libsql/src/LibsqlClient.ts +381 -0
- package/repos/effect/packages/sql/libsql/src/LibsqlMigrator.ts +46 -0
- package/repos/effect/packages/sql/libsql/src/index.ts +15 -0
- package/repos/effect/packages/sql/libsql/test/Client.test.ts +106 -0
- package/repos/effect/packages/sql/libsql/test/Resolver.test.ts +177 -0
- package/repos/effect/packages/sql/libsql/test/util.ts +54 -0
- package/repos/effect/packages/sql/libsql/tsconfig.json +9 -0
- package/repos/effect/packages/sql/libsql/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/mssql/CHANGELOG.md +601 -0
- package/repos/effect/packages/sql/mssql/LICENSE +21 -0
- package/repos/effect/packages/sql/mssql/README.md +7 -0
- package/repos/effect/packages/sql/mssql/docgen.json +24 -0
- package/repos/effect/packages/sql/mssql/package.json +70 -0
- package/repos/effect/packages/sql/mssql/src/MssqlClient.ts +732 -0
- package/repos/effect/packages/sql/mssql/src/MssqlMigrator.ts +45 -0
- package/repos/effect/packages/sql/mssql/src/Parameter.ts +64 -0
- package/repos/effect/packages/sql/mssql/src/Procedure.ts +213 -0
- package/repos/effect/packages/sql/mssql/src/index.ts +32 -0
- package/repos/effect/packages/sql/mssql/test/Client.test.ts +91 -0
- package/repos/effect/packages/sql/mssql/test/SqlErrorClassification.test.ts +206 -0
- package/repos/effect/packages/sql/mssql/tsconfig.json +8 -0
- package/repos/effect/packages/sql/mssql/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/mysql2/CHANGELOG.md +603 -0
- package/repos/effect/packages/sql/mysql2/LICENSE +21 -0
- package/repos/effect/packages/sql/mysql2/README.md +7 -0
- package/repos/effect/packages/sql/mysql2/docgen.json +24 -0
- package/repos/effect/packages/sql/mysql2/package.json +71 -0
- package/repos/effect/packages/sql/mysql2/src/MysqlClient.ts +517 -0
- package/repos/effect/packages/sql/mysql2/src/MysqlMigrator.ts +102 -0
- package/repos/effect/packages/sql/mysql2/src/index.ts +15 -0
- package/repos/effect/packages/sql/mysql2/test/Client.test.ts +34 -0
- package/repos/effect/packages/sql/mysql2/test/KeyValueStore.test.ts +16 -0
- package/repos/effect/packages/sql/mysql2/test/Model.test.ts +227 -0
- package/repos/effect/packages/sql/mysql2/test/MysqlClient.test.ts +35 -0
- package/repos/effect/packages/sql/mysql2/test/Persistence.test.ts +22 -0
- package/repos/effect/packages/sql/mysql2/test/SqlErrorClassification.test.ts +133 -0
- package/repos/effect/packages/sql/mysql2/test/SqlEventLogServerUnencrypted.test.ts +7 -0
- package/repos/effect/packages/sql/mysql2/test/utils.ts +64 -0
- package/repos/effect/packages/sql/mysql2/tsconfig.json +9 -0
- package/repos/effect/packages/sql/mysql2/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/pg/CHANGELOG.md +3432 -0
- package/repos/effect/packages/sql/pg/LICENSE +21 -0
- package/repos/effect/packages/sql/pg/README.md +7 -0
- package/repos/effect/packages/sql/pg/docgen.json +24 -0
- package/repos/effect/packages/sql/pg/package.json +77 -0
- package/repos/effect/packages/sql/pg/src/PgClient.ts +947 -0
- package/repos/effect/packages/sql/pg/src/PgMigrator.ts +120 -0
- package/repos/effect/packages/sql/pg/src/index.ts +15 -0
- package/repos/effect/packages/sql/pg/test/Client.test.ts +373 -0
- package/repos/effect/packages/sql/pg/test/KeyValueStore.test.ts +16 -0
- package/repos/effect/packages/sql/pg/test/Persistence.test.ts +20 -0
- package/repos/effect/packages/sql/pg/test/SqlErrorClassification.test.ts +81 -0
- package/repos/effect/packages/sql/pg/test/SqlEventLogServerUnencrypted.test.ts +7 -0
- package/repos/effect/packages/sql/pg/test/TransactionAcquire.test.ts +52 -0
- package/repos/effect/packages/sql/pg/test/utils.ts +49 -0
- package/repos/effect/packages/sql/pg/tsconfig.json +9 -0
- package/repos/effect/packages/sql/pg/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/pglite/CHANGELOG.md +198 -0
- package/repos/effect/packages/sql/pglite/LICENSE +21 -0
- package/repos/effect/packages/sql/pglite/README.md +7 -0
- package/repos/effect/packages/sql/pglite/docgen.json +24 -0
- package/repos/effect/packages/sql/pglite/package.json +74 -0
- package/repos/effect/packages/sql/pglite/src/PgliteClient.ts +503 -0
- package/repos/effect/packages/sql/pglite/src/PgliteMigrator.ts +44 -0
- package/repos/effect/packages/sql/pglite/src/index.ts +15 -0
- package/repos/effect/packages/sql/pglite/test/Client.test.ts +149 -0
- package/repos/effect/packages/sql/pglite/test/Migrator.test.ts +45 -0
- package/repos/effect/packages/sql/pglite/test/SqlErrorClassification.test.ts +56 -0
- package/repos/effect/packages/sql/pglite/test/Transaction.test.ts +62 -0
- package/repos/effect/packages/sql/pglite/tsconfig.json +8 -0
- package/repos/effect/packages/sql/pglite/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/sqlite-bun/CHANGELOG.md +601 -0
- package/repos/effect/packages/sql/sqlite-bun/LICENSE +21 -0
- package/repos/effect/packages/sql/sqlite-bun/README.md +7 -0
- package/repos/effect/packages/sql/sqlite-bun/docgen.json +24 -0
- package/repos/effect/packages/sql/sqlite-bun/package.json +69 -0
- package/repos/effect/packages/sql/sqlite-bun/src/SqliteClient.ts +262 -0
- package/repos/effect/packages/sql/sqlite-bun/src/SqliteMigrator.ts +90 -0
- package/repos/effect/packages/sql/sqlite-bun/src/index.ts +15 -0
- package/repos/effect/packages/sql/sqlite-bun/test/Client.test.ts +6 -0
- package/repos/effect/packages/sql/sqlite-bun/tsconfig.json +11 -0
- package/repos/effect/packages/sql/sqlite-bun/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/sqlite-do/CHANGELOG.md +601 -0
- package/repos/effect/packages/sql/sqlite-do/LICENSE +21 -0
- package/repos/effect/packages/sql/sqlite-do/README.md +7 -0
- package/repos/effect/packages/sql/sqlite-do/docgen.json +24 -0
- package/repos/effect/packages/sql/sqlite-do/package.json +68 -0
- package/repos/effect/packages/sql/sqlite-do/src/SqliteClient.ts +249 -0
- package/repos/effect/packages/sql/sqlite-do/src/SqliteMigrator.ts +45 -0
- package/repos/effect/packages/sql/sqlite-do/src/index.ts +15 -0
- package/repos/effect/packages/sql/sqlite-do/test/Client.test.ts +24 -0
- package/repos/effect/packages/sql/sqlite-do/tsconfig.json +8 -0
- package/repos/effect/packages/sql/sqlite-do/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/sqlite-node/CHANGELOG.md +3415 -0
- package/repos/effect/packages/sql/sqlite-node/LICENSE +21 -0
- package/repos/effect/packages/sql/sqlite-node/README.md +7 -0
- package/repos/effect/packages/sql/sqlite-node/docgen.json +24 -0
- package/repos/effect/packages/sql/sqlite-node/package.json +72 -0
- package/repos/effect/packages/sql/sqlite-node/src/SqliteClient.ts +312 -0
- package/repos/effect/packages/sql/sqlite-node/src/SqliteMigrator.ts +90 -0
- package/repos/effect/packages/sql/sqlite-node/src/index.ts +15 -0
- package/repos/effect/packages/sql/sqlite-node/test/Client.test.ts +75 -0
- package/repos/effect/packages/sql/sqlite-node/test/KeyValueStore.test.ts +29 -0
- package/repos/effect/packages/sql/sqlite-node/test/Persistence.test.ts +109 -0
- package/repos/effect/packages/sql/sqlite-node/test/Resolver.test.ts +183 -0
- package/repos/effect/packages/sql/sqlite-node/test/SqlEventJournal.test.ts +84 -0
- package/repos/effect/packages/sql/sqlite-node/test/SqlEventLogServerEncrypted.test.ts +249 -0
- package/repos/effect/packages/sql/sqlite-node/test/SqlEventLogServerUnencrypted.test.ts +110 -0
- package/repos/effect/packages/sql/sqlite-node/test/SqliteMigrator.test.ts +48 -0
- package/repos/effect/packages/sql/sqlite-node/tsconfig.json +8 -0
- package/repos/effect/packages/sql/sqlite-node/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/sqlite-react-native/CHANGELOG.md +601 -0
- package/repos/effect/packages/sql/sqlite-react-native/LICENSE +21 -0
- package/repos/effect/packages/sql/sqlite-react-native/README.md +7 -0
- package/repos/effect/packages/sql/sqlite-react-native/docgen.json +24 -0
- package/repos/effect/packages/sql/sqlite-react-native/package.json +69 -0
- package/repos/effect/packages/sql/sqlite-react-native/src/SqliteClient.ts +354 -0
- package/repos/effect/packages/sql/sqlite-react-native/src/SqliteMigrator.ts +55 -0
- package/repos/effect/packages/sql/sqlite-react-native/src/index.ts +15 -0
- package/repos/effect/packages/sql/sqlite-react-native/test/Client.test.ts +6 -0
- package/repos/effect/packages/sql/sqlite-react-native/tsconfig.json +8 -0
- package/repos/effect/packages/sql/sqlite-react-native/vitest.config.ts +6 -0
- package/repos/effect/packages/sql/sqlite-wasm/CHANGELOG.md +601 -0
- package/repos/effect/packages/sql/sqlite-wasm/LICENSE +21 -0
- package/repos/effect/packages/sql/sqlite-wasm/README.md +7 -0
- package/repos/effect/packages/sql/sqlite-wasm/docgen.json +24 -0
- package/repos/effect/packages/sql/sqlite-wasm/package.json +69 -0
- package/repos/effect/packages/sql/sqlite-wasm/src/OpfsWorker.ts +118 -0
- package/repos/effect/packages/sql/sqlite-wasm/src/SqliteClient.ts +551 -0
- package/repos/effect/packages/sql/sqlite-wasm/src/SqliteMigrator.ts +55 -0
- package/repos/effect/packages/sql/sqlite-wasm/src/index.ts +14 -0
- package/repos/effect/packages/sql/sqlite-wasm/src/internal/opfsWorker.ts +7 -0
- package/repos/effect/packages/sql/sqlite-wasm/src/sqlite-wasm.d.ts +47 -0
- package/repos/effect/packages/sql/sqlite-wasm/test/Client.test.ts +6 -0
- package/repos/effect/packages/sql/sqlite-wasm/tsconfig.json +8 -0
- package/repos/effect/packages/sql/sqlite-wasm/vitest.config.ts +6 -0
- package/repos/effect/packages/tools/ai-codegen/codegen.schema.json +92 -0
- package/repos/effect/packages/tools/ai-codegen/docgen.json +4 -0
- package/repos/effect/packages/tools/ai-codegen/package.json +61 -0
- package/repos/effect/packages/tools/ai-codegen/src/Config.ts +292 -0
- package/repos/effect/packages/tools/ai-codegen/src/Discovery.ts +197 -0
- package/repos/effect/packages/tools/ai-codegen/src/Generator.ts +183 -0
- package/repos/effect/packages/tools/ai-codegen/src/Glob.ts +56 -0
- package/repos/effect/packages/tools/ai-codegen/src/PostProcess.ts +157 -0
- package/repos/effect/packages/tools/ai-codegen/src/SpecFetcher.ts +154 -0
- package/repos/effect/packages/tools/ai-codegen/src/bin.ts +10 -0
- package/repos/effect/packages/tools/ai-codegen/src/main.ts +237 -0
- package/repos/effect/packages/tools/ai-codegen/tsconfig.json +15 -0
- package/repos/effect/packages/tools/ai-docgen/docgen.json +4 -0
- package/repos/effect/packages/tools/ai-docgen/package.json +60 -0
- package/repos/effect/packages/tools/ai-docgen/src/Glob.ts +48 -0
- package/repos/effect/packages/tools/ai-docgen/src/main.ts +186 -0
- package/repos/effect/packages/tools/ai-docgen/tsconfig.json +14 -0
- package/repos/effect/packages/tools/bundle/docgen.json +4 -0
- package/repos/effect/packages/tools/bundle/fixtures/basic.ts +3 -0
- package/repos/effect/packages/tools/bundle/fixtures/batching.ts +25 -0
- package/repos/effect/packages/tools/bundle/fixtures/brand.ts +5 -0
- package/repos/effect/packages/tools/bundle/fixtures/cache.ts +10 -0
- package/repos/effect/packages/tools/bundle/fixtures/config.ts +13 -0
- package/repos/effect/packages/tools/bundle/fixtures/differ.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/http-client.ts +12 -0
- package/repos/effect/packages/tools/bundle/fixtures/logger.ts +5 -0
- package/repos/effect/packages/tools/bundle/fixtures/metric.ts +13 -0
- package/repos/effect/packages/tools/bundle/fixtures/optic.ts +6 -0
- package/repos/effect/packages/tools/bundle/fixtures/pubsub.ts +22 -0
- package/repos/effect/packages/tools/bundle/fixtures/queue.ts +18 -0
- package/repos/effect/packages/tools/bundle/fixtures/schedule.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-fromJsonSchemaDocument.ts +16 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-representation-roundtrip.ts +16 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-string-transformation.ts +20 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-string.ts +8 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-template-literal.ts +8 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toArbitraryLazy.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toCodeDocument.ts +12 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toCodecJson.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toEquivalence.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toFormatter.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toJsonSchemaDocument.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema-toRepresentation.ts +9 -0
- package/repos/effect/packages/tools/bundle/fixtures/schema.ts +12 -0
- package/repos/effect/packages/tools/bundle/fixtures/stm.ts +21 -0
- package/repos/effect/packages/tools/bundle/fixtures/stream.ts +7 -0
- package/repos/effect/packages/tools/bundle/package.json +52 -0
- package/repos/effect/packages/tools/bundle/src/Cli.ts +104 -0
- package/repos/effect/packages/tools/bundle/src/Fixtures.ts +51 -0
- package/repos/effect/packages/tools/bundle/src/Plugins.ts +131 -0
- package/repos/effect/packages/tools/bundle/src/Reporter.ts +200 -0
- package/repos/effect/packages/tools/bundle/src/Rollup.ts +179 -0
- package/repos/effect/packages/tools/bundle/src/bin.ts +23 -0
- package/repos/effect/packages/tools/bundle/tsconfig.fixtures.json +13 -0
- package/repos/effect/packages/tools/bundle/tsconfig.json +9 -0
- package/repos/effect/packages/tools/bundle/tsconfig.src.json +13 -0
- package/repos/effect/packages/tools/jsdocs/docgen.json +4 -0
- package/repos/effect/packages/tools/jsdocs/package.json +64 -0
- package/repos/effect/packages/tools/jsdocs/src/Jsdocs.ts +3303 -0
- package/repos/effect/packages/tools/jsdocs/src/bin.ts +23 -0
- package/repos/effect/packages/tools/jsdocs/test/jsdocs.test.ts +979 -0
- package/repos/effect/packages/tools/jsdocs/tsconfig.json +8 -0
- package/repos/effect/packages/tools/jsdocs/vitest.config.ts +6 -0
- package/repos/effect/packages/tools/openapi-generator/CHANGELOG.md +691 -0
- package/repos/effect/packages/tools/openapi-generator/LICENSE +21 -0
- package/repos/effect/packages/tools/openapi-generator/docgen.json +4 -0
- package/repos/effect/packages/tools/openapi-generator/package.json +78 -0
- package/repos/effect/packages/tools/openapi-generator/src/HttpApiTransformer.ts +552 -0
- package/repos/effect/packages/tools/openapi-generator/src/JsonSchemaGenerator.ts +319 -0
- package/repos/effect/packages/tools/openapi-generator/src/OpenApiGenerator.ts +1201 -0
- package/repos/effect/packages/tools/openapi-generator/src/OpenApiPatch.ts +539 -0
- package/repos/effect/packages/tools/openapi-generator/src/OpenApiTransformer.ts +1019 -0
- package/repos/effect/packages/tools/openapi-generator/src/ParsedOperation.ts +277 -0
- package/repos/effect/packages/tools/openapi-generator/src/Utils.ts +111 -0
- package/repos/effect/packages/tools/openapi-generator/src/bin.ts +10 -0
- package/repos/effect/packages/tools/openapi-generator/src/main.ts +116 -0
- package/repos/effect/packages/tools/openapi-generator/test/JsonSchemaGenerator.test.ts +173 -0
- package/repos/effect/packages/tools/openapi-generator/test/OpenApiGenerator.test.ts +2130 -0
- package/repos/effect/packages/tools/openapi-generator/test/OpenApiGeneratorCli.test.ts +147 -0
- package/repos/effect/packages/tools/openapi-generator/test/OpenApiPatch.test.ts +380 -0
- package/repos/effect/packages/tools/openapi-generator/test/Utils.test.ts +33 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/cli-basic-spec.json +35 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/cli-warning-spec.json +57 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/invalid-op.json +7 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/missing-path.json +6 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/missing-value.json +6 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-add.json +8 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-multiple.json +17 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-patch.yaml +6 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-remove.json +6 -0
- package/repos/effect/packages/tools/openapi-generator/test/fixtures/patches/valid-replace.json +7 -0
- package/repos/effect/packages/tools/openapi-generator/tsconfig.json +9 -0
- package/repos/effect/packages/tools/openapi-generator/vitest.config.ts +6 -0
- package/repos/effect/packages/tools/oxc/docgen.json +4 -0
- package/repos/effect/packages/tools/oxc/oxlintrc.json +83 -0
- package/repos/effect/packages/tools/oxc/package.json +72 -0
- package/repos/effect/packages/tools/oxc/src/oxlint/index.ts +18 -0
- package/repos/effect/packages/tools/oxc/src/oxlint/rules/jsdocs.ts +108 -0
- package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-bigint-literals.ts +25 -0
- package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-import-from-barrel-package.ts +144 -0
- package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-js-extension-imports.ts +73 -0
- package/repos/effect/packages/tools/oxc/src/oxlint/rules/no-opaque-instance-fields.ts +92 -0
- package/repos/effect/packages/tools/oxc/test/jsdocs.test.ts +75 -0
- package/repos/effect/packages/tools/oxc/test/no-import-from-barrel-package.test.ts +182 -0
- package/repos/effect/packages/tools/oxc/test/no-js-extension-imports.test.ts +120 -0
- package/repos/effect/packages/tools/oxc/test/no-opaque-instance-fields.test.ts +276 -0
- package/repos/effect/packages/tools/oxc/test/utils.ts +61 -0
- package/repos/effect/packages/tools/oxc/tsconfig.json +8 -0
- package/repos/effect/packages/tools/oxc/vitest.config.ts +6 -0
- package/repos/effect/packages/tools/utils/docgen.json +4 -0
- package/repos/effect/packages/tools/utils/package.json +59 -0
- package/repos/effect/packages/tools/utils/src/Codegen.ts +214 -0
- package/repos/effect/packages/tools/utils/src/Glob.ts +61 -0
- package/repos/effect/packages/tools/utils/src/bin.ts +16 -0
- package/repos/effect/packages/tools/utils/src/commands/codegen.ts +44 -0
- package/repos/effect/packages/tools/utils/tsconfig.json +9 -0
- package/repos/effect/packages/vitest/CHANGELOG.md +601 -0
- package/repos/effect/packages/vitest/LICENSE +21 -0
- package/repos/effect/packages/vitest/README.md +320 -0
- package/repos/effect/packages/vitest/docgen.json +24 -0
- package/repos/effect/packages/vitest/package.json +60 -0
- package/repos/effect/packages/vitest/src/index.ts +259 -0
- package/repos/effect/packages/vitest/src/internal/internal.ts +374 -0
- package/repos/effect/packages/vitest/src/utils.ts +321 -0
- package/repos/effect/packages/vitest/test/index.test.ts +222 -0
- package/repos/effect/packages/vitest/test/isolation.test.ts +105 -0
- package/repos/effect/packages/vitest/test/nested-isolation.test.ts +212 -0
- package/repos/effect/packages/vitest/tsconfig.json +11 -0
- package/repos/effect/packages/vitest/typetest/index.tst.ts +56 -0
- package/repos/effect/packages/vitest/vitest.config.ts +6 -0
- package/repos/effect/patches/@changesets__assemble-release-plan.patch +26 -0
- package/repos/effect/patches/@changesets__get-github-info.patch +44 -0
- package/repos/effect/pnpm-lock.yaml +13483 -0
- package/repos/effect/pnpm-workspace.yaml +10 -0
- package/repos/effect/scripts/bundle-compare.sh +42 -0
- package/repos/effect/scripts/check-cookbook-schedule.ts +390 -0
- package/repos/effect/scripts/circular.mjs +26 -0
- package/repos/effect/scripts/clean.mjs +19 -0
- package/repos/effect/scripts/codemod.mjs +22 -0
- package/repos/effect/scripts/codemods/jsdoc.ts +79 -0
- package/repos/effect/scripts/docs.mjs +64 -0
- package/repos/effect/scripts/package-scalar.mjs +14 -0
- package/repos/effect/scripts/package-swagger.mjs +23 -0
- package/repos/effect/scripts/package.json +22 -0
- package/repos/effect/scripts/tsconfig.json +18 -0
- package/repos/effect/scripts/version.mjs +9 -0
- package/repos/effect/scripts/version.template.txt +2 -0
- package/repos/effect/scripts/worktree-setup.sh +27 -0
- package/repos/effect/stats.txt +30 -0
- package/repos/effect/tsconfig.base.json +46 -0
- package/repos/effect/tsconfig.json +128 -0
- package/repos/effect/tsconfig.packages.json +39 -0
- package/repos/effect/tstyche.json +7 -0
- package/repos/effect/vitest.config.ts +31 -0
- package/repos/effect/vitest.setup.ts +4 -0
- package/repos/effect/vitest.shared.ts +61 -0
- package/repos/effect.subtree.json +16 -0
|
@@ -0,0 +1,2606 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds pattern matchers for TypeScript values.
|
|
3
|
+
*
|
|
4
|
+
* `Match` lets you add ordered cases and then finish them with a result,
|
|
5
|
+
* fallback, `Option`, or exhaustive check. Use `Match.type` to define a
|
|
6
|
+
* reusable matcher for a type, or `Match.value` to match one value immediately.
|
|
7
|
+
* Cases can match literal values, predicates, object shapes, tags, negated
|
|
8
|
+
* patterns, and common checks such as strings, numbers, records, and class
|
|
9
|
+
* instances.
|
|
10
|
+
*
|
|
11
|
+
* @since 4.0.0
|
|
12
|
+
*/
|
|
13
|
+
import * as internal from "./internal/matcher.ts"
|
|
14
|
+
import type * as Option from "./Option.ts"
|
|
15
|
+
import type { Pipeable } from "./Pipeable.ts"
|
|
16
|
+
import * as Predicate from "./Predicate.ts"
|
|
17
|
+
import type * as Result from "./Result.ts"
|
|
18
|
+
import type * as T from "./Types.ts"
|
|
19
|
+
import type { Unify } from "./Unify.ts"
|
|
20
|
+
|
|
21
|
+
const TypeId = internal.TypeId
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Union type for matchers created by `Match.type` and `Match.value`.
|
|
25
|
+
*
|
|
26
|
+
* **Details**
|
|
27
|
+
*
|
|
28
|
+
* A `Matcher` carries the input type, accumulated filters, remaining cases,
|
|
29
|
+
* result type, and, for value matchers, the provided value being matched.
|
|
30
|
+
*
|
|
31
|
+
* **Example** (Matching string and number values)
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { Match } from "effect"
|
|
35
|
+
*
|
|
36
|
+
* // Simulated dynamic input that can be a string or a number
|
|
37
|
+
* const input: string | number = "some input"
|
|
38
|
+
*
|
|
39
|
+
* // ┌─── string
|
|
40
|
+
* // ▼
|
|
41
|
+
* const result = Match.value(input).pipe(
|
|
42
|
+
* // Match if the value is a number
|
|
43
|
+
* Match.when(Match.number, (n) => `number: ${n}`),
|
|
44
|
+
* // Match if the value is a string
|
|
45
|
+
* Match.when(Match.string, (s) => `string: ${s}`),
|
|
46
|
+
* // Ensure all possible cases are covered
|
|
47
|
+
* Match.exhaustive
|
|
48
|
+
* )
|
|
49
|
+
*
|
|
50
|
+
* console.log(result)
|
|
51
|
+
* // Output: "string: some input"
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @category models
|
|
55
|
+
* @since 4.0.0
|
|
56
|
+
*/
|
|
57
|
+
export type Matcher<Input, Filters, RemainingApplied, Result, Provided, Return = any> =
|
|
58
|
+
| TypeMatcher<Input, Filters, RemainingApplied, Result, Return>
|
|
59
|
+
| ValueMatcher<Input, Filters, RemainingApplied, Result, Provided, Return>
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Represents a pattern matcher that operates on types rather than specific values.
|
|
63
|
+
*
|
|
64
|
+
* **Details**
|
|
65
|
+
*
|
|
66
|
+
* A `TypeMatcher` is created when using `Match.type<T>()` and allows you to define
|
|
67
|
+
* patterns that will be applied to values of the specified type. It maintains
|
|
68
|
+
* type-level information about the input type, applied filters, remaining cases,
|
|
69
|
+
* and expected results.
|
|
70
|
+
*
|
|
71
|
+
* **Example** (Creating a type matcher)
|
|
72
|
+
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* import { Match } from "effect"
|
|
75
|
+
*
|
|
76
|
+
* // Create a TypeMatcher for string | number
|
|
77
|
+
* const matcher = Match.type<string | number>().pipe(
|
|
78
|
+
* Match.when(Match.string, (s) => `String: ${s}`),
|
|
79
|
+
* Match.when(Match.number, (n) => `Number: ${n}`),
|
|
80
|
+
* Match.exhaustive
|
|
81
|
+
* )
|
|
82
|
+
*
|
|
83
|
+
* console.log(matcher("hello")) // "String: hello"
|
|
84
|
+
* console.log(matcher(42)) // "Number: 42"
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* @category models
|
|
88
|
+
* @since 4.0.0
|
|
89
|
+
*/
|
|
90
|
+
export interface TypeMatcher<in Input, out Filters, out Remaining, out Result, out Return = any> extends Pipeable {
|
|
91
|
+
readonly _tag: "TypeMatcher"
|
|
92
|
+
readonly [TypeId]: {
|
|
93
|
+
readonly _input: T.Contravariant<Input>
|
|
94
|
+
readonly _filters: T.Covariant<Filters>
|
|
95
|
+
readonly _remaining: T.Covariant<Remaining>
|
|
96
|
+
readonly _result: T.Covariant<Result>
|
|
97
|
+
readonly _return: T.Covariant<Return>
|
|
98
|
+
}
|
|
99
|
+
readonly cases: ReadonlyArray<Case>
|
|
100
|
+
add<I, R, RA, A>(_case: Case): TypeMatcher<I, R, RA, A>
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Represents a pattern matcher that operates on a specific provided value.
|
|
105
|
+
*
|
|
106
|
+
* **Details**
|
|
107
|
+
*
|
|
108
|
+
* A `ValueMatcher` is created when using `Match.value(someValue)` and contains
|
|
109
|
+
* the actual value to be matched against. It tracks both the provided value
|
|
110
|
+
* and the result of applying patterns to determine matches.
|
|
111
|
+
*
|
|
112
|
+
* **Example** (Creating a value matcher)
|
|
113
|
+
*
|
|
114
|
+
* ```ts
|
|
115
|
+
* import { Match } from "effect"
|
|
116
|
+
*
|
|
117
|
+
* const input = { type: "user", name: "Alice", age: 30 }
|
|
118
|
+
*
|
|
119
|
+
* // Create a ValueMatcher for the specific input
|
|
120
|
+
* const result = Match.value(input).pipe(
|
|
121
|
+
* Match.when({ type: "user" }, (user) => `User: ${user.name}`),
|
|
122
|
+
* Match.when({ type: "admin" }, (admin) => `Admin: ${admin.name}`),
|
|
123
|
+
* Match.orElse(() => "Unknown type")
|
|
124
|
+
* )
|
|
125
|
+
*
|
|
126
|
+
* console.log(result) // "User: Alice"
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @category models
|
|
130
|
+
* @since 4.0.0
|
|
131
|
+
*/
|
|
132
|
+
export interface ValueMatcher<in Input, Filters, out Remaining, out Result, Provided, out Return = any>
|
|
133
|
+
extends Pipeable
|
|
134
|
+
{
|
|
135
|
+
readonly _tag: "ValueMatcher"
|
|
136
|
+
readonly [TypeId]: {
|
|
137
|
+
readonly _input: T.Contravariant<Input>
|
|
138
|
+
readonly _filters: T.Covariant<Filters>
|
|
139
|
+
readonly _result: T.Covariant<Result>
|
|
140
|
+
readonly _return: T.Covariant<Return>
|
|
141
|
+
}
|
|
142
|
+
readonly provided: Provided
|
|
143
|
+
readonly value: Result.Result<Provided, Remaining>
|
|
144
|
+
add<I, R, RA, A, Pr>(_case: Case): ValueMatcher<I, R, RA, A, Pr>
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Represents a single pattern matching case.
|
|
149
|
+
*
|
|
150
|
+
* **When to use**
|
|
151
|
+
*
|
|
152
|
+
* Use as the common public type for code that needs to inspect, store, or pass
|
|
153
|
+
* either positive or negative pattern matching cases.
|
|
154
|
+
*
|
|
155
|
+
* **Details**
|
|
156
|
+
*
|
|
157
|
+
* A `Case` can be either a positive match (`When`) or a negative match (`Not`).
|
|
158
|
+
* Cases are the building blocks of pattern matching logic and determine
|
|
159
|
+
* how values are tested and transformed.
|
|
160
|
+
*
|
|
161
|
+
* @see {@link When} for positive cases
|
|
162
|
+
* @see {@link Not} for negative cases
|
|
163
|
+
*
|
|
164
|
+
* @category models
|
|
165
|
+
* @since 4.0.0
|
|
166
|
+
*/
|
|
167
|
+
export type Case = When | Not
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Represents a positive pattern matching case.
|
|
171
|
+
*
|
|
172
|
+
* **Details**
|
|
173
|
+
*
|
|
174
|
+
* A `When` case contains the logic to test if a value matches a specific pattern
|
|
175
|
+
* and the function to evaluate when the pattern matches. It's the primary
|
|
176
|
+
* building block for pattern matching conditions.
|
|
177
|
+
*
|
|
178
|
+
* **Example** (Creating positive match cases)
|
|
179
|
+
*
|
|
180
|
+
* ```ts
|
|
181
|
+
* import { Match } from "effect"
|
|
182
|
+
*
|
|
183
|
+
* // When creates cases that match specific patterns
|
|
184
|
+
* const stringMatcher = Match.type<string | number>().pipe(
|
|
185
|
+
* Match.when(Match.string, (s: string) => `Got string: ${s}`),
|
|
186
|
+
* Match.when(Match.number, (n: number) => `Got number: ${n}`),
|
|
187
|
+
* Match.exhaustive
|
|
188
|
+
* )
|
|
189
|
+
*
|
|
190
|
+
* console.log(stringMatcher("hello")) // "Got string: hello"
|
|
191
|
+
* console.log(stringMatcher(42)) // "Got number: 42"
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @category models
|
|
195
|
+
* @since 4.0.0
|
|
196
|
+
*/
|
|
197
|
+
export interface When {
|
|
198
|
+
readonly _tag: "When"
|
|
199
|
+
guard(u: unknown): boolean
|
|
200
|
+
evaluate(input: unknown): any
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Represents a negative pattern matching case.
|
|
205
|
+
*
|
|
206
|
+
* **Details**
|
|
207
|
+
*
|
|
208
|
+
* A `Not` case contains the logic to test if a value does NOT match a specific
|
|
209
|
+
* pattern and the function to evaluate when the pattern doesn't match. It's used
|
|
210
|
+
* for exclusion-based pattern matching.
|
|
211
|
+
*
|
|
212
|
+
* **Example** (Creating negative match cases)
|
|
213
|
+
*
|
|
214
|
+
* ```ts
|
|
215
|
+
* import { Match } from "effect"
|
|
216
|
+
*
|
|
217
|
+
* // Not creates cases that exclude specific patterns
|
|
218
|
+
* const matcher = Match.type<string>().pipe(
|
|
219
|
+
* // Match any string except "forbidden"
|
|
220
|
+
* Match.not("forbidden", (s) => `Allowed: ${s}`),
|
|
221
|
+
* Match.orElse(() => "This string is forbidden")
|
|
222
|
+
* )
|
|
223
|
+
*
|
|
224
|
+
* console.log(matcher("hello")) // "Allowed: hello"
|
|
225
|
+
* console.log(matcher("forbidden")) // "This string is forbidden"
|
|
226
|
+
* ```
|
|
227
|
+
*
|
|
228
|
+
* @category models
|
|
229
|
+
* @since 4.0.0
|
|
230
|
+
*/
|
|
231
|
+
export interface Not {
|
|
232
|
+
readonly _tag: "Not"
|
|
233
|
+
guard(u: unknown): boolean
|
|
234
|
+
evaluate(input: unknown): any
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Creates a matcher for a specific type.
|
|
239
|
+
*
|
|
240
|
+
* **When to use**
|
|
241
|
+
*
|
|
242
|
+
* Use to build a reusable matcher function for values of a known input type.
|
|
243
|
+
*
|
|
244
|
+
* **Details**
|
|
245
|
+
*
|
|
246
|
+
* This function defines a `Matcher` that operates on a given type, allowing you
|
|
247
|
+
* to specify conditions for handling different cases. Once the matcher is
|
|
248
|
+
* created, you can use pattern-matching functions like {@link when} to define
|
|
249
|
+
* how different values should be processed.
|
|
250
|
+
*
|
|
251
|
+
* **Example** (Matching Numbers and Strings)
|
|
252
|
+
*
|
|
253
|
+
* ```ts
|
|
254
|
+
* import { Match } from "effect"
|
|
255
|
+
*
|
|
256
|
+
* // Create a matcher for values that are either strings or numbers
|
|
257
|
+
* //
|
|
258
|
+
* // ┌─── (u: string | number) => string
|
|
259
|
+
* // ▼
|
|
260
|
+
* const match = Match.type<string | number>().pipe(
|
|
261
|
+
* // Match when the value is a number
|
|
262
|
+
* Match.when(Match.number, (n) => `number: ${n}`),
|
|
263
|
+
* // Match when the value is a string
|
|
264
|
+
* Match.when(Match.string, (s) => `string: ${s}`),
|
|
265
|
+
* // Ensure all possible cases are handled
|
|
266
|
+
* Match.exhaustive
|
|
267
|
+
* )
|
|
268
|
+
*
|
|
269
|
+
* console.log(match(0))
|
|
270
|
+
* // Output: "number: 0"
|
|
271
|
+
*
|
|
272
|
+
* console.log(match("hello"))
|
|
273
|
+
* // Output: "string: hello"
|
|
274
|
+
* ```
|
|
275
|
+
*
|
|
276
|
+
* @see {@link value} for creating a matcher from a specific value.
|
|
277
|
+
*
|
|
278
|
+
* @category constructors
|
|
279
|
+
* @since 4.0.0
|
|
280
|
+
*/
|
|
281
|
+
export const type: <I>() => Matcher<I, Types.Without<never>, I, never, never> = internal.type
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Creates a matcher from a specific value.
|
|
285
|
+
*
|
|
286
|
+
* **When to use**
|
|
287
|
+
*
|
|
288
|
+
* Use to match one concrete input immediately.
|
|
289
|
+
*
|
|
290
|
+
* **Details**
|
|
291
|
+
*
|
|
292
|
+
* This function allows you to define a `Matcher` directly from a given value,
|
|
293
|
+
* rather than from a type. This is useful when working with known values,
|
|
294
|
+
* enabling structured pattern matching on objects, primitives, or any data
|
|
295
|
+
* structure.
|
|
296
|
+
*
|
|
297
|
+
* Once the matcher is created, you can use pattern-matching functions like
|
|
298
|
+
* {@link when} to define how different cases should be handled.
|
|
299
|
+
*
|
|
300
|
+
* **Example** (Matching an Object by Property)
|
|
301
|
+
*
|
|
302
|
+
* ```ts
|
|
303
|
+
* import { Match } from "effect"
|
|
304
|
+
*
|
|
305
|
+
* const input = { name: "John", age: 30 }
|
|
306
|
+
*
|
|
307
|
+
* // Create a matcher for the specific object
|
|
308
|
+
* const result = Match.value(input).pipe(
|
|
309
|
+
* // Match when the 'name' property is "John"
|
|
310
|
+
* Match.when(
|
|
311
|
+
* { name: "John" },
|
|
312
|
+
* (user) => `${user.name} is ${user.age} years old`
|
|
313
|
+
* ),
|
|
314
|
+
* // Provide a fallback if no match is found
|
|
315
|
+
* Match.orElse(() => "Oh, not John")
|
|
316
|
+
* )
|
|
317
|
+
*
|
|
318
|
+
* console.log(result)
|
|
319
|
+
* // Output: "John is 30 years old"
|
|
320
|
+
* ```
|
|
321
|
+
*
|
|
322
|
+
* @see {@link type} for creating a matcher from a specific type.
|
|
323
|
+
*
|
|
324
|
+
* @category constructors
|
|
325
|
+
* @since 4.0.0
|
|
326
|
+
*/
|
|
327
|
+
export const value: <const I>(
|
|
328
|
+
i: I
|
|
329
|
+
) => Matcher<I, Types.Without<never>, I, never, I> = internal.value
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Creates a match function for a specific value with discriminated union handling.
|
|
333
|
+
*
|
|
334
|
+
* **Details**
|
|
335
|
+
*
|
|
336
|
+
* This function provides a convenient way to pattern match on discriminated unions
|
|
337
|
+
* by providing an object that maps each `_tag` value to its corresponding handler.
|
|
338
|
+
* It's similar to a switch statement but with better type safety and exhaustiveness checking.
|
|
339
|
+
*
|
|
340
|
+
* **Example** (Matching value tags)
|
|
341
|
+
*
|
|
342
|
+
* ```ts
|
|
343
|
+
* import { Match } from "effect"
|
|
344
|
+
*
|
|
345
|
+
* type Status = { readonly _tag: "Success"; readonly data: string }
|
|
346
|
+
*
|
|
347
|
+
* const success: Status = { _tag: "Success", data: "Hello" }
|
|
348
|
+
*
|
|
349
|
+
* // Simple valueTags usage
|
|
350
|
+
* const message = Match.valueTags(success, {
|
|
351
|
+
* Success: (result) => `Success: ${result.data}`
|
|
352
|
+
* })
|
|
353
|
+
*
|
|
354
|
+
* console.log(message) // "Success: Hello"
|
|
355
|
+
* ```
|
|
356
|
+
*
|
|
357
|
+
* @category constructors
|
|
358
|
+
* @since 4.0.0
|
|
359
|
+
*/
|
|
360
|
+
export const valueTags: {
|
|
361
|
+
<
|
|
362
|
+
const I,
|
|
363
|
+
P extends
|
|
364
|
+
& { readonly [Tag in Types.Tags<"_tag", I> & string]: (_: Extract<I, { readonly _tag: Tag }>) => any }
|
|
365
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<"_tag", I>>]: never }
|
|
366
|
+
>(fields: P): (input: I) => Unify<ReturnType<P[keyof P]>>
|
|
367
|
+
<
|
|
368
|
+
const I,
|
|
369
|
+
P extends
|
|
370
|
+
& { readonly [Tag in Types.Tags<"_tag", I> & string]: (_: Extract<I, { readonly _tag: Tag }>) => any }
|
|
371
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<"_tag", I>>]: never }
|
|
372
|
+
>(input: I, fields: P): Unify<ReturnType<P[keyof P]>>
|
|
373
|
+
} = internal.valueTags
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Creates a type-safe match function for discriminated unions based on `_tag` field.
|
|
377
|
+
*
|
|
378
|
+
* **Details**
|
|
379
|
+
*
|
|
380
|
+
* This function allows you to define exhaustive pattern matching for discriminated unions
|
|
381
|
+
* by providing handlers for each possible `_tag` value. It ensures type safety and
|
|
382
|
+
* can optionally enforce a specific return type across all branches.
|
|
383
|
+
*
|
|
384
|
+
* **Example** (Matching type tags)
|
|
385
|
+
*
|
|
386
|
+
* ```ts
|
|
387
|
+
* import { Match } from "effect"
|
|
388
|
+
*
|
|
389
|
+
* type Result =
|
|
390
|
+
* | { readonly _tag: "Success"; readonly data: string }
|
|
391
|
+
* | { readonly _tag: "Error"; readonly message: string }
|
|
392
|
+
* | { readonly _tag: "Loading" }
|
|
393
|
+
*
|
|
394
|
+
* // Create a matcher with specific return type
|
|
395
|
+
* const formatResult = Match.typeTags<Result, string>()({
|
|
396
|
+
* Success: (result) => `Data: ${result.data}`,
|
|
397
|
+
* Error: (result) => `Error: ${result.message}`,
|
|
398
|
+
* Loading: () => "Loading..."
|
|
399
|
+
* })
|
|
400
|
+
*
|
|
401
|
+
* console.log(formatResult({ _tag: "Success", data: "Hello World" }))
|
|
402
|
+
* // Output: "Data: Hello World"
|
|
403
|
+
*
|
|
404
|
+
* console.log(formatResult({ _tag: "Error", message: "Network failed" }))
|
|
405
|
+
* // Output: "Error: Network failed"
|
|
406
|
+
*
|
|
407
|
+
* // Create a matcher with inferred return type
|
|
408
|
+
* const processResult = Match.typeTags<Result>()({
|
|
409
|
+
* Success: (result) => ({ type: "ok", value: result.data }),
|
|
410
|
+
* Error: (result) => ({ type: "error", error: result.message }),
|
|
411
|
+
* Loading: () => ({ type: "pending" })
|
|
412
|
+
* })
|
|
413
|
+
*
|
|
414
|
+
* console.log(processResult({ _tag: "Loading" }))
|
|
415
|
+
* // Output: { type: "pending" }
|
|
416
|
+
* ```
|
|
417
|
+
*
|
|
418
|
+
* @category constructors
|
|
419
|
+
* @since 4.0.0
|
|
420
|
+
*/
|
|
421
|
+
export const typeTags: {
|
|
422
|
+
<I, Ret>(): <
|
|
423
|
+
P extends
|
|
424
|
+
& {
|
|
425
|
+
readonly [Tag in Types.Tags<"_tag", I> & string]: (
|
|
426
|
+
_: Extract<I, { readonly _tag: Tag }>
|
|
427
|
+
) => Ret
|
|
428
|
+
}
|
|
429
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<"_tag", I>>]: never }
|
|
430
|
+
>(fields: P) => (input: I) => Ret
|
|
431
|
+
<I>(): <
|
|
432
|
+
P extends
|
|
433
|
+
& {
|
|
434
|
+
readonly [Tag in Types.Tags<"_tag", I> & string]: (
|
|
435
|
+
_: Extract<I, { readonly _tag: Tag }>
|
|
436
|
+
) => any
|
|
437
|
+
}
|
|
438
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<"_tag", I>>]: never }
|
|
439
|
+
>(fields: P) => (input: I) => Unify<ReturnType<P[keyof P]>>
|
|
440
|
+
} = internal.typeTags
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* Ensures that all branches of a matcher return a specific type.
|
|
444
|
+
*
|
|
445
|
+
* **Details**
|
|
446
|
+
*
|
|
447
|
+
* This function enforces a consistent return type across all pattern-matching
|
|
448
|
+
* branches. By specifying a return type, TypeScript will check that every
|
|
449
|
+
* matching condition produces a value of the expected type.
|
|
450
|
+
*
|
|
451
|
+
* **Important:** This function must be the first step in the matcher pipeline.
|
|
452
|
+
* If used later, TypeScript will not enforce type consistency correctly.
|
|
453
|
+
*
|
|
454
|
+
* **Example** (Validating return type consistency)
|
|
455
|
+
*
|
|
456
|
+
* ```ts
|
|
457
|
+
* import { Match } from "effect"
|
|
458
|
+
*
|
|
459
|
+
* const match = Match.type<{ a: number } | { b: string }>().pipe(
|
|
460
|
+
* // Ensure all branches return a string
|
|
461
|
+
* Match.withReturnType<string>(),
|
|
462
|
+
* // ❌ Type error: 'number' is not assignable to type 'string'
|
|
463
|
+
* // @ts-expect-error
|
|
464
|
+
* Match.when({ a: Match.number }, (_) => _.a),
|
|
465
|
+
* // ✅ Correct: returns a string
|
|
466
|
+
* Match.when({ b: Match.string }, (_) => _.b),
|
|
467
|
+
* Match.exhaustive
|
|
468
|
+
* )
|
|
469
|
+
* ```
|
|
470
|
+
*
|
|
471
|
+
* @category utility types
|
|
472
|
+
* @since 4.0.0
|
|
473
|
+
*/
|
|
474
|
+
export const withReturnType: <Ret>() => <I, F, R, A, Pr, _>(
|
|
475
|
+
self: Matcher<I, F, R, A, Pr, _>
|
|
476
|
+
) => [Ret] extends [[A] extends [never] ? any : A] ? Matcher<I, F, R, A, Pr, Ret>
|
|
477
|
+
: "withReturnType constraint does not extend Result type" = internal.withReturnType
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* Defines a condition for matching values.
|
|
481
|
+
*
|
|
482
|
+
* **When to use**
|
|
483
|
+
*
|
|
484
|
+
* Use to add one positive pattern case to a `Match.type` or `Match.value`
|
|
485
|
+
* pipeline when a direct value, predicate, or structured object pattern should
|
|
486
|
+
* run a handler for matching input.
|
|
487
|
+
*
|
|
488
|
+
* **Details**
|
|
489
|
+
*
|
|
490
|
+
* Supports both direct value comparisons and predicate functions. If the
|
|
491
|
+
* pattern matches, the associated function is executed and the matched input is
|
|
492
|
+
* removed from the remaining cases tracked by the matcher.
|
|
493
|
+
*
|
|
494
|
+
* **Example** (Matching with values and predicates)
|
|
495
|
+
*
|
|
496
|
+
* ```ts
|
|
497
|
+
* import { Match } from "effect"
|
|
498
|
+
*
|
|
499
|
+
* // Create a matcher for objects with an "age" property
|
|
500
|
+
* const match = Match.type<{ age: number }>().pipe(
|
|
501
|
+
* // Match when age is greater than 18
|
|
502
|
+
* Match.when(
|
|
503
|
+
* { age: (age: number) => age > 18 },
|
|
504
|
+
* (user: { age: number }) => `Age: ${user.age}`
|
|
505
|
+
* ),
|
|
506
|
+
* // Match when age is exactly 18
|
|
507
|
+
* Match.when({ age: 18 }, () => "You can vote"),
|
|
508
|
+
* // Fallback case for all other ages
|
|
509
|
+
* Match.orElse((user: { age: number }) => `${user.age} is too young`)
|
|
510
|
+
* )
|
|
511
|
+
*
|
|
512
|
+
* console.log(match({ age: 20 }))
|
|
513
|
+
* // Output: "Age: 20"
|
|
514
|
+
*
|
|
515
|
+
* console.log(match({ age: 18 }))
|
|
516
|
+
* // Output: "You can vote"
|
|
517
|
+
*
|
|
518
|
+
* console.log(match({ age: 4 }))
|
|
519
|
+
* // Output: "4 is too young"
|
|
520
|
+
* ```
|
|
521
|
+
*
|
|
522
|
+
* @see {@link whenOr} for handling any one of several patterns with the same handler
|
|
523
|
+
* @see {@link whenAnd} for requiring all provided patterns to match before running a handler
|
|
524
|
+
* @see {@link not} for handling inputs that do not match a pattern
|
|
525
|
+
* @see {@link orElse} for providing a fallback when no pattern case matches
|
|
526
|
+
*
|
|
527
|
+
* @category Defining patterns
|
|
528
|
+
* @since 4.0.0
|
|
529
|
+
*/
|
|
530
|
+
export const when: <
|
|
531
|
+
R,
|
|
532
|
+
const P extends Types.PatternPrimitive<R> | Types.PatternBase<R>,
|
|
533
|
+
Ret,
|
|
534
|
+
Fn extends (_: Types.WhenMatch<R, P>) => Ret
|
|
535
|
+
>(
|
|
536
|
+
pattern: P,
|
|
537
|
+
f: Fn
|
|
538
|
+
) => <I, F, A, Pr>(
|
|
539
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
540
|
+
) => Matcher<
|
|
541
|
+
I,
|
|
542
|
+
Types.AddWithout<F, Types.PForExclude<P>>,
|
|
543
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Types.PForExclude<P>>>,
|
|
544
|
+
A | ReturnType<Fn>,
|
|
545
|
+
Pr,
|
|
546
|
+
Ret
|
|
547
|
+
> = internal.when
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* Matches one of multiple patterns in a single condition.
|
|
551
|
+
*
|
|
552
|
+
* **Details**
|
|
553
|
+
*
|
|
554
|
+
* This function allows defining a condition where a value matches any of the
|
|
555
|
+
* provided patterns. If a match is found, the associated function is executed.
|
|
556
|
+
* It simplifies cases where multiple patterns share the same handling logic.
|
|
557
|
+
*
|
|
558
|
+
* Unlike {@link when}, which requires separate conditions for each pattern,
|
|
559
|
+
* this function enables combining them into a single statement, making the
|
|
560
|
+
* matcher more concise.
|
|
561
|
+
*
|
|
562
|
+
* **Example** (Matching one of several patterns)
|
|
563
|
+
*
|
|
564
|
+
* ```ts
|
|
565
|
+
* import { Match } from "effect"
|
|
566
|
+
*
|
|
567
|
+
* type ErrorType =
|
|
568
|
+
* | { readonly _tag: "NetworkError"; readonly message: string }
|
|
569
|
+
* | { readonly _tag: "TimeoutError"; readonly duration: number }
|
|
570
|
+
* | { readonly _tag: "ValidationError"; readonly field: string }
|
|
571
|
+
*
|
|
572
|
+
* const handleError = Match.type<ErrorType>().pipe(
|
|
573
|
+
* Match.whenOr(
|
|
574
|
+
* { _tag: "NetworkError" },
|
|
575
|
+
* { _tag: "TimeoutError" },
|
|
576
|
+
* () => "Retry the request"
|
|
577
|
+
* ),
|
|
578
|
+
* Match.when({ _tag: "ValidationError" }, (_) => `Invalid field: ${_.field}`),
|
|
579
|
+
* Match.exhaustive
|
|
580
|
+
* )
|
|
581
|
+
*
|
|
582
|
+
* console.log(handleError({ _tag: "NetworkError", message: "No connection" }))
|
|
583
|
+
* // Output: "Retry the request"
|
|
584
|
+
*
|
|
585
|
+
* console.log(handleError({ _tag: "ValidationError", field: "email" }))
|
|
586
|
+
* // Output: "Invalid field: email"
|
|
587
|
+
* ```
|
|
588
|
+
*
|
|
589
|
+
* @category Defining patterns
|
|
590
|
+
* @since 4.0.0
|
|
591
|
+
*/
|
|
592
|
+
export const whenOr: <
|
|
593
|
+
R,
|
|
594
|
+
const P extends ReadonlyArray<Types.PatternPrimitive<R> | Types.PatternBase<R>>,
|
|
595
|
+
Ret,
|
|
596
|
+
Fn extends (_: Types.WhenMatch<R, P[number]>) => Ret
|
|
597
|
+
>(
|
|
598
|
+
...args: [...patterns: P, f: Fn]
|
|
599
|
+
) => <I, F, A, Pr>(
|
|
600
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
601
|
+
) => Matcher<
|
|
602
|
+
I,
|
|
603
|
+
Types.AddWithout<F, Types.PForExclude<P[number]>>,
|
|
604
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Types.PForExclude<P[number]>>>,
|
|
605
|
+
A | ReturnType<Fn>,
|
|
606
|
+
Pr,
|
|
607
|
+
Ret
|
|
608
|
+
> = internal.whenOr
|
|
609
|
+
|
|
610
|
+
/**
|
|
611
|
+
* Matches a value that satisfies all provided patterns.
|
|
612
|
+
*
|
|
613
|
+
* **Details**
|
|
614
|
+
*
|
|
615
|
+
* This function allows defining a condition where a value must match all the
|
|
616
|
+
* given patterns simultaneously. If the value satisfies every pattern, the
|
|
617
|
+
* associated function is executed.
|
|
618
|
+
*
|
|
619
|
+
* Unlike {@link when}, which matches a single pattern at a time, this function
|
|
620
|
+
* ensures that multiple conditions are met before executing the callback. It is
|
|
621
|
+
* useful when checking for values that need to fulfill multiple criteria at
|
|
622
|
+
* once.
|
|
623
|
+
*
|
|
624
|
+
* **Example** (Matching all provided patterns)
|
|
625
|
+
*
|
|
626
|
+
* ```ts
|
|
627
|
+
* import { Match } from "effect"
|
|
628
|
+
*
|
|
629
|
+
* type User = { readonly age: number; readonly role: "admin" | "user" }
|
|
630
|
+
*
|
|
631
|
+
* const checkUser = Match.type<User>().pipe(
|
|
632
|
+
* Match.whenAnd(
|
|
633
|
+
* { age: (n) => n >= 18 },
|
|
634
|
+
* { role: "admin" },
|
|
635
|
+
* () => "Admin access granted"
|
|
636
|
+
* ),
|
|
637
|
+
* Match.orElse(() => "Access denied")
|
|
638
|
+
* )
|
|
639
|
+
*
|
|
640
|
+
* console.log(checkUser({ age: 20, role: "admin" }))
|
|
641
|
+
* // Output: "Admin access granted"
|
|
642
|
+
*
|
|
643
|
+
* console.log(checkUser({ age: 20, role: "user" }))
|
|
644
|
+
* // Output: "Access denied"
|
|
645
|
+
* ```
|
|
646
|
+
*
|
|
647
|
+
* @category Defining patterns
|
|
648
|
+
* @since 4.0.0
|
|
649
|
+
*/
|
|
650
|
+
export const whenAnd: <
|
|
651
|
+
R,
|
|
652
|
+
const P extends ReadonlyArray<Types.PatternPrimitive<R> | Types.PatternBase<R>>,
|
|
653
|
+
Ret,
|
|
654
|
+
Fn extends (_: Types.WhenMatch<R, T.UnionToIntersection<P[number]>>) => Ret
|
|
655
|
+
>(
|
|
656
|
+
...args: [...patterns: P, f: Fn]
|
|
657
|
+
) => <I, F, A, Pr>(
|
|
658
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
659
|
+
) => Matcher<
|
|
660
|
+
I,
|
|
661
|
+
Types.AddWithout<F, Types.PForExclude<T.UnionToIntersection<P[number]>>>,
|
|
662
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Types.PForExclude<T.UnionToIntersection<P[number]>>>>,
|
|
663
|
+
A | ReturnType<Fn>,
|
|
664
|
+
Pr
|
|
665
|
+
> = internal.whenAnd
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Matches values based on a specified discriminant field.
|
|
669
|
+
*
|
|
670
|
+
* **When to use**
|
|
671
|
+
*
|
|
672
|
+
* Use to match one or more exact values of a discriminator field.
|
|
673
|
+
*
|
|
674
|
+
* **Details**
|
|
675
|
+
*
|
|
676
|
+
* This function is used to define pattern matching on objects that follow a
|
|
677
|
+
* **discriminated union** structure, where a specific field (e.g., `type`,
|
|
678
|
+
* `kind`, `_tag`) determines the variant of the object. It allows matching
|
|
679
|
+
* multiple values of the discriminant and provides a function to handle the
|
|
680
|
+
* matched cases.
|
|
681
|
+
*
|
|
682
|
+
* **Example** (Matching on a discriminator field)
|
|
683
|
+
*
|
|
684
|
+
* ```ts
|
|
685
|
+
* import { Match, pipe } from "effect"
|
|
686
|
+
*
|
|
687
|
+
* const match = pipe(
|
|
688
|
+
* Match.type<
|
|
689
|
+
* { type: "A"; a: string } | { type: "B"; b: number } | {
|
|
690
|
+
* type: "C"
|
|
691
|
+
* c: boolean
|
|
692
|
+
* }
|
|
693
|
+
* >(),
|
|
694
|
+
* Match.discriminator("type")("A", "B", (_) => `A or B: ${_.type}`),
|
|
695
|
+
* Match.discriminator("type")("C", (_) => `C(${_.c})`),
|
|
696
|
+
* Match.exhaustive
|
|
697
|
+
* )
|
|
698
|
+
* ```
|
|
699
|
+
*
|
|
700
|
+
* @see {@link discriminators} for defining several discriminator handlers at once
|
|
701
|
+
* @see {@link discriminatorStartsWith} for matching string discriminator values by prefix
|
|
702
|
+
*
|
|
703
|
+
* @category Defining patterns
|
|
704
|
+
* @since 4.0.0
|
|
705
|
+
*/
|
|
706
|
+
export const discriminator: <D extends string>(
|
|
707
|
+
field: D
|
|
708
|
+
) => <R, P extends Types.Tags<D, R> & string, Ret, Fn extends (_: Extract<R, Record<D, P>>) => Ret>(
|
|
709
|
+
...pattern: [first: P, ...values: Array<P>, f: Fn]
|
|
710
|
+
) => <I, F, A, Pr>(
|
|
711
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
712
|
+
) => Matcher<
|
|
713
|
+
I,
|
|
714
|
+
Types.AddWithout<F, Extract<R, Record<D, P>>>,
|
|
715
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, Record<D, P>>>>,
|
|
716
|
+
A | ReturnType<Fn>,
|
|
717
|
+
Pr,
|
|
718
|
+
Ret
|
|
719
|
+
> = internal.discriminator
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Matches values where a specified field starts with a given prefix.
|
|
723
|
+
*
|
|
724
|
+
* **When to use**
|
|
725
|
+
*
|
|
726
|
+
* Use to match string discriminator values by prefix instead of exact value.
|
|
727
|
+
*
|
|
728
|
+
* **Details**
|
|
729
|
+
*
|
|
730
|
+
* Instead of checking for exact matches, this helper matches values that share
|
|
731
|
+
* a common prefix. For example, if the discriminant field contains hierarchical
|
|
732
|
+
* names like `"A"`, `"A.A"`, and `"B"`, a single `"A"` rule can match both
|
|
733
|
+
* `"A"` and `"A.A"`.
|
|
734
|
+
*
|
|
735
|
+
* **Example** (Matching discriminator prefixes)
|
|
736
|
+
*
|
|
737
|
+
* ```ts
|
|
738
|
+
* import { Match, pipe } from "effect"
|
|
739
|
+
*
|
|
740
|
+
* const match = pipe(
|
|
741
|
+
* Match.type<{ type: "A" } | { type: "B" } | { type: "A.A" } | {}>(),
|
|
742
|
+
* Match.discriminatorStartsWith("type")("A", (_) => 1 as const),
|
|
743
|
+
* Match.discriminatorStartsWith("type")("B", (_) => 2 as const),
|
|
744
|
+
* Match.orElse((_) => 3 as const)
|
|
745
|
+
* )
|
|
746
|
+
*
|
|
747
|
+
* console.log(match({ type: "A" })) // 1
|
|
748
|
+
* console.log(match({ type: "B" })) // 2
|
|
749
|
+
* console.log(match({ type: "A.A" })) // 1
|
|
750
|
+
* ```
|
|
751
|
+
*
|
|
752
|
+
* @see {@link discriminator} for matching exact discriminator values
|
|
753
|
+
*
|
|
754
|
+
* @category Defining patterns
|
|
755
|
+
* @since 4.0.0
|
|
756
|
+
*/
|
|
757
|
+
export const discriminatorStartsWith: <D extends string>(
|
|
758
|
+
field: D
|
|
759
|
+
) => <R, P extends string, Ret, Fn extends (_: Extract<R, Record<D, `${P}${string}`>>) => Ret>(
|
|
760
|
+
pattern: P,
|
|
761
|
+
f: Fn
|
|
762
|
+
) => <I, F, A, Pr>(
|
|
763
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
764
|
+
) => Matcher<
|
|
765
|
+
I,
|
|
766
|
+
Types.AddWithout<F, Extract<R, Record<D, `${P}${string}`>>>,
|
|
767
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, Record<D, `${P}${string}`>>>>,
|
|
768
|
+
A | ReturnType<Fn>,
|
|
769
|
+
Pr,
|
|
770
|
+
Ret
|
|
771
|
+
> = internal.discriminatorStartsWith
|
|
772
|
+
|
|
773
|
+
/**
|
|
774
|
+
* Matches values based on a field that serves as a discriminator, mapping each
|
|
775
|
+
* possible value to a corresponding handler.
|
|
776
|
+
*
|
|
777
|
+
* **When to use**
|
|
778
|
+
*
|
|
779
|
+
* Use to define several discriminator handlers at once without finalizing the
|
|
780
|
+
* matcher.
|
|
781
|
+
*
|
|
782
|
+
* **Details**
|
|
783
|
+
*
|
|
784
|
+
* This function simplifies working with discriminated unions by letting you
|
|
785
|
+
* define a set of handlers for each possible value of a given field. Instead of
|
|
786
|
+
* chaining multiple calls to {@link discriminator}, this function allows
|
|
787
|
+
* defining all possible cases at once using an object where the keys are the
|
|
788
|
+
* possible values of the field, and the values are the corresponding handler
|
|
789
|
+
* functions.
|
|
790
|
+
*
|
|
791
|
+
* **Example** (Mapping discriminator handlers)
|
|
792
|
+
*
|
|
793
|
+
* ```ts
|
|
794
|
+
* import { Match, pipe } from "effect"
|
|
795
|
+
*
|
|
796
|
+
* const match = pipe(
|
|
797
|
+
* Match.type<
|
|
798
|
+
* { type: "A"; a: string } | { type: "B"; b: number } | {
|
|
799
|
+
* type: "C"
|
|
800
|
+
* c: boolean
|
|
801
|
+
* }
|
|
802
|
+
* >(),
|
|
803
|
+
* Match.discriminators("type")({
|
|
804
|
+
* A: (a) => a.a,
|
|
805
|
+
* B: (b) => b.b,
|
|
806
|
+
* C: (c) => c.c
|
|
807
|
+
* }),
|
|
808
|
+
* Match.exhaustive
|
|
809
|
+
* )
|
|
810
|
+
* ```
|
|
811
|
+
*
|
|
812
|
+
* @see {@link discriminator} for adding one discriminator case to a matcher pipeline
|
|
813
|
+
* @see {@link discriminatorsExhaustive} for handling every discriminator value and finalizing the matcher
|
|
814
|
+
*
|
|
815
|
+
* @category Defining patterns
|
|
816
|
+
* @since 4.0.0
|
|
817
|
+
*/
|
|
818
|
+
export const discriminators: <D extends string>(
|
|
819
|
+
field: D
|
|
820
|
+
) => <
|
|
821
|
+
R,
|
|
822
|
+
Ret,
|
|
823
|
+
P extends
|
|
824
|
+
& { readonly [Tag in Types.Tags<D, R> & string]?: ((_: Extract<R, Record<D, Tag>>) => Ret) | undefined }
|
|
825
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<D, R>>]: never }
|
|
826
|
+
>(
|
|
827
|
+
fields: P
|
|
828
|
+
) => <I, F, A, Pr>(
|
|
829
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
830
|
+
) => Matcher<
|
|
831
|
+
I,
|
|
832
|
+
Types.AddWithout<F, Extract<R, Record<D, keyof P>>>,
|
|
833
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, Record<D, keyof P>>>>,
|
|
834
|
+
A | ReturnType<P[keyof P] & {}>,
|
|
835
|
+
Pr,
|
|
836
|
+
Ret
|
|
837
|
+
> = internal.discriminators
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Matches values by a discriminator field and requires every possible case to
|
|
841
|
+
* be handled.
|
|
842
|
+
*
|
|
843
|
+
* **When to use**
|
|
844
|
+
*
|
|
845
|
+
* Use to define an exhaustive discriminator handler map that finalizes the
|
|
846
|
+
* matcher.
|
|
847
|
+
*
|
|
848
|
+
* **Details**
|
|
849
|
+
*
|
|
850
|
+
* This is the exhaustive variant of {@link discriminators}. Each possible
|
|
851
|
+
* discriminator value must have a corresponding handler, so the matcher is
|
|
852
|
+
* finalized directly and does not require `Match.exhaustive` at the end of the
|
|
853
|
+
* pipeline.
|
|
854
|
+
*
|
|
855
|
+
* **Example** (Handling all discriminator cases)
|
|
856
|
+
*
|
|
857
|
+
* ```ts
|
|
858
|
+
* import { Match, pipe } from "effect"
|
|
859
|
+
*
|
|
860
|
+
* const match = pipe(
|
|
861
|
+
* Match.type<
|
|
862
|
+
* { type: "A"; a: string } | { type: "B"; b: number } | {
|
|
863
|
+
* type: "C"
|
|
864
|
+
* c: boolean
|
|
865
|
+
* }
|
|
866
|
+
* >(),
|
|
867
|
+
* Match.discriminatorsExhaustive("type")({
|
|
868
|
+
* A: (a) => a.a,
|
|
869
|
+
* B: (b) => b.b,
|
|
870
|
+
* C: (c) => c.c
|
|
871
|
+
* })
|
|
872
|
+
* )
|
|
873
|
+
* ```
|
|
874
|
+
*
|
|
875
|
+
* @see {@link discriminators} for defining discriminator handlers without finalizing the matcher
|
|
876
|
+
*
|
|
877
|
+
* @category Defining patterns
|
|
878
|
+
* @since 4.0.0
|
|
879
|
+
*/
|
|
880
|
+
export const discriminatorsExhaustive: <D extends string>(
|
|
881
|
+
field: D
|
|
882
|
+
) => <
|
|
883
|
+
R,
|
|
884
|
+
Ret,
|
|
885
|
+
P extends
|
|
886
|
+
& { readonly [Tag in Types.Tags<D, R> & string]: (_: Extract<R, Record<D, Tag>>) => Ret }
|
|
887
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<D, R>>]: never }
|
|
888
|
+
>(
|
|
889
|
+
fields: P
|
|
890
|
+
) => <I, F, A, Pr>(
|
|
891
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
892
|
+
) => [Pr] extends [never] ? (u: I) => Unify<A | ReturnType<P[keyof P]>> : Unify<A | ReturnType<P[keyof P]>> =
|
|
893
|
+
internal.discriminatorsExhaustive
|
|
894
|
+
|
|
895
|
+
/**
|
|
896
|
+
* Matches discriminated union members by their `_tag` field.
|
|
897
|
+
*
|
|
898
|
+
* **When to use**
|
|
899
|
+
*
|
|
900
|
+
* Use to handle one or more `_tag` cases with the same matcher branch.
|
|
901
|
+
*
|
|
902
|
+
* **Details**
|
|
903
|
+
*
|
|
904
|
+
* This helper follows the Effect convention that discriminated unions use
|
|
905
|
+
* `"_tag"` as their discriminator field. Use {@link discriminator} for a
|
|
906
|
+
* different discriminator field.
|
|
907
|
+
*
|
|
908
|
+
* **Example** (Matching a discriminated union by tag)
|
|
909
|
+
*
|
|
910
|
+
* ```ts
|
|
911
|
+
* import { Match } from "effect"
|
|
912
|
+
*
|
|
913
|
+
* type Event =
|
|
914
|
+
* | { readonly _tag: "fetch" }
|
|
915
|
+
* | { readonly _tag: "success"; readonly data: string }
|
|
916
|
+
* | { readonly _tag: "error"; readonly error: Error }
|
|
917
|
+
* | { readonly _tag: "cancel" }
|
|
918
|
+
*
|
|
919
|
+
* const match = Match.type<Event>().pipe(
|
|
920
|
+
* // Match either "fetch" or "success"
|
|
921
|
+
* Match.tag("fetch", "success", () => `Ok!`),
|
|
922
|
+
* // Match "error" and extract the error message
|
|
923
|
+
* Match.tag("error", (event) => `Error: ${event.error.message}`),
|
|
924
|
+
* // Match "cancel"
|
|
925
|
+
* Match.tag("cancel", () => "Cancelled"),
|
|
926
|
+
* Match.exhaustive
|
|
927
|
+
* )
|
|
928
|
+
*
|
|
929
|
+
* console.log(match({ _tag: "success", data: "Hello" }))
|
|
930
|
+
* // Output: "Ok!"
|
|
931
|
+
*
|
|
932
|
+
* console.log(match({ _tag: "error", error: new Error("Oops!") }))
|
|
933
|
+
* // Output: "Error: Oops!"
|
|
934
|
+
* ```
|
|
935
|
+
*
|
|
936
|
+
* @category Defining patterns
|
|
937
|
+
* @since 4.0.0
|
|
938
|
+
*/
|
|
939
|
+
export const tag: <
|
|
940
|
+
R,
|
|
941
|
+
P extends Types.Tags<"_tag", R> & string,
|
|
942
|
+
Ret,
|
|
943
|
+
Fn extends (_: Extract<R, Record<"_tag", P>>) => Ret
|
|
944
|
+
>(
|
|
945
|
+
...pattern: [first: P, ...values: Array<P>, f: Fn]
|
|
946
|
+
) => <I, F, A, Pr>(
|
|
947
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
948
|
+
) => Matcher<
|
|
949
|
+
I,
|
|
950
|
+
Types.AddWithout<F, Extract<R, Record<"_tag", P>>>,
|
|
951
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, Record<"_tag", P>>>>,
|
|
952
|
+
ReturnType<Fn> | A,
|
|
953
|
+
Pr,
|
|
954
|
+
Ret
|
|
955
|
+
> = internal.tag
|
|
956
|
+
|
|
957
|
+
/**
|
|
958
|
+
* Matches values where the `_tag` field starts with a given prefix.
|
|
959
|
+
*
|
|
960
|
+
* **Details**
|
|
961
|
+
*
|
|
962
|
+
* This function allows you to match on values in a **discriminated union**
|
|
963
|
+
* based on whether the `_tag` field starts with a specified prefix. It is
|
|
964
|
+
* useful for handling hierarchical or namespaced tags, where multiple related
|
|
965
|
+
* cases share a common prefix.
|
|
966
|
+
*
|
|
967
|
+
* **Example** (Matching tag prefixes)
|
|
968
|
+
*
|
|
969
|
+
* ```ts
|
|
970
|
+
* import { Match, pipe } from "effect"
|
|
971
|
+
*
|
|
972
|
+
* const match = pipe(
|
|
973
|
+
* Match.type<{ _tag: "A" } | { _tag: "B" } | { _tag: "A.A" } | {}>(),
|
|
974
|
+
* Match.tagStartsWith("A", (_) => 1 as const),
|
|
975
|
+
* Match.tagStartsWith("B", (_) => 2 as const),
|
|
976
|
+
* Match.orElse((_) => 3 as const)
|
|
977
|
+
* )
|
|
978
|
+
*
|
|
979
|
+
* console.log(match({ _tag: "A" })) // 1
|
|
980
|
+
* console.log(match({ _tag: "B" })) // 2
|
|
981
|
+
* console.log(match({ _tag: "A.A" })) // 1
|
|
982
|
+
* ```
|
|
983
|
+
*
|
|
984
|
+
* @category Defining patterns
|
|
985
|
+
* @since 4.0.0
|
|
986
|
+
*/
|
|
987
|
+
export const tagStartsWith: <
|
|
988
|
+
R,
|
|
989
|
+
P extends string,
|
|
990
|
+
Ret,
|
|
991
|
+
Fn extends (_: Extract<R, Record<"_tag", `${P}${string}`>>) => Ret
|
|
992
|
+
>(
|
|
993
|
+
pattern: P,
|
|
994
|
+
f: Fn
|
|
995
|
+
) => <I, F, A, Pr>(
|
|
996
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
997
|
+
) => Matcher<
|
|
998
|
+
I,
|
|
999
|
+
Types.AddWithout<F, Extract<R, Record<"_tag", `${P}${string}`>>>,
|
|
1000
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, Record<"_tag", `${P}${string}`>>>>,
|
|
1001
|
+
ReturnType<Fn> | A,
|
|
1002
|
+
Pr,
|
|
1003
|
+
Ret
|
|
1004
|
+
> = internal.tagStartsWith
|
|
1005
|
+
|
|
1006
|
+
/**
|
|
1007
|
+
* Matches values based on their `_tag` field, mapping each tag to a
|
|
1008
|
+
* corresponding handler.
|
|
1009
|
+
*
|
|
1010
|
+
* **Details**
|
|
1011
|
+
*
|
|
1012
|
+
* This function provides a way to handle discriminated unions by mapping `_tag`
|
|
1013
|
+
* values to specific functions. Each handler receives the matched value and
|
|
1014
|
+
* returns a transformed result. If all possible tags are handled, you can
|
|
1015
|
+
* enforce exhaustiveness using `Match.exhaustive` to ensure no case is missed.
|
|
1016
|
+
*
|
|
1017
|
+
* **Example** (Mapping tag handlers)
|
|
1018
|
+
*
|
|
1019
|
+
* ```ts
|
|
1020
|
+
* import { Match, pipe } from "effect"
|
|
1021
|
+
*
|
|
1022
|
+
* const match = pipe(
|
|
1023
|
+
* Match.type<
|
|
1024
|
+
* { _tag: "A"; a: string } | { _tag: "B"; b: number } | {
|
|
1025
|
+
* _tag: "C"
|
|
1026
|
+
* c: boolean
|
|
1027
|
+
* }
|
|
1028
|
+
* >(),
|
|
1029
|
+
* Match.tags({
|
|
1030
|
+
* A: (a) => a.a,
|
|
1031
|
+
* B: (b) => b.b,
|
|
1032
|
+
* C: (c) => c.c
|
|
1033
|
+
* }),
|
|
1034
|
+
* Match.exhaustive
|
|
1035
|
+
* )
|
|
1036
|
+
* ```
|
|
1037
|
+
*
|
|
1038
|
+
* @category Defining patterns
|
|
1039
|
+
* @since 4.0.0
|
|
1040
|
+
*/
|
|
1041
|
+
export const tags: <
|
|
1042
|
+
R,
|
|
1043
|
+
Ret,
|
|
1044
|
+
P extends
|
|
1045
|
+
& { readonly [Tag in Types.Tags<"_tag", R> & string]?: ((_: Extract<R, Record<"_tag", Tag>>) => Ret) | undefined }
|
|
1046
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<"_tag", R>>]: never }
|
|
1047
|
+
>(
|
|
1048
|
+
fields: P
|
|
1049
|
+
) => <I, F, A, Pr>(
|
|
1050
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
1051
|
+
) => Matcher<
|
|
1052
|
+
I,
|
|
1053
|
+
Types.AddWithout<F, Extract<R, Record<"_tag", keyof P>>>,
|
|
1054
|
+
Types.ApplyFilters<I, Types.AddWithout<F, Extract<R, Record<"_tag", keyof P>>>>,
|
|
1055
|
+
A | ReturnType<P[keyof P] & {}>,
|
|
1056
|
+
Pr,
|
|
1057
|
+
Ret
|
|
1058
|
+
> = internal.tags
|
|
1059
|
+
|
|
1060
|
+
/**
|
|
1061
|
+
* Matches values based on their `_tag` field and requires handling of all
|
|
1062
|
+
* possible cases.
|
|
1063
|
+
*
|
|
1064
|
+
* **Details**
|
|
1065
|
+
*
|
|
1066
|
+
* This function is designed for **discriminated unions** where every possible
|
|
1067
|
+
* `_tag` value must have a corresponding handler. Unlike {@link tags}, this
|
|
1068
|
+
* function ensures **exhaustiveness**, meaning all cases must be explicitly
|
|
1069
|
+
* handled. If a `_tag` value is missing from the mapping, TypeScript will
|
|
1070
|
+
* report an error.
|
|
1071
|
+
*
|
|
1072
|
+
* **Example** (Handling all tag cases)
|
|
1073
|
+
*
|
|
1074
|
+
* ```ts
|
|
1075
|
+
* import { Match, pipe } from "effect"
|
|
1076
|
+
*
|
|
1077
|
+
* const match = pipe(
|
|
1078
|
+
* Match.type<
|
|
1079
|
+
* { _tag: "A"; a: string } | { _tag: "B"; b: number } | {
|
|
1080
|
+
* _tag: "C"
|
|
1081
|
+
* c: boolean
|
|
1082
|
+
* }
|
|
1083
|
+
* >(),
|
|
1084
|
+
* Match.tagsExhaustive({
|
|
1085
|
+
* A: (a) => a.a,
|
|
1086
|
+
* B: (b) => b.b,
|
|
1087
|
+
* C: (c) => c.c
|
|
1088
|
+
* })
|
|
1089
|
+
* )
|
|
1090
|
+
* ```
|
|
1091
|
+
*
|
|
1092
|
+
* @category Defining patterns
|
|
1093
|
+
* @since 4.0.0
|
|
1094
|
+
*/
|
|
1095
|
+
export const tagsExhaustive: <
|
|
1096
|
+
R,
|
|
1097
|
+
Ret,
|
|
1098
|
+
P extends
|
|
1099
|
+
& { readonly [Tag in Types.Tags<"_tag", R> & string]: (_: Extract<R, Record<"_tag", Tag>>) => Ret }
|
|
1100
|
+
& { readonly [Tag in Exclude<keyof P, Types.Tags<"_tag", R>>]: never }
|
|
1101
|
+
>(
|
|
1102
|
+
fields: P
|
|
1103
|
+
) => <I, F, A, Pr>(
|
|
1104
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
1105
|
+
) => [Pr] extends [never] ? (u: I) => Unify<A | ReturnType<P[keyof P]>> : Unify<A | ReturnType<P[keyof P]>> =
|
|
1106
|
+
internal.tagsExhaustive
|
|
1107
|
+
|
|
1108
|
+
/**
|
|
1109
|
+
* Creates a pattern that excludes a specific value while allowing all others.
|
|
1110
|
+
*
|
|
1111
|
+
* **When to use**
|
|
1112
|
+
*
|
|
1113
|
+
* Use to add a negative pattern case for inputs that should match when another
|
|
1114
|
+
* pattern does not.
|
|
1115
|
+
*
|
|
1116
|
+
* **Details**
|
|
1117
|
+
*
|
|
1118
|
+
* Any excluded value bypasses the provided function and continues matching
|
|
1119
|
+
* through later cases.
|
|
1120
|
+
*
|
|
1121
|
+
* **Example** (Ignoring a specific value)
|
|
1122
|
+
*
|
|
1123
|
+
* ```ts
|
|
1124
|
+
* import { Match } from "effect"
|
|
1125
|
+
*
|
|
1126
|
+
* // Create a matcher for string or number values
|
|
1127
|
+
* const match = Match.type<string | number>().pipe(
|
|
1128
|
+
* // Match any value except "hi", returning "ok"
|
|
1129
|
+
* Match.not("hi", () => "ok"),
|
|
1130
|
+
* // Fallback case for when the value is "hi"
|
|
1131
|
+
* Match.orElse(() => "fallback")
|
|
1132
|
+
* )
|
|
1133
|
+
*
|
|
1134
|
+
* console.log(match("hello"))
|
|
1135
|
+
* // Output: "ok"
|
|
1136
|
+
*
|
|
1137
|
+
* console.log(match("hi"))
|
|
1138
|
+
* // Output: "fallback"
|
|
1139
|
+
* ```
|
|
1140
|
+
*
|
|
1141
|
+
* @see {@link when} for adding a positive pattern case
|
|
1142
|
+
*
|
|
1143
|
+
* @category Defining patterns
|
|
1144
|
+
* @since 4.0.0
|
|
1145
|
+
*/
|
|
1146
|
+
export const not: <
|
|
1147
|
+
R,
|
|
1148
|
+
const P extends Types.PatternPrimitive<R> | Types.PatternBase<R>,
|
|
1149
|
+
Ret,
|
|
1150
|
+
Fn extends (_: Types.NotMatch<R, P>) => Ret
|
|
1151
|
+
>(
|
|
1152
|
+
pattern: P,
|
|
1153
|
+
f: Fn
|
|
1154
|
+
) => <I, F, A, Pr>(
|
|
1155
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
1156
|
+
) => Matcher<
|
|
1157
|
+
I,
|
|
1158
|
+
Types.AddOnly<F, Types.WhenMatch<R, P>>,
|
|
1159
|
+
Types.ApplyFilters<I, Types.AddOnly<F, Types.WhenMatch<R, P>>>,
|
|
1160
|
+
A | ReturnType<Fn>,
|
|
1161
|
+
Pr,
|
|
1162
|
+
Ret
|
|
1163
|
+
> = internal.not
|
|
1164
|
+
|
|
1165
|
+
/**
|
|
1166
|
+
* Matches non-empty strings.
|
|
1167
|
+
*
|
|
1168
|
+
* **When to use**
|
|
1169
|
+
*
|
|
1170
|
+
* Use to match strings whose length is greater than zero.
|
|
1171
|
+
*
|
|
1172
|
+
* **Details**
|
|
1173
|
+
*
|
|
1174
|
+
* This predicate matches any string that contains at least one character,
|
|
1175
|
+
* effectively filtering out empty strings ("").
|
|
1176
|
+
*
|
|
1177
|
+
* **Example** (Matching non-empty strings)
|
|
1178
|
+
*
|
|
1179
|
+
* ```ts
|
|
1180
|
+
* import { Match } from "effect"
|
|
1181
|
+
*
|
|
1182
|
+
* const processInput = Match.type<string>()
|
|
1183
|
+
* .pipe(
|
|
1184
|
+
* Match.when(Match.nonEmptyString, (str) => `Valid input: ${str}`),
|
|
1185
|
+
* Match.orElse(() => "Input cannot be empty")
|
|
1186
|
+
* )
|
|
1187
|
+
*
|
|
1188
|
+
* console.log(processInput("hello"))
|
|
1189
|
+
* // Output: "Valid input: hello"
|
|
1190
|
+
*
|
|
1191
|
+
* console.log(processInput(""))
|
|
1192
|
+
* // Output: "Input cannot be empty"
|
|
1193
|
+
*
|
|
1194
|
+
* console.log(processInput(" "))
|
|
1195
|
+
* // Output: "Valid input: " (whitespace-only strings are considered non-empty)
|
|
1196
|
+
* ```
|
|
1197
|
+
*
|
|
1198
|
+
* @see {@link string} for matching any string
|
|
1199
|
+
*
|
|
1200
|
+
* @category predicates
|
|
1201
|
+
* @since 4.0.0
|
|
1202
|
+
*/
|
|
1203
|
+
export const nonEmptyString: SafeRefinement<string, never> = internal.nonEmptyString
|
|
1204
|
+
|
|
1205
|
+
/**
|
|
1206
|
+
* Matches a specific set of literal values (e.g., `Match.is("a", 42, true)`).
|
|
1207
|
+
*
|
|
1208
|
+
* **When to use**
|
|
1209
|
+
*
|
|
1210
|
+
* Use to match one of several literal primitive or null values.
|
|
1211
|
+
*
|
|
1212
|
+
* **Details**
|
|
1213
|
+
*
|
|
1214
|
+
* This function creates a predicate that matches any of the provided literal values.
|
|
1215
|
+
* It's useful for matching against multiple specific values in a single pattern.
|
|
1216
|
+
*
|
|
1217
|
+
* **Example** (Matching literal values)
|
|
1218
|
+
*
|
|
1219
|
+
* ```ts
|
|
1220
|
+
* import { Match } from "effect"
|
|
1221
|
+
*
|
|
1222
|
+
* const handleStatus = Match.type<string | number>()
|
|
1223
|
+
* .pipe(
|
|
1224
|
+
* Match.when(Match.is("success", "ok", 200), () => "Operation successful"),
|
|
1225
|
+
* Match.when(Match.is("error", "failed", 500), () => "Operation failed"),
|
|
1226
|
+
* Match.when(Match.is(0, false, null), () => "Falsy value"),
|
|
1227
|
+
* Match.orElse((value) => `Unknown status: ${value}`)
|
|
1228
|
+
* )
|
|
1229
|
+
*
|
|
1230
|
+
* console.log(handleStatus("success"))
|
|
1231
|
+
* // Output: "Operation successful"
|
|
1232
|
+
*
|
|
1233
|
+
* console.log(handleStatus(200))
|
|
1234
|
+
* // Output: "Operation successful"
|
|
1235
|
+
*
|
|
1236
|
+
* console.log(handleStatus("failed"))
|
|
1237
|
+
* // Output: "Operation failed"
|
|
1238
|
+
*
|
|
1239
|
+
* console.log(handleStatus(0))
|
|
1240
|
+
* // Output: "Falsy value"
|
|
1241
|
+
*
|
|
1242
|
+
* console.log(handleStatus("pending"))
|
|
1243
|
+
* // Output: "Unknown status: pending"
|
|
1244
|
+
* ```
|
|
1245
|
+
*
|
|
1246
|
+
* @category predicates
|
|
1247
|
+
* @since 4.0.0
|
|
1248
|
+
*/
|
|
1249
|
+
export const is: <
|
|
1250
|
+
Literals extends ReadonlyArray<string | number | bigint | boolean | null>
|
|
1251
|
+
>(...literals: Literals) => SafeRefinement<Literals[number]> = internal.is
|
|
1252
|
+
|
|
1253
|
+
/**
|
|
1254
|
+
* Matches values of type `string`.
|
|
1255
|
+
*
|
|
1256
|
+
* **Details**
|
|
1257
|
+
*
|
|
1258
|
+
* This predicate refines unknown values to strings, allowing pattern matching
|
|
1259
|
+
* on string types. It's commonly used in type-based matchers to handle string cases.
|
|
1260
|
+
*
|
|
1261
|
+
* **Example** (Matching string values)
|
|
1262
|
+
*
|
|
1263
|
+
* ```ts
|
|
1264
|
+
* import { Match } from "effect"
|
|
1265
|
+
*
|
|
1266
|
+
* const processValue = Match.type<string | number | boolean>().pipe(
|
|
1267
|
+
* Match.when(Match.string, (str) => `String: ${str.toUpperCase()}`),
|
|
1268
|
+
* Match.when(Match.number, (num) => `Number: ${num * 2}`),
|
|
1269
|
+
* Match.when(Match.boolean, (bool) => `Boolean: ${bool ? "yes" : "no"}`),
|
|
1270
|
+
* Match.exhaustive
|
|
1271
|
+
* )
|
|
1272
|
+
*
|
|
1273
|
+
* console.log(processValue("hello")) // "String: HELLO"
|
|
1274
|
+
* console.log(processValue(42)) // "Number: 84"
|
|
1275
|
+
* console.log(processValue(true)) // "Boolean: yes"
|
|
1276
|
+
* ```
|
|
1277
|
+
*
|
|
1278
|
+
* @category predicates
|
|
1279
|
+
* @since 4.0.0
|
|
1280
|
+
*/
|
|
1281
|
+
export const string: Predicate.Refinement<unknown, string> = Predicate.isString
|
|
1282
|
+
|
|
1283
|
+
/**
|
|
1284
|
+
* Matches values of type `number`.
|
|
1285
|
+
*
|
|
1286
|
+
* **When to use**
|
|
1287
|
+
*
|
|
1288
|
+
* Use to match primitive number values, including `NaN` and infinities.
|
|
1289
|
+
*
|
|
1290
|
+
* **Details**
|
|
1291
|
+
*
|
|
1292
|
+
* This predicate refines unknown values to numbers, allowing pattern matching
|
|
1293
|
+
* on numeric types. It matches all number values including integers, floats,
|
|
1294
|
+
* `Infinity`, `-Infinity`, and `NaN`.
|
|
1295
|
+
*
|
|
1296
|
+
* **Example** (Matching number values)
|
|
1297
|
+
*
|
|
1298
|
+
* ```ts
|
|
1299
|
+
* import { Match } from "effect"
|
|
1300
|
+
*
|
|
1301
|
+
* const categorizeNumber = Match.type<unknown>().pipe(
|
|
1302
|
+
* Match.when(Match.number, (num) => {
|
|
1303
|
+
* if (Number.isNaN(num)) return "Not a number"
|
|
1304
|
+
* if (!Number.isFinite(num)) return "Infinite"
|
|
1305
|
+
* if (Number.isInteger(num)) return `Integer: ${num}`
|
|
1306
|
+
* return `Float: ${num.toFixed(2)}`
|
|
1307
|
+
* }),
|
|
1308
|
+
* Match.orElse(() => "Not a number type")
|
|
1309
|
+
* )
|
|
1310
|
+
*
|
|
1311
|
+
* console.log(categorizeNumber(42)) // "Integer: 42"
|
|
1312
|
+
* console.log(categorizeNumber(3.14)) // "Float: 3.14"
|
|
1313
|
+
* console.log(categorizeNumber(NaN)) // "Not a number"
|
|
1314
|
+
* console.log(categorizeNumber("hello")) // "Not a number type"
|
|
1315
|
+
* ```
|
|
1316
|
+
*
|
|
1317
|
+
* @see {@link bigint} for matching primitive bigint values
|
|
1318
|
+
*
|
|
1319
|
+
* @category predicates
|
|
1320
|
+
* @since 4.0.0
|
|
1321
|
+
*/
|
|
1322
|
+
export const number: Predicate.Refinement<unknown, number> = Predicate.isNumber
|
|
1323
|
+
|
|
1324
|
+
/**
|
|
1325
|
+
* Matches any value without restrictions.
|
|
1326
|
+
*
|
|
1327
|
+
* **When to use**
|
|
1328
|
+
*
|
|
1329
|
+
* Use to define an explicit catch-all pattern when the handler should receive
|
|
1330
|
+
* the unmatched value.
|
|
1331
|
+
*
|
|
1332
|
+
* **Details**
|
|
1333
|
+
*
|
|
1334
|
+
* This predicate matches every input, including `undefined`, `null`, objects,
|
|
1335
|
+
* primitives, and functions.
|
|
1336
|
+
*
|
|
1337
|
+
* **Gotchas**
|
|
1338
|
+
*
|
|
1339
|
+
* `Match.any` should usually be last because cases are checked in order and
|
|
1340
|
+
* the first matching case wins.
|
|
1341
|
+
*
|
|
1342
|
+
* **Example** (Matching any remaining value)
|
|
1343
|
+
*
|
|
1344
|
+
* ```ts
|
|
1345
|
+
* import { Match } from "effect"
|
|
1346
|
+
*
|
|
1347
|
+
* const describeValue = Match.type<unknown>()
|
|
1348
|
+
* .pipe(
|
|
1349
|
+
* Match.when(Match.string, (str) => `String: ${str}`),
|
|
1350
|
+
* Match.when(Match.number, (num) => `Number: ${num}`),
|
|
1351
|
+
* Match.when(Match.boolean, (bool) => `Boolean: ${bool}`),
|
|
1352
|
+
* Match.when(Match.any, (value) => `Other: ${typeof value}`),
|
|
1353
|
+
* Match.exhaustive
|
|
1354
|
+
* )
|
|
1355
|
+
*
|
|
1356
|
+
* console.log(describeValue("hello"))
|
|
1357
|
+
* // Output: "String: hello"
|
|
1358
|
+
*
|
|
1359
|
+
* console.log(describeValue(42))
|
|
1360
|
+
* // Output: "Number: 42"
|
|
1361
|
+
*
|
|
1362
|
+
* console.log(describeValue([1, 2, 3]))
|
|
1363
|
+
* // Output: "Other: object"
|
|
1364
|
+
*
|
|
1365
|
+
* console.log(describeValue(null))
|
|
1366
|
+
* // Output: "Other: object"
|
|
1367
|
+
* ```
|
|
1368
|
+
*
|
|
1369
|
+
* @see {@link defined} for matching only non-nullish values
|
|
1370
|
+
* @see {@link orElse} for providing a fallback after earlier cases
|
|
1371
|
+
*
|
|
1372
|
+
* @category predicates
|
|
1373
|
+
* @since 4.0.0
|
|
1374
|
+
*/
|
|
1375
|
+
export const any: SafeRefinement<unknown, any> = internal.any
|
|
1376
|
+
|
|
1377
|
+
/**
|
|
1378
|
+
* Matches any defined (non-null and non-undefined) value.
|
|
1379
|
+
*
|
|
1380
|
+
* **When to use**
|
|
1381
|
+
*
|
|
1382
|
+
* Use to exclude only `null` and `undefined` from a match branch.
|
|
1383
|
+
*
|
|
1384
|
+
* **Details**
|
|
1385
|
+
*
|
|
1386
|
+
* This predicate matches values that are neither `null` nor `undefined`,
|
|
1387
|
+
* effectively filtering out nullish values while preserving all other types.
|
|
1388
|
+
*
|
|
1389
|
+
* **Example** (Matching defined values)
|
|
1390
|
+
*
|
|
1391
|
+
* ```ts
|
|
1392
|
+
* import { Match } from "effect"
|
|
1393
|
+
*
|
|
1394
|
+
* const processValue = Match.type<string | number | null | undefined>()
|
|
1395
|
+
* .pipe(
|
|
1396
|
+
* Match.when(Match.defined, (value) => `Defined value: ${value}`),
|
|
1397
|
+
* Match.orElse(() => "Value is null or undefined")
|
|
1398
|
+
* )
|
|
1399
|
+
*
|
|
1400
|
+
* console.log(processValue("hello"))
|
|
1401
|
+
* // Output: "Defined value: hello"
|
|
1402
|
+
*
|
|
1403
|
+
* console.log(processValue(42))
|
|
1404
|
+
* // Output: "Defined value: 42"
|
|
1405
|
+
*
|
|
1406
|
+
* console.log(processValue(0))
|
|
1407
|
+
* // Output: "Defined value: 0"
|
|
1408
|
+
*
|
|
1409
|
+
* console.log(processValue(""))
|
|
1410
|
+
* // Output: "Defined value: "
|
|
1411
|
+
*
|
|
1412
|
+
* console.log(processValue(null))
|
|
1413
|
+
* // Output: "Value is null or undefined"
|
|
1414
|
+
*
|
|
1415
|
+
* console.log(processValue(undefined))
|
|
1416
|
+
* // Output: "Value is null or undefined"
|
|
1417
|
+
* ```
|
|
1418
|
+
*
|
|
1419
|
+
* @see {@link any} for matching every value without excluding nullish inputs
|
|
1420
|
+
*
|
|
1421
|
+
* @category predicates
|
|
1422
|
+
* @since 4.0.0
|
|
1423
|
+
*/
|
|
1424
|
+
export const defined: <A>(u: A) => u is A & {} = internal.defined
|
|
1425
|
+
|
|
1426
|
+
/**
|
|
1427
|
+
* Matches values of type `boolean`.
|
|
1428
|
+
*
|
|
1429
|
+
* **When to use**
|
|
1430
|
+
*
|
|
1431
|
+
* Use to match primitive boolean values.
|
|
1432
|
+
*
|
|
1433
|
+
* **Details**
|
|
1434
|
+
*
|
|
1435
|
+
* This predicate refines unknown values to booleans, allowing pattern matching
|
|
1436
|
+
* on boolean types. It only matches the primitive boolean values `true` and `false`.
|
|
1437
|
+
*
|
|
1438
|
+
* **Example** (Matching boolean values)
|
|
1439
|
+
*
|
|
1440
|
+
* ```ts
|
|
1441
|
+
* import { Match } from "effect"
|
|
1442
|
+
*
|
|
1443
|
+
* const describeTruthiness = Match.type<unknown>().pipe(
|
|
1444
|
+
* Match.when(
|
|
1445
|
+
* Match.boolean,
|
|
1446
|
+
* (bool) => bool ? "Definitely true" : "Definitely false"
|
|
1447
|
+
* ),
|
|
1448
|
+
* Match.when(0, () => "Falsy number"),
|
|
1449
|
+
* Match.when("", () => "Empty string"),
|
|
1450
|
+
* Match.when(Match.null, () => "Null value"),
|
|
1451
|
+
* Match.orElse(() => "Some other truthy value")
|
|
1452
|
+
* )
|
|
1453
|
+
*
|
|
1454
|
+
* console.log(describeTruthiness(true)) // "Definitely true"
|
|
1455
|
+
* console.log(describeTruthiness(false)) // "Definitely false"
|
|
1456
|
+
* console.log(describeTruthiness(0)) // "Falsy number"
|
|
1457
|
+
* console.log(describeTruthiness(1)) // "Some other truthy value"
|
|
1458
|
+
* ```
|
|
1459
|
+
*
|
|
1460
|
+
* @see {@link is} for matching specific literal boolean values
|
|
1461
|
+
*
|
|
1462
|
+
* @category predicates
|
|
1463
|
+
* @since 4.0.0
|
|
1464
|
+
*/
|
|
1465
|
+
export const boolean: Predicate.Refinement<unknown, boolean> = Predicate.isBoolean
|
|
1466
|
+
|
|
1467
|
+
const _undefined: Predicate.Refinement<unknown, undefined> = Predicate.isUndefined
|
|
1468
|
+
export {
|
|
1469
|
+
/**
|
|
1470
|
+
* Matches the value `undefined`.
|
|
1471
|
+
*
|
|
1472
|
+
* **When to use**
|
|
1473
|
+
*
|
|
1474
|
+
* Use when a matcher should handle only inputs with no defined value.
|
|
1475
|
+
*
|
|
1476
|
+
* **Details**
|
|
1477
|
+
*
|
|
1478
|
+
* This refinement is backed by `Predicate.isUndefined`, which checks
|
|
1479
|
+
* `input === undefined`.
|
|
1480
|
+
*
|
|
1481
|
+
* @see {@link defined} for matching non-nullish values
|
|
1482
|
+
* @see {@link is} for matching literal values
|
|
1483
|
+
*
|
|
1484
|
+
* @category predicates
|
|
1485
|
+
* @since 4.0.0
|
|
1486
|
+
*/
|
|
1487
|
+
_undefined as undefined
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
const _null: Predicate.Refinement<unknown, null> = Predicate.isNull
|
|
1491
|
+
export {
|
|
1492
|
+
/**
|
|
1493
|
+
* Matches the value `null`.
|
|
1494
|
+
*
|
|
1495
|
+
* **When to use**
|
|
1496
|
+
*
|
|
1497
|
+
* Use to handle only the `null` literal in a match branch.
|
|
1498
|
+
*
|
|
1499
|
+
* **Details**
|
|
1500
|
+
*
|
|
1501
|
+
* This refinement is backed by `Predicate.isNull`, which checks
|
|
1502
|
+
* `input === null`.
|
|
1503
|
+
*
|
|
1504
|
+
* @see {@link defined} for matching non-nullish values
|
|
1505
|
+
* @see {@link is} for matching literal values
|
|
1506
|
+
*
|
|
1507
|
+
* @category predicates
|
|
1508
|
+
* @since 4.0.0
|
|
1509
|
+
*/
|
|
1510
|
+
_null as null
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
/**
|
|
1514
|
+
* Matches values of type `bigint`.
|
|
1515
|
+
*
|
|
1516
|
+
* **When to use**
|
|
1517
|
+
*
|
|
1518
|
+
* Use to match primitive bigint values.
|
|
1519
|
+
*
|
|
1520
|
+
* **Details**
|
|
1521
|
+
*
|
|
1522
|
+
* This predicate refines unknown values to bigints, allowing pattern matching
|
|
1523
|
+
* on bigint types. BigInts are used for representing integers with arbitrary precision.
|
|
1524
|
+
*
|
|
1525
|
+
* **Example** (Matching bigint values)
|
|
1526
|
+
*
|
|
1527
|
+
* ```ts
|
|
1528
|
+
* import { Match } from "effect"
|
|
1529
|
+
*
|
|
1530
|
+
* const processLargeNumber = Match.type<unknown>().pipe(
|
|
1531
|
+
* Match.when(Match.bigint, (big) => {
|
|
1532
|
+
* if (big > 9007199254740991n) {
|
|
1533
|
+
* return `Large integer: ${big.toString()}`
|
|
1534
|
+
* }
|
|
1535
|
+
* return `BigInt: ${big.toString()}`
|
|
1536
|
+
* }),
|
|
1537
|
+
* Match.when(Match.number, (num) => `Regular number: ${num}`),
|
|
1538
|
+
* Match.orElse(() => "Not a numeric type")
|
|
1539
|
+
* )
|
|
1540
|
+
*
|
|
1541
|
+
* console.log(processLargeNumber(123n)) // "BigInt: 123"
|
|
1542
|
+
* console.log(processLargeNumber(9007199254740992n)) // "Large integer: 9007199254740992"
|
|
1543
|
+
* console.log(processLargeNumber(123)) // "Regular number: 123"
|
|
1544
|
+
* console.log(processLargeNumber("123")) // "Not a numeric type"
|
|
1545
|
+
* ```
|
|
1546
|
+
*
|
|
1547
|
+
* @see {@link number} for matching primitive number values
|
|
1548
|
+
*
|
|
1549
|
+
* @category predicates
|
|
1550
|
+
* @since 4.0.0
|
|
1551
|
+
*/
|
|
1552
|
+
export const bigint: Predicate.Refinement<unknown, bigint> = Predicate.isBigInt
|
|
1553
|
+
|
|
1554
|
+
/**
|
|
1555
|
+
* Matches values of type `symbol`.
|
|
1556
|
+
*
|
|
1557
|
+
* **Details**
|
|
1558
|
+
*
|
|
1559
|
+
* This predicate refines unknown values to symbols, allowing pattern matching
|
|
1560
|
+
* on symbol types. Symbols are unique identifiers that are often used as
|
|
1561
|
+
* object keys or for creating private properties.
|
|
1562
|
+
*
|
|
1563
|
+
* **Example** (Matching symbol values)
|
|
1564
|
+
*
|
|
1565
|
+
* ```ts
|
|
1566
|
+
* import { Match } from "effect"
|
|
1567
|
+
*
|
|
1568
|
+
* const mySymbol = Symbol("my-symbol")
|
|
1569
|
+
* const globalSymbol = Symbol.for("global-symbol")
|
|
1570
|
+
*
|
|
1571
|
+
* const handleSymbol = Match.type<unknown>().pipe(
|
|
1572
|
+
* Match.when(Match.symbol, (sym) => {
|
|
1573
|
+
* const description = sym.description
|
|
1574
|
+
* if (description) {
|
|
1575
|
+
* return `Symbol with description: ${description}`
|
|
1576
|
+
* }
|
|
1577
|
+
* return "Symbol without description"
|
|
1578
|
+
* }),
|
|
1579
|
+
* Match.orElse(() => "Not a symbol")
|
|
1580
|
+
* )
|
|
1581
|
+
*
|
|
1582
|
+
* console.log(handleSymbol(mySymbol)) // "Symbol with description: my-symbol"
|
|
1583
|
+
* console.log(handleSymbol(Symbol())) // "Symbol without description"
|
|
1584
|
+
* console.log(handleSymbol("string")) // "Not a symbol"
|
|
1585
|
+
* ```
|
|
1586
|
+
*
|
|
1587
|
+
* @category predicates
|
|
1588
|
+
* @since 4.0.0
|
|
1589
|
+
*/
|
|
1590
|
+
export const symbol: Predicate.Refinement<unknown, symbol> = Predicate.isSymbol
|
|
1591
|
+
|
|
1592
|
+
/**
|
|
1593
|
+
* Matches values that are instances of `Date`.
|
|
1594
|
+
*
|
|
1595
|
+
* **When to use**
|
|
1596
|
+
*
|
|
1597
|
+
* Use to match `Date` instances.
|
|
1598
|
+
*
|
|
1599
|
+
* **Details**
|
|
1600
|
+
*
|
|
1601
|
+
* This predicate refines unknown values to Date instances, allowing pattern
|
|
1602
|
+
* matching on Date objects. It only matches actual Date instances, not
|
|
1603
|
+
* date strings or timestamps.
|
|
1604
|
+
*
|
|
1605
|
+
* **Example** (Matching Date instances)
|
|
1606
|
+
*
|
|
1607
|
+
* ```ts
|
|
1608
|
+
* import { Match } from "effect"
|
|
1609
|
+
*
|
|
1610
|
+
* const processDateValue = Match.type<unknown>().pipe(
|
|
1611
|
+
* Match.when(Match.date, (date) => {
|
|
1612
|
+
* if (isNaN(date.getTime())) {
|
|
1613
|
+
* return "Invalid date"
|
|
1614
|
+
* }
|
|
1615
|
+
* return `Date: ${date.toISOString().split("T")[0]}`
|
|
1616
|
+
* }),
|
|
1617
|
+
* Match.when(Match.string, (str) => `Date string: ${str}`),
|
|
1618
|
+
* Match.orElse(() => "Not a date-related value")
|
|
1619
|
+
* )
|
|
1620
|
+
*
|
|
1621
|
+
* console.log(processDateValue(new Date("2024-01-01"))) // "Date: 2024-01-01"
|
|
1622
|
+
* console.log(processDateValue(new Date("invalid"))) // "Invalid date"
|
|
1623
|
+
* console.log(processDateValue("2024-01-01")) // "Date string: 2024-01-01"
|
|
1624
|
+
* console.log(processDateValue(1704067200000)) // "Not a date-related value"
|
|
1625
|
+
* ```
|
|
1626
|
+
*
|
|
1627
|
+
* @see {@link instanceOf} for matching instances of any constructor
|
|
1628
|
+
*
|
|
1629
|
+
* @category predicates
|
|
1630
|
+
* @since 4.0.0
|
|
1631
|
+
*/
|
|
1632
|
+
export const date: Predicate.Refinement<unknown, Date> = Predicate.isDate
|
|
1633
|
+
|
|
1634
|
+
/**
|
|
1635
|
+
* Matches non-null objects other than arrays.
|
|
1636
|
+
*
|
|
1637
|
+
* **When to use**
|
|
1638
|
+
*
|
|
1639
|
+
* Use to match broad non-null, non-array object values.
|
|
1640
|
+
*
|
|
1641
|
+
* **Details**
|
|
1642
|
+
*
|
|
1643
|
+
* This predicate uses `Predicate.isObject`: it returns `true` for values whose
|
|
1644
|
+
* runtime type is `"object"`, are not `null`, and are not arrays. It can match
|
|
1645
|
+
* `Date`, `RegExp`, and class instances; use `instanceOf` or a more specific
|
|
1646
|
+
* pattern when those cases need to be distinguished.
|
|
1647
|
+
*
|
|
1648
|
+
* **Example** (Matching record objects)
|
|
1649
|
+
*
|
|
1650
|
+
* ```ts
|
|
1651
|
+
* import { Match } from "effect"
|
|
1652
|
+
*
|
|
1653
|
+
* const analyzeValue = Match.type<unknown>().pipe(
|
|
1654
|
+
* Match.when(Match.record, (obj) => {
|
|
1655
|
+
* const keys = Object.keys(obj)
|
|
1656
|
+
* const valueCount = keys.length
|
|
1657
|
+
* return `Object with ${valueCount} properties: [${keys.join(", ")}]`
|
|
1658
|
+
* }),
|
|
1659
|
+
* Match.when(
|
|
1660
|
+
* Match.instanceOf(Array),
|
|
1661
|
+
* (arr) => `Array with ${arr.length} items`
|
|
1662
|
+
* ),
|
|
1663
|
+
* Match.orElse(() => "Not an object")
|
|
1664
|
+
* )
|
|
1665
|
+
*
|
|
1666
|
+
* console.log(analyzeValue({ name: "Alice", age: 30 })) // "Object with 2 properties: [name, age]"
|
|
1667
|
+
* console.log(analyzeValue([1, 2, 3])) // "Array with 3 items"
|
|
1668
|
+
* console.log(analyzeValue(null)) // "Not an object"
|
|
1669
|
+
* console.log(analyzeValue("hello")) // "Not an object"
|
|
1670
|
+
* ```
|
|
1671
|
+
*
|
|
1672
|
+
* @see {@link instanceOf} for matching a specific constructor
|
|
1673
|
+
*
|
|
1674
|
+
* @category predicates
|
|
1675
|
+
* @since 4.0.0
|
|
1676
|
+
*/
|
|
1677
|
+
export const record: Predicate.Refinement<unknown, { [x: PropertyKey]: unknown }> = Predicate.isObject
|
|
1678
|
+
|
|
1679
|
+
/**
|
|
1680
|
+
* Matches instances of a given class.
|
|
1681
|
+
*
|
|
1682
|
+
* **When to use**
|
|
1683
|
+
*
|
|
1684
|
+
* Use to match values that are instances of a constructor with type-safe
|
|
1685
|
+
* narrowing.
|
|
1686
|
+
*
|
|
1687
|
+
* **Details**
|
|
1688
|
+
*
|
|
1689
|
+
* This predicate checks if a value is an instance of the specified constructor,
|
|
1690
|
+
* providing type-safe matching for class instances and built-in objects.
|
|
1691
|
+
*
|
|
1692
|
+
* **Example** (Matching class instances)
|
|
1693
|
+
*
|
|
1694
|
+
* ```ts
|
|
1695
|
+
* import { Match } from "effect"
|
|
1696
|
+
*
|
|
1697
|
+
* class CustomError extends Error {
|
|
1698
|
+
* constructor(message: string, public code: number) {
|
|
1699
|
+
* super(message)
|
|
1700
|
+
* }
|
|
1701
|
+
* }
|
|
1702
|
+
*
|
|
1703
|
+
* const handleValue = Match.type<unknown>()
|
|
1704
|
+
* .pipe(
|
|
1705
|
+
* Match.when(
|
|
1706
|
+
* Match.instanceOf(CustomError),
|
|
1707
|
+
* (err) => `Custom error: ${err.message} (code: ${err.code})`
|
|
1708
|
+
* ),
|
|
1709
|
+
* Match.when(
|
|
1710
|
+
* Match.instanceOf(Error),
|
|
1711
|
+
* (err) => `Standard error: ${err.message}`
|
|
1712
|
+
* ),
|
|
1713
|
+
* Match.when(
|
|
1714
|
+
* Match.instanceOf(Array),
|
|
1715
|
+
* (arr) => `Array with ${arr.length} items`
|
|
1716
|
+
* ),
|
|
1717
|
+
* Match.when(
|
|
1718
|
+
* Match.instanceOf(Map),
|
|
1719
|
+
* (map) => `Map with ${map.size} entries`
|
|
1720
|
+
* ),
|
|
1721
|
+
* Match.orElse((value) => `Other: ${typeof value}`)
|
|
1722
|
+
* )
|
|
1723
|
+
*
|
|
1724
|
+
* console.log(handleValue(new CustomError("Failed", 404))) // "Custom error: Failed (code: 404)"
|
|
1725
|
+
* console.log(handleValue(new Error("Generic error"))) // "Standard error: Generic error"
|
|
1726
|
+
* console.log(handleValue([1, 2, 3])) // "Array with 3 items"
|
|
1727
|
+
* console.log(handleValue(new Map([["count", 1]]))) // "Map with 1 entries"
|
|
1728
|
+
* ```
|
|
1729
|
+
*
|
|
1730
|
+
* @see {@link instanceOfUnsafe} for constructor matching without the same type-safety guarantee
|
|
1731
|
+
* @see {@link record} for matching broad non-null, non-array objects
|
|
1732
|
+
*
|
|
1733
|
+
* @category predicates
|
|
1734
|
+
* @since 4.0.0
|
|
1735
|
+
*/
|
|
1736
|
+
export const instanceOf: <A extends abstract new(...args: any) => any>(
|
|
1737
|
+
constructor: A
|
|
1738
|
+
) => SafeRefinement<InstanceType<A>, never> = internal.instanceOf
|
|
1739
|
+
|
|
1740
|
+
/**
|
|
1741
|
+
* Checks whether a value is an instance of a constructor without type-safe narrowing.
|
|
1742
|
+
*
|
|
1743
|
+
* **When to use**
|
|
1744
|
+
*
|
|
1745
|
+
* Use when you need constructor matching to use the unsafe refinement type.
|
|
1746
|
+
*
|
|
1747
|
+
* **Details**
|
|
1748
|
+
*
|
|
1749
|
+
* This predicate checks if a value is an instance of the specified constructor
|
|
1750
|
+
* but doesn't provide the same type safety guarantees as the regular `instanceOf`.
|
|
1751
|
+
* Use this when you need more flexibility but understand the type safety implications.
|
|
1752
|
+
*
|
|
1753
|
+
* **Example** (Matching class instances unsafely)
|
|
1754
|
+
*
|
|
1755
|
+
* ```ts
|
|
1756
|
+
* import { Match } from "effect"
|
|
1757
|
+
*
|
|
1758
|
+
* class CustomError extends Error {
|
|
1759
|
+
* constructor(message: string, public code: number) {
|
|
1760
|
+
* super(message)
|
|
1761
|
+
* }
|
|
1762
|
+
* }
|
|
1763
|
+
*
|
|
1764
|
+
* // When you need to match instances but handle type narrowing manually
|
|
1765
|
+
* const handleError = Match.type<unknown>().pipe(
|
|
1766
|
+
* Match.when(Match.instanceOfUnsafe(CustomError), (err: any) => {
|
|
1767
|
+
* // Manual type assertion needed
|
|
1768
|
+
* const customErr = err as CustomError
|
|
1769
|
+
* return `Custom error ${customErr.code}: ${customErr.message}`
|
|
1770
|
+
* }),
|
|
1771
|
+
* Match.orElse(() => "Not a CustomError")
|
|
1772
|
+
* )
|
|
1773
|
+
* ```
|
|
1774
|
+
*
|
|
1775
|
+
* @see {@link instanceOf} for type-safe constructor matching
|
|
1776
|
+
*
|
|
1777
|
+
* @category predicates
|
|
1778
|
+
* @since 4.0.0
|
|
1779
|
+
*/
|
|
1780
|
+
export const instanceOfUnsafe: <A extends abstract new(...args: any) => any>(
|
|
1781
|
+
constructor: A
|
|
1782
|
+
) => SafeRefinement<InstanceType<A>, InstanceType<A>> = internal.instanceOf
|
|
1783
|
+
|
|
1784
|
+
/**
|
|
1785
|
+
* Provides a fallback value when no patterns match.
|
|
1786
|
+
*
|
|
1787
|
+
* **When to use**
|
|
1788
|
+
*
|
|
1789
|
+
* Use to finalize a matcher with a fallback for unmatched input.
|
|
1790
|
+
*
|
|
1791
|
+
* **Details**
|
|
1792
|
+
*
|
|
1793
|
+
* This function ensures that a matcher always returns a valid result, even if
|
|
1794
|
+
* no defined patterns match. It acts as a default case, similar to the
|
|
1795
|
+
* `default` clause in a `switch` statement or the final `else` in an `if-else`
|
|
1796
|
+
* chain.
|
|
1797
|
+
*
|
|
1798
|
+
* **Example** (Providing a default value when no patterns match)
|
|
1799
|
+
*
|
|
1800
|
+
* ```ts
|
|
1801
|
+
* import { Match } from "effect"
|
|
1802
|
+
*
|
|
1803
|
+
* // Create a matcher for string or number values
|
|
1804
|
+
* const match = Match.type<string | number>().pipe(
|
|
1805
|
+
* // Match when the value is "a"
|
|
1806
|
+
* Match.when("a", () => "ok"),
|
|
1807
|
+
* // Fallback when no patterns match
|
|
1808
|
+
* Match.orElse(() => "fallback")
|
|
1809
|
+
* )
|
|
1810
|
+
*
|
|
1811
|
+
* console.log(match("a"))
|
|
1812
|
+
* // Output: "ok"
|
|
1813
|
+
*
|
|
1814
|
+
* console.log(match("b"))
|
|
1815
|
+
* // Output: "fallback"
|
|
1816
|
+
* ```
|
|
1817
|
+
*
|
|
1818
|
+
* @see {@link option} for finalizing unmatched input as `Option.none`
|
|
1819
|
+
* @see {@link result} for returning unmatched input as a `Result` failure
|
|
1820
|
+
* @see {@link orElseAbsurd} for finalizing when unmatched input should be impossible
|
|
1821
|
+
*
|
|
1822
|
+
* @category completion
|
|
1823
|
+
* @since 4.0.0
|
|
1824
|
+
*/
|
|
1825
|
+
export const orElse: <RA, Ret, F extends (_: RA) => Ret>(
|
|
1826
|
+
f: F
|
|
1827
|
+
) => <I, R, A, Pr>(
|
|
1828
|
+
self: Matcher<I, R, RA, A, Pr, Ret>
|
|
1829
|
+
) => [Pr] extends [never] ? (input: I) => Unify<ReturnType<F> | A> : Unify<ReturnType<F> | A> = internal.orElse
|
|
1830
|
+
|
|
1831
|
+
// TODO(4.0): Rename to "orThrow"? Like Result.getOrThrow
|
|
1832
|
+
/**
|
|
1833
|
+
* Returns a matcher that throws an error if no pattern matches.
|
|
1834
|
+
*
|
|
1835
|
+
* **When to use**
|
|
1836
|
+
*
|
|
1837
|
+
* Use to finalize a matcher when every remaining unmatched case should be
|
|
1838
|
+
* impossible.
|
|
1839
|
+
*
|
|
1840
|
+
* **Details**
|
|
1841
|
+
*
|
|
1842
|
+
* This function finalizes a matcher by ensuring that if no patterns match, an
|
|
1843
|
+
* error is thrown. It is useful when all cases should be covered, and any
|
|
1844
|
+
* unexpected input should trigger an error instead of returning a default
|
|
1845
|
+
* value.
|
|
1846
|
+
*
|
|
1847
|
+
* When used, this function removes the need for an explicit fallback case and
|
|
1848
|
+
* ensures that an unmatched value is never silently ignored.
|
|
1849
|
+
*
|
|
1850
|
+
* **Example** (Throwing on unmatched input)
|
|
1851
|
+
*
|
|
1852
|
+
* ```ts
|
|
1853
|
+
* import { Match } from "effect"
|
|
1854
|
+
*
|
|
1855
|
+
* const strictMatcher = Match.type<"a" | "b">().pipe(
|
|
1856
|
+
* Match.when("a", () => "Found A"),
|
|
1857
|
+
* Match.when("b", () => "Found B"),
|
|
1858
|
+
* // Will throw if input is neither "a" nor "b"
|
|
1859
|
+
* Match.orElseAbsurd
|
|
1860
|
+
* )
|
|
1861
|
+
*
|
|
1862
|
+
* console.log(strictMatcher("a")) // "Found A"
|
|
1863
|
+
* console.log(strictMatcher("b")) // "Found B"
|
|
1864
|
+
*
|
|
1865
|
+
* // This would throw an error at runtime:
|
|
1866
|
+
* // strictMatcher("c" as any) // throws
|
|
1867
|
+
* ```
|
|
1868
|
+
*
|
|
1869
|
+
* @see {@link exhaustive} for compile-time exhaustive matcher finalization
|
|
1870
|
+
* @see {@link orElse} for providing a fallback for unmatched input
|
|
1871
|
+
*
|
|
1872
|
+
* @category completion
|
|
1873
|
+
* @since 4.0.0
|
|
1874
|
+
*/
|
|
1875
|
+
export const orElseAbsurd: <I, R, RA, A, Pr, Ret>(
|
|
1876
|
+
self: Matcher<I, R, RA, A, Pr, Ret>
|
|
1877
|
+
) => [Pr] extends [never] ? (input: I) => Unify<A> : Unify<A> = internal.orElseAbsurd
|
|
1878
|
+
|
|
1879
|
+
/**
|
|
1880
|
+
* Wraps the match result in a `Result`, distinguishing matched and unmatched
|
|
1881
|
+
* cases.
|
|
1882
|
+
*
|
|
1883
|
+
* **Details**
|
|
1884
|
+
*
|
|
1885
|
+
* This function ensures that the result of a matcher is always wrapped in an
|
|
1886
|
+
* `Result`, allowing clear differentiation between successful matches
|
|
1887
|
+
* (`Ok(value)`) and cases where no pattern matched (`Err(unmatched
|
|
1888
|
+
* value)`).
|
|
1889
|
+
*
|
|
1890
|
+
* This approach is particularly useful when handling optional values or when an
|
|
1891
|
+
* unmatched case should be explicitly handled rather than returning a default
|
|
1892
|
+
* value or throwing an error.
|
|
1893
|
+
*
|
|
1894
|
+
* **Example** (Extracting a user role with `Match.result`)
|
|
1895
|
+
*
|
|
1896
|
+
* ```ts
|
|
1897
|
+
* import { Match } from "effect"
|
|
1898
|
+
*
|
|
1899
|
+
* type User = { readonly role: "admin" | "editor" | "viewer" }
|
|
1900
|
+
*
|
|
1901
|
+
* // Create a matcher to extract user roles
|
|
1902
|
+
* const getRole = Match.type<User>().pipe(
|
|
1903
|
+
* Match.when({ role: "admin" }, () => "Has full access"),
|
|
1904
|
+
* Match.when({ role: "editor" }, () => "Can edit content"),
|
|
1905
|
+
* Match.result // Wrap the result in an Result
|
|
1906
|
+
* )
|
|
1907
|
+
*
|
|
1908
|
+
* console.log(getRole({ role: "admin" }))
|
|
1909
|
+
* // Output: { _id: 'Result', _tag: 'Ok', ok: 'Has full access' }
|
|
1910
|
+
*
|
|
1911
|
+
* console.log(getRole({ role: "viewer" }))
|
|
1912
|
+
* // Output: { _id: 'Result', _tag: 'Err', err: { role: 'viewer' } }
|
|
1913
|
+
* ```
|
|
1914
|
+
*
|
|
1915
|
+
* @category completion
|
|
1916
|
+
* @since 4.0.0
|
|
1917
|
+
*/
|
|
1918
|
+
export const result: <I, F, R, A, Pr, Ret>(
|
|
1919
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
1920
|
+
) => [Pr] extends [never] ? (input: I) => Result.Result<Unify<A>, R> : Result.Result<Unify<A>, R> = internal.result
|
|
1921
|
+
|
|
1922
|
+
/**
|
|
1923
|
+
* Wraps the match result in an `Option`, representing an optional match.
|
|
1924
|
+
*
|
|
1925
|
+
* **When to use**
|
|
1926
|
+
*
|
|
1927
|
+
* Use to finalize a matcher when unmatched input is expected and should become
|
|
1928
|
+
* `Option.none`.
|
|
1929
|
+
*
|
|
1930
|
+
* **Details**
|
|
1931
|
+
*
|
|
1932
|
+
* This function ensures that the result of a matcher is wrapped in an `Option`,
|
|
1933
|
+
* making it easy to handle cases where no pattern matches. If a match is found,
|
|
1934
|
+
* it returns `Some(value)`, otherwise, it returns `None`.
|
|
1935
|
+
*
|
|
1936
|
+
* This is useful in cases where a missing match is expected and should be
|
|
1937
|
+
* handled explicitly rather than throwing an error or returning a default
|
|
1938
|
+
* value.
|
|
1939
|
+
*
|
|
1940
|
+
* **Example** (Extracting a user role with `Match.option`)
|
|
1941
|
+
*
|
|
1942
|
+
* ```ts
|
|
1943
|
+
* import { Match } from "effect"
|
|
1944
|
+
*
|
|
1945
|
+
* type User = { readonly role: "admin" | "editor" | "viewer" }
|
|
1946
|
+
*
|
|
1947
|
+
* // Create a matcher to extract user roles
|
|
1948
|
+
* const getRole = Match.type<User>().pipe(
|
|
1949
|
+
* Match.when({ role: "admin" }, () => "Has full access"),
|
|
1950
|
+
* Match.when({ role: "editor" }, () => "Can edit content"),
|
|
1951
|
+
* Match.option // Wrap the result in an Option
|
|
1952
|
+
* )
|
|
1953
|
+
*
|
|
1954
|
+
* console.log(getRole({ role: "admin" }))
|
|
1955
|
+
* // Output: { _id: 'Option', _tag: 'Some', value: 'Has full access' }
|
|
1956
|
+
*
|
|
1957
|
+
* console.log(getRole({ role: "viewer" }))
|
|
1958
|
+
* // Output: { _id: 'Option', _tag: 'None' }
|
|
1959
|
+
* ```
|
|
1960
|
+
*
|
|
1961
|
+
* @see {@link result} for preserving unmatched input as a `Result` failure
|
|
1962
|
+
* @see {@link orElse} for replacing unmatched input with a fallback value
|
|
1963
|
+
*
|
|
1964
|
+
* @category completion
|
|
1965
|
+
* @since 4.0.0
|
|
1966
|
+
*/
|
|
1967
|
+
export const option: <I, F, R, A, Pr, Ret>(
|
|
1968
|
+
self: Matcher<I, F, R, A, Pr, Ret>
|
|
1969
|
+
) => [Pr] extends [never] ? (input: I) => Option.Option<Unify<A>> : Option.Option<Unify<A>> = internal.option
|
|
1970
|
+
|
|
1971
|
+
/**
|
|
1972
|
+
* Completes a matcher that handles every remaining input case.
|
|
1973
|
+
*
|
|
1974
|
+
* **When to use**
|
|
1975
|
+
*
|
|
1976
|
+
* Use to require TypeScript to reject incomplete matcher definitions before the
|
|
1977
|
+
* matcher is turned into a function.
|
|
1978
|
+
*
|
|
1979
|
+
* **Details**
|
|
1980
|
+
*
|
|
1981
|
+
* If any case is still unmatched, the matcher does not type-check as
|
|
1982
|
+
* exhaustive.
|
|
1983
|
+
*
|
|
1984
|
+
* **Example** (Ensuring all cases are covered)
|
|
1985
|
+
*
|
|
1986
|
+
* ```ts
|
|
1987
|
+
* import { Match } from "effect"
|
|
1988
|
+
*
|
|
1989
|
+
* // Create a matcher for string or number values
|
|
1990
|
+
* const match = Match.type<string | number>().pipe(
|
|
1991
|
+
* // Match when the value is a number
|
|
1992
|
+
* Match.when(Match.number, (n) => `number: ${n}`),
|
|
1993
|
+
* // Mark the match as exhaustive, ensuring all cases are handled
|
|
1994
|
+
* // TypeScript will throw an error if any case is missing
|
|
1995
|
+
* // @ts-expect-error Type 'string' is not assignable to type 'never'
|
|
1996
|
+
* Match.exhaustive
|
|
1997
|
+
* )
|
|
1998
|
+
* ```
|
|
1999
|
+
*
|
|
2000
|
+
* @category completion
|
|
2001
|
+
* @since 4.0.0
|
|
2002
|
+
*/
|
|
2003
|
+
export const exhaustive: <I, F, A, Pr, Ret>(
|
|
2004
|
+
self: Matcher<I, F, never, A, Pr, Ret>
|
|
2005
|
+
) => [Pr] extends [never] ? (u: I) => Unify<A> : Unify<A> = internal.exhaustive
|
|
2006
|
+
|
|
2007
|
+
const SafeRefinementId = "~effect/match/Match/SafeRefinement"
|
|
2008
|
+
|
|
2009
|
+
/**
|
|
2010
|
+
* A safe refinement that narrows types without runtime errors.
|
|
2011
|
+
*
|
|
2012
|
+
* **Details**
|
|
2013
|
+
*
|
|
2014
|
+
* `SafeRefinement` provides a way to refine types in pattern matching while
|
|
2015
|
+
* maintaining type safety. Unlike regular predicates, safe refinements can
|
|
2016
|
+
* transform the matched value's type without throwing runtime errors.
|
|
2017
|
+
*
|
|
2018
|
+
* **Example** (Using safe refinements)
|
|
2019
|
+
*
|
|
2020
|
+
* ```ts
|
|
2021
|
+
* import { Match } from "effect"
|
|
2022
|
+
*
|
|
2023
|
+
* // Built-in safe refinements
|
|
2024
|
+
* const processValue = Match.type<unknown>().pipe(
|
|
2025
|
+
* Match.when(Match.string, (s) => s.toUpperCase()),
|
|
2026
|
+
* Match.when(Match.number, (n) => n * 2),
|
|
2027
|
+
* Match.when(Match.defined, (value) => `Defined: ${value}`),
|
|
2028
|
+
* Match.orElse(() => "Undefined or null")
|
|
2029
|
+
* )
|
|
2030
|
+
*
|
|
2031
|
+
* console.log(processValue("hello")) // "HELLO"
|
|
2032
|
+
* console.log(processValue(21)) // 42
|
|
2033
|
+
* console.log(processValue(true)) // "Defined: true"
|
|
2034
|
+
* console.log(processValue(null)) // "Undefined or null"
|
|
2035
|
+
* ```
|
|
2036
|
+
*
|
|
2037
|
+
* @category models
|
|
2038
|
+
* @since 4.0.0
|
|
2039
|
+
*/
|
|
2040
|
+
export interface SafeRefinement<in A, out R = A> {
|
|
2041
|
+
readonly [SafeRefinementId]: (a: A) => R
|
|
2042
|
+
}
|
|
2043
|
+
|
|
2044
|
+
const Fail = Symbol.for("effect/Fail")
|
|
2045
|
+
type Fail = typeof Fail
|
|
2046
|
+
|
|
2047
|
+
/**
|
|
2048
|
+
* A namespace containing utility types for Match operations.
|
|
2049
|
+
*
|
|
2050
|
+
* **Details**
|
|
2051
|
+
*
|
|
2052
|
+
* This namespace provides advanced type-level utilities used internally by the
|
|
2053
|
+
* Match module to perform complex pattern matching, type narrowing, and filter
|
|
2054
|
+
* application. These types enable the sophisticated type inference that makes
|
|
2055
|
+
* pattern matching both type-safe and ergonomic.
|
|
2056
|
+
*
|
|
2057
|
+
* @since 4.0.0
|
|
2058
|
+
*/
|
|
2059
|
+
export declare namespace Types {
|
|
2060
|
+
/**
|
|
2061
|
+
* Computes the matched type when a pattern P is applied to type R.
|
|
2062
|
+
*
|
|
2063
|
+
* **Details**
|
|
2064
|
+
*
|
|
2065
|
+
* This utility type determines what type a value will have after successfully
|
|
2066
|
+
* matching against a pattern. It handles refinements, predicates, and complex
|
|
2067
|
+
* object patterns to provide accurate type narrowing.
|
|
2068
|
+
*
|
|
2069
|
+
* **Example** (Computing matched types)
|
|
2070
|
+
*
|
|
2071
|
+
* ```ts
|
|
2072
|
+
* import type { Match } from "effect"
|
|
2073
|
+
*
|
|
2074
|
+
* // WhenMatch computes the narrowed type after pattern matching
|
|
2075
|
+
* type StringMatch = Match.Types.WhenMatch<string | number, typeof Match.string>
|
|
2076
|
+
* // Result: string
|
|
2077
|
+
*
|
|
2078
|
+
* type ObjectMatch = Match.Types.WhenMatch<
|
|
2079
|
+
* { type: "user"; name: string } | {
|
|
2080
|
+
* type: "admin"
|
|
2081
|
+
* permissions: Array<string>
|
|
2082
|
+
* },
|
|
2083
|
+
* { type: "user" }
|
|
2084
|
+
* >
|
|
2085
|
+
* // Result: { type: "user"; name: string }
|
|
2086
|
+
* ```
|
|
2087
|
+
*
|
|
2088
|
+
* @category types
|
|
2089
|
+
* @since 4.0.0
|
|
2090
|
+
*/
|
|
2091
|
+
export type WhenMatch<R, P> =
|
|
2092
|
+
// check for any
|
|
2093
|
+
[0] extends [1 & R] ? ResolvePred<P> :
|
|
2094
|
+
P extends SafeRefinement<infer SP, never> ? SP
|
|
2095
|
+
: P extends Predicate.Refinement<infer _R, infer RP>
|
|
2096
|
+
// try to narrow refinement
|
|
2097
|
+
? [Extract<R, RP>] extends [infer X] ? [X] extends [never]
|
|
2098
|
+
// fallback to original refinement
|
|
2099
|
+
? RP
|
|
2100
|
+
: X
|
|
2101
|
+
: never
|
|
2102
|
+
: P extends PredicateA<infer PP> ? PP
|
|
2103
|
+
: ExtractMatch<R, P>
|
|
2104
|
+
|
|
2105
|
+
/**
|
|
2106
|
+
* Computes the remaining type when a pattern P is excluded from type R.
|
|
2107
|
+
*
|
|
2108
|
+
* **Details**
|
|
2109
|
+
*
|
|
2110
|
+
* This utility type determines what type remains after a `Match.not` pattern
|
|
2111
|
+
* excludes certain values. It's the complement of `WhenMatch`, calculating
|
|
2112
|
+
* what's left after removing the matched portion.
|
|
2113
|
+
*
|
|
2114
|
+
* **Example** (Computing unmatched types)
|
|
2115
|
+
*
|
|
2116
|
+
* ```ts
|
|
2117
|
+
* import type { Match } from "effect"
|
|
2118
|
+
*
|
|
2119
|
+
* // NotMatch computes what remains after exclusion
|
|
2120
|
+
* type NotString = Match.Types.NotMatch<
|
|
2121
|
+
* string | number | boolean,
|
|
2122
|
+
* typeof Match.string
|
|
2123
|
+
* >
|
|
2124
|
+
* // Result: number | boolean
|
|
2125
|
+
*
|
|
2126
|
+
* type NotSpecificValue = Match.Types.NotMatch<"a" | "b" | "c", "a">
|
|
2127
|
+
* // Result: "b" | "c"
|
|
2128
|
+
* ```
|
|
2129
|
+
*
|
|
2130
|
+
* @category types
|
|
2131
|
+
* @since 4.0.0
|
|
2132
|
+
*/
|
|
2133
|
+
export type NotMatch<R, P> = Exclude<R, ExtractMatch<R, PForNotMatch<P>>>
|
|
2134
|
+
|
|
2135
|
+
type PForNotMatch<P> = [ToInvertedRefinement<P>] extends [infer X] ? X
|
|
2136
|
+
: never
|
|
2137
|
+
|
|
2138
|
+
/**
|
|
2139
|
+
* Resolves a pattern to its matched type for use in type computations.
|
|
2140
|
+
*
|
|
2141
|
+
* **Details**
|
|
2142
|
+
*
|
|
2143
|
+
* This utility type processes patterns (predicates, refinements, objects)
|
|
2144
|
+
* and resolves them to their corresponding matched types. It's used internally
|
|
2145
|
+
* to compute type transformations during pattern matching.
|
|
2146
|
+
*
|
|
2147
|
+
* **Example** (Resolving match patterns)
|
|
2148
|
+
*
|
|
2149
|
+
* ```ts
|
|
2150
|
+
* import type { Match } from "effect"
|
|
2151
|
+
*
|
|
2152
|
+
* // PForMatch resolves patterns to their matched types
|
|
2153
|
+
* type StringPattern = Match.Types.PForMatch<typeof Match.string>
|
|
2154
|
+
* // Result: string
|
|
2155
|
+
*
|
|
2156
|
+
* type ObjectPattern = Match.Types.PForMatch<{ name: string }>
|
|
2157
|
+
* // Result: { name: string }
|
|
2158
|
+
* ```
|
|
2159
|
+
*
|
|
2160
|
+
* @category types
|
|
2161
|
+
* @since 4.0.0
|
|
2162
|
+
*/
|
|
2163
|
+
export type PForMatch<P> = [ResolvePred<P>] extends [infer X] ? X
|
|
2164
|
+
: never
|
|
2165
|
+
|
|
2166
|
+
/**
|
|
2167
|
+
* Computes the excluded type when a pattern P is used for exclusion.
|
|
2168
|
+
*
|
|
2169
|
+
* **Details**
|
|
2170
|
+
*
|
|
2171
|
+
* This utility type determines what should be excluded from a union type
|
|
2172
|
+
* when a pattern is used in filtering operations. It transforms patterns
|
|
2173
|
+
* into their exclusion-safe representations.
|
|
2174
|
+
*
|
|
2175
|
+
* **Example** (Computing excluded patterns)
|
|
2176
|
+
*
|
|
2177
|
+
* ```ts
|
|
2178
|
+
* import type { Match } from "effect"
|
|
2179
|
+
*
|
|
2180
|
+
* // PForExclude computes what to exclude from type operations
|
|
2181
|
+
* type ExcludeString = Match.Types.PForExclude<typeof Match.string>
|
|
2182
|
+
* // Used internally to filter out string types
|
|
2183
|
+
*
|
|
2184
|
+
* type ExcludeObject = Match.Types.PForExclude<{ type: "admin" }>
|
|
2185
|
+
* // Used internally to filter out admin objects
|
|
2186
|
+
* ```
|
|
2187
|
+
*
|
|
2188
|
+
* @category types
|
|
2189
|
+
* @since 4.0.0
|
|
2190
|
+
*/
|
|
2191
|
+
export type PForExclude<P> = [SafeRefinementR<ToSafeRefinement<P>>] extends [infer X] ? X
|
|
2192
|
+
: never
|
|
2193
|
+
|
|
2194
|
+
// utilities
|
|
2195
|
+
type PredicateA<A> = Predicate.Predicate<A> | Predicate.Refinement<A, A>
|
|
2196
|
+
|
|
2197
|
+
type SafeRefinementR<A> = A extends never ? never
|
|
2198
|
+
: A extends SafeRefinement<infer _, infer R> ? R
|
|
2199
|
+
: A extends Function ? A
|
|
2200
|
+
: A extends Record<string, any> ? { [K in keyof A]: SafeRefinementR<A[K]> }
|
|
2201
|
+
: A
|
|
2202
|
+
|
|
2203
|
+
type ResolvePred<A, Input = any> = A extends never ? never
|
|
2204
|
+
: A extends SafeRefinement<infer _A, infer _R> ? _A
|
|
2205
|
+
: A extends Predicate.Refinement<Input, infer P> ? P
|
|
2206
|
+
: A extends Predicate.Predicate<infer P> ? P
|
|
2207
|
+
: A extends Record<string, any> ? { [K in keyof A]: ResolvePred<A[K]> }
|
|
2208
|
+
: A
|
|
2209
|
+
|
|
2210
|
+
type ToSafeRefinement<A> = A extends never ? never
|
|
2211
|
+
: A extends Predicate.Refinement<any, infer P> ? SafeRefinement<P, P>
|
|
2212
|
+
: A extends Predicate.Predicate<infer P> ? SafeRefinement<P, never>
|
|
2213
|
+
: A extends SafeRefinement<any> ? A
|
|
2214
|
+
: A extends Record<string, any> ? { [K in keyof A]: ToSafeRefinement<A[K]> }
|
|
2215
|
+
: NonLiteralsTo<A, never>
|
|
2216
|
+
|
|
2217
|
+
type ToInvertedRefinement<A> = A extends never ? never
|
|
2218
|
+
: A extends Predicate.Refinement<any, infer P> ? SafeRefinement<P>
|
|
2219
|
+
: A extends Predicate.Predicate<infer _P> ? SafeRefinement<never>
|
|
2220
|
+
: A extends SafeRefinement<infer _A, infer _R> ? SafeRefinement<_R>
|
|
2221
|
+
: A extends Record<string, any> ? { [K in keyof A]: ToInvertedRefinement<A[K]> }
|
|
2222
|
+
: NonLiteralsTo<A, never>
|
|
2223
|
+
|
|
2224
|
+
type NonLiteralsTo<A, T> = [A] extends [string | number | boolean | bigint] ? [string] extends [A] ? T
|
|
2225
|
+
: [number] extends [A] ? T
|
|
2226
|
+
: [boolean] extends [A] ? T
|
|
2227
|
+
: [bigint] extends [A] ? T
|
|
2228
|
+
: A
|
|
2229
|
+
: A
|
|
2230
|
+
|
|
2231
|
+
/**
|
|
2232
|
+
* Defines the structure for complex object and array patterns.
|
|
2233
|
+
*
|
|
2234
|
+
* **Details**
|
|
2235
|
+
*
|
|
2236
|
+
* This type represents patterns that can match against complex data structures
|
|
2237
|
+
* like objects and arrays. It supports nested pattern matching and partial
|
|
2238
|
+
* object matching, enabling sophisticated pattern compositions.
|
|
2239
|
+
*
|
|
2240
|
+
* **Example** (Describing complex object patterns)
|
|
2241
|
+
*
|
|
2242
|
+
* ```ts
|
|
2243
|
+
* import { Match } from "effect"
|
|
2244
|
+
*
|
|
2245
|
+
* // PatternBase enables complex object patterns
|
|
2246
|
+
* type UserPattern = Match.Types.PatternBase<{
|
|
2247
|
+
* name: string
|
|
2248
|
+
* age: number
|
|
2249
|
+
* role: "admin" | "user"
|
|
2250
|
+
* }>
|
|
2251
|
+
* // Allows: { name?: string | Predicate, age?: number | Predicate, ... }
|
|
2252
|
+
*
|
|
2253
|
+
* // Example usage:
|
|
2254
|
+
* Match.value({ name: "Alice", age: 30, role: "admin" as const }).pipe(
|
|
2255
|
+
* Match.when(
|
|
2256
|
+
* { age: (n: number) => n >= 18, role: "admin" },
|
|
2257
|
+
* (user: { name: string; age: number; role: "admin" }) =>
|
|
2258
|
+
* `Admin: ${user.name}`
|
|
2259
|
+
* ),
|
|
2260
|
+
* Match.orElse(() => "Not an adult admin")
|
|
2261
|
+
* )
|
|
2262
|
+
* ```
|
|
2263
|
+
*
|
|
2264
|
+
* @category types
|
|
2265
|
+
* @since 4.0.0
|
|
2266
|
+
*/
|
|
2267
|
+
export type PatternBase<A> = A extends ReadonlyArray<infer _T> ? ReadonlyArray<any> | PatternPrimitive<A>
|
|
2268
|
+
: A extends Record<string, any> ? Partial<
|
|
2269
|
+
{ [K in keyof A]: PatternPrimitive<A[K] & {}> | PatternBase<A[K] & {}> }
|
|
2270
|
+
>
|
|
2271
|
+
: never
|
|
2272
|
+
|
|
2273
|
+
/**
|
|
2274
|
+
* Defines primitive patterns that can match simple values.
|
|
2275
|
+
*
|
|
2276
|
+
* **Details**
|
|
2277
|
+
*
|
|
2278
|
+
* This type represents the building blocks of pattern matching: predicates,
|
|
2279
|
+
* literal values, and safe refinements. These are the atomic patterns that
|
|
2280
|
+
* can be composed into more complex matching logic.
|
|
2281
|
+
*
|
|
2282
|
+
* @category types
|
|
2283
|
+
* @since 4.0.0
|
|
2284
|
+
*/
|
|
2285
|
+
export type PatternPrimitive<A> = PredicateA<A> | A | SafeRefinement<any>
|
|
2286
|
+
|
|
2287
|
+
/**
|
|
2288
|
+
* Represents a filter that excludes specific types from a union.
|
|
2289
|
+
*
|
|
2290
|
+
* **Details**
|
|
2291
|
+
*
|
|
2292
|
+
* `Without` is used internally to track which types should be excluded
|
|
2293
|
+
* from consideration during pattern matching. It helps implement the
|
|
2294
|
+
* type-level logic for `Match.not` and other exclusion operations.
|
|
2295
|
+
*
|
|
2296
|
+
* **Example** (Tracking excluded types)
|
|
2297
|
+
*
|
|
2298
|
+
* ```ts
|
|
2299
|
+
* import { Match } from "effect"
|
|
2300
|
+
*
|
|
2301
|
+
* // Without is used internally when you write:
|
|
2302
|
+
* Match.type<string | number | boolean>().pipe(
|
|
2303
|
+
* Match.not(Match.string, (value) => `not string: ${value}`),
|
|
2304
|
+
* // At this point, type system uses Without<string> to track exclusion
|
|
2305
|
+
* Match.orElse(() => "was a string")
|
|
2306
|
+
* )
|
|
2307
|
+
* ```
|
|
2308
|
+
*
|
|
2309
|
+
* @category types
|
|
2310
|
+
* @since 4.0.0
|
|
2311
|
+
*/
|
|
2312
|
+
export interface Without<out X> {
|
|
2313
|
+
readonly _tag: "Without"
|
|
2314
|
+
readonly _X: X
|
|
2315
|
+
}
|
|
2316
|
+
|
|
2317
|
+
/**
|
|
2318
|
+
* Represents a filter that includes only specific types from a union.
|
|
2319
|
+
*
|
|
2320
|
+
* **Details**
|
|
2321
|
+
*
|
|
2322
|
+
* `Only` is used internally to track which types should be exclusively
|
|
2323
|
+
* considered during pattern matching. It helps implement the type-level
|
|
2324
|
+
* logic for positive matches and type narrowing.
|
|
2325
|
+
*
|
|
2326
|
+
* **Example** (Tracking included types)
|
|
2327
|
+
*
|
|
2328
|
+
* ```ts
|
|
2329
|
+
* import { Match } from "effect"
|
|
2330
|
+
*
|
|
2331
|
+
* // Only is used internally when you write:
|
|
2332
|
+
* Match.type<string | number | boolean>().pipe(
|
|
2333
|
+
* Match.when(Match.string, (s) => `string: ${s}`),
|
|
2334
|
+
* // At this point, type system uses Only<string> for the match
|
|
2335
|
+
* Match.orElse((value) => `not string: ${value}`)
|
|
2336
|
+
* )
|
|
2337
|
+
* ```
|
|
2338
|
+
*
|
|
2339
|
+
* @category types
|
|
2340
|
+
* @since 4.0.0
|
|
2341
|
+
*/
|
|
2342
|
+
export interface Only<out X> {
|
|
2343
|
+
readonly _tag: "Only"
|
|
2344
|
+
readonly _X: X
|
|
2345
|
+
}
|
|
2346
|
+
|
|
2347
|
+
/**
|
|
2348
|
+
* Adds a type to the exclusion filter, expanding what should be filtered out.
|
|
2349
|
+
*
|
|
2350
|
+
* **Details**
|
|
2351
|
+
*
|
|
2352
|
+
* This utility type manages the accumulation of excluded types during
|
|
2353
|
+
* pattern matching. When multiple exclusions are applied, it combines
|
|
2354
|
+
* them into a single filter representation.
|
|
2355
|
+
*
|
|
2356
|
+
* **Example** (Accumulating excluded types)
|
|
2357
|
+
*
|
|
2358
|
+
* ```ts
|
|
2359
|
+
* import { Match } from "effect"
|
|
2360
|
+
*
|
|
2361
|
+
* // AddWithout is used when combining multiple exclusions:
|
|
2362
|
+
* Match.type<string | number | boolean | null>().pipe(
|
|
2363
|
+
* Match.not(Match.string, () => "not string"),
|
|
2364
|
+
* Match.not(Match.number, () => "not number"),
|
|
2365
|
+
* // Type system uses AddWithout to combine exclusions
|
|
2366
|
+
* Match.orElse(() => "was string or number")
|
|
2367
|
+
* )
|
|
2368
|
+
* ```
|
|
2369
|
+
*
|
|
2370
|
+
* @category types
|
|
2371
|
+
* @since 4.0.0
|
|
2372
|
+
*/
|
|
2373
|
+
export type AddWithout<A, X> = [A] extends [Without<infer WX>] ? Without<X | WX>
|
|
2374
|
+
: [A] extends [Only<infer OX>] ? Only<Exclude<OX, X>>
|
|
2375
|
+
: never
|
|
2376
|
+
|
|
2377
|
+
/**
|
|
2378
|
+
* Adds a type to the inclusion filter, refining what should be included.
|
|
2379
|
+
*
|
|
2380
|
+
* **Details**
|
|
2381
|
+
*
|
|
2382
|
+
* This utility type manages the refinement of included types during
|
|
2383
|
+
* pattern matching. It ensures that only the most specific type
|
|
2384
|
+
* constraints are maintained when multiple positive matches are applied.
|
|
2385
|
+
*
|
|
2386
|
+
* **Example** (Refining included types)
|
|
2387
|
+
*
|
|
2388
|
+
* ```ts
|
|
2389
|
+
* import { Match } from "effect"
|
|
2390
|
+
*
|
|
2391
|
+
* // AddOnly is used when refining positive matches:
|
|
2392
|
+
* Match.type<{ type: "user" | "admin"; name: string }>().pipe(
|
|
2393
|
+
* Match.when({ type: "admin" }, (admin) => admin.name),
|
|
2394
|
+
* // Type system uses AddOnly to refine the constraint
|
|
2395
|
+
* Match.orElse(() => "not admin")
|
|
2396
|
+
* )
|
|
2397
|
+
* ```
|
|
2398
|
+
*
|
|
2399
|
+
* @category types
|
|
2400
|
+
* @since 4.0.0
|
|
2401
|
+
*/
|
|
2402
|
+
export type AddOnly<A, X> = [A] extends [Without<infer WX>] ? [X] extends [WX] ? never
|
|
2403
|
+
: Only<X>
|
|
2404
|
+
: [A] extends [Only<infer OX>] ? [X] extends [OX] ? Only<X>
|
|
2405
|
+
: never
|
|
2406
|
+
: never
|
|
2407
|
+
|
|
2408
|
+
/**
|
|
2409
|
+
* Applies accumulated filters to an input type, producing the final narrowed type.
|
|
2410
|
+
*
|
|
2411
|
+
* **Details**
|
|
2412
|
+
*
|
|
2413
|
+
* This utility type takes the collected inclusion/exclusion filters and
|
|
2414
|
+
* applies them to the input type to compute the final narrowed result.
|
|
2415
|
+
* It's the culmination of the type-level filtering process.
|
|
2416
|
+
*
|
|
2417
|
+
* **Example** (Applying accumulated filters)
|
|
2418
|
+
*
|
|
2419
|
+
* ```ts
|
|
2420
|
+
* import type { Match } from "effect"
|
|
2421
|
+
*
|
|
2422
|
+
* // ApplyFilters computes the final narrowed type:
|
|
2423
|
+
* type Result = Match.Types.ApplyFilters<
|
|
2424
|
+
* string | number | boolean,
|
|
2425
|
+
* Match.Types.Only<string>
|
|
2426
|
+
* >
|
|
2427
|
+
* // Result: string
|
|
2428
|
+
*
|
|
2429
|
+
* type ExclusionResult = Match.Types.ApplyFilters<
|
|
2430
|
+
* string | number | boolean,
|
|
2431
|
+
* Match.Types.Without<string>
|
|
2432
|
+
* >
|
|
2433
|
+
* // Result: number | boolean
|
|
2434
|
+
* ```
|
|
2435
|
+
*
|
|
2436
|
+
* @category types
|
|
2437
|
+
* @since 4.0.0
|
|
2438
|
+
*/
|
|
2439
|
+
export type ApplyFilters<I, A> = A extends Only<infer X> ? X
|
|
2440
|
+
: A extends Without<infer X> ? Exclude<I, X>
|
|
2441
|
+
: never
|
|
2442
|
+
|
|
2443
|
+
/**
|
|
2444
|
+
* Extracts tag values from a discriminated union based on a discriminant field.
|
|
2445
|
+
*
|
|
2446
|
+
* **Details**
|
|
2447
|
+
*
|
|
2448
|
+
* This utility type extracts the possible values of a discriminant field
|
|
2449
|
+
* from a union type. It's used internally to implement tag-based pattern
|
|
2450
|
+
* matching for discriminated unions.
|
|
2451
|
+
*
|
|
2452
|
+
* **Example** (Extracting discriminator tags)
|
|
2453
|
+
*
|
|
2454
|
+
* ```ts
|
|
2455
|
+
* import type { Match } from "effect"
|
|
2456
|
+
*
|
|
2457
|
+
* type Events =
|
|
2458
|
+
* | { _tag: "click"; x: number; y: number }
|
|
2459
|
+
* | { _tag: "keypress"; key: string }
|
|
2460
|
+
* | { _tag: "scroll"; delta: number }
|
|
2461
|
+
*
|
|
2462
|
+
* type EventTags = Match.Types.Tags<"_tag", Events>
|
|
2463
|
+
* // Result: "click" | "keypress" | "scroll"
|
|
2464
|
+
*
|
|
2465
|
+
* type CustomTags = Match.Types.Tags<
|
|
2466
|
+
* "type",
|
|
2467
|
+
* | { type: "user"; name: string }
|
|
2468
|
+
* | { type: "admin"; permissions: Array<string> }
|
|
2469
|
+
* >
|
|
2470
|
+
* // Result: "user" | "admin"
|
|
2471
|
+
* ```
|
|
2472
|
+
*
|
|
2473
|
+
* @category types
|
|
2474
|
+
* @since 4.0.0
|
|
2475
|
+
*/
|
|
2476
|
+
export type Tags<D extends string, P> = P extends Record<D, infer X> ? X : never
|
|
2477
|
+
|
|
2478
|
+
/**
|
|
2479
|
+
* Converts an array type to an intersection of its element types.
|
|
2480
|
+
*
|
|
2481
|
+
* **Details**
|
|
2482
|
+
*
|
|
2483
|
+
* This utility type takes an array of types and converts them into a single
|
|
2484
|
+
* intersection type. It's used internally when multiple patterns need to
|
|
2485
|
+
* be satisfied simultaneously (like in `Match.whenAnd`).
|
|
2486
|
+
*
|
|
2487
|
+
* **Example** (Converting arrays to intersections)
|
|
2488
|
+
*
|
|
2489
|
+
* ```ts
|
|
2490
|
+
* import type { Match } from "effect"
|
|
2491
|
+
*
|
|
2492
|
+
* type Combined = Match.Types.ArrayToIntersection<[
|
|
2493
|
+
* { name: string },
|
|
2494
|
+
* { age: number },
|
|
2495
|
+
* { active: boolean }
|
|
2496
|
+
* ]>
|
|
2497
|
+
* // Result: { name: string } & { age: number } & { active: boolean }
|
|
2498
|
+
* // = { name: string; age: number; active: boolean }
|
|
2499
|
+
*
|
|
2500
|
+
* // This type utility enables complex type intersections
|
|
2501
|
+
* // Complex type operations are handled by this utility type
|
|
2502
|
+
* // for advanced pattern matching scenarios
|
|
2503
|
+
* ```
|
|
2504
|
+
*
|
|
2505
|
+
* @category types
|
|
2506
|
+
* @since 4.0.0
|
|
2507
|
+
*/
|
|
2508
|
+
export type ArrayToIntersection<A extends ReadonlyArray<any>> = T.UnionToIntersection<
|
|
2509
|
+
A[number]
|
|
2510
|
+
>
|
|
2511
|
+
|
|
2512
|
+
/**
|
|
2513
|
+
* Extracts and narrows the matched type from an input type given a pattern.
|
|
2514
|
+
*
|
|
2515
|
+
* **Details**
|
|
2516
|
+
*
|
|
2517
|
+
* This is the core type utility that performs the actual type extraction
|
|
2518
|
+
* and narrowing logic. It handles the complex type-level computation that
|
|
2519
|
+
* determines what type results from applying a pattern to an input type.
|
|
2520
|
+
*
|
|
2521
|
+
* **Example** (Extracting matched types)
|
|
2522
|
+
*
|
|
2523
|
+
* ```ts
|
|
2524
|
+
* import { Match } from "effect"
|
|
2525
|
+
*
|
|
2526
|
+
* type StringExtract = Match.Types.ExtractMatch<
|
|
2527
|
+
* string | number | boolean,
|
|
2528
|
+
* typeof Match.string
|
|
2529
|
+
* >
|
|
2530
|
+
* // Result: string
|
|
2531
|
+
*
|
|
2532
|
+
* type ObjectExtract = Match.Types.ExtractMatch<
|
|
2533
|
+
* { type: "user"; name: string } | { type: "admin"; role: string },
|
|
2534
|
+
* { type: "user" }
|
|
2535
|
+
* >
|
|
2536
|
+
* // Result: { type: "user"; name: string }
|
|
2537
|
+
*
|
|
2538
|
+
* // This powers the type narrowing in:
|
|
2539
|
+
* Match.when(Match.string, (s) => s.toUpperCase())
|
|
2540
|
+
* // ^^^ s is correctly typed as string
|
|
2541
|
+
* ```
|
|
2542
|
+
*
|
|
2543
|
+
* @category types
|
|
2544
|
+
* @since 4.0.0
|
|
2545
|
+
*/
|
|
2546
|
+
export type ExtractMatch<I, P> = [ExtractAndNarrow<I, P>] extends [infer EI] ? EI
|
|
2547
|
+
: never
|
|
2548
|
+
|
|
2549
|
+
type Replace<A, B> = A extends Function ? A
|
|
2550
|
+
: A extends Record<string | number, any> ? { [K in keyof A]: K extends keyof B ? Replace<A[K], B[K]> : A[K] }
|
|
2551
|
+
: [B] extends [A] ? B
|
|
2552
|
+
: A
|
|
2553
|
+
|
|
2554
|
+
type MaybeReplace<I, P> = [P] extends [I] ? P
|
|
2555
|
+
: [I] extends [P] ? Replace<I, P>
|
|
2556
|
+
: Fail
|
|
2557
|
+
|
|
2558
|
+
type BuiltInObjects =
|
|
2559
|
+
| Function
|
|
2560
|
+
| Date
|
|
2561
|
+
| RegExp
|
|
2562
|
+
| Generator
|
|
2563
|
+
| { readonly [Symbol.toStringTag]: string }
|
|
2564
|
+
|
|
2565
|
+
type IsPlainObject<T> = T extends BuiltInObjects ? false
|
|
2566
|
+
: T extends Record<string, any> ? true
|
|
2567
|
+
: false
|
|
2568
|
+
|
|
2569
|
+
type Simplify<A> = { [K in keyof A]: A[K] } & {}
|
|
2570
|
+
|
|
2571
|
+
type ExtractAndNarrow<Input, P> = P extends Predicate.Refinement<infer _In, infer _Out> ?
|
|
2572
|
+
_Out extends Input ? Extract<_Out, Input>
|
|
2573
|
+
: Extract<Input, _Out> :
|
|
2574
|
+
P extends SafeRefinement<infer _In, infer _R> ? [0] extends [1 & _R] ? Input
|
|
2575
|
+
: _In extends Input ? Extract<_In, Input>
|
|
2576
|
+
: Extract<Input, _In>
|
|
2577
|
+
: P extends Predicate.Predicate<infer _In> ? Extract<Input, _In>
|
|
2578
|
+
: Input extends infer I ? Exclude<
|
|
2579
|
+
I extends ReadonlyArray<any> ? P extends ReadonlyArray<any> ? {
|
|
2580
|
+
readonly [K in keyof I]: K extends keyof P ? ExtractAndNarrow<I[K], P[K]>
|
|
2581
|
+
: I[K]
|
|
2582
|
+
} extends infer R ? Fail extends R[keyof R] ? never
|
|
2583
|
+
: R
|
|
2584
|
+
: never
|
|
2585
|
+
: never
|
|
2586
|
+
: IsPlainObject<I> extends true ? string extends keyof I ? I extends P ? I
|
|
2587
|
+
: never
|
|
2588
|
+
: symbol extends keyof I ? I extends P ? I
|
|
2589
|
+
: never
|
|
2590
|
+
: Simplify<
|
|
2591
|
+
& { [RK in Extract<keyof I, keyof P>]-?: ExtractAndNarrow<I[RK], P[RK]> }
|
|
2592
|
+
& Omit<I, keyof P>
|
|
2593
|
+
> extends infer R ? keyof P extends NonFailKeys<R> ? R
|
|
2594
|
+
: never
|
|
2595
|
+
: never
|
|
2596
|
+
: MaybeReplace<I, P> extends infer R ? [I] extends [R] ? I
|
|
2597
|
+
: R
|
|
2598
|
+
: never,
|
|
2599
|
+
Fail
|
|
2600
|
+
> :
|
|
2601
|
+
never
|
|
2602
|
+
|
|
2603
|
+
type NonFailKeys<A> = keyof A & {} extends infer K ? K extends keyof A ? A[K] extends Fail ? never : K
|
|
2604
|
+
: never :
|
|
2605
|
+
never
|
|
2606
|
+
}
|