@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,3149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Cause,
|
|
3
|
+
DateTime,
|
|
4
|
+
Duration,
|
|
5
|
+
Effect,
|
|
6
|
+
HashMap,
|
|
7
|
+
Option,
|
|
8
|
+
Redacted,
|
|
9
|
+
Result,
|
|
10
|
+
Schema,
|
|
11
|
+
SchemaGetter,
|
|
12
|
+
SchemaIssue,
|
|
13
|
+
SchemaParser,
|
|
14
|
+
SchemaTransformation
|
|
15
|
+
} from "effect"
|
|
16
|
+
import { TestSchema } from "effect/testing"
|
|
17
|
+
import { describe, it } from "vitest"
|
|
18
|
+
import { assertTrue, deepStrictEqual, strictEqual, throws } from "../utils/assert.ts"
|
|
19
|
+
|
|
20
|
+
const isDeno = "Deno" in globalThis
|
|
21
|
+
|
|
22
|
+
const FiniteFromDate = Schema.Date.pipe(Schema.decodeTo(
|
|
23
|
+
Schema.Number,
|
|
24
|
+
SchemaTransformation.transform({
|
|
25
|
+
decode: (date) => date.getTime(),
|
|
26
|
+
encode: (n) => new Date(n)
|
|
27
|
+
})
|
|
28
|
+
))
|
|
29
|
+
|
|
30
|
+
describe("Serializers", () => {
|
|
31
|
+
describe("toCodecJson", () => {
|
|
32
|
+
it("should reorder the types in the Union based on the encoded side", async () => {
|
|
33
|
+
const schema = Schema.Union([
|
|
34
|
+
Schema.String,
|
|
35
|
+
Schema.String.pipe(Schema.encodeTo(Schema.BigInt, {
|
|
36
|
+
decode: SchemaGetter.transform((n: bigint) => String(n) + "a"),
|
|
37
|
+
encode: SchemaGetter.transform(() => 0n)
|
|
38
|
+
}))
|
|
39
|
+
])
|
|
40
|
+
const serializer = Schema.toCodecJson(schema)
|
|
41
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(serializer))
|
|
42
|
+
|
|
43
|
+
const decoding = asserts.decoding()
|
|
44
|
+
await decoding.succeed("1", "1a")
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
describe("schemas without encoding", () => {
|
|
48
|
+
describe("Unsupported schemas", () => {
|
|
49
|
+
it("Struct with Symbol property name", () => {
|
|
50
|
+
const a = Symbol.for("a")
|
|
51
|
+
const schema = Schema.Struct({
|
|
52
|
+
[a]: Schema.String
|
|
53
|
+
})
|
|
54
|
+
throws(
|
|
55
|
+
() => Schema.toCodecJson(schema),
|
|
56
|
+
"Objects property names must be strings"
|
|
57
|
+
)
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
describe("Declaration", () => {
|
|
62
|
+
it("instanceOf without annotations", async () => {
|
|
63
|
+
const schema = Schema.instanceOf(URL)
|
|
64
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
65
|
+
|
|
66
|
+
const encoding = asserts.encoding()
|
|
67
|
+
await encoding.succeed(new URL("https://effect.website"), null)
|
|
68
|
+
|
|
69
|
+
const decoding = asserts.decoding()
|
|
70
|
+
await decoding.fail("https://effect.website/", `Expected null, got "https://effect.website/"`)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
describe("instanceOf with annotation", () => {
|
|
74
|
+
it("arg: message: string", async () => {
|
|
75
|
+
class MyError extends Error {
|
|
76
|
+
constructor(message?: string) {
|
|
77
|
+
super(message)
|
|
78
|
+
this.name = "MyError"
|
|
79
|
+
Object.setPrototypeOf(this, MyError.prototype)
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const schema = Schema.instanceOf(
|
|
84
|
+
MyError,
|
|
85
|
+
{
|
|
86
|
+
title: "MyError",
|
|
87
|
+
toCodec: () =>
|
|
88
|
+
Schema.link<MyError>()(
|
|
89
|
+
Schema.String,
|
|
90
|
+
SchemaTransformation.transform({
|
|
91
|
+
decode: (message) => new MyError(message),
|
|
92
|
+
encode: (e) => e.message
|
|
93
|
+
})
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
98
|
+
|
|
99
|
+
const encoding = asserts.encoding()
|
|
100
|
+
await encoding.succeed(new MyError("a"), "a")
|
|
101
|
+
|
|
102
|
+
const decoding = asserts.decoding()
|
|
103
|
+
await decoding.succeed("a", new MyError("a"))
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it("arg: struct", async () => {
|
|
107
|
+
class MyError extends Error {
|
|
108
|
+
static Props = Schema.Struct({
|
|
109
|
+
message: Schema.String,
|
|
110
|
+
cause: Schema.String
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
constructor(props: typeof MyError.Props["Type"]) {
|
|
114
|
+
super(props.message, { cause: props.cause })
|
|
115
|
+
this.name = "MyError"
|
|
116
|
+
Object.setPrototypeOf(this, MyError.prototype)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
static schema = Schema.instanceOf(
|
|
120
|
+
MyError,
|
|
121
|
+
{
|
|
122
|
+
title: "MyError",
|
|
123
|
+
toCodec: () =>
|
|
124
|
+
Schema.link<MyError>()(
|
|
125
|
+
MyError.Props,
|
|
126
|
+
SchemaTransformation.transform({
|
|
127
|
+
decode: (props) => new MyError(props),
|
|
128
|
+
encode: (e) => ({
|
|
129
|
+
message: e.message,
|
|
130
|
+
cause: typeof e.cause === "string" ? e.cause : String(e.cause)
|
|
131
|
+
})
|
|
132
|
+
})
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const schema = MyError.schema
|
|
139
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
140
|
+
|
|
141
|
+
const encoding = asserts.encoding()
|
|
142
|
+
await encoding.succeed(new MyError({ message: "a", cause: "b" }), {
|
|
143
|
+
message: "a",
|
|
144
|
+
cause: "b"
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
const decoding = asserts.decoding()
|
|
148
|
+
await decoding.succeed({ message: "a", cause: "b" }, new MyError({ message: "a", cause: "b" }))
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
describe("should return the same reference if nothing changed", () => {
|
|
154
|
+
it("Struct", async () => {
|
|
155
|
+
const schema = Schema.Struct({
|
|
156
|
+
a: Schema.String,
|
|
157
|
+
b: Schema.Boolean
|
|
158
|
+
})
|
|
159
|
+
const serializer = Schema.toCodecJson(schema)
|
|
160
|
+
strictEqual(serializer.ast, schema.ast)
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
it("Record", async () => {
|
|
164
|
+
const schema = Schema.Record(Schema.String, Schema.Boolean)
|
|
165
|
+
const serializer = Schema.toCodecJson(schema)
|
|
166
|
+
strictEqual(serializer.ast, schema.ast)
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
it("Tuple", async () => {
|
|
170
|
+
const schema = Schema.Tuple([Schema.String, Schema.Boolean])
|
|
171
|
+
const serializer = Schema.toCodecJson(schema)
|
|
172
|
+
strictEqual(serializer.ast, schema.ast)
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
it("Array", async () => {
|
|
176
|
+
const schema = Schema.Array(Schema.String)
|
|
177
|
+
const serializer = Schema.toCodecJson(schema)
|
|
178
|
+
strictEqual(serializer.ast, schema.ast)
|
|
179
|
+
})
|
|
180
|
+
|
|
181
|
+
it("Union", async () => {
|
|
182
|
+
const schema = Schema.Union([Schema.String, Schema.Boolean])
|
|
183
|
+
const serializer = Schema.toCodecJson(schema)
|
|
184
|
+
strictEqual(serializer.ast, schema.ast)
|
|
185
|
+
})
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it("should apply the construction process to the provided link in the serializer annotation", async () => {
|
|
189
|
+
const schema = Schema.Struct({
|
|
190
|
+
a: Schema.Date.annotate({
|
|
191
|
+
toCodec: () =>
|
|
192
|
+
Schema.link<Date>()(
|
|
193
|
+
Schema.Date,
|
|
194
|
+
SchemaTransformation.passthrough()
|
|
195
|
+
)
|
|
196
|
+
}),
|
|
197
|
+
b: Schema.Number
|
|
198
|
+
})
|
|
199
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
200
|
+
|
|
201
|
+
const encoding = asserts.encoding()
|
|
202
|
+
await encoding.succeed({ a: new Date("2021-01-01"), b: 1 }, {
|
|
203
|
+
a: "2021-01-01T00:00:00.000Z",
|
|
204
|
+
b: 1
|
|
205
|
+
})
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
it("Never", async () => {
|
|
209
|
+
const schema = Schema.Never
|
|
210
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
211
|
+
|
|
212
|
+
const encoding = asserts.encoding()
|
|
213
|
+
await encoding.fail({}, "Expected never, got {}")
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
it("Any", async () => {
|
|
217
|
+
const schema = Schema.Any
|
|
218
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
219
|
+
|
|
220
|
+
const encoding = asserts.encoding()
|
|
221
|
+
await encoding.succeed(() => {})
|
|
222
|
+
|
|
223
|
+
const decoding = asserts.decoding()
|
|
224
|
+
await decoding.succeed(() => {})
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
it("Unknown", async () => {
|
|
228
|
+
const schema = Schema.Unknown
|
|
229
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
230
|
+
|
|
231
|
+
const encoding = asserts.encoding()
|
|
232
|
+
await encoding.succeed("a")
|
|
233
|
+
await encoding.succeed(1)
|
|
234
|
+
await encoding.succeed(true)
|
|
235
|
+
await encoding.succeed(null)
|
|
236
|
+
await encoding.succeed({ a: "a", b: 1, c: true })
|
|
237
|
+
await encoding.succeed(["a", 1, true])
|
|
238
|
+
await encoding.fail({ a: 1n }, `Expected JSON value, got {"a":1n}`)
|
|
239
|
+
|
|
240
|
+
const decoding = asserts.decoding()
|
|
241
|
+
await decoding.succeed("a")
|
|
242
|
+
await decoding.succeed(1)
|
|
243
|
+
await decoding.succeed(true)
|
|
244
|
+
await decoding.succeed(null)
|
|
245
|
+
await decoding.succeed({ a: "a", b: 1, c: true })
|
|
246
|
+
await decoding.succeed(["a", 1, true])
|
|
247
|
+
await decoding.fail({ a: 1n }, `Expected JSON value, got {"a":1n}`)
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
it("ObjectKeyword", async () => {
|
|
251
|
+
const schema = Schema.ObjectKeyword
|
|
252
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
253
|
+
|
|
254
|
+
const encoding = asserts.encoding()
|
|
255
|
+
await encoding.succeed({ a: "a", b: 1, c: true })
|
|
256
|
+
await encoding.succeed(["a", 1, true])
|
|
257
|
+
await encoding.fail("a", `Expected object | array | function, got "a"`)
|
|
258
|
+
await encoding.fail({ a: 1n }, `Expected JSON value, got {"a":1n}`)
|
|
259
|
+
|
|
260
|
+
const decoding = asserts.decoding()
|
|
261
|
+
await decoding.succeed({ a: "a", b: 1, c: true })
|
|
262
|
+
await decoding.succeed(["a", 1, true])
|
|
263
|
+
await decoding.fail("a", `Expected object | array | function, got "a"`)
|
|
264
|
+
await decoding.fail({ a: 1n }, `Expected JSON value, got {"a":1n}`)
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
it("Undefined", async () => {
|
|
268
|
+
const schema = Schema.Undefined
|
|
269
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
270
|
+
|
|
271
|
+
const encoding = asserts.encoding()
|
|
272
|
+
await encoding.succeed(undefined, null)
|
|
273
|
+
})
|
|
274
|
+
|
|
275
|
+
it("Void", async () => {
|
|
276
|
+
const schema = Schema.Void
|
|
277
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
278
|
+
|
|
279
|
+
const encoding = asserts.encoding()
|
|
280
|
+
await encoding.succeed(undefined, null)
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
it("Null", async () => {
|
|
284
|
+
const schema = Schema.Null
|
|
285
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
286
|
+
|
|
287
|
+
const encoding = asserts.encoding()
|
|
288
|
+
await encoding.succeed(null)
|
|
289
|
+
})
|
|
290
|
+
|
|
291
|
+
it("String", async () => {
|
|
292
|
+
const schema = Schema.String
|
|
293
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
294
|
+
|
|
295
|
+
const encoding = asserts.encoding()
|
|
296
|
+
await encoding.succeed("a")
|
|
297
|
+
|
|
298
|
+
const decoding = asserts.decoding()
|
|
299
|
+
await decoding.succeed("a", "a")
|
|
300
|
+
})
|
|
301
|
+
|
|
302
|
+
describe("Number", () => {
|
|
303
|
+
it("Number", async () => {
|
|
304
|
+
const schema = Schema.Number
|
|
305
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
306
|
+
|
|
307
|
+
const encoding = asserts.encoding()
|
|
308
|
+
await encoding.succeed(1)
|
|
309
|
+
await encoding.succeed(-1)
|
|
310
|
+
await encoding.succeed(1.2)
|
|
311
|
+
await encoding.succeed(Infinity, "Infinity")
|
|
312
|
+
await encoding.succeed(-Infinity, "-Infinity")
|
|
313
|
+
await encoding.succeed(NaN, "NaN")
|
|
314
|
+
|
|
315
|
+
const decoding = asserts.decoding()
|
|
316
|
+
await decoding.succeed(1)
|
|
317
|
+
await decoding.succeed(-1)
|
|
318
|
+
await decoding.succeed(1.2)
|
|
319
|
+
await decoding.succeed("Infinity", Infinity)
|
|
320
|
+
await decoding.succeed("-Infinity", -Infinity)
|
|
321
|
+
await decoding.succeed("NaN", NaN)
|
|
322
|
+
await decoding.succeed(Infinity)
|
|
323
|
+
await decoding.succeed(-Infinity)
|
|
324
|
+
await decoding.succeed(NaN)
|
|
325
|
+
await decoding.fail(null, `Expected number | "Infinity" | "-Infinity" | "NaN", got null`)
|
|
326
|
+
await decoding.fail("a", `Expected "Infinity" | "-Infinity" | "NaN", got "a"`)
|
|
327
|
+
})
|
|
328
|
+
|
|
329
|
+
describe("checks", () => {
|
|
330
|
+
it("Finite", async () => {
|
|
331
|
+
const schema = Schema.Finite
|
|
332
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
333
|
+
|
|
334
|
+
const encoding = asserts.encoding()
|
|
335
|
+
await encoding.succeed(1)
|
|
336
|
+
await encoding.succeed(-1)
|
|
337
|
+
await encoding.succeed(1.2)
|
|
338
|
+
await encoding.fail(Infinity, "Expected a finite number, got Infinity")
|
|
339
|
+
await encoding.fail(-Infinity, "Expected a finite number, got -Infinity")
|
|
340
|
+
await encoding.fail(NaN, "Expected a finite number, got NaN")
|
|
341
|
+
|
|
342
|
+
const decoding = asserts.decoding()
|
|
343
|
+
await decoding.succeed(1)
|
|
344
|
+
await decoding.succeed(-1)
|
|
345
|
+
await decoding.succeed(1.2)
|
|
346
|
+
await decoding.fail("Infinity", `Expected number, got "Infinity"`)
|
|
347
|
+
await decoding.fail("-Infinity", `Expected number, got "-Infinity"`)
|
|
348
|
+
await decoding.fail("NaN", `Expected number, got "NaN"`)
|
|
349
|
+
await decoding.fail(Infinity, `Expected a finite number, got Infinity`)
|
|
350
|
+
await decoding.fail(-Infinity, `Expected a finite number, got -Infinity`)
|
|
351
|
+
await decoding.fail(NaN, `Expected a finite number, got NaN`)
|
|
352
|
+
await decoding.fail(null, `Expected number, got null`)
|
|
353
|
+
await decoding.fail("a", `Expected number, got "a"`)
|
|
354
|
+
})
|
|
355
|
+
|
|
356
|
+
it("Int", async () => {
|
|
357
|
+
const schema = Schema.Int
|
|
358
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
359
|
+
|
|
360
|
+
const encoding = asserts.encoding()
|
|
361
|
+
await encoding.succeed(1)
|
|
362
|
+
await encoding.succeed(-1)
|
|
363
|
+
await encoding.fail(1.2, `Expected an integer, got 1.2`)
|
|
364
|
+
await encoding.fail(Infinity, "Expected an integer, got Infinity")
|
|
365
|
+
await encoding.fail(-Infinity, "Expected an integer, got -Infinity")
|
|
366
|
+
await encoding.fail(NaN, "Expected an integer, got NaN")
|
|
367
|
+
|
|
368
|
+
const decoding = asserts.decoding()
|
|
369
|
+
await decoding.succeed(1)
|
|
370
|
+
await decoding.succeed(-1)
|
|
371
|
+
await decoding.fail(1.2, `Expected an integer, got 1.2`)
|
|
372
|
+
await decoding.fail("Infinity", `Expected number, got "Infinity"`)
|
|
373
|
+
await decoding.fail("-Infinity", `Expected number, got "-Infinity"`)
|
|
374
|
+
await decoding.fail("NaN", `Expected number, got "NaN"`)
|
|
375
|
+
await decoding.fail(Infinity, `Expected an integer, got Infinity`)
|
|
376
|
+
await decoding.fail(-Infinity, `Expected an integer, got -Infinity`)
|
|
377
|
+
await decoding.fail(NaN, `Expected an integer, got NaN`)
|
|
378
|
+
await decoding.fail(null, `Expected number, got null`)
|
|
379
|
+
await decoding.fail("a", `Expected number, got "a"`)
|
|
380
|
+
})
|
|
381
|
+
|
|
382
|
+
it("isGreaterThanOrEqualTo", async () => {
|
|
383
|
+
const schema = Schema.Number.check(Schema.isGreaterThanOrEqualTo(1))
|
|
384
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
385
|
+
|
|
386
|
+
const encoding = asserts.encoding()
|
|
387
|
+
await encoding.succeed(1)
|
|
388
|
+
await encoding.fail(-1, `Expected a value greater than or equal to 1, got -1`)
|
|
389
|
+
await encoding.succeed(1.2)
|
|
390
|
+
await encoding.succeed(Infinity, "Infinity")
|
|
391
|
+
await encoding.fail(-Infinity, "Expected a value greater than or equal to 1, got -Infinity")
|
|
392
|
+
await encoding.fail(NaN, "Expected a value greater than or equal to 1, got NaN")
|
|
393
|
+
|
|
394
|
+
const decoding = asserts.decoding()
|
|
395
|
+
await decoding.succeed(1)
|
|
396
|
+
await encoding.fail(-1, `Expected a value greater than or equal to 1, got -1`)
|
|
397
|
+
await decoding.succeed(1.2)
|
|
398
|
+
await decoding.succeed("Infinity", Infinity)
|
|
399
|
+
await decoding.fail("-Infinity", `Expected a value greater than or equal to 1, got -Infinity`)
|
|
400
|
+
await decoding.fail("NaN", `Expected a value greater than or equal to 1, got NaN`)
|
|
401
|
+
await decoding.succeed(Infinity)
|
|
402
|
+
await decoding.fail(-Infinity, `Expected a value greater than or equal to 1, got -Infinity`)
|
|
403
|
+
await decoding.fail(NaN, `Expected a value greater than or equal to 1, got NaN`)
|
|
404
|
+
await decoding.fail(null, `Expected number | "Infinity" | "-Infinity" | "NaN", got null`)
|
|
405
|
+
await decoding.fail("a", `Expected "Infinity" | "-Infinity" | "NaN", got "a"`)
|
|
406
|
+
})
|
|
407
|
+
})
|
|
408
|
+
})
|
|
409
|
+
|
|
410
|
+
it("Boolean", async () => {
|
|
411
|
+
const schema = Schema.Boolean
|
|
412
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
413
|
+
|
|
414
|
+
const encoding = asserts.encoding()
|
|
415
|
+
await encoding.succeed(true)
|
|
416
|
+
|
|
417
|
+
const decoding = asserts.decoding()
|
|
418
|
+
await decoding.succeed(true, true)
|
|
419
|
+
})
|
|
420
|
+
|
|
421
|
+
it("Symbol", async () => {
|
|
422
|
+
const schema = Schema.Symbol
|
|
423
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
424
|
+
|
|
425
|
+
const encoding = asserts.encoding()
|
|
426
|
+
await encoding.succeed(Symbol.for("a"), "Symbol(a)")
|
|
427
|
+
await encoding.fail(
|
|
428
|
+
Symbol("a"),
|
|
429
|
+
"cannot serialize to string, Symbol is not registered"
|
|
430
|
+
)
|
|
431
|
+
await encoding.fail(
|
|
432
|
+
Symbol(),
|
|
433
|
+
"cannot serialize to string, Symbol is not registered"
|
|
434
|
+
)
|
|
435
|
+
|
|
436
|
+
const decoding = asserts.decoding()
|
|
437
|
+
await decoding.succeed("Symbol(a)", Symbol.for("a"))
|
|
438
|
+
})
|
|
439
|
+
|
|
440
|
+
it("UniqueSymbol", async () => {
|
|
441
|
+
const schema = Schema.UniqueSymbol(Symbol.for("a"))
|
|
442
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
443
|
+
|
|
444
|
+
const encoding = asserts.encoding()
|
|
445
|
+
await encoding.succeed(Symbol.for("a"), "Symbol(a)")
|
|
446
|
+
|
|
447
|
+
const decoding = asserts.decoding()
|
|
448
|
+
await decoding.succeed("Symbol(a)", Symbol.for("a"))
|
|
449
|
+
})
|
|
450
|
+
|
|
451
|
+
it("BigInt", async () => {
|
|
452
|
+
const schema = Schema.BigInt
|
|
453
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
454
|
+
|
|
455
|
+
const encoding = asserts.encoding()
|
|
456
|
+
await encoding.succeed(1n, "1")
|
|
457
|
+
|
|
458
|
+
const decoding = asserts.decoding()
|
|
459
|
+
await decoding.succeed("1", 1n)
|
|
460
|
+
})
|
|
461
|
+
|
|
462
|
+
it("PropertyKey", async () => {
|
|
463
|
+
const schema = Schema.PropertyKey
|
|
464
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
465
|
+
|
|
466
|
+
const encoding = asserts.encoding()
|
|
467
|
+
await encoding.succeed("a")
|
|
468
|
+
await encoding.succeed(1)
|
|
469
|
+
await encoding.succeed(Symbol.for("a"), "Symbol(a)")
|
|
470
|
+
|
|
471
|
+
const decoding = asserts.decoding()
|
|
472
|
+
await decoding.succeed("a")
|
|
473
|
+
await decoding.succeed(1)
|
|
474
|
+
await decoding.succeed("Symbol(a)", Symbol.for("a"))
|
|
475
|
+
})
|
|
476
|
+
|
|
477
|
+
describe("Literal", () => {
|
|
478
|
+
it("string", async () => {
|
|
479
|
+
const schema = Schema.Literal("a")
|
|
480
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
481
|
+
|
|
482
|
+
const encoding = asserts.encoding()
|
|
483
|
+
await encoding.succeed("a")
|
|
484
|
+
|
|
485
|
+
const decoding = asserts.decoding()
|
|
486
|
+
await decoding.succeed("a")
|
|
487
|
+
})
|
|
488
|
+
|
|
489
|
+
it("number", async () => {
|
|
490
|
+
const schema = Schema.Literal(1)
|
|
491
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
492
|
+
|
|
493
|
+
const encoding = asserts.encoding()
|
|
494
|
+
await encoding.succeed(1)
|
|
495
|
+
|
|
496
|
+
const decoding = asserts.decoding()
|
|
497
|
+
await decoding.succeed(1)
|
|
498
|
+
})
|
|
499
|
+
|
|
500
|
+
it("boolean", async () => {
|
|
501
|
+
const schema = Schema.Literal(true)
|
|
502
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
503
|
+
|
|
504
|
+
const encoding = asserts.encoding()
|
|
505
|
+
await encoding.succeed(true)
|
|
506
|
+
|
|
507
|
+
const decoding = asserts.decoding()
|
|
508
|
+
await decoding.succeed(true)
|
|
509
|
+
})
|
|
510
|
+
|
|
511
|
+
it("bigint", async () => {
|
|
512
|
+
const schema = Schema.Literal(1n)
|
|
513
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
514
|
+
|
|
515
|
+
const encoding = asserts.encoding()
|
|
516
|
+
await encoding.succeed(1n, "1")
|
|
517
|
+
|
|
518
|
+
const decoding = asserts.decoding()
|
|
519
|
+
await decoding.succeed("1", 1n)
|
|
520
|
+
})
|
|
521
|
+
})
|
|
522
|
+
|
|
523
|
+
it("Literals", async () => {
|
|
524
|
+
const schema = Schema.Literals(["a", 1, 2n, true])
|
|
525
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
526
|
+
|
|
527
|
+
const decoding = asserts.decoding()
|
|
528
|
+
await decoding.fail(
|
|
529
|
+
"-",
|
|
530
|
+
`Expected "a" | 1 | "2" | true, got "-"`
|
|
531
|
+
)
|
|
532
|
+
})
|
|
533
|
+
|
|
534
|
+
describe("TemplateLiteral", () => {
|
|
535
|
+
it("1n + string", async () => {
|
|
536
|
+
const schema = Schema.TemplateLiteral([1n, Schema.String])
|
|
537
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
538
|
+
|
|
539
|
+
const encoding = asserts.encoding()
|
|
540
|
+
await encoding.succeed("1a")
|
|
541
|
+
|
|
542
|
+
const decoding = asserts.decoding()
|
|
543
|
+
await decoding.succeed("1a")
|
|
544
|
+
})
|
|
545
|
+
|
|
546
|
+
it(`"a" + bigint`, async () => {
|
|
547
|
+
const schema = Schema.TemplateLiteral(["a", Schema.BigInt])
|
|
548
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
549
|
+
|
|
550
|
+
const encoding = asserts.encoding()
|
|
551
|
+
await encoding.succeed("a1")
|
|
552
|
+
|
|
553
|
+
const decoding = asserts.decoding()
|
|
554
|
+
await decoding.succeed("a1")
|
|
555
|
+
})
|
|
556
|
+
})
|
|
557
|
+
|
|
558
|
+
it("Enum", async () => {
|
|
559
|
+
enum Fruits {
|
|
560
|
+
Apple,
|
|
561
|
+
Banana
|
|
562
|
+
}
|
|
563
|
+
const schema = Schema.Enum(Fruits)
|
|
564
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
565
|
+
|
|
566
|
+
const encoding = asserts.encoding()
|
|
567
|
+
await encoding.succeed(Fruits.Apple, 0)
|
|
568
|
+
await encoding.succeed(Fruits.Banana, 1)
|
|
569
|
+
|
|
570
|
+
const decoding = asserts.decoding()
|
|
571
|
+
await decoding.succeed(0, Fruits.Apple)
|
|
572
|
+
await decoding.succeed(1, Fruits.Banana)
|
|
573
|
+
})
|
|
574
|
+
|
|
575
|
+
describe("Struct", () => {
|
|
576
|
+
it("Date", async () => {
|
|
577
|
+
const schema = Schema.Struct({
|
|
578
|
+
a: Schema.Date
|
|
579
|
+
})
|
|
580
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
581
|
+
|
|
582
|
+
const encoding = asserts.encoding()
|
|
583
|
+
await encoding.succeed(
|
|
584
|
+
{ a: new Date("2021-01-01") },
|
|
585
|
+
{ a: "2021-01-01T00:00:00.000Z" }
|
|
586
|
+
)
|
|
587
|
+
})
|
|
588
|
+
|
|
589
|
+
it("UndefinedOr(Date)", async () => {
|
|
590
|
+
const schema = Schema.Struct({
|
|
591
|
+
a: Schema.UndefinedOr(Schema.Date)
|
|
592
|
+
})
|
|
593
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
594
|
+
|
|
595
|
+
const encoding = asserts.encoding()
|
|
596
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
597
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
598
|
+
})
|
|
599
|
+
await encoding.succeed({ a: undefined }, { a: null })
|
|
600
|
+
|
|
601
|
+
const decoding = asserts.decoding()
|
|
602
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
603
|
+
a: new Date("2021-01-01")
|
|
604
|
+
})
|
|
605
|
+
await decoding.succeed({ a: null }, { a: undefined })
|
|
606
|
+
})
|
|
607
|
+
|
|
608
|
+
it("NullOr(Date)", async () => {
|
|
609
|
+
const schema = Schema.Struct({
|
|
610
|
+
a: Schema.NullOr(Schema.Date)
|
|
611
|
+
})
|
|
612
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
613
|
+
|
|
614
|
+
const encoding = asserts.encoding()
|
|
615
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
616
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
617
|
+
})
|
|
618
|
+
await encoding.succeed({ a: null }, { a: null })
|
|
619
|
+
|
|
620
|
+
const decoding = asserts.decoding()
|
|
621
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
622
|
+
a: new Date("2021-01-01")
|
|
623
|
+
})
|
|
624
|
+
await decoding.succeed({ a: null }, { a: null })
|
|
625
|
+
})
|
|
626
|
+
|
|
627
|
+
it("optionalKey(Date)", async () => {
|
|
628
|
+
const schema = Schema.Struct({
|
|
629
|
+
a: Schema.optionalKey(Schema.Date)
|
|
630
|
+
})
|
|
631
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
632
|
+
|
|
633
|
+
const encoding = asserts.encoding()
|
|
634
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
635
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
636
|
+
})
|
|
637
|
+
await encoding.succeed({}, {})
|
|
638
|
+
|
|
639
|
+
const decoding = asserts.decoding()
|
|
640
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
641
|
+
a: new Date("2021-01-01")
|
|
642
|
+
})
|
|
643
|
+
await decoding.succeed({}, {})
|
|
644
|
+
})
|
|
645
|
+
|
|
646
|
+
it("optional(Date)", async () => {
|
|
647
|
+
const schema = Schema.Struct({
|
|
648
|
+
a: Schema.optional(Schema.Date)
|
|
649
|
+
})
|
|
650
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
651
|
+
|
|
652
|
+
const encoding = asserts.encoding()
|
|
653
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
654
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
655
|
+
})
|
|
656
|
+
await encoding.succeed({}, {})
|
|
657
|
+
await encoding.succeed({ a: undefined }, { a: null })
|
|
658
|
+
|
|
659
|
+
const decoding = asserts.decoding()
|
|
660
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
661
|
+
a: new Date("2021-01-01")
|
|
662
|
+
})
|
|
663
|
+
await decoding.succeed({}, {})
|
|
664
|
+
await decoding.succeed({ a: null }, { a: undefined })
|
|
665
|
+
})
|
|
666
|
+
})
|
|
667
|
+
|
|
668
|
+
it("Record(Symbol, Date)", async () => {
|
|
669
|
+
const schema = Schema.Record(Schema.Symbol, Schema.Date)
|
|
670
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
671
|
+
|
|
672
|
+
const encoding = asserts.encoding()
|
|
673
|
+
await encoding.succeed(
|
|
674
|
+
{ [Symbol.for("a")]: new Date("2021-01-01"), [Symbol.for("b")]: new Date("2021-01-01") },
|
|
675
|
+
{ "Symbol(a)": "2021-01-01T00:00:00.000Z", "Symbol(b)": "2021-01-01T00:00:00.000Z" }
|
|
676
|
+
)
|
|
677
|
+
|
|
678
|
+
const decoding = asserts.decoding()
|
|
679
|
+
await decoding.succeed(
|
|
680
|
+
{ "Symbol(a)": "2021-01-01T00:00:00.000Z", "Symbol(b)": "2021-01-01T00:00:00.000Z" },
|
|
681
|
+
{ [Symbol.for("a")]: new Date("2021-01-01"), [Symbol.for("b")]: new Date("2021-01-01") }
|
|
682
|
+
)
|
|
683
|
+
})
|
|
684
|
+
|
|
685
|
+
describe("Tuple", () => {
|
|
686
|
+
it("Date", async () => {
|
|
687
|
+
const schema = Schema.Tuple([Schema.Date])
|
|
688
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
689
|
+
|
|
690
|
+
const encoding = asserts.encoding()
|
|
691
|
+
await encoding.succeed(
|
|
692
|
+
[new Date("2021-01-01")],
|
|
693
|
+
["2021-01-01T00:00:00.000Z"]
|
|
694
|
+
)
|
|
695
|
+
|
|
696
|
+
const decoding = asserts.decoding()
|
|
697
|
+
await decoding.succeed(
|
|
698
|
+
["2021-01-01T00:00:00.000Z"],
|
|
699
|
+
[new Date("2021-01-01")]
|
|
700
|
+
)
|
|
701
|
+
})
|
|
702
|
+
|
|
703
|
+
it("UndefinedOr(Date)", async () => {
|
|
704
|
+
const schema = Schema.Tuple([Schema.UndefinedOr(Schema.Date)])
|
|
705
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
706
|
+
|
|
707
|
+
const encoding = asserts.encoding()
|
|
708
|
+
await encoding.succeed(
|
|
709
|
+
[new Date("2021-01-01")],
|
|
710
|
+
["2021-01-01T00:00:00.000Z"]
|
|
711
|
+
)
|
|
712
|
+
await encoding.succeed([undefined], [null])
|
|
713
|
+
|
|
714
|
+
const decoding = asserts.decoding()
|
|
715
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
716
|
+
new Date("2021-01-01")
|
|
717
|
+
])
|
|
718
|
+
await decoding.succeed([null], [undefined])
|
|
719
|
+
})
|
|
720
|
+
|
|
721
|
+
it("NullOr(Date)", async () => {
|
|
722
|
+
const schema = Schema.Tuple([Schema.NullOr(Schema.Date)])
|
|
723
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
724
|
+
|
|
725
|
+
const encoding = asserts.encoding()
|
|
726
|
+
await encoding.succeed([new Date("2021-01-01")], [
|
|
727
|
+
"2021-01-01T00:00:00.000Z"
|
|
728
|
+
])
|
|
729
|
+
await encoding.succeed([null], [null])
|
|
730
|
+
|
|
731
|
+
const decoding = asserts.decoding()
|
|
732
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
733
|
+
new Date("2021-01-01")
|
|
734
|
+
])
|
|
735
|
+
await decoding.succeed([null], [null])
|
|
736
|
+
})
|
|
737
|
+
|
|
738
|
+
it("optionalKey(Date)", async () => {
|
|
739
|
+
const schema = Schema.Tuple([Schema.optionalKey(Schema.Date)])
|
|
740
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
741
|
+
|
|
742
|
+
const encoding = asserts.encoding()
|
|
743
|
+
await encoding.succeed([new Date("2021-01-01")], [
|
|
744
|
+
"2021-01-01T00:00:00.000Z"
|
|
745
|
+
])
|
|
746
|
+
await encoding.succeed([], [])
|
|
747
|
+
|
|
748
|
+
const decoding = asserts.decoding()
|
|
749
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
750
|
+
new Date("2021-01-01")
|
|
751
|
+
])
|
|
752
|
+
await decoding.succeed([], [])
|
|
753
|
+
})
|
|
754
|
+
|
|
755
|
+
it("optional(Date)", async () => {
|
|
756
|
+
const schema = Schema.Tuple([Schema.optional(Schema.Date)])
|
|
757
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
758
|
+
|
|
759
|
+
const encoding = asserts.encoding()
|
|
760
|
+
await encoding.succeed([new Date("2021-01-01")], [
|
|
761
|
+
"2021-01-01T00:00:00.000Z"
|
|
762
|
+
])
|
|
763
|
+
await encoding.succeed([], [])
|
|
764
|
+
await encoding.succeed([undefined], [null])
|
|
765
|
+
|
|
766
|
+
const decoding = asserts.decoding()
|
|
767
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
768
|
+
new Date("2021-01-01")
|
|
769
|
+
])
|
|
770
|
+
await decoding.succeed([], [])
|
|
771
|
+
await decoding.succeed([null], [undefined])
|
|
772
|
+
})
|
|
773
|
+
})
|
|
774
|
+
|
|
775
|
+
it("Array(Date)", async () => {
|
|
776
|
+
const schema = Schema.Array(Schema.Date)
|
|
777
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
778
|
+
|
|
779
|
+
const encoding = asserts.encoding()
|
|
780
|
+
await encoding.succeed(
|
|
781
|
+
[new Date("2021-01-01"), new Date("2021-01-02")],
|
|
782
|
+
["2021-01-01T00:00:00.000Z", "2021-01-02T00:00:00.000Z"]
|
|
783
|
+
)
|
|
784
|
+
})
|
|
785
|
+
|
|
786
|
+
describe("Union", () => {
|
|
787
|
+
it("NullOr(String)", async () => {
|
|
788
|
+
const schema = Schema.NullOr(Schema.String)
|
|
789
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
790
|
+
|
|
791
|
+
const encoding = asserts.encoding()
|
|
792
|
+
await encoding.succeed("a")
|
|
793
|
+
await encoding.succeed(null)
|
|
794
|
+
|
|
795
|
+
const decoding = asserts.decoding()
|
|
796
|
+
await decoding.succeed(null)
|
|
797
|
+
await decoding.succeed("a")
|
|
798
|
+
})
|
|
799
|
+
|
|
800
|
+
it("NullOr(Number)", async () => {
|
|
801
|
+
const schema = Schema.NullOr(Schema.Number)
|
|
802
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
803
|
+
|
|
804
|
+
const encoding = asserts.encoding()
|
|
805
|
+
await encoding.succeed(1)
|
|
806
|
+
await encoding.succeed(null)
|
|
807
|
+
|
|
808
|
+
const decoding = asserts.decoding()
|
|
809
|
+
await decoding.succeed(null)
|
|
810
|
+
await decoding.succeed(1)
|
|
811
|
+
})
|
|
812
|
+
|
|
813
|
+
it("Array(NullOr(Number))", async () => {
|
|
814
|
+
const schema = Schema.Array(Schema.NullOr(Schema.Number))
|
|
815
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
816
|
+
|
|
817
|
+
const encoding = asserts.encoding()
|
|
818
|
+
await encoding.succeed([1, null])
|
|
819
|
+
|
|
820
|
+
const decoding = asserts.decoding()
|
|
821
|
+
await decoding.succeed([1, null])
|
|
822
|
+
})
|
|
823
|
+
|
|
824
|
+
it("Union(Schema.Date, Finite)", async () => {
|
|
825
|
+
const schema = Schema.Union([Schema.Date, Schema.Finite])
|
|
826
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
827
|
+
|
|
828
|
+
const encoding = asserts.encoding()
|
|
829
|
+
await encoding.succeed(
|
|
830
|
+
new Date("2021-01-01"),
|
|
831
|
+
"2021-01-01T00:00:00.000Z"
|
|
832
|
+
)
|
|
833
|
+
await encoding.succeed(0)
|
|
834
|
+
})
|
|
835
|
+
})
|
|
836
|
+
|
|
837
|
+
it("Suspend", async () => {
|
|
838
|
+
interface Category {
|
|
839
|
+
readonly a: number
|
|
840
|
+
readonly categories: ReadonlyArray<Category>
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
const schema = Schema.Struct({
|
|
844
|
+
a: Schema.Finite.check(Schema.isGreaterThan(0)),
|
|
845
|
+
categories: Schema.Array(Schema.suspend((): Schema.Codec<Category> => schema))
|
|
846
|
+
})
|
|
847
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
848
|
+
|
|
849
|
+
const encoding = asserts.encoding()
|
|
850
|
+
await encoding.succeed({ a: 1, categories: [] }, {
|
|
851
|
+
a: 1,
|
|
852
|
+
categories: []
|
|
853
|
+
})
|
|
854
|
+
await encoding.succeed({
|
|
855
|
+
a: 1,
|
|
856
|
+
categories: [{ a: 2, categories: [] }]
|
|
857
|
+
}, {
|
|
858
|
+
a: 1,
|
|
859
|
+
categories: [
|
|
860
|
+
{ a: 2, categories: [] }
|
|
861
|
+
]
|
|
862
|
+
})
|
|
863
|
+
|
|
864
|
+
const decoding = asserts.decoding()
|
|
865
|
+
await decoding.succeed({
|
|
866
|
+
a: 1,
|
|
867
|
+
categories: []
|
|
868
|
+
}, { a: 1, categories: [] })
|
|
869
|
+
await decoding.succeed({
|
|
870
|
+
a: 1,
|
|
871
|
+
categories: [
|
|
872
|
+
{ a: 2, categories: [] }
|
|
873
|
+
]
|
|
874
|
+
}, { a: 1, categories: [{ a: 2, categories: [] }] })
|
|
875
|
+
})
|
|
876
|
+
|
|
877
|
+
it("Class", async () => {
|
|
878
|
+
class A extends Schema.Class<A>("A")(Schema.Struct({
|
|
879
|
+
a: Schema.Finite
|
|
880
|
+
})) {}
|
|
881
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(Schema.toType(A)))
|
|
882
|
+
|
|
883
|
+
const encoding = asserts.encoding()
|
|
884
|
+
await encoding.succeed(new A({ a: 0 }), { a: 0 })
|
|
885
|
+
|
|
886
|
+
const decoding = asserts.decoding()
|
|
887
|
+
await decoding.succeed({ a: 0 }, new A({ a: 0 }))
|
|
888
|
+
})
|
|
889
|
+
|
|
890
|
+
it("ErrorClass", async () => {
|
|
891
|
+
class E extends Schema.ErrorClass<E>("E")({
|
|
892
|
+
a: Schema.Finite
|
|
893
|
+
}) {}
|
|
894
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(Schema.toType(E)))
|
|
895
|
+
|
|
896
|
+
const encoding = asserts.encoding()
|
|
897
|
+
await encoding.succeed(new E({ a: 0 }), { a: 0 })
|
|
898
|
+
|
|
899
|
+
const decoding = asserts.decoding()
|
|
900
|
+
await decoding.succeed({ a: 0 }, new E({ a: 0 }))
|
|
901
|
+
})
|
|
902
|
+
|
|
903
|
+
it("Date", async () => {
|
|
904
|
+
const schema = Schema.Date
|
|
905
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
906
|
+
|
|
907
|
+
const encoding = asserts.encoding()
|
|
908
|
+
await encoding.succeed(
|
|
909
|
+
new Date("2021-01-01"),
|
|
910
|
+
"2021-01-01T00:00:00.000Z"
|
|
911
|
+
)
|
|
912
|
+
})
|
|
913
|
+
|
|
914
|
+
it("Error", async () => {
|
|
915
|
+
const schema = Schema.Error()
|
|
916
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
917
|
+
|
|
918
|
+
const encoding = asserts.encoding()
|
|
919
|
+
await encoding.succeed(
|
|
920
|
+
new Error("a"),
|
|
921
|
+
{ name: "Error", message: "a" }
|
|
922
|
+
)
|
|
923
|
+
await encoding.succeed(
|
|
924
|
+
new Error("a", { cause: new Error("b") }),
|
|
925
|
+
{ name: "Error", message: "a", cause: { name: "Error", message: "b" } }
|
|
926
|
+
)
|
|
927
|
+
await encoding.succeed(
|
|
928
|
+
new Error("a", { cause: "b" }),
|
|
929
|
+
{ name: "Error", message: "a", cause: "b" }
|
|
930
|
+
)
|
|
931
|
+
const selfCause = new Error("a")
|
|
932
|
+
selfCause.stack = "stack"
|
|
933
|
+
selfCause.cause = selfCause
|
|
934
|
+
await encoding.succeed(
|
|
935
|
+
selfCause,
|
|
936
|
+
{
|
|
937
|
+
name: "Error",
|
|
938
|
+
message: "a",
|
|
939
|
+
cause: "[Circular]"
|
|
940
|
+
}
|
|
941
|
+
)
|
|
942
|
+
const cyclicCause: Record<string, unknown> = {}
|
|
943
|
+
cyclicCause.self = cyclicCause
|
|
944
|
+
await encoding.succeed(
|
|
945
|
+
new Error("a", { cause: cyclicCause }),
|
|
946
|
+
{ name: "Error", message: "a", cause: {} }
|
|
947
|
+
)
|
|
948
|
+
|
|
949
|
+
const decoding = asserts.decoding()
|
|
950
|
+
// Error: message only
|
|
951
|
+
await decoding.succeed(
|
|
952
|
+
{ message: "a" },
|
|
953
|
+
new Error("a")
|
|
954
|
+
)
|
|
955
|
+
// Error: message and name
|
|
956
|
+
await decoding.succeed(
|
|
957
|
+
{ name: "b", message: "a" },
|
|
958
|
+
(() => {
|
|
959
|
+
const err = new Error("a")
|
|
960
|
+
err.name = "b"
|
|
961
|
+
return err
|
|
962
|
+
})()
|
|
963
|
+
)
|
|
964
|
+
// Error: message, name, and stack
|
|
965
|
+
await decoding.succeed(
|
|
966
|
+
{ name: "b", message: "a", stack: "c" },
|
|
967
|
+
(() => {
|
|
968
|
+
const err = new Error("a")
|
|
969
|
+
err.name = "b"
|
|
970
|
+
err.stack = "c"
|
|
971
|
+
return err
|
|
972
|
+
})()
|
|
973
|
+
)
|
|
974
|
+
// Error: message and cause
|
|
975
|
+
await decoding.succeed(
|
|
976
|
+
{ message: "a", cause: { message: "b" } },
|
|
977
|
+
new Error("a", { cause: new Error("b") })
|
|
978
|
+
)
|
|
979
|
+
// Error: explicit null cause
|
|
980
|
+
await decoding.succeed(
|
|
981
|
+
{ message: "a", cause: null },
|
|
982
|
+
new Error("a", { cause: null })
|
|
983
|
+
)
|
|
984
|
+
})
|
|
985
|
+
|
|
986
|
+
it("Error with stack", async () => {
|
|
987
|
+
const schema = Schema.Error({ includeStack: true })
|
|
988
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
989
|
+
const error = new Error("a")
|
|
990
|
+
error.stack = "stack"
|
|
991
|
+
const customError = new Error("b")
|
|
992
|
+
customError.name = "CustomError"
|
|
993
|
+
customError.stack = "custom stack"
|
|
994
|
+
|
|
995
|
+
const encoding = asserts.encoding()
|
|
996
|
+
await encoding.succeed(error, { name: "Error", message: "a", stack: "stack" })
|
|
997
|
+
await encoding.succeed(customError, { name: "CustomError", message: "b", stack: "custom stack" })
|
|
998
|
+
|
|
999
|
+
const decoding = asserts.decoding()
|
|
1000
|
+
await decoding.succeed(
|
|
1001
|
+
{ message: "a", stack: "stack" },
|
|
1002
|
+
error
|
|
1003
|
+
)
|
|
1004
|
+
await decoding.succeed(
|
|
1005
|
+
{ name: "CustomError", message: "b", stack: "custom stack" },
|
|
1006
|
+
customError
|
|
1007
|
+
)
|
|
1008
|
+
})
|
|
1009
|
+
|
|
1010
|
+
it("Error with excluded cause", async () => {
|
|
1011
|
+
const schema = Schema.Error({ excludeCause: true })
|
|
1012
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1013
|
+
|
|
1014
|
+
const encoding = asserts.encoding()
|
|
1015
|
+
await encoding.succeed(
|
|
1016
|
+
new Error("a", { cause: new Error("b") }),
|
|
1017
|
+
{ name: "Error", message: "a" }
|
|
1018
|
+
)
|
|
1019
|
+
})
|
|
1020
|
+
|
|
1021
|
+
it("URL", async () => {
|
|
1022
|
+
const schema = Schema.URL
|
|
1023
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1024
|
+
|
|
1025
|
+
const encoding = asserts.encoding()
|
|
1026
|
+
await encoding.succeed(
|
|
1027
|
+
new URL("https://example.com"),
|
|
1028
|
+
"https://example.com/"
|
|
1029
|
+
)
|
|
1030
|
+
|
|
1031
|
+
const decoding = asserts.decoding()
|
|
1032
|
+
await decoding.succeed(
|
|
1033
|
+
"https://example.com",
|
|
1034
|
+
new URL("https://example.com")
|
|
1035
|
+
)
|
|
1036
|
+
await decoding.succeed(
|
|
1037
|
+
"https://example.com/",
|
|
1038
|
+
new URL("https://example.com")
|
|
1039
|
+
)
|
|
1040
|
+
await decoding.fail(
|
|
1041
|
+
"not a url",
|
|
1042
|
+
`Invalid URL string: not a url`
|
|
1043
|
+
)
|
|
1044
|
+
})
|
|
1045
|
+
|
|
1046
|
+
it("URLSearchParams", async () => {
|
|
1047
|
+
const schema = Schema.URLSearchParams
|
|
1048
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1049
|
+
|
|
1050
|
+
const encoding = asserts.encoding()
|
|
1051
|
+
await encoding.succeed(
|
|
1052
|
+
new URLSearchParams("a=1&b=two"),
|
|
1053
|
+
"a=1&b=two"
|
|
1054
|
+
)
|
|
1055
|
+
|
|
1056
|
+
const decoding = asserts.decoding()
|
|
1057
|
+
await decoding.succeed(
|
|
1058
|
+
"a=1&b=two",
|
|
1059
|
+
new URLSearchParams("a=1&b=two")
|
|
1060
|
+
)
|
|
1061
|
+
})
|
|
1062
|
+
|
|
1063
|
+
it.skipIf(isDeno)("File", async () => {
|
|
1064
|
+
const schema = Schema.File
|
|
1065
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1066
|
+
|
|
1067
|
+
const encoding = asserts.encoding()
|
|
1068
|
+
await encoding.succeed(
|
|
1069
|
+
new File(["hi"], "note.txt", { type: "text/plain", lastModified: 123 }),
|
|
1070
|
+
{ data: "aGk=", type: "text/plain", name: "note.txt", lastModified: 123 }
|
|
1071
|
+
)
|
|
1072
|
+
|
|
1073
|
+
const decoding = asserts.decoding()
|
|
1074
|
+
await decoding.succeed(
|
|
1075
|
+
{ data: "aGk=", type: "text/plain", name: "note.txt", lastModified: 123 },
|
|
1076
|
+
new File(["hi"], "note.txt", { type: "text/plain", lastModified: 123 })
|
|
1077
|
+
)
|
|
1078
|
+
})
|
|
1079
|
+
|
|
1080
|
+
it.skipIf(isDeno)("FormData", async () => {
|
|
1081
|
+
const schema = Schema.FormData
|
|
1082
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1083
|
+
|
|
1084
|
+
const encoding = asserts.encoding()
|
|
1085
|
+
const formData = new FormData()
|
|
1086
|
+
formData.append("a", "1")
|
|
1087
|
+
formData.append("b", new File(["hi"], "note.txt", { type: "text/plain", lastModified: 123 }))
|
|
1088
|
+
await encoding.succeed(
|
|
1089
|
+
formData,
|
|
1090
|
+
[
|
|
1091
|
+
["a", { _tag: "String", value: "1" }],
|
|
1092
|
+
["b", { _tag: "File", value: { data: "aGk=", type: "text/plain", name: "note.txt", lastModified: 123 } }]
|
|
1093
|
+
]
|
|
1094
|
+
)
|
|
1095
|
+
|
|
1096
|
+
const decoding = asserts.decoding()
|
|
1097
|
+
const expected = new FormData()
|
|
1098
|
+
expected.append("a", "1")
|
|
1099
|
+
expected.append("b", new File(["hi"], "note.txt", { type: "text/plain", lastModified: 123 }))
|
|
1100
|
+
await decoding.succeed(
|
|
1101
|
+
[
|
|
1102
|
+
["a", { _tag: "String", value: "1" }],
|
|
1103
|
+
["b", { _tag: "File", value: { data: "aGk=", type: "text/plain", name: "note.txt", lastModified: 123 } }]
|
|
1104
|
+
],
|
|
1105
|
+
expected
|
|
1106
|
+
)
|
|
1107
|
+
})
|
|
1108
|
+
|
|
1109
|
+
it("RegExp", async () => {
|
|
1110
|
+
const schema = Schema.RegExp
|
|
1111
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1112
|
+
|
|
1113
|
+
const encoding = asserts.encoding()
|
|
1114
|
+
await encoding.succeed(new RegExp("a"), { source: "a", flags: "" })
|
|
1115
|
+
await encoding.succeed(new RegExp("a", "i"), { source: "a", flags: "i" })
|
|
1116
|
+
|
|
1117
|
+
const decoding = asserts.decoding()
|
|
1118
|
+
await decoding.succeed({ source: "a", flags: "" }, new RegExp("a"))
|
|
1119
|
+
await decoding.succeed({ source: "a", flags: "i" }, new RegExp("a", "i"))
|
|
1120
|
+
await decoding.fail(
|
|
1121
|
+
{ source: "(", flags: "" },
|
|
1122
|
+
`SyntaxError: Invalid regular expression: /(/: Unterminated group`
|
|
1123
|
+
)
|
|
1124
|
+
await decoding.fail(
|
|
1125
|
+
{ source: "a", flags: "x" },
|
|
1126
|
+
`SyntaxError: Invalid flags supplied to RegExp constructor 'x'`
|
|
1127
|
+
)
|
|
1128
|
+
})
|
|
1129
|
+
|
|
1130
|
+
it("Uint8Array", async () => {
|
|
1131
|
+
const schema = Schema.Uint8Array
|
|
1132
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1133
|
+
|
|
1134
|
+
const encoding = asserts.encoding()
|
|
1135
|
+
await encoding.succeed(new Uint8Array([1, 2, 3]), "AQID")
|
|
1136
|
+
|
|
1137
|
+
const decoding = asserts.decoding()
|
|
1138
|
+
await decoding.succeed("AQID", new Uint8Array([1, 2, 3]))
|
|
1139
|
+
await decoding.fail(
|
|
1140
|
+
"not a base64 string",
|
|
1141
|
+
"Length must be a multiple of 4, but is 19"
|
|
1142
|
+
)
|
|
1143
|
+
})
|
|
1144
|
+
|
|
1145
|
+
it("Duration", async () => {
|
|
1146
|
+
const schema = Schema.Duration
|
|
1147
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1148
|
+
|
|
1149
|
+
const encoding = asserts.encoding()
|
|
1150
|
+
await encoding.succeed(Duration.infinity, { _tag: "Infinity" })
|
|
1151
|
+
await encoding.succeed(Duration.negativeInfinity, { _tag: "NegativeInfinity" })
|
|
1152
|
+
await encoding.succeed(Duration.nanos(1000n), { _tag: "Nanos", value: "1000" })
|
|
1153
|
+
await encoding.succeed(Duration.nanos(-1000n), { _tag: "Nanos", value: "-1000" })
|
|
1154
|
+
await encoding.succeed(Duration.millis(1), { _tag: "Millis", value: 1 })
|
|
1155
|
+
await encoding.succeed(Duration.millis(-1), { _tag: "Millis", value: -1 })
|
|
1156
|
+
await encoding.succeed(Duration.zero, { _tag: "Millis", value: 0 })
|
|
1157
|
+
|
|
1158
|
+
const decoding = asserts.decoding()
|
|
1159
|
+
await decoding.succeed({ _tag: "Infinity" }, Duration.infinity)
|
|
1160
|
+
await decoding.succeed({ _tag: "NegativeInfinity" }, Duration.negativeInfinity)
|
|
1161
|
+
await decoding.succeed({ _tag: "Millis", value: 1 }, Duration.millis(1))
|
|
1162
|
+
await decoding.succeed({ _tag: "Millis", value: -1 }, Duration.millis(-1))
|
|
1163
|
+
await decoding.succeed({ _tag: "Nanos", value: "1000" }, Duration.nanos(1000n))
|
|
1164
|
+
await decoding.succeed({ _tag: "Nanos", value: "-1000" }, Duration.nanos(-1000n))
|
|
1165
|
+
})
|
|
1166
|
+
|
|
1167
|
+
it("DateTimeUtc", async () => {
|
|
1168
|
+
const schema = Schema.DateTimeUtc
|
|
1169
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1170
|
+
|
|
1171
|
+
const encoding = asserts.encoding()
|
|
1172
|
+
await encoding.succeed(
|
|
1173
|
+
DateTime.makeUnsafe("2021-01-01T00:00:00.000Z"),
|
|
1174
|
+
"2021-01-01T00:00:00.000Z"
|
|
1175
|
+
)
|
|
1176
|
+
|
|
1177
|
+
const decoding = asserts.decoding()
|
|
1178
|
+
await decoding.succeed(
|
|
1179
|
+
"2021-01-01T00:00:00.000Z",
|
|
1180
|
+
DateTime.makeUnsafe("2021-01-01T00:00:00.000Z")
|
|
1181
|
+
)
|
|
1182
|
+
})
|
|
1183
|
+
|
|
1184
|
+
it("Option(Date)", async () => {
|
|
1185
|
+
const schema = Schema.Option(Schema.Date)
|
|
1186
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1187
|
+
|
|
1188
|
+
const encoding = asserts.encoding()
|
|
1189
|
+
await encoding.succeed(Option.some(new Date("2021-01-01")), {
|
|
1190
|
+
_tag: "Some",
|
|
1191
|
+
value: "2021-01-01T00:00:00.000Z"
|
|
1192
|
+
})
|
|
1193
|
+
await encoding.succeed(Option.none(), { _tag: "None" })
|
|
1194
|
+
})
|
|
1195
|
+
|
|
1196
|
+
describe("Redacted", () => {
|
|
1197
|
+
it("Redacted(Option(String))", async () => {
|
|
1198
|
+
const schema = Schema.Redacted(Schema.Option(Schema.String))
|
|
1199
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1200
|
+
|
|
1201
|
+
const encoding = asserts.encoding()
|
|
1202
|
+
await encoding.succeed(
|
|
1203
|
+
Redacted.make(Option.none()),
|
|
1204
|
+
{ _tag: "None" }
|
|
1205
|
+
)
|
|
1206
|
+
await encoding.succeed(
|
|
1207
|
+
Redacted.make(Option.some("a")),
|
|
1208
|
+
{ _tag: "Some", value: "a" }
|
|
1209
|
+
)
|
|
1210
|
+
|
|
1211
|
+
const decoding = asserts.decoding()
|
|
1212
|
+
await decoding.succeed(
|
|
1213
|
+
{ _tag: "None" },
|
|
1214
|
+
Redacted.make(Option.none())
|
|
1215
|
+
)
|
|
1216
|
+
await decoding.succeed(
|
|
1217
|
+
{ _tag: "Some", value: "a" },
|
|
1218
|
+
Redacted.make(Option.some("a"))
|
|
1219
|
+
)
|
|
1220
|
+
})
|
|
1221
|
+
|
|
1222
|
+
it("Redacted(Option(String)) disallowJsonEncode", async () => {
|
|
1223
|
+
const schema = Schema.Redacted(Schema.Option(Schema.String), {
|
|
1224
|
+
disallowJsonEncode: true
|
|
1225
|
+
})
|
|
1226
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1227
|
+
|
|
1228
|
+
const encoding = asserts.encoding()
|
|
1229
|
+
await encoding.fail(
|
|
1230
|
+
Redacted.make(Option.none()),
|
|
1231
|
+
`Cannot serialize Redacted`
|
|
1232
|
+
)
|
|
1233
|
+
await encoding.fail(
|
|
1234
|
+
Redacted.make(Option.some("a")),
|
|
1235
|
+
`Cannot serialize Redacted`
|
|
1236
|
+
)
|
|
1237
|
+
|
|
1238
|
+
const decoding = asserts.decoding()
|
|
1239
|
+
await decoding.succeed(
|
|
1240
|
+
{ _tag: "None" },
|
|
1241
|
+
Redacted.make(Option.none())
|
|
1242
|
+
)
|
|
1243
|
+
await decoding.succeed(
|
|
1244
|
+
{ _tag: "Some", value: "a" },
|
|
1245
|
+
Redacted.make(Option.some("a"))
|
|
1246
|
+
)
|
|
1247
|
+
})
|
|
1248
|
+
|
|
1249
|
+
it("encoding a Redacted with a label", async () => {
|
|
1250
|
+
const schema = Schema.Redacted(Schema.String, { label: "password" })
|
|
1251
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1252
|
+
|
|
1253
|
+
const encoding = asserts.encoding()
|
|
1254
|
+
await encoding.fail(
|
|
1255
|
+
Redacted.make("a", { label: "API key" }),
|
|
1256
|
+
`Expected "password", got "API key"
|
|
1257
|
+
at ["label"]`
|
|
1258
|
+
)
|
|
1259
|
+
})
|
|
1260
|
+
|
|
1261
|
+
it("encoding a Redacted with a different label", async () => {
|
|
1262
|
+
const schema = Schema.Redacted(Schema.String)
|
|
1263
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1264
|
+
|
|
1265
|
+
const encoding = asserts.encoding()
|
|
1266
|
+
await encoding.succeed(
|
|
1267
|
+
Redacted.make("a", { label: "API key" }),
|
|
1268
|
+
"a"
|
|
1269
|
+
)
|
|
1270
|
+
})
|
|
1271
|
+
})
|
|
1272
|
+
|
|
1273
|
+
it("ReadonlySet", async () => {
|
|
1274
|
+
const schema = Schema.ReadonlySet(Schema.Option(Schema.Date))
|
|
1275
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1276
|
+
|
|
1277
|
+
const encoding = asserts.encoding()
|
|
1278
|
+
await encoding.succeed(new Set([Option.some(new Date("2021-01-01"))]), [{
|
|
1279
|
+
_tag: "Some",
|
|
1280
|
+
value: "2021-01-01T00:00:00.000Z"
|
|
1281
|
+
}])
|
|
1282
|
+
|
|
1283
|
+
const decoding = asserts.decoding()
|
|
1284
|
+
await decoding.succeed(
|
|
1285
|
+
[{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" }],
|
|
1286
|
+
new Set([Option.some(new Date("2021-01-01"))])
|
|
1287
|
+
)
|
|
1288
|
+
})
|
|
1289
|
+
|
|
1290
|
+
it("ReadonlyMap", async () => {
|
|
1291
|
+
const schema = Schema.ReadonlyMap(Schema.Option(Schema.Date), Schema.Finite)
|
|
1292
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1293
|
+
|
|
1294
|
+
const encoding = asserts.encoding()
|
|
1295
|
+
await encoding.succeed(
|
|
1296
|
+
new Map([[Option.some(new Date("2021-01-01")), 0]]),
|
|
1297
|
+
[[
|
|
1298
|
+
{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" },
|
|
1299
|
+
0
|
|
1300
|
+
]]
|
|
1301
|
+
)
|
|
1302
|
+
|
|
1303
|
+
const decoding = asserts.decoding()
|
|
1304
|
+
await decoding.succeed(
|
|
1305
|
+
[[{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" }, 0]],
|
|
1306
|
+
new Map([[Option.some(new Date("2021-01-01")), 0]])
|
|
1307
|
+
)
|
|
1308
|
+
})
|
|
1309
|
+
|
|
1310
|
+
it("HashMap", async () => {
|
|
1311
|
+
const schema = Schema.HashMap(Schema.Option(Schema.Date), Schema.Finite)
|
|
1312
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1313
|
+
|
|
1314
|
+
const encoding = asserts.encoding()
|
|
1315
|
+
await encoding.succeed(
|
|
1316
|
+
HashMap.make([Option.some(new Date("2021-01-01")), 0]),
|
|
1317
|
+
[[
|
|
1318
|
+
{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" },
|
|
1319
|
+
0
|
|
1320
|
+
]]
|
|
1321
|
+
)
|
|
1322
|
+
|
|
1323
|
+
const decoding = asserts.decoding()
|
|
1324
|
+
await decoding.succeed(
|
|
1325
|
+
[[{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" }, 0]],
|
|
1326
|
+
HashMap.make([Option.some(new Date("2021-01-01")), 0])
|
|
1327
|
+
)
|
|
1328
|
+
})
|
|
1329
|
+
})
|
|
1330
|
+
|
|
1331
|
+
describe("schemas with encoding", () => {
|
|
1332
|
+
it("FiniteFromDate", async () => {
|
|
1333
|
+
const schema = FiniteFromDate
|
|
1334
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1335
|
+
|
|
1336
|
+
const encoding = asserts.encoding()
|
|
1337
|
+
await encoding.succeed(0, "1970-01-01T00:00:00.000Z")
|
|
1338
|
+
})
|
|
1339
|
+
|
|
1340
|
+
it("Struct", async () => {
|
|
1341
|
+
const schema = Schema.Struct({
|
|
1342
|
+
a: FiniteFromDate,
|
|
1343
|
+
b: FiniteFromDate
|
|
1344
|
+
})
|
|
1345
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1346
|
+
|
|
1347
|
+
const encoding = asserts.encoding()
|
|
1348
|
+
await encoding.succeed(
|
|
1349
|
+
{ a: 0, b: 0 },
|
|
1350
|
+
{ a: "1970-01-01T00:00:00.000Z", b: "1970-01-01T00:00:00.000Z" }
|
|
1351
|
+
)
|
|
1352
|
+
})
|
|
1353
|
+
|
|
1354
|
+
it("Tuple(Schema.Date, Schema.Date)", async () => {
|
|
1355
|
+
const schema = Schema.Tuple([FiniteFromDate, FiniteFromDate])
|
|
1356
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1357
|
+
|
|
1358
|
+
const encoding = asserts.encoding()
|
|
1359
|
+
await encoding.succeed(
|
|
1360
|
+
[0, 0],
|
|
1361
|
+
["1970-01-01T00:00:00.000Z", "1970-01-01T00:00:00.000Z"]
|
|
1362
|
+
)
|
|
1363
|
+
})
|
|
1364
|
+
|
|
1365
|
+
it("Class", async () => {
|
|
1366
|
+
class A extends Schema.Class<A>("A")(Schema.Struct({
|
|
1367
|
+
a: FiniteFromDate
|
|
1368
|
+
})) {}
|
|
1369
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(A))
|
|
1370
|
+
|
|
1371
|
+
const encoding = asserts.encoding()
|
|
1372
|
+
await encoding.succeed(new A({ a: 0 }), { a: "1970-01-01T00:00:00.000Z" })
|
|
1373
|
+
|
|
1374
|
+
const decoding = asserts.decoding()
|
|
1375
|
+
await decoding.succeed({ a: "1970-01-01T00:00:00.000Z" }, new A({ a: 0 }))
|
|
1376
|
+
})
|
|
1377
|
+
|
|
1378
|
+
it("Error", async () => {
|
|
1379
|
+
class E extends Schema.ErrorClass<E>("E")({
|
|
1380
|
+
a: FiniteFromDate
|
|
1381
|
+
}) {}
|
|
1382
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(E))
|
|
1383
|
+
|
|
1384
|
+
const encoding = asserts.encoding()
|
|
1385
|
+
await encoding.succeed(new E({ a: 0 }), { a: "1970-01-01T00:00:00.000Z" })
|
|
1386
|
+
|
|
1387
|
+
const decoding = asserts.decoding()
|
|
1388
|
+
await decoding.succeed({ a: "1970-01-01T00:00:00.000Z" }, new E({ a: 0 }))
|
|
1389
|
+
})
|
|
1390
|
+
|
|
1391
|
+
it("Enum", async () => {
|
|
1392
|
+
enum Fruits {
|
|
1393
|
+
Apple,
|
|
1394
|
+
Banana = "banana"
|
|
1395
|
+
}
|
|
1396
|
+
const schema = Schema.Enum(Fruits)
|
|
1397
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1398
|
+
|
|
1399
|
+
const encoding = asserts.encoding()
|
|
1400
|
+
await encoding.succeed(Fruits.Apple, 0)
|
|
1401
|
+
await encoding.succeed(Fruits.Banana, "banana")
|
|
1402
|
+
|
|
1403
|
+
const decoding = asserts.decoding()
|
|
1404
|
+
await decoding.succeed(0, Fruits.Apple)
|
|
1405
|
+
})
|
|
1406
|
+
|
|
1407
|
+
it("Option(Option(FiniteFromDate))", async () => {
|
|
1408
|
+
const schema = Schema.Option(Schema.Option(FiniteFromDate))
|
|
1409
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1410
|
+
|
|
1411
|
+
const encoding = asserts.encoding()
|
|
1412
|
+
await encoding.succeed(Option.some(Option.some(0)), {
|
|
1413
|
+
_tag: "Some",
|
|
1414
|
+
value: {
|
|
1415
|
+
_tag: "Some",
|
|
1416
|
+
value: "1970-01-01T00:00:00.000Z"
|
|
1417
|
+
}
|
|
1418
|
+
})
|
|
1419
|
+
})
|
|
1420
|
+
|
|
1421
|
+
it("ReadonlyMap(Option(Symbol), Date)", async () => {
|
|
1422
|
+
const schema = Schema.ReadonlyMap(Schema.Option(Schema.Symbol), Schema.Date)
|
|
1423
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1424
|
+
|
|
1425
|
+
const encoding = asserts.encoding()
|
|
1426
|
+
await encoding.succeed(
|
|
1427
|
+
new Map([[Option.some(Symbol.for("a")), new Date("2021-01-01")]]),
|
|
1428
|
+
[[
|
|
1429
|
+
{ _tag: "Some", value: "Symbol(a)" },
|
|
1430
|
+
"2021-01-01T00:00:00.000Z"
|
|
1431
|
+
]]
|
|
1432
|
+
)
|
|
1433
|
+
|
|
1434
|
+
const decoding = asserts.decoding()
|
|
1435
|
+
await decoding.succeed(
|
|
1436
|
+
[[{ _tag: "Some", value: "Symbol(a)" }, "2021-01-01T00:00:00.000Z"]],
|
|
1437
|
+
new Map([[Option.some(Symbol.for("a")), new Date("2021-01-01")]])
|
|
1438
|
+
)
|
|
1439
|
+
})
|
|
1440
|
+
|
|
1441
|
+
it("Defect", async () => {
|
|
1442
|
+
const schema = Schema.Defect()
|
|
1443
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1444
|
+
|
|
1445
|
+
const encoding = asserts.encoding()
|
|
1446
|
+
await encoding.succeed(new Error("a"), { name: "Error", message: "a" })
|
|
1447
|
+
await encoding.succeed(
|
|
1448
|
+
new Error("a", { cause: new Error("b") }),
|
|
1449
|
+
{ name: "Error", message: "a", cause: { name: "Error", message: "b" } }
|
|
1450
|
+
)
|
|
1451
|
+
await encoding.succeed(
|
|
1452
|
+
new Error("a", { cause: "b" }),
|
|
1453
|
+
{ name: "Error", message: "a", cause: "b" }
|
|
1454
|
+
)
|
|
1455
|
+
await encoding.succeed(
|
|
1456
|
+
new Cause.NoSuchElementError(),
|
|
1457
|
+
{ name: "NoSuchElementError", message: "" }
|
|
1458
|
+
)
|
|
1459
|
+
const cyclicDefect: Record<string, unknown> = {}
|
|
1460
|
+
cyclicDefect.self = cyclicDefect
|
|
1461
|
+
await encoding.succeed(cyclicDefect, {})
|
|
1462
|
+
await encoding.succeed("a")
|
|
1463
|
+
await encoding.succeed({ a: 1 })
|
|
1464
|
+
|
|
1465
|
+
const decoding = asserts.decoding()
|
|
1466
|
+
await decoding.succeed(
|
|
1467
|
+
{ message: "a", cause: { message: "b" } },
|
|
1468
|
+
new Error("a", { cause: new Error("b") })
|
|
1469
|
+
)
|
|
1470
|
+
await decoding.succeed(
|
|
1471
|
+
{ message: "a", cause: null },
|
|
1472
|
+
new Error("a", { cause: null })
|
|
1473
|
+
)
|
|
1474
|
+
})
|
|
1475
|
+
|
|
1476
|
+
it("Defect with excluded cause", async () => {
|
|
1477
|
+
const schema = Schema.Defect({ excludeCause: true })
|
|
1478
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1479
|
+
|
|
1480
|
+
const encoding = asserts.encoding()
|
|
1481
|
+
await encoding.succeed(
|
|
1482
|
+
new Error("a", { cause: new Error("b") }),
|
|
1483
|
+
{ name: "Error", message: "a" }
|
|
1484
|
+
)
|
|
1485
|
+
})
|
|
1486
|
+
|
|
1487
|
+
it("Cause(Option(Finite), Option(String))", async () => {
|
|
1488
|
+
const schema = Schema.Cause(Schema.Option(Schema.Finite), Schema.Option(Schema.String))
|
|
1489
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1490
|
+
|
|
1491
|
+
const encoding = asserts.encoding()
|
|
1492
|
+
await encoding.succeed(Cause.fail(Option.some(1)), [{
|
|
1493
|
+
_tag: "Fail",
|
|
1494
|
+
error: { _tag: "Some", value: 1 }
|
|
1495
|
+
}])
|
|
1496
|
+
await encoding.succeed(Cause.die(Option.some("a")), [{
|
|
1497
|
+
_tag: "Die",
|
|
1498
|
+
defect: { _tag: "Some", value: "a" }
|
|
1499
|
+
}])
|
|
1500
|
+
await encoding.succeed(Cause.interrupt(1), [{
|
|
1501
|
+
_tag: "Interrupt",
|
|
1502
|
+
fiberId: 1
|
|
1503
|
+
}])
|
|
1504
|
+
await encoding.succeed(Cause.interrupt(), [{
|
|
1505
|
+
_tag: "Interrupt",
|
|
1506
|
+
fiberId: null
|
|
1507
|
+
}])
|
|
1508
|
+
})
|
|
1509
|
+
|
|
1510
|
+
it("DateTimeUtcFromValidDate", async () => {
|
|
1511
|
+
const schema = Schema.DateTimeUtcFromDate
|
|
1512
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
1513
|
+
|
|
1514
|
+
const encoding = asserts.encoding()
|
|
1515
|
+
await encoding.succeed(
|
|
1516
|
+
DateTime.makeUnsafe("2021-01-01T00:00:00.000Z"),
|
|
1517
|
+
"2021-01-01T00:00:00.000Z"
|
|
1518
|
+
)
|
|
1519
|
+
|
|
1520
|
+
const decoding = asserts.decoding()
|
|
1521
|
+
await decoding.succeed(
|
|
1522
|
+
"2021-01-01T00:00:00.000Z",
|
|
1523
|
+
DateTime.makeUnsafe("2021-01-01T00:00:00.000Z")
|
|
1524
|
+
)
|
|
1525
|
+
})
|
|
1526
|
+
})
|
|
1527
|
+
|
|
1528
|
+
it("StandardSchemaV1FailureResult", async () => {
|
|
1529
|
+
const b = Symbol.for("b")
|
|
1530
|
+
|
|
1531
|
+
const schema = Schema.Struct({
|
|
1532
|
+
a: Schema.NonEmptyString,
|
|
1533
|
+
[b]: Schema.Finite,
|
|
1534
|
+
c: Schema.Tuple([Schema.String])
|
|
1535
|
+
})
|
|
1536
|
+
|
|
1537
|
+
const r = SchemaParser.decodeUnknownExit(schema)({ a: "", c: [] }, { errors: "all" })
|
|
1538
|
+
|
|
1539
|
+
assertTrue(r._tag === "Failure")
|
|
1540
|
+
assertTrue(r.cause.reasons.length === 1)
|
|
1541
|
+
const failure = r.cause.reasons[0]
|
|
1542
|
+
assertTrue(failure._tag === "Fail")
|
|
1543
|
+
|
|
1544
|
+
const failureResult = SchemaIssue.makeFormatterStandardSchemaV1({
|
|
1545
|
+
leafHook: SchemaIssue.defaultLeafHook
|
|
1546
|
+
})(failure.error)
|
|
1547
|
+
|
|
1548
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(Schema.StandardSchemaV1FailureResult))
|
|
1549
|
+
|
|
1550
|
+
const encoding = asserts.encoding()
|
|
1551
|
+
await encoding.succeed(failureResult, {
|
|
1552
|
+
issues: [
|
|
1553
|
+
{ path: ["a"], message: `Expected a value with a length of at least 1, got ""` },
|
|
1554
|
+
{ path: ["c", 0], message: "Missing key" },
|
|
1555
|
+
{ path: ["Symbol(b)"], message: "Missing key" }
|
|
1556
|
+
]
|
|
1557
|
+
})
|
|
1558
|
+
|
|
1559
|
+
const decoding = asserts.decoding()
|
|
1560
|
+
await decoding.succeed({
|
|
1561
|
+
issues: [
|
|
1562
|
+
{ path: ["a"], message: `Expected a value with a length of at least 1, got ""` },
|
|
1563
|
+
{ path: ["c", 0], message: "Missing key" },
|
|
1564
|
+
{ path: ["Symbol(b)"], message: "Missing key" }
|
|
1565
|
+
]
|
|
1566
|
+
}, failureResult)
|
|
1567
|
+
})
|
|
1568
|
+
})
|
|
1569
|
+
|
|
1570
|
+
describe("toCodecStringTree", () => {
|
|
1571
|
+
it("should reorder the types in the Union based on the encoded side", async () => {
|
|
1572
|
+
const schema = Schema.Union([
|
|
1573
|
+
Schema.String,
|
|
1574
|
+
Schema.String.pipe(Schema.encodeTo(Schema.BigInt, {
|
|
1575
|
+
decode: SchemaGetter.transform((n: bigint) => String(n) + "a"),
|
|
1576
|
+
encode: SchemaGetter.transform(() => 0n)
|
|
1577
|
+
}))
|
|
1578
|
+
])
|
|
1579
|
+
const serializer = Schema.toCodecStringTree(schema)
|
|
1580
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(serializer))
|
|
1581
|
+
|
|
1582
|
+
const decoding = asserts.decoding()
|
|
1583
|
+
await decoding.succeed("1", "1a")
|
|
1584
|
+
})
|
|
1585
|
+
|
|
1586
|
+
describe("keepDeclarations: true", () => {
|
|
1587
|
+
describe("Unsupported schemas", () => {
|
|
1588
|
+
it("Struct with Symbol property name", () => {
|
|
1589
|
+
const a = Symbol.for("a")
|
|
1590
|
+
const schema = Schema.Struct({
|
|
1591
|
+
[a]: Schema.String
|
|
1592
|
+
})
|
|
1593
|
+
throws(
|
|
1594
|
+
() => Schema.toCodecStringTree(schema, { keepDeclarations: true }),
|
|
1595
|
+
"Objects property names must be strings"
|
|
1596
|
+
)
|
|
1597
|
+
})
|
|
1598
|
+
})
|
|
1599
|
+
|
|
1600
|
+
it("should reorder the types in the Union based on the encoded side", async () => {
|
|
1601
|
+
const schema = Schema.Union([
|
|
1602
|
+
Schema.String,
|
|
1603
|
+
Schema.String.pipe(Schema.encodeTo(Schema.BigInt, {
|
|
1604
|
+
decode: SchemaGetter.transform((n: bigint) => String(n) + "a"),
|
|
1605
|
+
encode: SchemaGetter.transform(() => 0n)
|
|
1606
|
+
}))
|
|
1607
|
+
])
|
|
1608
|
+
const serializer = Schema.toCodecStringTree(schema, { keepDeclarations: true })
|
|
1609
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(serializer))
|
|
1610
|
+
|
|
1611
|
+
const decoding = asserts.decoding()
|
|
1612
|
+
await decoding.succeed("1", "1a")
|
|
1613
|
+
})
|
|
1614
|
+
|
|
1615
|
+
it("should passthrough the schema if it's a declaration without an annotation", async () => {
|
|
1616
|
+
const schema = Schema.Struct({
|
|
1617
|
+
a: Schema.instanceOf(URL),
|
|
1618
|
+
b: Schema.Number
|
|
1619
|
+
})
|
|
1620
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema, { keepDeclarations: true }))
|
|
1621
|
+
|
|
1622
|
+
const encoding = asserts.encoding()
|
|
1623
|
+
await encoding.succeed({ a: new URL("https://effect.website"), b: 1 }, {
|
|
1624
|
+
a: new URL("https://effect.website"),
|
|
1625
|
+
b: "1"
|
|
1626
|
+
})
|
|
1627
|
+
|
|
1628
|
+
const decoding = asserts.decoding()
|
|
1629
|
+
await decoding.succeed({
|
|
1630
|
+
a: new URL("https://effect.website"),
|
|
1631
|
+
b: "1"
|
|
1632
|
+
}, { a: new URL("https://effect.website"), b: 1 })
|
|
1633
|
+
})
|
|
1634
|
+
})
|
|
1635
|
+
|
|
1636
|
+
describe("should return the same reference if nothing changed", () => {
|
|
1637
|
+
it("String", async () => {
|
|
1638
|
+
const schema = Schema.String
|
|
1639
|
+
const serializer = Schema.toCodecStringTree(schema)
|
|
1640
|
+
strictEqual(serializer.ast, schema.ast)
|
|
1641
|
+
})
|
|
1642
|
+
|
|
1643
|
+
it("Struct({ a: String })", async () => {
|
|
1644
|
+
const schema = Schema.Struct({
|
|
1645
|
+
a: Schema.String
|
|
1646
|
+
})
|
|
1647
|
+
const serializer = Schema.toCodecStringTree(schema)
|
|
1648
|
+
strictEqual(serializer.ast, schema.ast)
|
|
1649
|
+
})
|
|
1650
|
+
})
|
|
1651
|
+
|
|
1652
|
+
describe("should memoize the result", () => {
|
|
1653
|
+
it("Struct", async () => {
|
|
1654
|
+
const schema = Schema.Struct({
|
|
1655
|
+
a: Schema.Finite
|
|
1656
|
+
})
|
|
1657
|
+
const serializer = Schema.toCodecStringTree(schema)
|
|
1658
|
+
strictEqual(serializer.ast, Schema.toCodecStringTree(serializer).ast)
|
|
1659
|
+
})
|
|
1660
|
+
|
|
1661
|
+
it("Array", async () => {
|
|
1662
|
+
const schema = Schema.Array(Schema.Finite)
|
|
1663
|
+
const serializer = Schema.toCodecStringTree(schema)
|
|
1664
|
+
strictEqual(serializer.ast, Schema.toCodecStringTree(serializer).ast)
|
|
1665
|
+
})
|
|
1666
|
+
})
|
|
1667
|
+
|
|
1668
|
+
describe("schemas without encoding", () => {
|
|
1669
|
+
describe("Unsupported schemas", () => {
|
|
1670
|
+
it("Struct with Symbol property name", () => {
|
|
1671
|
+
const a = Symbol.for("a")
|
|
1672
|
+
const schema = Schema.Struct({
|
|
1673
|
+
[a]: Schema.String
|
|
1674
|
+
})
|
|
1675
|
+
throws(
|
|
1676
|
+
() => Schema.toCodecStringTree(schema),
|
|
1677
|
+
"Objects property names must be strings"
|
|
1678
|
+
)
|
|
1679
|
+
})
|
|
1680
|
+
})
|
|
1681
|
+
|
|
1682
|
+
it("Declaration", async () => {
|
|
1683
|
+
const schema = Schema.instanceOf(URL)
|
|
1684
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1685
|
+
|
|
1686
|
+
const encoding = asserts.encoding()
|
|
1687
|
+
await encoding.succeed(new URL("https://effect.website"), undefined)
|
|
1688
|
+
|
|
1689
|
+
const decoding = asserts.decoding()
|
|
1690
|
+
await decoding.fail("https://effect.website/", `Expected undefined, got "https://effect.website/"`)
|
|
1691
|
+
})
|
|
1692
|
+
|
|
1693
|
+
it("Unknown", async () => {
|
|
1694
|
+
const schema = Schema.Unknown
|
|
1695
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1696
|
+
|
|
1697
|
+
const encoding = asserts.encoding()
|
|
1698
|
+
await encoding.succeed("a")
|
|
1699
|
+
await encoding.fail(1, `Expected StringTree, got 1`)
|
|
1700
|
+
await encoding.succeed({ a: "a" })
|
|
1701
|
+
await encoding.succeed(["a"])
|
|
1702
|
+
await encoding.fail({ a: 1 }, `Expected StringTree, got {"a":1}`)
|
|
1703
|
+
|
|
1704
|
+
const decoding = asserts.decoding()
|
|
1705
|
+
await decoding.succeed("a")
|
|
1706
|
+
await decoding.fail(1, `Expected StringTree, got 1`)
|
|
1707
|
+
await decoding.succeed({ a: "a" })
|
|
1708
|
+
await decoding.succeed(["a"])
|
|
1709
|
+
await decoding.fail({ a: 1 }, `Expected StringTree, got {"a":1}`)
|
|
1710
|
+
})
|
|
1711
|
+
|
|
1712
|
+
it("ObjectKeyword", async () => {
|
|
1713
|
+
const schema = Schema.ObjectKeyword
|
|
1714
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1715
|
+
|
|
1716
|
+
const encoding = asserts.encoding()
|
|
1717
|
+
await encoding.fail("a", `Expected object | array | function, got "a"`)
|
|
1718
|
+
await encoding.fail(1, `Expected object | array | function, got 1`)
|
|
1719
|
+
await encoding.succeed({ a: "a" })
|
|
1720
|
+
await encoding.succeed(["a"])
|
|
1721
|
+
await encoding.fail({ a: 1 }, `Expected StringTree, got {"a":1}`)
|
|
1722
|
+
|
|
1723
|
+
const decoding = asserts.decoding()
|
|
1724
|
+
await decoding.fail("a", `Expected object | array | function, got "a"`)
|
|
1725
|
+
await decoding.fail(1, `Expected StringTree, got 1`)
|
|
1726
|
+
await decoding.succeed({ a: "a" })
|
|
1727
|
+
await decoding.succeed(["a"])
|
|
1728
|
+
await decoding.fail({ a: 1 }, `Expected StringTree, got {"a":1}`)
|
|
1729
|
+
})
|
|
1730
|
+
|
|
1731
|
+
it("Never", async () => {
|
|
1732
|
+
const schema = Schema.Never
|
|
1733
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1734
|
+
|
|
1735
|
+
const encoding = asserts.encoding()
|
|
1736
|
+
await encoding.fail({}, "Expected never, got {}")
|
|
1737
|
+
})
|
|
1738
|
+
|
|
1739
|
+
it("Any should be an escape hatch", async () => {
|
|
1740
|
+
const schema = Schema.Any
|
|
1741
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1742
|
+
|
|
1743
|
+
const encoding = asserts.encoding()
|
|
1744
|
+
await encoding.succeed(() => {})
|
|
1745
|
+
|
|
1746
|
+
const decoding = asserts.decoding()
|
|
1747
|
+
await decoding.succeed(() => {})
|
|
1748
|
+
})
|
|
1749
|
+
|
|
1750
|
+
it("Undefined", async () => {
|
|
1751
|
+
const schema = Schema.Undefined
|
|
1752
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1753
|
+
|
|
1754
|
+
const encoding = asserts.encoding()
|
|
1755
|
+
await encoding.succeed(undefined)
|
|
1756
|
+
|
|
1757
|
+
const decoding = asserts.decoding()
|
|
1758
|
+
await decoding.succeed(undefined)
|
|
1759
|
+
})
|
|
1760
|
+
|
|
1761
|
+
it("Void", async () => {
|
|
1762
|
+
const schema = Schema.Void
|
|
1763
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1764
|
+
|
|
1765
|
+
const encoding = asserts.encoding()
|
|
1766
|
+
await encoding.succeed(undefined)
|
|
1767
|
+
|
|
1768
|
+
const decoding = asserts.decoding()
|
|
1769
|
+
await decoding.succeed(undefined)
|
|
1770
|
+
})
|
|
1771
|
+
|
|
1772
|
+
it("Null", async () => {
|
|
1773
|
+
const schema = Schema.Null
|
|
1774
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1775
|
+
|
|
1776
|
+
const encoding = asserts.encoding()
|
|
1777
|
+
await encoding.succeed(null, "null")
|
|
1778
|
+
|
|
1779
|
+
const decoding = asserts.decoding()
|
|
1780
|
+
await decoding.succeed("null", null)
|
|
1781
|
+
})
|
|
1782
|
+
|
|
1783
|
+
it("String", async () => {
|
|
1784
|
+
const schema = Schema.String
|
|
1785
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1786
|
+
|
|
1787
|
+
const encoding = asserts.encoding()
|
|
1788
|
+
await encoding.succeed("a")
|
|
1789
|
+
|
|
1790
|
+
const decoding = asserts.decoding()
|
|
1791
|
+
await decoding.succeed("a")
|
|
1792
|
+
})
|
|
1793
|
+
|
|
1794
|
+
describe("Number", () => {
|
|
1795
|
+
it("Number", async () => {
|
|
1796
|
+
const schema = Schema.Number
|
|
1797
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1798
|
+
|
|
1799
|
+
const encoding = asserts.encoding()
|
|
1800
|
+
await encoding.succeed(1, "1")
|
|
1801
|
+
await encoding.succeed(-1, "-1")
|
|
1802
|
+
await encoding.succeed(1.2, "1.2")
|
|
1803
|
+
await encoding.succeed(Infinity, "Infinity")
|
|
1804
|
+
await encoding.succeed(-Infinity, "-Infinity")
|
|
1805
|
+
await encoding.succeed(NaN, "NaN")
|
|
1806
|
+
|
|
1807
|
+
const decoding = asserts.decoding()
|
|
1808
|
+
await decoding.succeed("1", 1)
|
|
1809
|
+
await decoding.succeed("-1", -1)
|
|
1810
|
+
await decoding.succeed("1.2", 1.2)
|
|
1811
|
+
await decoding.succeed("Infinity", Infinity)
|
|
1812
|
+
await decoding.succeed("-Infinity", -Infinity)
|
|
1813
|
+
await decoding.succeed("NaN", NaN)
|
|
1814
|
+
await decoding.fail(Infinity, `Expected string | "Infinity" | "-Infinity" | "NaN", got Infinity`)
|
|
1815
|
+
await decoding.fail(-Infinity, `Expected string | "Infinity" | "-Infinity" | "NaN", got -Infinity`)
|
|
1816
|
+
await decoding.fail(NaN, `Expected string | "Infinity" | "-Infinity" | "NaN", got NaN`)
|
|
1817
|
+
await decoding.fail(null, `Expected string | "Infinity" | "-Infinity" | "NaN", got null`)
|
|
1818
|
+
await decoding.fail(
|
|
1819
|
+
"a",
|
|
1820
|
+
`Expected a string representing a finite number, got "a"
|
|
1821
|
+
Expected "Infinity" | "-Infinity" | "NaN", got "a"`
|
|
1822
|
+
)
|
|
1823
|
+
})
|
|
1824
|
+
|
|
1825
|
+
describe("checks", () => {
|
|
1826
|
+
it("Finite", async () => {
|
|
1827
|
+
const schema = Schema.Finite
|
|
1828
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1829
|
+
|
|
1830
|
+
const encoding = asserts.encoding()
|
|
1831
|
+
await encoding.succeed(1, "1")
|
|
1832
|
+
await encoding.succeed(-1, "-1")
|
|
1833
|
+
await encoding.succeed(1.2, "1.2")
|
|
1834
|
+
await encoding.fail(Infinity, "Expected a finite number, got Infinity")
|
|
1835
|
+
await encoding.fail(-Infinity, "Expected a finite number, got -Infinity")
|
|
1836
|
+
await encoding.fail(NaN, "Expected a finite number, got NaN")
|
|
1837
|
+
|
|
1838
|
+
const decoding = asserts.decoding()
|
|
1839
|
+
await decoding.succeed("1", 1)
|
|
1840
|
+
await decoding.succeed("-1", -1)
|
|
1841
|
+
await decoding.succeed("1.2", 1.2)
|
|
1842
|
+
await decoding.fail("Infinity", `Expected a string representing a finite number, got "Infinity"`)
|
|
1843
|
+
await decoding.fail("-Infinity", `Expected a string representing a finite number, got "-Infinity"`)
|
|
1844
|
+
await decoding.fail("NaN", `Expected a string representing a finite number, got "NaN"`)
|
|
1845
|
+
await decoding.fail(Infinity, `Expected string, got Infinity`)
|
|
1846
|
+
await decoding.fail(-Infinity, `Expected string, got -Infinity`)
|
|
1847
|
+
await decoding.fail(NaN, `Expected string, got NaN`)
|
|
1848
|
+
await decoding.fail(null, `Expected string, got null`)
|
|
1849
|
+
await decoding.fail("a", `Expected a string representing a finite number, got "a"`)
|
|
1850
|
+
})
|
|
1851
|
+
|
|
1852
|
+
it("Int", async () => {
|
|
1853
|
+
const schema = Schema.Int
|
|
1854
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1855
|
+
|
|
1856
|
+
const encoding = asserts.encoding()
|
|
1857
|
+
await encoding.succeed(1, "1")
|
|
1858
|
+
await encoding.succeed(-1, "-1")
|
|
1859
|
+
await encoding.fail(1.2, `Expected an integer, got 1.2`)
|
|
1860
|
+
await encoding.fail(Infinity, `Expected an integer, got Infinity`)
|
|
1861
|
+
await encoding.fail(-Infinity, `Expected an integer, got -Infinity`)
|
|
1862
|
+
await encoding.fail(NaN, `Expected an integer, got NaN`)
|
|
1863
|
+
|
|
1864
|
+
const decoding = asserts.decoding()
|
|
1865
|
+
await decoding.succeed("1", 1)
|
|
1866
|
+
await decoding.succeed("-1", -1)
|
|
1867
|
+
await decoding.fail("1.2", `Expected an integer, got 1.2`)
|
|
1868
|
+
await decoding.fail("Infinity", `Expected a string representing a finite number, got "Infinity"`)
|
|
1869
|
+
await decoding.fail("-Infinity", `Expected a string representing a finite number, got "-Infinity"`)
|
|
1870
|
+
await decoding.fail("NaN", `Expected a string representing a finite number, got "NaN"`)
|
|
1871
|
+
await decoding.fail(Infinity, `Expected string, got Infinity`)
|
|
1872
|
+
await decoding.fail(-Infinity, `Expected string, got -Infinity`)
|
|
1873
|
+
await decoding.fail(NaN, `Expected string, got NaN`)
|
|
1874
|
+
await decoding.fail(null, `Expected string, got null`)
|
|
1875
|
+
await decoding.fail("a", `Expected a string representing a finite number, got "a"`)
|
|
1876
|
+
})
|
|
1877
|
+
|
|
1878
|
+
it("isGreaterThanOrEqualTo", async () => {
|
|
1879
|
+
const schema = Schema.Number.check(Schema.isGreaterThanOrEqualTo(1))
|
|
1880
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1881
|
+
|
|
1882
|
+
const encoding = asserts.encoding()
|
|
1883
|
+
await encoding.succeed(1, "1")
|
|
1884
|
+
await encoding.fail(-1, `Expected a value greater than or equal to 1, got -1`)
|
|
1885
|
+
await encoding.succeed(1.2, "1.2")
|
|
1886
|
+
await encoding.succeed(Infinity, "Infinity")
|
|
1887
|
+
await encoding.fail(-Infinity, "Expected a value greater than or equal to 1, got -Infinity")
|
|
1888
|
+
await encoding.fail(NaN, "Expected a value greater than or equal to 1, got NaN")
|
|
1889
|
+
|
|
1890
|
+
const decoding = asserts.decoding()
|
|
1891
|
+
await decoding.succeed("1", 1)
|
|
1892
|
+
await decoding.fail("-1", `Expected a value greater than or equal to 1, got -1`)
|
|
1893
|
+
await decoding.succeed("1.2", 1.2)
|
|
1894
|
+
await decoding.succeed("Infinity", Infinity)
|
|
1895
|
+
await decoding.fail("-Infinity", `Expected a value greater than or equal to 1, got -Infinity`)
|
|
1896
|
+
await decoding.fail("NaN", `Expected a value greater than or equal to 1, got NaN`)
|
|
1897
|
+
await decoding.fail(Infinity, `Expected string | "Infinity" | "-Infinity" | "NaN", got Infinity`)
|
|
1898
|
+
await decoding.fail(-Infinity, `Expected string | "Infinity" | "-Infinity" | "NaN", got -Infinity`)
|
|
1899
|
+
await decoding.fail(NaN, `Expected string | "Infinity" | "-Infinity" | "NaN", got NaN`)
|
|
1900
|
+
await decoding.fail(null, `Expected string | "Infinity" | "-Infinity" | "NaN", got null`)
|
|
1901
|
+
await decoding.fail(
|
|
1902
|
+
"a",
|
|
1903
|
+
`Expected a string representing a finite number, got "a"
|
|
1904
|
+
Expected "Infinity" | "-Infinity" | "NaN", got "a"`
|
|
1905
|
+
)
|
|
1906
|
+
})
|
|
1907
|
+
})
|
|
1908
|
+
})
|
|
1909
|
+
|
|
1910
|
+
it("Boolean", async () => {
|
|
1911
|
+
const schema = Schema.Boolean
|
|
1912
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1913
|
+
|
|
1914
|
+
const encoding = asserts.encoding()
|
|
1915
|
+
await encoding.succeed(true, "true")
|
|
1916
|
+
await encoding.succeed(false, "false")
|
|
1917
|
+
|
|
1918
|
+
const decoding = asserts.decoding()
|
|
1919
|
+
await decoding.succeed("true", true)
|
|
1920
|
+
await decoding.succeed("false", false)
|
|
1921
|
+
})
|
|
1922
|
+
|
|
1923
|
+
it("Symbol", async () => {
|
|
1924
|
+
const schema = Schema.Symbol
|
|
1925
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1926
|
+
|
|
1927
|
+
const encoding = asserts.encoding()
|
|
1928
|
+
await encoding.succeed(Symbol.for("a"), "Symbol(a)")
|
|
1929
|
+
await encoding.fail(
|
|
1930
|
+
Symbol("a"),
|
|
1931
|
+
"cannot serialize to string, Symbol is not registered"
|
|
1932
|
+
)
|
|
1933
|
+
await encoding.fail(
|
|
1934
|
+
Symbol(),
|
|
1935
|
+
"cannot serialize to string, Symbol is not registered"
|
|
1936
|
+
)
|
|
1937
|
+
|
|
1938
|
+
const decoding = asserts.decoding()
|
|
1939
|
+
await decoding.succeed("Symbol(a)", Symbol.for("a"))
|
|
1940
|
+
await decoding.fail("a", `Expected a string representing a symbol, got "a"`)
|
|
1941
|
+
})
|
|
1942
|
+
|
|
1943
|
+
it("UniqueSymbol", async () => {
|
|
1944
|
+
const schema = Schema.UniqueSymbol(Symbol.for("a"))
|
|
1945
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1946
|
+
|
|
1947
|
+
const encoding = asserts.encoding()
|
|
1948
|
+
await encoding.succeed(Symbol.for("a"), "Symbol(a)")
|
|
1949
|
+
|
|
1950
|
+
const decoding = asserts.decoding()
|
|
1951
|
+
await decoding.succeed("Symbol(a)", Symbol.for("a"))
|
|
1952
|
+
await decoding.fail("a", `Expected a string representing a symbol, got "a"`)
|
|
1953
|
+
})
|
|
1954
|
+
|
|
1955
|
+
it("BigInt", async () => {
|
|
1956
|
+
const schema = Schema.BigInt
|
|
1957
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1958
|
+
|
|
1959
|
+
const encoding = asserts.encoding()
|
|
1960
|
+
await encoding.succeed(1n, "1")
|
|
1961
|
+
|
|
1962
|
+
const decoding = asserts.decoding()
|
|
1963
|
+
await decoding.succeed("1", 1n)
|
|
1964
|
+
await decoding.fail("a", `Expected a string representing a bigint, got "a"`)
|
|
1965
|
+
})
|
|
1966
|
+
|
|
1967
|
+
it("PropertyKey", async () => {
|
|
1968
|
+
const schema = Schema.PropertyKey
|
|
1969
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1970
|
+
|
|
1971
|
+
const encoding = asserts.encoding()
|
|
1972
|
+
await encoding.succeed("a", "a")
|
|
1973
|
+
await encoding.succeed(1, "1")
|
|
1974
|
+
await encoding.succeed(Symbol.for("a"), "Symbol(a)")
|
|
1975
|
+
|
|
1976
|
+
const decoding = asserts.decoding()
|
|
1977
|
+
await decoding.succeed("a", "a")
|
|
1978
|
+
await decoding.succeed("1", 1)
|
|
1979
|
+
await decoding.succeed("Symbol(a)", Symbol.for("a"))
|
|
1980
|
+
})
|
|
1981
|
+
|
|
1982
|
+
describe("Literal", () => {
|
|
1983
|
+
it("string", async () => {
|
|
1984
|
+
const schema = Schema.Literal("a")
|
|
1985
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1986
|
+
|
|
1987
|
+
const encoding = asserts.encoding()
|
|
1988
|
+
await encoding.succeed("a", "a")
|
|
1989
|
+
|
|
1990
|
+
const decoding = asserts.decoding()
|
|
1991
|
+
await decoding.succeed("a", "a")
|
|
1992
|
+
})
|
|
1993
|
+
|
|
1994
|
+
it("number", async () => {
|
|
1995
|
+
const schema = Schema.Literal(1)
|
|
1996
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
1997
|
+
|
|
1998
|
+
const encoding = asserts.encoding()
|
|
1999
|
+
await encoding.succeed(1, "1")
|
|
2000
|
+
|
|
2001
|
+
const decoding = asserts.decoding()
|
|
2002
|
+
await decoding.succeed("1", 1)
|
|
2003
|
+
})
|
|
2004
|
+
|
|
2005
|
+
it("boolean", async () => {
|
|
2006
|
+
const schema = Schema.Literal(true)
|
|
2007
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2008
|
+
|
|
2009
|
+
const encoding = asserts.encoding()
|
|
2010
|
+
await encoding.succeed(true, "true")
|
|
2011
|
+
|
|
2012
|
+
const decoding = asserts.decoding()
|
|
2013
|
+
await decoding.succeed("true", true)
|
|
2014
|
+
})
|
|
2015
|
+
|
|
2016
|
+
it("bigint", async () => {
|
|
2017
|
+
const schema = Schema.Literal(1n)
|
|
2018
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2019
|
+
|
|
2020
|
+
const encoding = asserts.encoding()
|
|
2021
|
+
await encoding.succeed(1n, "1")
|
|
2022
|
+
|
|
2023
|
+
const decoding = asserts.decoding()
|
|
2024
|
+
await decoding.succeed("1", 1n)
|
|
2025
|
+
})
|
|
2026
|
+
})
|
|
2027
|
+
|
|
2028
|
+
it("Literals", async () => {
|
|
2029
|
+
const schema = Schema.Literals(["a", 1, 2n, true])
|
|
2030
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2031
|
+
|
|
2032
|
+
const decoding = asserts.decoding()
|
|
2033
|
+
await decoding.fail(
|
|
2034
|
+
"-",
|
|
2035
|
+
`Expected "a" | "1" | "2" | "true", got "-"`
|
|
2036
|
+
)
|
|
2037
|
+
})
|
|
2038
|
+
|
|
2039
|
+
describe("TemplateLiteral", () => {
|
|
2040
|
+
it("1n + string", async () => {
|
|
2041
|
+
const schema = Schema.TemplateLiteral([1n, Schema.String])
|
|
2042
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2043
|
+
|
|
2044
|
+
const encoding = asserts.encoding()
|
|
2045
|
+
await encoding.succeed("1a")
|
|
2046
|
+
|
|
2047
|
+
const decoding = asserts.decoding()
|
|
2048
|
+
await decoding.succeed("1a")
|
|
2049
|
+
})
|
|
2050
|
+
|
|
2051
|
+
it(`"a" + bigint`, async () => {
|
|
2052
|
+
const schema = Schema.TemplateLiteral(["a", Schema.BigInt])
|
|
2053
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2054
|
+
|
|
2055
|
+
const encoding = asserts.encoding()
|
|
2056
|
+
await encoding.succeed("a1")
|
|
2057
|
+
|
|
2058
|
+
const decoding = asserts.decoding()
|
|
2059
|
+
await decoding.succeed("a1")
|
|
2060
|
+
})
|
|
2061
|
+
})
|
|
2062
|
+
|
|
2063
|
+
it("Enum", async () => {
|
|
2064
|
+
enum Fruits {
|
|
2065
|
+
Apple,
|
|
2066
|
+
Banana
|
|
2067
|
+
}
|
|
2068
|
+
const schema = Schema.Enum(Fruits)
|
|
2069
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2070
|
+
|
|
2071
|
+
const encoding = asserts.encoding()
|
|
2072
|
+
await encoding.succeed(Fruits.Apple, "0")
|
|
2073
|
+
await encoding.succeed(Fruits.Banana, "1")
|
|
2074
|
+
|
|
2075
|
+
const decoding = asserts.decoding()
|
|
2076
|
+
await decoding.succeed("0", Fruits.Apple)
|
|
2077
|
+
await decoding.succeed("1", Fruits.Banana)
|
|
2078
|
+
})
|
|
2079
|
+
|
|
2080
|
+
describe("Struct", () => {
|
|
2081
|
+
it("Date", async () => {
|
|
2082
|
+
const schema = Schema.Struct({
|
|
2083
|
+
a: Schema.Date
|
|
2084
|
+
})
|
|
2085
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2086
|
+
|
|
2087
|
+
const encoding = asserts.encoding()
|
|
2088
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
2089
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
2090
|
+
})
|
|
2091
|
+
|
|
2092
|
+
const decoding = asserts.decoding()
|
|
2093
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
2094
|
+
a: new Date("2021-01-01")
|
|
2095
|
+
})
|
|
2096
|
+
})
|
|
2097
|
+
|
|
2098
|
+
it("UndefinedOr(Date)", async () => {
|
|
2099
|
+
const schema = Schema.Struct({
|
|
2100
|
+
a: Schema.UndefinedOr(Schema.Date)
|
|
2101
|
+
})
|
|
2102
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2103
|
+
|
|
2104
|
+
const encoding = asserts.encoding()
|
|
2105
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
2106
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
2107
|
+
})
|
|
2108
|
+
await encoding.succeed({ a: undefined }, { a: undefined })
|
|
2109
|
+
|
|
2110
|
+
const decoding = asserts.decoding()
|
|
2111
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
2112
|
+
a: new Date("2021-01-01")
|
|
2113
|
+
})
|
|
2114
|
+
await decoding.succeed({ a: undefined }, { a: undefined })
|
|
2115
|
+
})
|
|
2116
|
+
|
|
2117
|
+
it("NullOr(Date)", async () => {
|
|
2118
|
+
const schema = Schema.Struct({
|
|
2119
|
+
a: Schema.NullOr(Schema.Date)
|
|
2120
|
+
})
|
|
2121
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2122
|
+
|
|
2123
|
+
const encoding = asserts.encoding()
|
|
2124
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
2125
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
2126
|
+
})
|
|
2127
|
+
await encoding.succeed({ a: null }, { a: "null" })
|
|
2128
|
+
|
|
2129
|
+
const decoding = asserts.decoding()
|
|
2130
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
2131
|
+
a: new Date("2021-01-01")
|
|
2132
|
+
})
|
|
2133
|
+
await decoding.succeed({ a: "null" }, { a: null })
|
|
2134
|
+
})
|
|
2135
|
+
|
|
2136
|
+
it("optionalKey(Date)", async () => {
|
|
2137
|
+
const schema = Schema.Struct({
|
|
2138
|
+
a: Schema.optionalKey(Schema.Date)
|
|
2139
|
+
})
|
|
2140
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2141
|
+
|
|
2142
|
+
const encoding = asserts.encoding()
|
|
2143
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
2144
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
2145
|
+
})
|
|
2146
|
+
await encoding.succeed({}, {})
|
|
2147
|
+
|
|
2148
|
+
const decoding = asserts.decoding()
|
|
2149
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
2150
|
+
a: new Date("2021-01-01")
|
|
2151
|
+
})
|
|
2152
|
+
await decoding.succeed({}, {})
|
|
2153
|
+
})
|
|
2154
|
+
|
|
2155
|
+
it("optional(Date)", async () => {
|
|
2156
|
+
const schema = Schema.Struct({
|
|
2157
|
+
a: Schema.optional(Schema.Date)
|
|
2158
|
+
})
|
|
2159
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2160
|
+
|
|
2161
|
+
const encoding = asserts.encoding()
|
|
2162
|
+
await encoding.succeed({ a: new Date("2021-01-01") }, {
|
|
2163
|
+
a: "2021-01-01T00:00:00.000Z"
|
|
2164
|
+
})
|
|
2165
|
+
await encoding.succeed({}, {})
|
|
2166
|
+
await encoding.succeed({ a: undefined }, { a: undefined })
|
|
2167
|
+
|
|
2168
|
+
const decoding = asserts.decoding()
|
|
2169
|
+
await decoding.succeed({ a: "2021-01-01T00:00:00.000Z" }, {
|
|
2170
|
+
a: new Date("2021-01-01")
|
|
2171
|
+
})
|
|
2172
|
+
await decoding.succeed({}, {})
|
|
2173
|
+
await decoding.succeed({ a: undefined }, { a: undefined })
|
|
2174
|
+
})
|
|
2175
|
+
})
|
|
2176
|
+
|
|
2177
|
+
it("Record(Symbol, Date)", async () => {
|
|
2178
|
+
const schema = Schema.Record(Schema.Symbol, Schema.Date)
|
|
2179
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2180
|
+
|
|
2181
|
+
const encoding = asserts.encoding()
|
|
2182
|
+
await encoding.succeed(
|
|
2183
|
+
{ [Symbol.for("a")]: new Date("2021-01-01"), [Symbol.for("b")]: new Date("2021-01-01") },
|
|
2184
|
+
{ "Symbol(a)": "2021-01-01T00:00:00.000Z", "Symbol(b)": "2021-01-01T00:00:00.000Z" }
|
|
2185
|
+
)
|
|
2186
|
+
|
|
2187
|
+
const decoding = asserts.decoding()
|
|
2188
|
+
await decoding.succeed(
|
|
2189
|
+
{ "Symbol(a)": "2021-01-01T00:00:00.000Z", "Symbol(b)": "2021-01-01T00:00:00.000Z" },
|
|
2190
|
+
{ [Symbol.for("a")]: new Date("2021-01-01"), [Symbol.for("b")]: new Date("2021-01-01") }
|
|
2191
|
+
)
|
|
2192
|
+
})
|
|
2193
|
+
|
|
2194
|
+
describe("Tuple", () => {
|
|
2195
|
+
it("Date", async () => {
|
|
2196
|
+
const schema = Schema.Tuple([Schema.Date])
|
|
2197
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2198
|
+
|
|
2199
|
+
const encoding = asserts.encoding()
|
|
2200
|
+
await encoding.succeed(
|
|
2201
|
+
[new Date("2021-01-01")],
|
|
2202
|
+
["2021-01-01T00:00:00.000Z"]
|
|
2203
|
+
)
|
|
2204
|
+
|
|
2205
|
+
const decoding = asserts.decoding()
|
|
2206
|
+
await decoding.succeed(
|
|
2207
|
+
["2021-01-01T00:00:00.000Z"],
|
|
2208
|
+
[new Date("2021-01-01")]
|
|
2209
|
+
)
|
|
2210
|
+
})
|
|
2211
|
+
|
|
2212
|
+
it("UndefinedOr(Date)", async () => {
|
|
2213
|
+
const schema = Schema.Tuple([Schema.UndefinedOr(Schema.Date)])
|
|
2214
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2215
|
+
|
|
2216
|
+
const encoding = asserts.encoding()
|
|
2217
|
+
await encoding.succeed(
|
|
2218
|
+
[new Date("2021-01-01")],
|
|
2219
|
+
["2021-01-01T00:00:00.000Z"]
|
|
2220
|
+
)
|
|
2221
|
+
await encoding.succeed([undefined])
|
|
2222
|
+
|
|
2223
|
+
const decoding = asserts.decoding()
|
|
2224
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
2225
|
+
new Date("2021-01-01")
|
|
2226
|
+
])
|
|
2227
|
+
await decoding.succeed([undefined])
|
|
2228
|
+
})
|
|
2229
|
+
|
|
2230
|
+
it("NullOr(Date)", async () => {
|
|
2231
|
+
const schema = Schema.Tuple([Schema.NullOr(Schema.Date)])
|
|
2232
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2233
|
+
|
|
2234
|
+
const encoding = asserts.encoding()
|
|
2235
|
+
await encoding.succeed([new Date("2021-01-01")], [
|
|
2236
|
+
"2021-01-01T00:00:00.000Z"
|
|
2237
|
+
])
|
|
2238
|
+
await encoding.succeed([null], ["null"])
|
|
2239
|
+
|
|
2240
|
+
const decoding = asserts.decoding()
|
|
2241
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
2242
|
+
new Date("2021-01-01")
|
|
2243
|
+
])
|
|
2244
|
+
await decoding.succeed(["null"], [null])
|
|
2245
|
+
})
|
|
2246
|
+
|
|
2247
|
+
it("optionalKey(Date)", async () => {
|
|
2248
|
+
const schema = Schema.Tuple([Schema.optionalKey(Schema.Date)])
|
|
2249
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2250
|
+
|
|
2251
|
+
const encoding = asserts.encoding()
|
|
2252
|
+
await encoding.succeed([new Date("2021-01-01")], [
|
|
2253
|
+
"2021-01-01T00:00:00.000Z"
|
|
2254
|
+
])
|
|
2255
|
+
await encoding.succeed([], [])
|
|
2256
|
+
|
|
2257
|
+
const decoding = asserts.decoding()
|
|
2258
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
2259
|
+
new Date("2021-01-01")
|
|
2260
|
+
])
|
|
2261
|
+
await decoding.succeed([], [])
|
|
2262
|
+
})
|
|
2263
|
+
|
|
2264
|
+
it("optional(Date)", async () => {
|
|
2265
|
+
const schema = Schema.Tuple([Schema.optional(Schema.Date)])
|
|
2266
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2267
|
+
|
|
2268
|
+
const encoding = asserts.encoding()
|
|
2269
|
+
await encoding.succeed([new Date("2021-01-01")], [
|
|
2270
|
+
"2021-01-01T00:00:00.000Z"
|
|
2271
|
+
])
|
|
2272
|
+
await encoding.succeed([], [])
|
|
2273
|
+
await encoding.succeed([undefined])
|
|
2274
|
+
|
|
2275
|
+
const decoding = asserts.decoding()
|
|
2276
|
+
await decoding.succeed(["2021-01-01T00:00:00.000Z"], [
|
|
2277
|
+
new Date("2021-01-01")
|
|
2278
|
+
])
|
|
2279
|
+
await decoding.succeed([], [])
|
|
2280
|
+
await decoding.succeed([undefined])
|
|
2281
|
+
})
|
|
2282
|
+
})
|
|
2283
|
+
|
|
2284
|
+
it("Array(Date)", async () => {
|
|
2285
|
+
const schema = Schema.Array(Schema.Date)
|
|
2286
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2287
|
+
|
|
2288
|
+
const encoding = asserts.encoding()
|
|
2289
|
+
await encoding.succeed(
|
|
2290
|
+
[new Date("2021-01-01"), new Date("2021-01-02")],
|
|
2291
|
+
["2021-01-01T00:00:00.000Z", "2021-01-02T00:00:00.000Z"]
|
|
2292
|
+
)
|
|
2293
|
+
})
|
|
2294
|
+
|
|
2295
|
+
describe("Union", () => {
|
|
2296
|
+
it("NullOr(Date)", async () => {
|
|
2297
|
+
const schema = Schema.NullOr(Schema.String)
|
|
2298
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2299
|
+
|
|
2300
|
+
const encoding = asserts.encoding()
|
|
2301
|
+
await encoding.succeed("a", "a")
|
|
2302
|
+
await encoding.succeed(null, "null")
|
|
2303
|
+
|
|
2304
|
+
const decoding = asserts.decoding()
|
|
2305
|
+
await decoding.succeed("null", null)
|
|
2306
|
+
await decoding.succeed("a", "a")
|
|
2307
|
+
})
|
|
2308
|
+
|
|
2309
|
+
it("NullOr(Number)", async () => {
|
|
2310
|
+
const schema = Schema.NullOr(Schema.Number)
|
|
2311
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2312
|
+
|
|
2313
|
+
const encoding = asserts.encoding()
|
|
2314
|
+
await encoding.succeed(1, "1")
|
|
2315
|
+
await encoding.succeed(null, "null")
|
|
2316
|
+
|
|
2317
|
+
const decoding = asserts.decoding()
|
|
2318
|
+
await decoding.succeed("null", null)
|
|
2319
|
+
await decoding.succeed("1", 1)
|
|
2320
|
+
})
|
|
2321
|
+
|
|
2322
|
+
it("Array(NullOr(Number))", async () => {
|
|
2323
|
+
const schema = Schema.Array(Schema.NullOr(Schema.Number))
|
|
2324
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2325
|
+
|
|
2326
|
+
const encoding = asserts.encoding()
|
|
2327
|
+
await encoding.succeed([1, null], ["1", "null"])
|
|
2328
|
+
|
|
2329
|
+
const decoding = asserts.decoding()
|
|
2330
|
+
await decoding.succeed(["1", "null"], [1, null])
|
|
2331
|
+
})
|
|
2332
|
+
|
|
2333
|
+
it("Union(Date, Finite)", async () => {
|
|
2334
|
+
const schema = Schema.Union([Schema.Date, Schema.Finite])
|
|
2335
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2336
|
+
|
|
2337
|
+
const encoding = asserts.encoding()
|
|
2338
|
+
await encoding.succeed(
|
|
2339
|
+
new Date("2021-01-01"),
|
|
2340
|
+
"2021-01-01T00:00:00.000Z"
|
|
2341
|
+
)
|
|
2342
|
+
await encoding.succeed(0, "0")
|
|
2343
|
+
})
|
|
2344
|
+
})
|
|
2345
|
+
|
|
2346
|
+
it("Suspend", async () => {
|
|
2347
|
+
interface Category {
|
|
2348
|
+
readonly a: number
|
|
2349
|
+
readonly categories: ReadonlyArray<Category>
|
|
2350
|
+
}
|
|
2351
|
+
|
|
2352
|
+
const schema = Schema.Struct({
|
|
2353
|
+
a: Schema.Finite.check(Schema.isGreaterThan(0)),
|
|
2354
|
+
categories: Schema.Array(Schema.suspend((): Schema.Codec<Category> => schema))
|
|
2355
|
+
})
|
|
2356
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2357
|
+
|
|
2358
|
+
const encoding = asserts.encoding()
|
|
2359
|
+
await encoding.succeed({ a: 1, categories: [] }, {
|
|
2360
|
+
a: "1",
|
|
2361
|
+
categories: []
|
|
2362
|
+
})
|
|
2363
|
+
await encoding.succeed({
|
|
2364
|
+
a: 1,
|
|
2365
|
+
categories: [{ a: 2, categories: [] }]
|
|
2366
|
+
}, {
|
|
2367
|
+
a: "1",
|
|
2368
|
+
categories: [
|
|
2369
|
+
{ a: "2", categories: [] }
|
|
2370
|
+
]
|
|
2371
|
+
})
|
|
2372
|
+
|
|
2373
|
+
const decoding = asserts.decoding()
|
|
2374
|
+
await decoding.succeed({
|
|
2375
|
+
a: "1",
|
|
2376
|
+
categories: []
|
|
2377
|
+
}, { a: 1, categories: [] })
|
|
2378
|
+
await decoding.succeed({
|
|
2379
|
+
a: "1",
|
|
2380
|
+
categories: [
|
|
2381
|
+
{ a: "2", categories: [] }
|
|
2382
|
+
]
|
|
2383
|
+
}, { a: 1, categories: [{ a: 2, categories: [] }] })
|
|
2384
|
+
})
|
|
2385
|
+
|
|
2386
|
+
it("Class", async () => {
|
|
2387
|
+
class A extends Schema.Class<A>("A")(Schema.Struct({
|
|
2388
|
+
a: Schema.Finite
|
|
2389
|
+
})) {}
|
|
2390
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(Schema.toType(A)))
|
|
2391
|
+
|
|
2392
|
+
const encoding = asserts.encoding()
|
|
2393
|
+
await encoding.succeed(new A({ a: 0 }), { a: "0" })
|
|
2394
|
+
|
|
2395
|
+
const decoding = asserts.decoding()
|
|
2396
|
+
await decoding.succeed({ a: "0" }, new A({ a: 0 }))
|
|
2397
|
+
})
|
|
2398
|
+
|
|
2399
|
+
it("ErrorClass", async () => {
|
|
2400
|
+
class E extends Schema.ErrorClass<E>("E")({
|
|
2401
|
+
a: Schema.Finite
|
|
2402
|
+
}) {}
|
|
2403
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(Schema.toType(E)))
|
|
2404
|
+
|
|
2405
|
+
const encoding = asserts.encoding()
|
|
2406
|
+
await encoding.succeed(new E({ a: 0 }), { a: "0" })
|
|
2407
|
+
|
|
2408
|
+
const decoding = asserts.decoding()
|
|
2409
|
+
await decoding.succeed({ a: "0" }, new E({ a: 0 }))
|
|
2410
|
+
})
|
|
2411
|
+
|
|
2412
|
+
it("Date", async () => {
|
|
2413
|
+
const schema = Schema.Date
|
|
2414
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2415
|
+
|
|
2416
|
+
const encoding = asserts.encoding()
|
|
2417
|
+
await encoding.succeed(
|
|
2418
|
+
new Date("2021-01-01"),
|
|
2419
|
+
"2021-01-01T00:00:00.000Z"
|
|
2420
|
+
)
|
|
2421
|
+
})
|
|
2422
|
+
|
|
2423
|
+
it("Error", async () => {
|
|
2424
|
+
const schema = Schema.Error()
|
|
2425
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2426
|
+
|
|
2427
|
+
const encoding = asserts.encoding()
|
|
2428
|
+
await encoding.succeed(
|
|
2429
|
+
new Error("a"),
|
|
2430
|
+
{ name: "Error", message: "a" }
|
|
2431
|
+
)
|
|
2432
|
+
|
|
2433
|
+
const decoding = asserts.decoding()
|
|
2434
|
+
// Error: message only
|
|
2435
|
+
await decoding.succeed(
|
|
2436
|
+
{ message: "a" },
|
|
2437
|
+
new Error("a")
|
|
2438
|
+
)
|
|
2439
|
+
// Error: message and name
|
|
2440
|
+
await decoding.succeed(
|
|
2441
|
+
{ name: "b", message: "a" },
|
|
2442
|
+
(() => {
|
|
2443
|
+
const err = new Error("a")
|
|
2444
|
+
err.name = "b"
|
|
2445
|
+
return err
|
|
2446
|
+
})()
|
|
2447
|
+
)
|
|
2448
|
+
// Error: message, name, and stack
|
|
2449
|
+
await decoding.succeed(
|
|
2450
|
+
{ name: "b", message: "a", stack: "c" },
|
|
2451
|
+
(() => {
|
|
2452
|
+
const err = new Error("a")
|
|
2453
|
+
err.name = "b"
|
|
2454
|
+
err.stack = "c"
|
|
2455
|
+
return err
|
|
2456
|
+
})()
|
|
2457
|
+
)
|
|
2458
|
+
})
|
|
2459
|
+
|
|
2460
|
+
it("URL", async () => {
|
|
2461
|
+
const schema = Schema.URL
|
|
2462
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2463
|
+
|
|
2464
|
+
const encoding = asserts.encoding()
|
|
2465
|
+
await encoding.succeed(
|
|
2466
|
+
new URL("https://example.com"),
|
|
2467
|
+
"https://example.com/"
|
|
2468
|
+
)
|
|
2469
|
+
|
|
2470
|
+
const decoding = asserts.decoding()
|
|
2471
|
+
await decoding.succeed(
|
|
2472
|
+
"https://example.com",
|
|
2473
|
+
new URL("https://example.com")
|
|
2474
|
+
)
|
|
2475
|
+
await decoding.succeed(
|
|
2476
|
+
"https://example.com/",
|
|
2477
|
+
new URL("https://example.com")
|
|
2478
|
+
)
|
|
2479
|
+
await decoding.fail(
|
|
2480
|
+
"not a url",
|
|
2481
|
+
`Invalid URL string: not a url`
|
|
2482
|
+
)
|
|
2483
|
+
})
|
|
2484
|
+
|
|
2485
|
+
it("RegExp", async () => {
|
|
2486
|
+
const schema = Schema.RegExp
|
|
2487
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2488
|
+
|
|
2489
|
+
const encoding = asserts.encoding()
|
|
2490
|
+
await encoding.succeed(new RegExp("a"), { source: "a", flags: "" })
|
|
2491
|
+
await encoding.succeed(new RegExp("a", "i"), { source: "a", flags: "i" })
|
|
2492
|
+
|
|
2493
|
+
const decoding = asserts.decoding()
|
|
2494
|
+
await decoding.succeed({ source: "a", flags: "" }, new RegExp("a"))
|
|
2495
|
+
await decoding.succeed({ source: "a", flags: "i" }, new RegExp("a", "i"))
|
|
2496
|
+
await decoding.fail(
|
|
2497
|
+
{ source: "a", flags: "x" },
|
|
2498
|
+
`SyntaxError: Invalid flags supplied to RegExp constructor 'x'`
|
|
2499
|
+
)
|
|
2500
|
+
})
|
|
2501
|
+
|
|
2502
|
+
it("Option(Date)", async () => {
|
|
2503
|
+
const schema = Schema.Option(Schema.Date)
|
|
2504
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2505
|
+
|
|
2506
|
+
const encoding = asserts.encoding()
|
|
2507
|
+
await encoding.succeed(Option.some(new Date("2021-01-01")), {
|
|
2508
|
+
_tag: "Some",
|
|
2509
|
+
value: "2021-01-01T00:00:00.000Z"
|
|
2510
|
+
})
|
|
2511
|
+
await encoding.succeed(Option.none(), { _tag: "None" })
|
|
2512
|
+
})
|
|
2513
|
+
|
|
2514
|
+
it("Redacted(Option(String))", async () => {
|
|
2515
|
+
const schema = Schema.Redacted(Schema.Option(Schema.String))
|
|
2516
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2517
|
+
|
|
2518
|
+
const encoding = asserts.encoding()
|
|
2519
|
+
await encoding.succeed(
|
|
2520
|
+
Redacted.make(Option.none()),
|
|
2521
|
+
{ _tag: "None" }
|
|
2522
|
+
)
|
|
2523
|
+
await encoding.succeed(
|
|
2524
|
+
Redacted.make(Option.some("a")),
|
|
2525
|
+
{ _tag: "Some", value: "a" }
|
|
2526
|
+
)
|
|
2527
|
+
|
|
2528
|
+
const decoding = asserts.decoding()
|
|
2529
|
+
await decoding.succeed(
|
|
2530
|
+
{ _tag: "None" },
|
|
2531
|
+
Redacted.make(Option.none())
|
|
2532
|
+
)
|
|
2533
|
+
await decoding.succeed(
|
|
2534
|
+
{ _tag: "Some", value: "a" },
|
|
2535
|
+
Redacted.make(Option.some("a"))
|
|
2536
|
+
)
|
|
2537
|
+
})
|
|
2538
|
+
|
|
2539
|
+
it("Redacted(Option(String)) disallowJsonEncode", async () => {
|
|
2540
|
+
const schema = Schema.Redacted(Schema.Option(Schema.String), {
|
|
2541
|
+
disallowJsonEncode: true
|
|
2542
|
+
})
|
|
2543
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2544
|
+
|
|
2545
|
+
const encoding = asserts.encoding()
|
|
2546
|
+
await encoding.fail(
|
|
2547
|
+
Redacted.make(Option.none()),
|
|
2548
|
+
"Cannot serialize Redacted"
|
|
2549
|
+
)
|
|
2550
|
+
await encoding.fail(
|
|
2551
|
+
Redacted.make(Option.some("a")),
|
|
2552
|
+
"Cannot serialize Redacted"
|
|
2553
|
+
)
|
|
2554
|
+
|
|
2555
|
+
const decoding = asserts.decoding()
|
|
2556
|
+
await decoding.succeed(
|
|
2557
|
+
{ _tag: "None" },
|
|
2558
|
+
Redacted.make(Option.none())
|
|
2559
|
+
)
|
|
2560
|
+
await decoding.succeed(
|
|
2561
|
+
{ _tag: "Some", value: "a" },
|
|
2562
|
+
Redacted.make(Option.some("a"))
|
|
2563
|
+
)
|
|
2564
|
+
})
|
|
2565
|
+
|
|
2566
|
+
it("ReadonlySet", async () => {
|
|
2567
|
+
const schema = Schema.ReadonlySet(Schema.Option(Schema.Date))
|
|
2568
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecJson(schema))
|
|
2569
|
+
|
|
2570
|
+
const encoding = asserts.encoding()
|
|
2571
|
+
await encoding.succeed(new Set([Option.some(new Date("2021-01-01"))]), [{
|
|
2572
|
+
_tag: "Some",
|
|
2573
|
+
value: "2021-01-01T00:00:00.000Z"
|
|
2574
|
+
}])
|
|
2575
|
+
|
|
2576
|
+
const decoding = asserts.decoding()
|
|
2577
|
+
await decoding.succeed(
|
|
2578
|
+
[{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" }],
|
|
2579
|
+
new Set([Option.some(new Date("2021-01-01"))])
|
|
2580
|
+
)
|
|
2581
|
+
})
|
|
2582
|
+
|
|
2583
|
+
it("ReadonlyMap", async () => {
|
|
2584
|
+
const schema = Schema.ReadonlyMap(Schema.Option(Schema.Date), Schema.Finite)
|
|
2585
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2586
|
+
|
|
2587
|
+
const encoding = asserts.encoding()
|
|
2588
|
+
await encoding.succeed(
|
|
2589
|
+
new Map([[Option.some(new Date("2021-01-01")), 0]]),
|
|
2590
|
+
[[
|
|
2591
|
+
{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" },
|
|
2592
|
+
"0"
|
|
2593
|
+
]]
|
|
2594
|
+
)
|
|
2595
|
+
|
|
2596
|
+
const decoding = asserts.decoding()
|
|
2597
|
+
await decoding.succeed(
|
|
2598
|
+
[[{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" }, "0"]],
|
|
2599
|
+
new Map([[Option.some(new Date("2021-01-01")), 0]])
|
|
2600
|
+
)
|
|
2601
|
+
})
|
|
2602
|
+
|
|
2603
|
+
it("HashMap", async () => {
|
|
2604
|
+
const schema = Schema.HashMap(Schema.Option(Schema.Date), Schema.Finite)
|
|
2605
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(schema))
|
|
2606
|
+
|
|
2607
|
+
const encoding = asserts.encoding()
|
|
2608
|
+
await encoding.succeed(
|
|
2609
|
+
HashMap.make([Option.some(new Date("2021-01-01")), 0]),
|
|
2610
|
+
[[
|
|
2611
|
+
{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" },
|
|
2612
|
+
"0"
|
|
2613
|
+
]]
|
|
2614
|
+
)
|
|
2615
|
+
|
|
2616
|
+
const decoding = asserts.decoding()
|
|
2617
|
+
await decoding.succeed(
|
|
2618
|
+
[[{ _tag: "Some", value: "2021-01-01T00:00:00.000Z" }, "0"]],
|
|
2619
|
+
HashMap.make([Option.some(new Date("2021-01-01")), 0])
|
|
2620
|
+
)
|
|
2621
|
+
})
|
|
2622
|
+
})
|
|
2623
|
+
|
|
2624
|
+
it("should handle optional keys", async () => {
|
|
2625
|
+
const schema = Schema.Struct({
|
|
2626
|
+
a: Schema.optionalKey(Schema.NonEmptyArray(Schema.String))
|
|
2627
|
+
})
|
|
2628
|
+
const serializer = Schema.toCodecStringTree(schema)
|
|
2629
|
+
const asserts = new TestSchema.Asserts(Schema.toCodecStringTree(serializer))
|
|
2630
|
+
|
|
2631
|
+
const decoding = asserts.decoding()
|
|
2632
|
+
await decoding.succeed({})
|
|
2633
|
+
await decoding.succeed({ a: ["a"] })
|
|
2634
|
+
await decoding.succeed({ a: "a" }, { a: ["a"] })
|
|
2635
|
+
})
|
|
2636
|
+
})
|
|
2637
|
+
|
|
2638
|
+
describe("toEncoderXml", () => {
|
|
2639
|
+
async function assertXml<T, E, RD>(schema: Schema.Codec<T, E, RD>, value: T, expected: string) {
|
|
2640
|
+
const serializer = Schema.toEncoderXml(Schema.toCodecStringTree(schema))
|
|
2641
|
+
strictEqual(await Effect.runPromise(serializer(value)), expected)
|
|
2642
|
+
}
|
|
2643
|
+
|
|
2644
|
+
async function assertXmlFailure<T, E, RD>(schema: Schema.Codec<T, E, RD>, value: T, message: string) {
|
|
2645
|
+
const serializer = Schema.toEncoderXml(Schema.toCodecStringTree(schema))
|
|
2646
|
+
const r = await serializer(value).pipe(
|
|
2647
|
+
Effect.mapError((err) => err.issue.toString()),
|
|
2648
|
+
Effect.result,
|
|
2649
|
+
Effect.runPromise
|
|
2650
|
+
)
|
|
2651
|
+
deepStrictEqual(r, Result.fail(message))
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2654
|
+
describe("Schemas without annotations", () => {
|
|
2655
|
+
it("Declaration", async () => {
|
|
2656
|
+
await assertXml(Schema.instanceOf(URL), new URL("https://effect.website"), "<root/>")
|
|
2657
|
+
})
|
|
2658
|
+
|
|
2659
|
+
it("Unknown", async () => {
|
|
2660
|
+
await assertXml(Schema.Unknown, "value", "<root/>")
|
|
2661
|
+
})
|
|
2662
|
+
|
|
2663
|
+
it("ObjectKeyword", async () => {
|
|
2664
|
+
await assertXml(Schema.ObjectKeyword, { a: "value" }, "<root/>")
|
|
2665
|
+
})
|
|
2666
|
+
})
|
|
2667
|
+
|
|
2668
|
+
it("should use the identifier as the root name", async () => {
|
|
2669
|
+
await assertXml(Schema.String.annotate({ identifier: "a" }), "value", "<a>value</a>")
|
|
2670
|
+
await assertXml(Schema.String.annotate({ identifier: "a b" }), "value", `<a_b data-name="a b">value</a_b>`)
|
|
2671
|
+
await assertXml(Schema.String.annotate({ identifier: "a", title: "b" }), "value", "<a>value</a>")
|
|
2672
|
+
})
|
|
2673
|
+
|
|
2674
|
+
it("should use the title as the root name", async () => {
|
|
2675
|
+
await assertXml(Schema.String.annotate({ title: "a" }), "value", "<a>value</a>")
|
|
2676
|
+
await assertXml(Schema.String.annotate({ title: "a b" }), "value", `<a_b data-name="a b">value</a_b>`)
|
|
2677
|
+
})
|
|
2678
|
+
|
|
2679
|
+
it("should escape the text", async () => {
|
|
2680
|
+
await assertXml(Schema.String, "value&", `<root>value&</root>`)
|
|
2681
|
+
await assertXml(Schema.String, "<value/>", `<root><value/></root>`)
|
|
2682
|
+
})
|
|
2683
|
+
|
|
2684
|
+
it("should escape the attributes", async () => {
|
|
2685
|
+
await assertXml(Schema.String.annotate({ title: "value&" }), "", `<value_ data-name="value&"></value_>`)
|
|
2686
|
+
await assertXml(
|
|
2687
|
+
Schema.String.annotate({ title: "<value/>" }),
|
|
2688
|
+
"",
|
|
2689
|
+
`<__value__ data-name="<value/>"></__value__>`
|
|
2690
|
+
)
|
|
2691
|
+
})
|
|
2692
|
+
|
|
2693
|
+
it("Never", async () => {
|
|
2694
|
+
await assertXmlFailure(Schema.Never, "test", `Expected never, got "test"`)
|
|
2695
|
+
})
|
|
2696
|
+
|
|
2697
|
+
it("Any", async () => {
|
|
2698
|
+
await assertXml(Schema.Any, "test", "<root>test</root>")
|
|
2699
|
+
await assertXml(Schema.Any, 42, "<root>42</root>")
|
|
2700
|
+
await assertXml(
|
|
2701
|
+
Schema.Any,
|
|
2702
|
+
{ a: 1 },
|
|
2703
|
+
`<root>
|
|
2704
|
+
<a>1</a>
|
|
2705
|
+
</root>`
|
|
2706
|
+
)
|
|
2707
|
+
})
|
|
2708
|
+
|
|
2709
|
+
it("Void", async () => {
|
|
2710
|
+
await assertXml(Schema.Void, undefined, "<root/>")
|
|
2711
|
+
})
|
|
2712
|
+
|
|
2713
|
+
it("Undefined", async () => {
|
|
2714
|
+
await assertXml(Schema.Undefined, undefined, "<root/>")
|
|
2715
|
+
})
|
|
2716
|
+
|
|
2717
|
+
it("Null", async () => {
|
|
2718
|
+
await assertXml(Schema.Null, null, "<root>null</root>")
|
|
2719
|
+
})
|
|
2720
|
+
|
|
2721
|
+
it("Number", async () => {
|
|
2722
|
+
await assertXml(Schema.Number, 1, "<root>1</root>")
|
|
2723
|
+
await assertXml(Schema.Number, 0, "<root>0</root>")
|
|
2724
|
+
await assertXml(Schema.Number, -1.5, "<root>-1.5</root>")
|
|
2725
|
+
await assertXml(Schema.Number, Infinity, "<root>Infinity</root>")
|
|
2726
|
+
await assertXml(Schema.Number, -Infinity, "<root>-Infinity</root>")
|
|
2727
|
+
await assertXml(Schema.Number, NaN, "<root>NaN</root>")
|
|
2728
|
+
})
|
|
2729
|
+
|
|
2730
|
+
it("Boolean", async () => {
|
|
2731
|
+
await assertXml(Schema.Boolean, true, "<root>true</root>")
|
|
2732
|
+
await assertXml(Schema.Boolean, false, "<root>false</root>")
|
|
2733
|
+
})
|
|
2734
|
+
|
|
2735
|
+
it("BigInt", async () => {
|
|
2736
|
+
await assertXml(Schema.BigInt, BigInt(42), "<root>42</root>")
|
|
2737
|
+
await assertXml(Schema.BigInt, BigInt(0), "<root>0</root>")
|
|
2738
|
+
await assertXml(Schema.BigInt, BigInt(-123), "<root>-123</root>")
|
|
2739
|
+
})
|
|
2740
|
+
|
|
2741
|
+
it("Symbol", async () => {
|
|
2742
|
+
const sym = Symbol.for("test")
|
|
2743
|
+
await assertXml(Schema.Symbol, sym, "<root>Symbol(test)</root>")
|
|
2744
|
+
})
|
|
2745
|
+
|
|
2746
|
+
it("TemplateLiteral", async () => {
|
|
2747
|
+
const schema = Schema.TemplateLiteral([Schema.Literal("Hello "), Schema.String, Schema.Literal("!")])
|
|
2748
|
+
await assertXml(schema, "Hello World!", "<root>Hello World!</root>")
|
|
2749
|
+
})
|
|
2750
|
+
|
|
2751
|
+
it("Struct", async () => {
|
|
2752
|
+
await assertXml(
|
|
2753
|
+
Schema.Struct({
|
|
2754
|
+
a: Schema.Number,
|
|
2755
|
+
"a b": Schema.Number
|
|
2756
|
+
}),
|
|
2757
|
+
{ a: 1, "a b": 2 },
|
|
2758
|
+
`<root>
|
|
2759
|
+
<a>1</a>
|
|
2760
|
+
<a_b data-name="a b">2</a_b>
|
|
2761
|
+
</root>`
|
|
2762
|
+
)
|
|
2763
|
+
})
|
|
2764
|
+
|
|
2765
|
+
it("Array", async () => {
|
|
2766
|
+
await assertXml(Schema.Array(Schema.Number), [], "<root/>")
|
|
2767
|
+
await assertXml(
|
|
2768
|
+
Schema.Array(Schema.Number),
|
|
2769
|
+
[1, 2, 3],
|
|
2770
|
+
`<root>
|
|
2771
|
+
<item>1</item>
|
|
2772
|
+
<item>2</item>
|
|
2773
|
+
<item>3</item>
|
|
2774
|
+
</root>`
|
|
2775
|
+
)
|
|
2776
|
+
})
|
|
2777
|
+
|
|
2778
|
+
it("Array with custom item name", async () => {
|
|
2779
|
+
const serializer = Schema.toEncoderXml(Schema.toCodecStringTree(Schema.Array(Schema.Number)), {
|
|
2780
|
+
arrayItemName: "number"
|
|
2781
|
+
})
|
|
2782
|
+
strictEqual(
|
|
2783
|
+
await Effect.runPromise(serializer([1, 2, 3])),
|
|
2784
|
+
`<root>
|
|
2785
|
+
<number>1</number>
|
|
2786
|
+
<number>2</number>
|
|
2787
|
+
<number>3</number>
|
|
2788
|
+
</root>`
|
|
2789
|
+
)
|
|
2790
|
+
})
|
|
2791
|
+
|
|
2792
|
+
it("Union", async () => {
|
|
2793
|
+
await assertXml(Schema.Union([Schema.String, Schema.Number]), "test", "<root>test</root>")
|
|
2794
|
+
await assertXml(Schema.Union([Schema.String, Schema.Number]), 42, "<root>42</root>")
|
|
2795
|
+
})
|
|
2796
|
+
|
|
2797
|
+
it("Tuple", async () => {
|
|
2798
|
+
await assertXml(Schema.Tuple([]), [], "<root/>")
|
|
2799
|
+
await assertXml(
|
|
2800
|
+
Schema.Tuple([Schema.String, Schema.Number, Schema.Boolean]),
|
|
2801
|
+
["a", 1, true],
|
|
2802
|
+
`<root>
|
|
2803
|
+
<item>a</item>
|
|
2804
|
+
<item>1</item>
|
|
2805
|
+
<item>true</item>
|
|
2806
|
+
</root>`
|
|
2807
|
+
)
|
|
2808
|
+
})
|
|
2809
|
+
|
|
2810
|
+
it("Record", async () => {
|
|
2811
|
+
await assertXml(Schema.Record(Schema.String, Schema.Number), {}, "<root/>")
|
|
2812
|
+
await assertXml(
|
|
2813
|
+
Schema.Record(Schema.String, Schema.Number),
|
|
2814
|
+
{ a: 1, b: 2 },
|
|
2815
|
+
`<root>
|
|
2816
|
+
<a>1</a>
|
|
2817
|
+
<b>2</b>
|
|
2818
|
+
</root>`
|
|
2819
|
+
)
|
|
2820
|
+
})
|
|
2821
|
+
|
|
2822
|
+
it("NullOr", async () => {
|
|
2823
|
+
await assertXml(Schema.NullOr(Schema.String), "test", "<root>test</root>")
|
|
2824
|
+
await assertXml(Schema.NullOr(Schema.String), null, "<root>null</root>")
|
|
2825
|
+
})
|
|
2826
|
+
|
|
2827
|
+
it("TaggedUnion", async () => {
|
|
2828
|
+
const schema = Schema.TaggedUnion({
|
|
2829
|
+
A: { value: Schema.String },
|
|
2830
|
+
B: { value: Schema.Number }
|
|
2831
|
+
})
|
|
2832
|
+
await assertXml(
|
|
2833
|
+
schema,
|
|
2834
|
+
{ _tag: "A", value: "test" },
|
|
2835
|
+
`<root>
|
|
2836
|
+
<_tag>A</_tag>
|
|
2837
|
+
<value>test</value>
|
|
2838
|
+
</root>`
|
|
2839
|
+
)
|
|
2840
|
+
await assertXml(
|
|
2841
|
+
schema,
|
|
2842
|
+
{ _tag: "B", value: 42 },
|
|
2843
|
+
`<root>
|
|
2844
|
+
<_tag>B</_tag>
|
|
2845
|
+
<value>42</value>
|
|
2846
|
+
</root>`
|
|
2847
|
+
)
|
|
2848
|
+
})
|
|
2849
|
+
|
|
2850
|
+
it("TaggedStruct", async () => {
|
|
2851
|
+
const schema = Schema.TaggedStruct("User", {
|
|
2852
|
+
name: Schema.String,
|
|
2853
|
+
age: Schema.Number
|
|
2854
|
+
})
|
|
2855
|
+
await assertXml(
|
|
2856
|
+
schema,
|
|
2857
|
+
{ _tag: "User", name: "John", age: 30 },
|
|
2858
|
+
`<root>
|
|
2859
|
+
<_tag>User</_tag>
|
|
2860
|
+
<age>30</age>
|
|
2861
|
+
<name>John</name>
|
|
2862
|
+
</root>`
|
|
2863
|
+
)
|
|
2864
|
+
})
|
|
2865
|
+
|
|
2866
|
+
it("Enum", async () => {
|
|
2867
|
+
const schema = Schema.Enum({
|
|
2868
|
+
A: "a",
|
|
2869
|
+
B: "b"
|
|
2870
|
+
})
|
|
2871
|
+
await assertXml(schema, "a", "<root>a</root>")
|
|
2872
|
+
await assertXml(schema, "b", "<root>b</root>")
|
|
2873
|
+
})
|
|
2874
|
+
|
|
2875
|
+
it("Literals", async () => {
|
|
2876
|
+
const schema = Schema.Literals(["a", 1, true, 1n])
|
|
2877
|
+
await assertXml(schema, "a", "<root>a</root>")
|
|
2878
|
+
await assertXml(schema, 1, "<root>1</root>")
|
|
2879
|
+
await assertXml(schema, true, "<root>true</root>")
|
|
2880
|
+
await assertXml(schema, 1n, "<root>1</root>")
|
|
2881
|
+
})
|
|
2882
|
+
|
|
2883
|
+
it("Nested Structures", async () => {
|
|
2884
|
+
const schema = Schema.Struct({
|
|
2885
|
+
user: Schema.Struct({
|
|
2886
|
+
name: Schema.String,
|
|
2887
|
+
age: Schema.Number
|
|
2888
|
+
}),
|
|
2889
|
+
tags: Schema.Array(Schema.String)
|
|
2890
|
+
})
|
|
2891
|
+
await assertXml(
|
|
2892
|
+
schema,
|
|
2893
|
+
{ user: { name: "John", age: 30 }, tags: ["admin", "user"] },
|
|
2894
|
+
`<root>
|
|
2895
|
+
<tags>
|
|
2896
|
+
<item>admin</item>
|
|
2897
|
+
<item>user</item>
|
|
2898
|
+
</tags>
|
|
2899
|
+
<user>
|
|
2900
|
+
<age>30</age>
|
|
2901
|
+
<name>John</name>
|
|
2902
|
+
</user>
|
|
2903
|
+
</root>`
|
|
2904
|
+
)
|
|
2905
|
+
})
|
|
2906
|
+
|
|
2907
|
+
it("Special Characters in Text", async () => {
|
|
2908
|
+
await assertXml(Schema.String, "&<>\"'", `<root>&<>"'</root>`)
|
|
2909
|
+
await assertXml(
|
|
2910
|
+
Schema.String,
|
|
2911
|
+
"line1\nline2",
|
|
2912
|
+
`<root>line1
|
|
2913
|
+
line2</root>`
|
|
2914
|
+
)
|
|
2915
|
+
await assertXml(Schema.String, "tab\there", "<root>tab here</root>")
|
|
2916
|
+
})
|
|
2917
|
+
|
|
2918
|
+
it("Special Characters in Attributes", async () => {
|
|
2919
|
+
await assertXml(
|
|
2920
|
+
Schema.String.annotate({ title: "test&value" }),
|
|
2921
|
+
"content",
|
|
2922
|
+
`<test_value data-name="test&value">content</test_value>`
|
|
2923
|
+
)
|
|
2924
|
+
await assertXml(
|
|
2925
|
+
Schema.String.annotate({ title: "test<value>" }),
|
|
2926
|
+
"content",
|
|
2927
|
+
`<test_value_ data-name="test<value>">content</test_value_>`
|
|
2928
|
+
)
|
|
2929
|
+
await assertXml(
|
|
2930
|
+
Schema.String.annotate({ title: "test\"value" }),
|
|
2931
|
+
"content",
|
|
2932
|
+
`<test_value data-name="test"value">content</test_value>`
|
|
2933
|
+
)
|
|
2934
|
+
})
|
|
2935
|
+
|
|
2936
|
+
it("XML Reserved Names", async () => {
|
|
2937
|
+
await assertXml(
|
|
2938
|
+
Schema.String.annotate({ title: "xml" }),
|
|
2939
|
+
"content",
|
|
2940
|
+
`<_xml data-name="xml">content</_xml>`
|
|
2941
|
+
)
|
|
2942
|
+
await assertXml(
|
|
2943
|
+
Schema.String.annotate({ title: "XML" }),
|
|
2944
|
+
"content",
|
|
2945
|
+
`<_XML data-name="XML">content</_XML>`
|
|
2946
|
+
)
|
|
2947
|
+
await assertXml(
|
|
2948
|
+
Schema.String.annotate({ title: "xmlns" }),
|
|
2949
|
+
"content",
|
|
2950
|
+
`<_xmlns data-name="xmlns">content</_xmlns>`
|
|
2951
|
+
)
|
|
2952
|
+
})
|
|
2953
|
+
|
|
2954
|
+
it("Invalid XML Tag Names", async () => {
|
|
2955
|
+
await assertXml(
|
|
2956
|
+
Schema.String.annotate({ title: "123invalid" }),
|
|
2957
|
+
"content",
|
|
2958
|
+
`<_123invalid data-name="123invalid">content</_123invalid>`
|
|
2959
|
+
)
|
|
2960
|
+
await assertXml(
|
|
2961
|
+
Schema.String.annotate({ title: "invalid name" }),
|
|
2962
|
+
"content",
|
|
2963
|
+
`<invalid_name data-name="invalid name">content</invalid_name>`
|
|
2964
|
+
)
|
|
2965
|
+
})
|
|
2966
|
+
|
|
2967
|
+
it("Empty String", async () => {
|
|
2968
|
+
await assertXml(Schema.String, "", "<root></root>")
|
|
2969
|
+
})
|
|
2970
|
+
|
|
2971
|
+
it("Whitespace Only String", async () => {
|
|
2972
|
+
await assertXml(Schema.String, " ", "<root> </root>")
|
|
2973
|
+
await assertXml(Schema.String, "\n\t", "<root>\n\t</root>")
|
|
2974
|
+
})
|
|
2975
|
+
|
|
2976
|
+
it("Unicode Characters", async () => {
|
|
2977
|
+
await assertXml(Schema.String, "Hello 世界", "<root>Hello 世界</root>")
|
|
2978
|
+
await assertXml(Schema.String, "🚀🌟✨", "<root>🚀🌟✨</root>")
|
|
2979
|
+
await assertXml(Schema.String, "αβγδε", "<root>αβγδε</root>")
|
|
2980
|
+
})
|
|
2981
|
+
|
|
2982
|
+
it("XML Encoder Options - rootName", async () => {
|
|
2983
|
+
const serializer = Schema.toEncoderXml(Schema.toCodecStringTree(Schema.String), {
|
|
2984
|
+
rootName: "custom"
|
|
2985
|
+
})
|
|
2986
|
+
strictEqual(await Effect.runPromise(serializer("test")), "<custom>test</custom>")
|
|
2987
|
+
})
|
|
2988
|
+
|
|
2989
|
+
it("XML Encoder Options - pretty: false", async () => {
|
|
2990
|
+
const serializer = Schema.toEncoderXml(
|
|
2991
|
+
Schema.toCodecStringTree(Schema.Struct({
|
|
2992
|
+
a: Schema.Number,
|
|
2993
|
+
b: Schema.String
|
|
2994
|
+
})),
|
|
2995
|
+
{
|
|
2996
|
+
pretty: false
|
|
2997
|
+
}
|
|
2998
|
+
)
|
|
2999
|
+
strictEqual(await Effect.runPromise(serializer({ a: 1, b: "test" })), "<root><a>1</a><b>test</b></root>")
|
|
3000
|
+
})
|
|
3001
|
+
|
|
3002
|
+
it("XML Encoder Options - custom indent", async () => {
|
|
3003
|
+
const serializer = Schema.toEncoderXml(
|
|
3004
|
+
Schema.toCodecStringTree(Schema.Struct({
|
|
3005
|
+
a: Schema.Number
|
|
3006
|
+
})),
|
|
3007
|
+
{
|
|
3008
|
+
indent: " "
|
|
3009
|
+
}
|
|
3010
|
+
)
|
|
3011
|
+
strictEqual(
|
|
3012
|
+
await Effect.runPromise(serializer({ a: 1 })),
|
|
3013
|
+
`<root>
|
|
3014
|
+
<a>1</a>
|
|
3015
|
+
</root>`
|
|
3016
|
+
)
|
|
3017
|
+
})
|
|
3018
|
+
|
|
3019
|
+
it("XML Encoder Options - sortKeys: false", async () => {
|
|
3020
|
+
const serializer = Schema.toEncoderXml(
|
|
3021
|
+
Schema.toCodecStringTree(Schema.Struct({
|
|
3022
|
+
z: Schema.Number,
|
|
3023
|
+
a: Schema.Number,
|
|
3024
|
+
m: Schema.Number
|
|
3025
|
+
})),
|
|
3026
|
+
{
|
|
3027
|
+
sortKeys: false
|
|
3028
|
+
}
|
|
3029
|
+
)
|
|
3030
|
+
strictEqual(
|
|
3031
|
+
await Effect.runPromise(serializer({ z: 3, a: 1, m: 2 })),
|
|
3032
|
+
`<root>
|
|
3033
|
+
<z>3</z>
|
|
3034
|
+
<a>1</a>
|
|
3035
|
+
<m>2</m>
|
|
3036
|
+
</root>`
|
|
3037
|
+
)
|
|
3038
|
+
})
|
|
3039
|
+
|
|
3040
|
+
it("Circular Reference Detection", async () => {
|
|
3041
|
+
const obj: any = { name: "test" }
|
|
3042
|
+
obj.self = obj
|
|
3043
|
+
|
|
3044
|
+
const serializer = Schema.toEncoderXml(Schema.toCodecStringTree(Schema.Any))
|
|
3045
|
+
try {
|
|
3046
|
+
await Effect.runPromise(serializer(obj))
|
|
3047
|
+
throw new Error("Expected error")
|
|
3048
|
+
} catch (error: any) {
|
|
3049
|
+
strictEqual(error.message, "Cycle detected while serializing to XML.")
|
|
3050
|
+
}
|
|
3051
|
+
})
|
|
3052
|
+
|
|
3053
|
+
it("Nested Arrays", async () => {
|
|
3054
|
+
const schema = Schema.Array(Schema.Array(Schema.Number))
|
|
3055
|
+
await assertXml(
|
|
3056
|
+
schema,
|
|
3057
|
+
[[1, 2], [3, 4]],
|
|
3058
|
+
`<root>
|
|
3059
|
+
<item>
|
|
3060
|
+
<item>1</item>
|
|
3061
|
+
<item>2</item>
|
|
3062
|
+
</item>
|
|
3063
|
+
<item>
|
|
3064
|
+
<item>3</item>
|
|
3065
|
+
<item>4</item>
|
|
3066
|
+
</item>
|
|
3067
|
+
</root>`
|
|
3068
|
+
)
|
|
3069
|
+
})
|
|
3070
|
+
|
|
3071
|
+
it("Record with Number Keys", async () => {
|
|
3072
|
+
const schema = Schema.Record(Schema.Number, Schema.String)
|
|
3073
|
+
await assertXml(
|
|
3074
|
+
schema,
|
|
3075
|
+
{ 1: "one", 2: "two" },
|
|
3076
|
+
`<root>
|
|
3077
|
+
<_1 data-name="1">one</_1>
|
|
3078
|
+
<_2 data-name="2">two</_2>
|
|
3079
|
+
</root>`
|
|
3080
|
+
)
|
|
3081
|
+
})
|
|
3082
|
+
|
|
3083
|
+
it("Record with Symbol Keys", async () => {
|
|
3084
|
+
const sym1 = Symbol.for("key1")
|
|
3085
|
+
const sym2 = Symbol.for("key2")
|
|
3086
|
+
const schema = Schema.Record(Schema.Symbol, Schema.String)
|
|
3087
|
+
await assertXml(
|
|
3088
|
+
schema,
|
|
3089
|
+
{ [sym1]: "value1", [sym2]: "value2" },
|
|
3090
|
+
`<root>
|
|
3091
|
+
<Symbol_key1_ data-name="Symbol(key1)">value1</Symbol_key1_>
|
|
3092
|
+
<Symbol_key2_ data-name="Symbol(key2)">value2</Symbol_key2_>
|
|
3093
|
+
</root>`
|
|
3094
|
+
)
|
|
3095
|
+
})
|
|
3096
|
+
|
|
3097
|
+
it("Tuple with Rest", async () => {
|
|
3098
|
+
const schema = Schema.TupleWithRest(Schema.Tuple([Schema.String, Schema.Number]), [Schema.Boolean])
|
|
3099
|
+
await assertXml(
|
|
3100
|
+
schema,
|
|
3101
|
+
["test", 42, true, false],
|
|
3102
|
+
`<root>
|
|
3103
|
+
<item>test</item>
|
|
3104
|
+
<item>42</item>
|
|
3105
|
+
<item>true</item>
|
|
3106
|
+
<item>false</item>
|
|
3107
|
+
</root>`
|
|
3108
|
+
)
|
|
3109
|
+
})
|
|
3110
|
+
|
|
3111
|
+
it("Suspend (Recursive Types)", async () => {
|
|
3112
|
+
interface Tree {
|
|
3113
|
+
readonly value: number
|
|
3114
|
+
readonly children: ReadonlyArray<Tree>
|
|
3115
|
+
}
|
|
3116
|
+
|
|
3117
|
+
const Tree: Schema.Codec<Tree> = Schema.Struct({
|
|
3118
|
+
value: Schema.Number,
|
|
3119
|
+
children: Schema.Array(Schema.suspend(() => Tree))
|
|
3120
|
+
})
|
|
3121
|
+
|
|
3122
|
+
const tree: Tree = {
|
|
3123
|
+
value: 1,
|
|
3124
|
+
children: [
|
|
3125
|
+
{ value: 2, children: [] },
|
|
3126
|
+
{ value: 3, children: [] }
|
|
3127
|
+
]
|
|
3128
|
+
}
|
|
3129
|
+
|
|
3130
|
+
await assertXml(
|
|
3131
|
+
Tree,
|
|
3132
|
+
tree,
|
|
3133
|
+
`<root>
|
|
3134
|
+
<children>
|
|
3135
|
+
<item>
|
|
3136
|
+
<children/>
|
|
3137
|
+
<value>2</value>
|
|
3138
|
+
</item>
|
|
3139
|
+
<item>
|
|
3140
|
+
<children/>
|
|
3141
|
+
<value>3</value>
|
|
3142
|
+
</item>
|
|
3143
|
+
</children>
|
|
3144
|
+
<value>1</value>
|
|
3145
|
+
</root>`
|
|
3146
|
+
)
|
|
3147
|
+
})
|
|
3148
|
+
})
|
|
3149
|
+
})
|