@modulify/validator 0.1.0 → 0.2.0
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/.yarn/cache/@aashutoshrathi-word-wrap-npm-1.2.6-5b1d95e487-53c2b231a6.zip +0 -0
- package/.yarn/cache/@babel-code-frame-npm-7.23.5-cb10d08de6-a10e843595.zip +0 -0
- package/.yarn/cache/@babel-helper-string-parser-npm-7.25.7-352069de58-73ef2ceb81.zip +0 -0
- package/.yarn/cache/@babel-helper-string-parser-npm-7.27.1-d1471e0598-8bda3448e0.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.22.20-18305bb306-dcad63db34.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.25.7-1c758f0472-07438e5bf0.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.28.5-1953d49d2b-42aaebed91.zip +0 -0
- package/.yarn/cache/@babel-highlight-npm-7.23.4-2a9f2d2538-fbff9fcb2f.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.25.8-fda12195b5-a1a13845b7.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.29.0-c605c63e8b-333b2aa761.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.25.8-44acfff5f6-55ca2d6df6.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.29.0-6c2fa77581-23cc3466e8.zip +0 -0
- package/.yarn/cache/@bcoe-v8-coverage-npm-1.0.2-e80fdc21ac-1eb1dc93cc.zip +0 -0
- package/.yarn/cache/@commitlint-cli-npm-20.4.3-7b788c74b9-1f54b6870a.zip +0 -0
- package/.yarn/cache/@commitlint-config-conventional-npm-20.4.3-aa90460b69-c7c6fb0b32.zip +0 -0
- package/.yarn/cache/@commitlint-config-validator-npm-20.4.3-456f7d3da8-e65f2bd3cc.zip +0 -0
- package/.yarn/cache/@commitlint-ensure-npm-20.4.3-432e5ad329-aa1f42317a.zip +0 -0
- package/.yarn/cache/@commitlint-execute-rule-npm-20.0.0-6eb8155492-a1035ae9d6.zip +0 -0
- package/.yarn/cache/@commitlint-format-npm-20.4.3-ebe3e8cb04-e221f61a07.zip +0 -0
- package/.yarn/cache/@commitlint-is-ignored-npm-20.4.3-69e200640d-bc118de0aa.zip +0 -0
- package/.yarn/cache/@commitlint-lint-npm-20.4.3-c9940afaeb-e6af7cbbf9.zip +0 -0
- package/.yarn/cache/@commitlint-load-npm-20.4.3-81ae2db04a-80fb52e259.zip +0 -0
- package/.yarn/cache/@commitlint-message-npm-20.4.3-e9b5d77cad-16f7a67d17.zip +0 -0
- package/.yarn/cache/@commitlint-parse-npm-20.4.3-ecc5779976-404fecad36.zip +0 -0
- package/.yarn/cache/@commitlint-read-npm-20.4.3-32de5c8d85-3e7f88ad9b.zip +0 -0
- package/.yarn/cache/@commitlint-resolve-extends-npm-20.4.3-71b99c2779-09220329ba.zip +0 -0
- package/.yarn/cache/@commitlint-rules-npm-20.4.3-390ce9eadc-03348731a9.zip +0 -0
- package/.yarn/cache/@commitlint-to-lines-npm-20.0.0-888ee2239e-49bc05eb06.zip +0 -0
- package/.yarn/cache/@commitlint-top-level-npm-20.4.3-b0ef9fb207-52a1f59677.zip +0 -0
- package/.yarn/cache/@commitlint-types-npm-20.4.3-3d079b12ab-2181f9696f.zip +0 -0
- package/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-05c5368c13.zip +0 -0
- package/.yarn/cache/@esbuild-linux-x64-npm-0.27.3-2041dd7b27-10c0.zip +0 -0
- package/.yarn/cache/@eslint-community-eslint-utils-npm-4.9.1-30ad3d49de-dc4ab5e3e3.zip +0 -0
- package/.yarn/cache/@eslint-community-regexpp-npm-4.12.2-3d54624470-fddcbc6685.zip +0 -0
- package/.yarn/cache/@eslint-config-array-npm-0.23.3-19b1c24f51-7c19027acf.zip +0 -0
- package/.yarn/cache/@eslint-config-helpers-npm-0.5.3-b60fa10f11-c836476e83.zip +0 -0
- package/.yarn/cache/@eslint-core-npm-1.1.1-bca32bf928-129c654c78.zip +0 -0
- package/.yarn/cache/@eslint-js-npm-10.0.1-c30b85ca06-9f3fcaf71b.zip +0 -0
- package/.yarn/cache/@eslint-object-schema-npm-3.0.3-4c45388d6c-4abbb7cba5.zip +0 -0
- package/.yarn/cache/@eslint-plugin-kit-npm-0.6.1-fafe413a70-f8354a7b92.zip +0 -0
- package/.yarn/cache/@gar-promise-retry-npm-1.0.2-960b209ddf-748a84fb0a.zip +0 -0
- package/.yarn/cache/@humanfs-core-npm-0.19.1-e2e7aaeb6e-aa4e015217.zip +0 -0
- package/.yarn/cache/@humanfs-node-npm-0.16.6-6ee2cad587-8356359c9f.zip +0 -0
- package/.yarn/cache/@humanwhocodes-module-importer-npm-1.0.1-9d07ed2e4a-909b69c3b8.zip +0 -0
- package/.yarn/cache/@humanwhocodes-retry-npm-0.3.1-9d87bf92c6-f0da1282df.zip +0 -0
- package/.yarn/cache/@humanwhocodes-retry-npm-0.4.3-a8d7ca1663-3775bb3008.zip +0 -0
- package/.yarn/cache/@isaacs-fs-minipass-npm-4.0.1-677026e841-c25b6dc159.zip +0 -0
- package/.yarn/cache/@jridgewell-resolve-uri-npm-3.1.1-aa2de3f210-0dbc9e29bc.zip +0 -0
- package/.yarn/cache/@jridgewell-resolve-uri-npm-3.1.2-5bc4245992-d502e6fb51.zip +0 -0
- package/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.15-a055fb62cf-0c6b5ae663.zip +0 -0
- package/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.5.0-dfd9126d71-2eb864f276.zip +0 -0
- package/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.5.5-5189d9fc79-f9e538f302.zip +0 -0
- package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-4b30ec8cd5.zip +0 -0
- package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-fa425b606d.zip +0 -0
- package/.yarn/cache/@microsoft-api-extractor-model-npm-7.33.4-65dc0810a1-c71569e59a.zip +0 -0
- package/.yarn/cache/@microsoft-api-extractor-npm-7.57.6-3ff3fa89f4-2f4598cc6b.zip +0 -0
- package/.yarn/cache/@microsoft-tsdoc-config-npm-0.18.1-9e24f960a2-06507f7ced.zip +0 -0
- package/.yarn/cache/@microsoft-tsdoc-npm-0.16.0-9d3f19f1b6-8883bb0ed2.zip +0 -0
- package/.yarn/cache/@npmcli-agent-npm-4.0.0-502e5ae4f0-f7b5ce0f3d.zip +0 -0
- package/.yarn/cache/@npmcli-fs-npm-5.0.0-9d737ae2f3-26e376d780.zip +0 -0
- package/.yarn/cache/@polka-url-npm-1.0.0-next.28-024769eda8-acc5ea6259.zip +0 -0
- package/.yarn/cache/@rollup-pluginutils-npm-5.1.4-83ce21024f-6d58fbc6f1.zip +0 -0
- package/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.59.0-da6c703f69-10c0.zip +0 -0
- package/.yarn/cache/@rushstack-node-core-library-npm-5.20.3-c547457ad4-bc9b33c6be.zip +0 -0
- package/.yarn/cache/@rushstack-problem-matcher-npm-0.2.1-87bf7eb8c4-d6cf27f6bf.zip +0 -0
- package/.yarn/cache/@rushstack-rig-package-npm-0.7.2-5f0f64865a-2e2839fa9a.zip +0 -0
- package/.yarn/cache/@rushstack-terminal-npm-0.22.3-2934ccd0ff-0e81fe7543.zip +0 -0
- package/.yarn/cache/@rushstack-ts-command-line-npm-5.3.3-d220c0fef2-03d9e9989b.zip +0 -0
- package/.yarn/cache/@simple-libs-stream-utils-npm-1.2.0-db53dc026f-2788ac7b16.zip +0 -0
- package/.yarn/cache/@standard-schema-spec-npm-1.1.0-d3e5ccd2e2-d90f55acde.zip +0 -0
- package/.yarn/cache/@tsconfig-node10-npm-1.0.9-f2e2d20feb-c176a2c1e1.zip +0 -0
- package/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-dddca2b553.zip +0 -0
- package/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-67c1316d06.zip +0 -0
- package/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-05f8f2734e.zip +0 -0
- package/.yarn/cache/@types-argparse-npm-1.0.38-657c15204c-4fc892da5d.zip +0 -0
- package/.yarn/cache/@types-chai-npm-5.2.3-5f61dbddda-e0ef1de3b6.zip +0 -0
- package/.yarn/cache/@types-deep-eql-npm-4.0.2-e6bc68cc92-bf3f811843.zip +0 -0
- package/.yarn/cache/@types-esrecurse-npm-4.3.1-237d34a55f-90dad74d5d.zip +0 -0
- package/.yarn/cache/@types-estree-npm-1.0.5-5b7faed3b4-b3b0e33428.zip +0 -0
- package/.yarn/cache/@types-estree-npm-1.0.6-b5e23f2ea2-cdfd751f6f.zip +0 -0
- package/.yarn/cache/@types-estree-npm-1.0.8-2195bac6d6-39d34d1afa.zip +0 -0
- package/.yarn/cache/@types-json-schema-npm-7.0.15-fd16381786-a996a745e6.zip +0 -0
- package/.yarn/cache/@types-node-npm-25.3.5-81ad2eb587-4cf0834a6f.zip +0 -0
- package/.yarn/cache/@typescript-eslint-eslint-plugin-npm-8.56.1-3df20cf10b-8a97e77779.zip +0 -0
- package/.yarn/cache/@typescript-eslint-parser-npm-8.56.1-3f9b1c2f30-61c9dab481.zip +0 -0
- package/.yarn/cache/@typescript-eslint-project-service-npm-8.56.1-766cc01259-ca61cde575.zip +0 -0
- package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.56.1-2d38e88a4b-89cc1af263.zip +0 -0
- package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.56.1-e35d1dd914-d03b64d7ff.zip +0 -0
- package/.yarn/cache/@typescript-eslint-type-utils-npm-8.56.1-e472908945-66517aed50.zip +0 -0
- package/.yarn/cache/@typescript-eslint-types-npm-8.56.1-09e50c3c54-e5a0318abd.zip +0 -0
- package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.56.1-bdca7e3c09-92f4421dac.zip +0 -0
- package/.yarn/cache/@typescript-eslint-utils-npm-8.56.1-aa0778f53a-d9ffd9b294.zip +0 -0
- package/.yarn/cache/@typescript-eslint-visitor-keys-npm-8.56.1-901d7b2e4d-86d97905de.zip +0 -0
- package/.yarn/cache/@vitest-coverage-v8-npm-4.0.18-62bb7f840e-e23e0da86f.zip +0 -0
- package/.yarn/cache/@vitest-expect-npm-4.0.18-03919ccd0b-123b0aa111.zip +0 -0
- package/.yarn/cache/@vitest-mocker-npm-4.0.18-118c87f90e-fb0a257e7e.zip +0 -0
- package/.yarn/cache/@vitest-pretty-format-npm-4.0.18-a73855e4a4-0086b8c88e.zip +0 -0
- package/.yarn/cache/@vitest-runner-npm-4.0.18-3dbdf3fb30-fdb4afa411.zip +0 -0
- package/.yarn/cache/@vitest-snapshot-npm-4.0.18-35134202ed-d3bfefa558.zip +0 -0
- package/.yarn/cache/@vitest-spy-npm-4.0.18-296c59dce4-6de537890b.zip +0 -0
- package/.yarn/cache/@vitest-ui-npm-4.0.18-2112b3c7d4-25ed45b529.zip +0 -0
- package/.yarn/cache/@vitest-utils-npm-4.0.18-b1c99a49e0-4a3c43c142.zip +0 -0
- package/.yarn/cache/@volar-language-core-npm-2.4.11-9f1617b8e0-ccc5de0c28.zip +0 -0
- package/.yarn/cache/@volar-language-core-npm-2.4.28-23fc3d6b92-d41f7327fe.zip +0 -0
- package/.yarn/cache/@volar-source-map-npm-2.4.11-1022b0cd34-8e5badf9f6.zip +0 -0
- package/.yarn/cache/@volar-source-map-npm-2.4.28-7517299eaf-24b0b02c7f.zip +0 -0
- package/.yarn/cache/@volar-typescript-npm-2.4.11-9486696485-bca9bda9c8.zip +0 -0
- package/.yarn/cache/@vue-compiler-core-npm-3.5.13-b0c91e9970-b89f3e3ca9.zip +0 -0
- package/.yarn/cache/@vue-compiler-dom-npm-3.5.13-8785a9ba19-8f424a7188.zip +0 -0
- package/.yarn/cache/@vue-compiler-vue2-npm-2.7.16-ac462b66cc-c76c3fad77.zip +0 -0
- package/.yarn/cache/@vue-language-core-npm-2.2.0-451bd2aafd-1c44cc4067.zip +0 -0
- package/.yarn/cache/@vue-shared-npm-3.5.13-519178ab33-2c940ef907.zip +0 -0
- package/.yarn/cache/abbrev-npm-4.0.0-7d848a1ef0-b4cc169352.zip +0 -0
- package/.yarn/cache/acorn-jsx-npm-5.3.2-d7594599ea-4c54868fbe.zip +0 -0
- package/.yarn/cache/acorn-npm-8.11.3-0d7ab48b38-3ff155f881.zip +0 -0
- package/.yarn/cache/acorn-npm-8.16.0-b2096bf83f-c9c5269722.zip +0 -0
- package/.yarn/cache/acorn-walk-npm-8.3.2-df039a42bf-7e2a8dad54.zip +0 -0
- package/.yarn/cache/agent-base-npm-7.1.4-cb8b4604d5-c2c9ab7599.zip +0 -0
- package/.yarn/cache/ajv-draft-04-npm-1.0.0-6fc962dbab-6044310bd3.zip +0 -0
- package/.yarn/cache/ajv-formats-npm-3.0.1-2662cf5b12-168d6bca1e.zip +0 -0
- package/.yarn/cache/ajv-npm-6.14.0-41f32f2ba8-a2bc39b055.zip +0 -0
- package/.yarn/cache/ajv-npm-8.12.0-3bf6e30741-ac4f72adf7.zip +0 -0
- package/.yarn/cache/ajv-npm-8.17.1-12ade7edc6-ec3ba10a57.zip +0 -0
- package/.yarn/cache/ajv-npm-8.18.0-6e5e062765-e7517c4261.zip +0 -0
- package/.yarn/cache/alien-signals-npm-0.4.14-73b9599f8d-5abb3377bc.zip +0 -0
- package/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-9a64bb8627.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-ece5a8ef06.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-895a23929d.zip +0 -0
- package/.yarn/cache/arg-npm-4.1.3-1748b966a8-070ff801a9.zip +0 -0
- package/.yarn/cache/argparse-npm-1.0.10-528934e59d-b2972c5c23.zip +0 -0
- package/.yarn/cache/argparse-npm-2.0.1-faff7999e6-c5640c2d89.zip +0 -0
- package/.yarn/cache/array-ify-npm-1.0.0-e09a371977-75c9c072fa.zip +0 -0
- package/.yarn/cache/assertion-error-npm-2.0.1-8169d136f2-bbbcb117ac.zip +0 -0
- package/.yarn/cache/ast-v8-to-istanbul-npm-0.3.12-a066421931-bad6ba222b.zip +0 -0
- package/.yarn/cache/balanced-match-npm-4.0.4-fd666b3c7f-07e86102a3.zip +0 -0
- package/.yarn/cache/brace-expansion-npm-5.0.4-acb9332524-359cbcfa80.zip +0 -0
- package/.yarn/cache/cacache-npm-20.0.3-5f244d5bdd-c7da1ca694.zip +0 -0
- package/.yarn/cache/callsites-npm-3.1.0-268f989910-fff9227740.zip +0 -0
- package/.yarn/cache/chai-npm-6.2.2-e1795cadaa-e6c69e5f0c.zip +0 -0
- package/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-e6543f02ec.zip +0 -0
- package/.yarn/cache/chownr-npm-3.0.0-5275e85d25-43925b8770.zip +0 -0
- package/.yarn/cache/cliui-npm-8.0.1-3b029092cf-4bda0f09c3.zip +0 -0
- package/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-5ad3c53494.zip +0 -0
- package/.yarn/cache/color-convert-npm-2.0.1-79730e935b-37e1150172.zip +0 -0
- package/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-566a3d42cc.zip +0 -0
- package/.yarn/cache/color-name-npm-1.1.4-025792b0ea-a1a3f91415.zip +0 -0
- package/.yarn/cache/compare-func-npm-2.0.0-9cd7852f23-78bd4dd4ed.zip +0 -0
- package/.yarn/cache/compare-versions-npm-6.1.1-4b4ac16a32-415205c762.zip +0 -0
- package/.yarn/cache/confbox-npm-0.1.8-8396039b68-fc2c68d97c.zip +0 -0
- package/.yarn/cache/confbox-npm-0.2.4-31ba8953f9-4c36af33d9.zip +0 -0
- package/.yarn/cache/conventional-changelog-angular-npm-8.3.0-0cd5330d9e-bab87fa741.zip +0 -0
- package/.yarn/cache/conventional-changelog-conventionalcommits-npm-9.3.0-6c1ee7bc50-36be9435bb.zip +0 -0
- package/.yarn/cache/conventional-commits-parser-npm-6.3.0-ac5eec936e-7b152db0b6.zip +0 -0
- package/.yarn/cache/cosmiconfig-npm-9.0.1-66b0cd2503-a5d4d95599.zip +0 -0
- package/.yarn/cache/cosmiconfig-typescript-loader-npm-6.2.0-a314118ca7-0fd8fd9b9b.zip +0 -0
- package/.yarn/cache/create-require-npm-1.1.1-839884ca2e-157cbc59b2.zip +0 -0
- package/.yarn/cache/cross-spawn-npm-7.0.6-264bddf921-053ea8b213.zip +0 -0
- package/.yarn/cache/dargs-npm-8.1.0-39fde97ef5-08cbd1ee4a.zip +0 -0
- package/.yarn/cache/de-indent-npm-1.0.2-66cccde30f-7058ce58ab.zip +0 -0
- package/.yarn/cache/debug-npm-4.3.4-4513954577-cedbec4529.zip +0 -0
- package/.yarn/cache/debug-npm-4.4.0-f6efe76023-db94f1a182.zip +0 -0
- package/.yarn/cache/debug-npm-4.4.3-0105c6123a-d79136ec6c.zip +0 -0
- package/.yarn/cache/deep-is-npm-0.1.4-88938b5a67-7f0ee496e0.zip +0 -0
- package/.yarn/cache/diff-npm-4.0.2-73133c7102-81b91f9d39.zip +0 -0
- package/.yarn/cache/diff-npm-8.0.3-6f5c127138-d29321c70d.zip +0 -0
- package/.yarn/cache/dot-prop-npm-5.3.0-7bf6ee1eb8-93f0d343ef.zip +0 -0
- package/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-b6053ad399.zip +0 -0
- package/.yarn/cache/entities-npm-4.5.0-7cdb83b832-5b039739f7.zip +0 -0
- package/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-285325677b.zip +0 -0
- package/.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-ba827f8936.zip +0 -0
- package/.yarn/cache/es-module-lexer-npm-1.7.0-456b47a08a-4c935affcb.zip +0 -0
- package/.yarn/cache/esbuild-npm-0.27.3-85b6c20323-fdc3f87a3f.zip +0 -0
- package/.yarn/cache/escalade-npm-3.1.1-e02da076aa-afd02e6ca9.zip +0 -0
- package/.yarn/cache/escalade-npm-3.2.0-19b50dd48f-ced4dd3a78.zip +0 -0
- package/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-a968ad453d.zip +0 -0
- package/.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-9497d4dd30.zip +0 -0
- package/.yarn/cache/eslint-npm-10.0.3-c98e23b2a9-fbbb4d99cb.zip +0 -0
- package/.yarn/cache/eslint-scope-npm-9.1.2-50e6e92f41-9fb8bca5a7.zip +0 -0
- package/.yarn/cache/eslint-visitor-keys-npm-3.4.3-a356ac7e46-92708e882c.zip +0 -0
- package/.yarn/cache/eslint-visitor-keys-npm-5.0.1-30a44b062b-16190bdf2c.zip +0 -0
- package/.yarn/cache/espree-npm-11.2.0-095134f369-cf87e18ffd.zip +0 -0
- package/.yarn/cache/esquery-npm-1.7.0-c1e8da438a-77d5173db4.zip +0 -0
- package/.yarn/cache/esrecurse-npm-4.3.0-10b86a887a-81a37116d1.zip +0 -0
- package/.yarn/cache/estraverse-npm-5.3.0-03284f8f63-1ff9447b96.zip +0 -0
- package/.yarn/cache/estree-walker-npm-2.0.2-dfab42f65c-53a6c54e20.zip +0 -0
- package/.yarn/cache/estree-walker-npm-3.0.3-0372979673-c12e3c2b26.zip +0 -0
- package/.yarn/cache/esutils-npm-2.0.3-f865beafd5-9a2fe69a41.zip +0 -0
- package/.yarn/cache/expect-type-npm-1.3.0-95a4384745-8412b3fe4f.zip +0 -0
- package/.yarn/cache/exponential-backoff-npm-3.1.3-28be78d98e-77e3ae682b.zip +0 -0
- package/.yarn/cache/exsolve-npm-1.0.8-20570c05a2-65e44ae05b.zip +0 -0
- package/.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-40dedc862e.zip +0 -0
- package/.yarn/cache/fast-json-stable-stringify-npm-2.1.0-02e8905fda-7f081eb0b8.zip +0 -0
- package/.yarn/cache/fast-levenshtein-npm-2.0.6-fcd74b8df5-111972b373.zip +0 -0
- package/.yarn/cache/fast-uri-npm-3.0.3-0874072625-4b2c5ce681.zip +0 -0
- package/.yarn/cache/fdir-npm-6.5.0-8814a0dec7-e345083c43.zip +0 -0
- package/.yarn/cache/fflate-npm-0.8.2-5129f303f0-03448d630c.zip +0 -0
- package/.yarn/cache/file-entry-cache-npm-8.0.0-5b09d19a83-9e2b5938b1.zip +0 -0
- package/.yarn/cache/find-up-npm-5.0.0-e03e9b796d-062c5a83a9.zip +0 -0
- package/.yarn/cache/flat-cache-npm-4.0.1-12bf2455f7-2c59d93e9f.zip +0 -0
- package/.yarn/cache/flatted-npm-3.2.9-0462256d3c-5c91c5a0a2.zip +0 -0
- package/.yarn/cache/flatted-npm-3.3.4-614e5aba3e-d1f33426e9.zip +0 -0
- package/.yarn/cache/fs-extra-npm-11.3.4-29a9d2b3b0-e08276f767.zip +0 -0
- package/.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-63e80da2ff.zip +0 -0
- package/.yarn/cache/fsevents-npm-2.3.3-ce9fb0ffae-a1f0c44595.zip +0 -0
- package/.yarn/cache/function-bind-npm-1.1.2-7a55be9b03-d8680ee1e5.zip +0 -0
- package/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-c6c7b60271.zip +0 -0
- package/.yarn/cache/git-raw-commits-npm-4.0.0-60e7e666d1-ab51335d9e.zip +0 -0
- package/.yarn/cache/glob-npm-13.0.6-864eb0cece-269c236f11.zip +0 -0
- package/.yarn/cache/glob-parent-npm-6.0.2-2cbef12738-317034d886.zip +0 -0
- package/.yarn/cache/global-directory-npm-4.0.1-1de95382fd-f9cbeef41d.zip +0 -0
- package/.yarn/cache/globals-npm-17.4.0-d04eded15b-2be9e8c2b9.zip +0 -0
- package/.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-386d011a55.zip +0 -0
- package/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-1c6c83b14b.zip +0 -0
- package/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-2e789c61b7.zip +0 -0
- package/.yarn/cache/hasown-npm-2.0.0-78b794ceef-5d415b114f.zip +0 -0
- package/.yarn/cache/he-npm-1.2.0-3b73a2ff07-a27d478bef.zip +0 -0
- package/.yarn/cache/html-escaper-npm-2.0.2-38e51ef294-208e8a12de.zip +0 -0
- package/.yarn/cache/http-cache-semantics-npm-4.2.0-fadacfb3ad-45b66a945c.zip +0 -0
- package/.yarn/cache/http-proxy-agent-npm-7.0.2-643ed7cc33-4207b06a45.zip +0 -0
- package/.yarn/cache/https-proxy-agent-npm-7.0.6-27a95c2690-f729219bc7.zip +0 -0
- package/.yarn/cache/husky-npm-9.1.7-5b02eaabc4-35bb110a71.zip +0 -0
- package/.yarn/cache/iconv-lite-npm-0.7.2-716fc012a0-3c228920f3.zip +0 -0
- package/.yarn/cache/ignore-npm-5.3.0-fb0f5fa062-dc06bea5c2.zip +0 -0
- package/.yarn/cache/ignore-npm-7.0.5-dea34ee430-ae00db89fe.zip +0 -0
- package/.yarn/cache/import-fresh-npm-3.3.0-3e34265ca9-7f882953aa.zip +0 -0
- package/.yarn/cache/import-lazy-npm-4.0.0-3215653869-a3520313e2.zip +0 -0
- package/.yarn/cache/import-meta-resolve-npm-4.2.0-d0ecf96035-3ee8aeecb6.zip +0 -0
- package/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-8b51313850.zip +0 -0
- package/.yarn/cache/ini-npm-4.1.1-01c2cbda7b-7fddc8dfd3.zip +0 -0
- package/.yarn/cache/ip-address-npm-10.1.0-d5d5693401-0103516cfa.zip +0 -0
- package/.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-e7fb686a73.zip +0 -0
- package/.yarn/cache/is-core-module-npm-2.13.1-36e17434f9-2cba9903aa.zip +0 -0
- package/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-5487da3569.zip +0 -0
- package/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-bb11d825e0.zip +0 -0
- package/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-17fb4014e2.zip +0 -0
- package/.yarn/cache/is-obj-npm-2.0.0-3d95e053f4-85044ed7ba.zip +0 -0
- package/.yarn/cache/is-plain-obj-npm-4.1.0-a4f2a92b44-32130d651d.zip +0 -0
- package/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-228cfa503f.zip +0 -0
- package/.yarn/cache/isexe-npm-4.0.0-588229ad74-5884815115.zip +0 -0
- package/.yarn/cache/istanbul-lib-coverage-npm-3.2.2-5c0526e059-6c7ff21067.zip +0 -0
- package/.yarn/cache/istanbul-lib-report-npm-3.0.1-b17446ab24-84323afb14.zip +0 -0
- package/.yarn/cache/istanbul-reports-npm-3.2.0-b755b56d78-d596317cfd.zip +0 -0
- package/.yarn/cache/jiti-npm-2.6.1-597ab7fb84-79b2e96a8e.zip +0 -0
- package/.yarn/cache/jju-npm-1.4.0-670678eaa3-f3f444557e.zip +0 -0
- package/.yarn/cache/js-tokens-npm-10.0.0-2f75d73bcb-a934987478.zip +0 -0
- package/.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-e248708d37.zip +0 -0
- package/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-184a24b4ea.zip +0 -0
- package/.yarn/cache/json-buffer-npm-3.0.1-f8f6d20603-0d1c91569d.zip +0 -0
- package/.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-140932564c.zip +0 -0
- package/.yarn/cache/json-schema-traverse-npm-0.4.1-4759091693-108fa90d4c.zip +0 -0
- package/.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-71e30015d7.zip +0 -0
- package/.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-b65772b28b-cb168b61fd.zip +0 -0
- package/.yarn/cache/jsonfile-npm-6.1.0-20a4796cee-4f95b5e8a5.zip +0 -0
- package/.yarn/cache/keyv-npm-4.5.4-4c8e2cf7f7-aa52f3c5e1.zip +0 -0
- package/.yarn/cache/kolorist-npm-1.8.0-2cc04dcc05-73075db44a.zip +0 -0
- package/.yarn/cache/levn-npm-0.4.1-d183b2d7bb-effb03cad7.zip +0 -0
- package/.yarn/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-3da6ee62d4.zip +0 -0
- package/.yarn/cache/local-pkg-npm-1.1.2-04ade6b6c7-1bcfcc5528.zip +0 -0
- package/.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-d3972ab70d.zip +0 -0
- package/.yarn/cache/lodash-npm-4.17.23-50bdb1c01a-1264a90469.zip +0 -0
- package/.yarn/cache/lodash.camelcase-npm-4.3.0-bf268e3bf0-fcba15d21a.zip +0 -0
- package/.yarn/cache/lodash.kebabcase-npm-4.1.1-89ffca7e1f-da5d8f41db.zip +0 -0
- package/.yarn/cache/lodash.mergewith-npm-4.6.2-7d2d4201ec-4adbed65ff.zip +0 -0
- package/.yarn/cache/lodash.snakecase-npm-4.1.1-b12cdbecb4-f0b3f2497e.zip +0 -0
- package/.yarn/cache/lodash.startcase-npm-4.4.0-637aa8cc15-bd82aa87a4.zip +0 -0
- package/.yarn/cache/lodash.upperfirst-npm-4.3.1-e3b7c364ba-435625da4b.zip +0 -0
- package/.yarn/cache/lru-cache-npm-11.2.6-acb7d4323e-73bbffb298.zip +0 -0
- package/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-cb53e58278.zip +0 -0
- package/.yarn/cache/magic-string-npm-0.30.17-da1b7593b1-16826e415d.zip +0 -0
- package/.yarn/cache/magic-string-npm-0.30.21-9a226cb21e-299378e38f.zip +0 -0
- package/.yarn/cache/magicast-npm-0.5.2-24c891cd9d-924af67764.zip +0 -0
- package/.yarn/cache/make-dir-npm-4.0.0-ec3cd921cc-69b98a6c0b.zip +0 -0
- package/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-171e458d86.zip +0 -0
- package/.yarn/cache/make-fetch-happen-npm-15.0.4-cd90f16f9b-b874bf6879.zip +0 -0
- package/.yarn/cache/meow-npm-12.1.1-bd7858d088-a125ca99a3.zip +0 -0
- package/.yarn/cache/meow-npm-13.2.0-9907f89171-d5b339ae31.zip +0 -0
- package/.yarn/cache/minimatch-npm-10.2.4-11f0605299-35f3dfb7b9.zip +0 -0
- package/.yarn/cache/minimatch-npm-9.0.7-145dd43fbb-e90f8d8dd1.zip +0 -0
- package/.yarn/cache/minimist-npm-1.2.8-d7af7b1dce-19d3fcdca0.zip +0 -0
- package/.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-5167e73f62.zip +0 -0
- package/.yarn/cache/minipass-fetch-npm-5.0.2-cd03eefed8-ce4ab9f21c.zip +0 -0
- package/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-2a51b63feb.zip +0 -0
- package/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a114746943.zip +0 -0
- package/.yarn/cache/minipass-npm-7.1.3-b73a16498d-539da88dac.zip +0 -0
- package/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-cbda57cea2.zip +0 -0
- package/.yarn/cache/minipass-sized-npm-2.0.0-a911fc7d3f-f9201696a6.zip +0 -0
- package/.yarn/cache/minizlib-npm-3.1.0-6680befdba-5aad75ab00.zip +0 -0
- package/.yarn/cache/mlly-npm-1.8.1-0181666245-664fa66726.zip +0 -0
- package/.yarn/cache/mrmime-npm-2.0.0-0326eb1458-312b35ed28.zip +0 -0
- package/.yarn/cache/ms-npm-2.1.2-ec0c1512ff-a437714e2f.zip +0 -0
- package/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-d924b57e73.zip +0 -0
- package/.yarn/cache/muggle-string-npm-0.4.1-fe3c825cc2-e914b63e24.zip +0 -0
- package/.yarn/cache/nanoid-npm-3.3.11-f98c1f9ef6-40e7f70b3d.zip +0 -0
- package/.yarn/cache/natural-compare-npm-1.4.0-97b75b362d-f5f9a7974b.zip +0 -0
- package/.yarn/cache/negotiator-npm-1.0.0-47d727e27e-4c559dd526.zip +0 -0
- package/.yarn/cache/node-gyp-npm-12.2.0-11f8fe84f1-3ed046746a.zip +0 -0
- package/.yarn/cache/nopt-npm-9.0.0-81316ec15c-1822eb6f9b.zip +0 -0
- package/.yarn/cache/obug-npm-2.1.1-029730d296-59dccd7de7.zip +0 -0
- package/.yarn/cache/optionator-npm-0.9.3-56c3a4bf80-66fba794d4.zip +0 -0
- package/.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-9db675949d.zip +0 -0
- package/.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-2290d627ab.zip +0 -0
- package/.yarn/cache/p-map-npm-7.0.4-39386109d0-a5030935d3.zip +0 -0
- package/.yarn/cache/parent-module-npm-1.0.1-1fae11b095-c63d6e8000.zip +0 -0
- package/.yarn/cache/parse-json-npm-5.2.0-00a63b1199-77947f2253.zip +0 -0
- package/.yarn/cache/path-browserify-npm-1.0.1-f975d99a99-8b8c3fd5c6.zip +0 -0
- package/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-8c0bd3f523.zip +0 -0
- package/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-748c43efd5.zip +0 -0
- package/.yarn/cache/path-parse-npm-1.0.7-09564527b7-11ce261f9d.zip +0 -0
- package/.yarn/cache/path-scurry-npm-2.0.2-f10aa6a77e-b35ad37cf6.zip +0 -0
- package/.yarn/cache/pathe-npm-2.0.3-0924246ee0-c118dc5a8b.zip +0 -0
- package/.yarn/cache/picocolors-npm-1.1.1-4fede47cf1-e2e3e8170a.zip +0 -0
- package/.yarn/cache/picomatch-npm-4.0.2-e93516ddf2-7c51f3ad2b.zip +0 -0
- package/.yarn/cache/picomatch-npm-4.0.3-0a647b87cc-9582c951e9.zip +0 -0
- package/.yarn/cache/pkg-types-npm-1.3.1-832c9cd162-19e6cb8b66.zip +0 -0
- package/.yarn/cache/pkg-types-npm-2.3.0-e7381b4aaa-d2bbddc5b8.zip +0 -0
- package/.yarn/cache/postcss-npm-8.5.8-b010bee8df-dd918f7127.zip +0 -0
- package/.yarn/cache/prelude-ls-npm-1.2.1-3e4d272a55-b00d617431.zip +0 -0
- package/.yarn/cache/proc-log-npm-6.1.0-84e609b3f4-4f178d4062.zip +0 -0
- package/.yarn/cache/punycode-npm-2.3.1-97543c420d-14f76a8206.zip +0 -0
- package/.yarn/cache/quansync-npm-0.2.11-f7bf964a44-cb9a1f8ebc.zip +0 -0
- package/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-83aa76a7bc.zip +0 -0
- package/.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-aaa267e0c5.zip +0 -0
- package/.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-8408eec31a.zip +0 -0
- package/.yarn/cache/resolve-from-npm-5.0.0-15c9db4d33-b21cb7f1fb.zip +0 -0
- package/.yarn/cache/resolve-npm-1.22.8-098f379dfe-07e179f437.zip +0 -0
- package/.yarn/cache/resolve-patch-4254c24959-0446f02443.zip +0 -0
- package/.yarn/cache/retry-npm-0.13.1-89eb100ab6-9ae822ee19.zip +0 -0
- package/.yarn/cache/rollup-npm-4.59.0-3b10f603ec-f38742da34.zip +0 -0
- package/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-7e3c8b2e88.zip +0 -0
- package/.yarn/cache/semver-npm-7.5.4-c4ad957fcd-5160b06975.zip +0 -0
- package/.yarn/cache/semver-npm-7.6.3-57e82c14d5-88f33e148b.zip +0 -0
- package/.yarn/cache/semver-npm-7.7.4-746e538da5-5215ad0234.zip +0 -0
- package/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-a41692e7d8.zip +0 -0
- package/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1dbed0726d.zip +0 -0
- package/.yarn/cache/siginfo-npm-2.0.0-9bbac931f8-3def8f8e51.zip +0 -0
- package/.yarn/cache/sirv-npm-3.0.2-6cf658c733-5930e4397a.zip +0 -0
- package/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-a16775323e.zip +0 -0
- package/.yarn/cache/socks-npm-2.8.7-d1d20aae19-2805a43a1c.zip +0 -0
- package/.yarn/cache/socks-proxy-agent-npm-8.0.5-24d77a90dc-5d2c6cecba.zip +0 -0
- package/.yarn/cache/source-map-js-npm-1.2.1-b9a47d7e1a-7bda1fc4c1.zip +0 -0
- package/.yarn/cache/source-map-npm-0.6.1-1a3621db16-ab55398007.zip +0 -0
- package/.yarn/cache/split2-npm-4.2.0-16aa3883ba-b292beb8ce.zip +0 -0
- package/.yarn/cache/sprintf-js-npm-1.0.3-73f0a322fa-ecadcfe4c7.zip +0 -0
- package/.yarn/cache/ssri-npm-13.0.1-c266f2233c-cf6408a186.zip +0 -0
- package/.yarn/cache/stackback-npm-0.0.2-73273dc92e-89a1416668.zip +0 -0
- package/.yarn/cache/std-env-npm-3.10.0-30d3e2646f-1814927a45.zip +0 -0
- package/.yarn/cache/string-argv-npm-0.3.2-6e057a88f1-75c02a8375.zip +0 -0
- package/.yarn/cache/string-width-npm-4.2.3-2c27177bae-1e525e92e5.zip +0 -0
- package/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-1ae5f212a1.zip +0 -0
- package/.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-9681a6257b.zip +0 -0
- package/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-6ae5ff319b.zip +0 -0
- package/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-afb4c88521.zip +0 -0
- package/.yarn/cache/supports-color-npm-8.1.1-289e937149-ea1d3c275d.zip +0 -0
- package/.yarn/cache/supports-preserve-symlinks-flag-npm-1.0.0-f17c4d0028-6c40323407.zip +0 -0
- package/.yarn/cache/tar-npm-7.5.10-83147ff192-ed905e4b33.zip +0 -0
- package/.yarn/cache/tinybench-npm-2.9.0-2861a048db-c3500b0f60.zip +0 -0
- package/.yarn/cache/tinyexec-npm-1.0.2-321b713e56-1261a8e34c.zip +0 -0
- package/.yarn/cache/tinyglobby-npm-0.2.15-0e783aadbd-869c31490d.zip +0 -0
- package/.yarn/cache/tinyrainbow-npm-3.0.3-06ed35d14d-1e799d35cd.zip +0 -0
- package/.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-b214d21dbf.zip +0 -0
- package/.yarn/cache/totalist-npm-3.0.1-91e71f3baa-4bb1fadb69.zip +0 -0
- package/.yarn/cache/ts-api-utils-npm-2.4.0-1179124e9a-ed185861ae.zip +0 -0
- package/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-5f29938489.zip +0 -0
- package/.yarn/cache/tslib-npm-2.8.1-66590b21b8-9c4759110a.zip +0 -0
- package/.yarn/cache/type-check-npm-0.4.0-60565800ce-7b3fd0ed43.zip +0 -0
- package/.yarn/cache/typescript-eslint-npm-8.56.1-533c704529-c33aeb9a8b.zip +0 -0
- package/.yarn/cache/typescript-npm-5.7.2-b1f84a8b28-a873118b52.zip +0 -0
- package/.yarn/cache/typescript-npm-5.8.2-b95d637f6a-5c4f6fbf1c.zip +0 -0
- package/.yarn/cache/typescript-patch-26c53754b1-5448a08e59.zip +0 -0
- package/.yarn/cache/typescript-patch-aed9e5263d-f3b8082c9d.zip +0 -0
- package/.yarn/cache/ufo-npm-1.6.3-29bac69d97-bf0e4ebff9.zip +0 -0
- package/.yarn/cache/undici-types-npm-7.18.2-3e6d69d829-85a7918911.zip +0 -0
- package/.yarn/cache/unique-filename-npm-5.0.0-605f54f18e-afb897e9cf.zip +0 -0
- package/.yarn/cache/unique-slug-npm-6.0.0-f26b186e99-da7ade4cb0.zip +0 -0
- package/.yarn/cache/universalify-npm-2.0.1-040ba5a21e-73e8ee3809.zip +0 -0
- package/.yarn/cache/uri-js-npm-4.4.1-66d11cbcaf-4ef57b45aa.zip +0 -0
- package/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-bdc36fb809.zip +0 -0
- package/.yarn/cache/vite-npm-7.3.1-330baf2f0d-5c7548f5f4.zip +0 -0
- package/.yarn/cache/vite-plugin-dts-npm-4.5.4-2445647687-5fcb7f3739.zip +0 -0
- package/.yarn/cache/vitest-npm-4.0.18-52f42bdace-b913cd3203.zip +0 -0
- package/.yarn/cache/vscode-uri-npm-3.0.8-56f46b9d24-f7f217f526.zip +0 -0
- package/.yarn/cache/which-npm-2.0.2-320ddf72f7-66522872a7.zip +0 -0
- package/.yarn/cache/which-npm-6.0.1-afc3b2db90-7e710e54ea.zip +0 -0
- package/.yarn/cache/why-is-node-running-npm-2.3.0-011cf61a18-1cde0b01b8.zip +0 -0
- package/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-d15fc12c11.zip +0 -0
- package/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-4df2842c36.zip +0 -0
- package/.yarn/cache/yallist-npm-4.0.0-b493d9e907-2286b5e8db.zip +0 -0
- package/.yarn/cache/yallist-npm-5.0.0-8732dd9f1c-a499c81ce6.zip +0 -0
- package/.yarn/cache/yargs-npm-17.7.2-80b62638e1-ccd7e723e6.zip +0 -0
- package/.yarn/cache/yargs-parser-npm-21.1.1-8fdc003314-f84b5e4816.zip +0 -0
- package/.yarn/cache/yn-npm-3.1.1-8ad4259784-0732468dd7.zip +0 -0
- package/.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-dceb44c285.zip +0 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarn/releases/yarn-4.12.0.cjs +942 -0
- package/.yarnrc.yml +5 -0
- package/AGENTS.md +82 -0
- package/CHANGELOG.md +29 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/README.md +324 -107
- package/dist/assert.cjs +66 -0
- package/dist/assert.d.ts +16 -0
- package/dist/assert.mjs +66 -0
- package/dist/assertions.cjs +190 -92
- package/dist/assertions.d.ts +58 -2
- package/dist/assertions.mjs +191 -93
- package/dist/checkers.d.ts +8 -0
- package/dist/combinators.cjs +341 -0
- package/dist/combinators.d.ts +17 -0
- package/dist/combinators.mjs +341 -0
- package/dist/constraints.d.ts +4 -0
- package/dist/extractors.d.ts +2 -0
- package/dist/index.cjs +172 -61
- package/dist/index.d.ts +10 -4
- package/dist/index.mjs +176 -64
- package/dist/json-schema.cjs +514 -0
- package/dist/json-schema.d.ts +14 -0
- package/dist/json-schema.mjs +514 -0
- package/dist/metadata.cjs +8 -0
- package/dist/metadata.cjs.js +130 -0
- package/dist/metadata.d.ts +8 -0
- package/dist/metadata.es.js +131 -0
- package/dist/metadata.mjs +8 -0
- package/dist/predicates.cjs +40 -5
- package/dist/predicates.d.ts +25 -3
- package/dist/predicates.mjs +40 -5
- package/dist/violations.d.ts +29 -0
- package/docker/services/node/Dockerfile +9 -0
- package/docs/en/00-index.md +14 -0
- package/docs/en/01-shape-api.md +348 -0
- package/docs/en/02-metadata-and-introspection.md +276 -0
- package/docs/en/03-violations.md +267 -0
- package/docs/en/04-json-schema-export.md +264 -0
- package/docs/en/05-public-api.md +123 -0
- package/docs/en/06-common-recipes.md +273 -0
- package/docs/en/07-ai-reference.md +215 -0
- package/docs/en/08-violation-code-types.md +241 -0
- package/docs/ru/00-index.md +15 -0
- package/docs/ru/01-shape-api.md +348 -0
- package/docs/ru/02-metadata-and-introspection.md +276 -0
- package/docs/ru/03-violations.md +267 -0
- package/docs/ru/04-json-schema-export.md +264 -0
- package/docs/ru/05-public-api.md +123 -0
- package/docs/ru/06-common-recipes.md +273 -0
- package/docs/ru/07-ai-reference.md +215 -0
- package/docs/ru/08-violation-code-types.md +241 -0
- package/docs/ru/README.md +371 -0
- package/drafts/.gitignore +2 -0
- package/package.json +43 -33
- package/skills/commit-workflow/SKILL.md +93 -0
- package/skills/coverage-recovery/SKILL.md +68 -0
- package/skills/yarn-lock-conflict-resolution/SKILL.md +69 -0
- package/types/index.d.ts +789 -30
- package/types/json-schema.d.ts +75 -0
- package/dist/assertions/Assert.d.ts +0 -2
- package/dist/assertions/HasLength.d.ts +0 -7
- package/dist/assertions/check.d.ts +0 -3
- package/dist/assertions/index.d.ts +0 -16
- package/dist/runners/Each.d.ts +0 -3
- package/dist/runners/HasProperties.d.ts +0 -6
- package/dist/runners/index.d.ts +0 -2
- package/dist/runners.cjs +0 -32
- package/dist/runners.d.ts +0 -2
- package/dist/runners.mjs +0 -32
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
# Shape API
|
|
2
|
+
|
|
3
|
+
[Documentation index](./00-index.md)
|
|
4
|
+
[Russian translation](../ru/01-shape-api.md)
|
|
5
|
+
|
|
6
|
+
`shape(...)` is the reusable object-shape API in `@modulify/validator`.
|
|
7
|
+
|
|
8
|
+
It keeps the same runtime validation kernel as the rest of the library, but adds a small immutable object-oriented layer for:
|
|
9
|
+
|
|
10
|
+
- nested object validation;
|
|
11
|
+
- reusable object schemas;
|
|
12
|
+
- derived shapes such as `pick(...)`, `omit(...)`, and `partial(...)`;
|
|
13
|
+
- object-level rules such as `refine(...)` and `fieldsMatch(...)`;
|
|
14
|
+
- descriptor-based introspection through `describe(...)`.
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import {
|
|
20
|
+
exact,
|
|
21
|
+
isString,
|
|
22
|
+
optional,
|
|
23
|
+
shape,
|
|
24
|
+
validate,
|
|
25
|
+
} from '@modulify/validator'
|
|
26
|
+
|
|
27
|
+
const profile = shape({
|
|
28
|
+
id: isString,
|
|
29
|
+
nickname: optional(isString),
|
|
30
|
+
role: exact('admin'),
|
|
31
|
+
}).strict()
|
|
32
|
+
|
|
33
|
+
const [ok, validated, violations] = validate.sync({
|
|
34
|
+
id: 'u1',
|
|
35
|
+
nickname: 'neo',
|
|
36
|
+
role: 'admin',
|
|
37
|
+
}, profile)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`shape(...)` returns a validator, so it can be used anywhere a regular constraint is accepted.
|
|
41
|
+
|
|
42
|
+
## Mental Model
|
|
43
|
+
|
|
44
|
+
A shape is still a validator. The extra API is a thin wrapper around an object descriptor and a small set of immutable derivation helpers.
|
|
45
|
+
|
|
46
|
+
Each field in the descriptor may contain:
|
|
47
|
+
|
|
48
|
+
- a single constraint;
|
|
49
|
+
- an array of constraints that run sequentially;
|
|
50
|
+
- another structural validator such as `shape(...)`, `each(...)`, `tuple(...)`, `record(...)`, `union(...)`, or `discriminatedUnion(...)`.
|
|
51
|
+
|
|
52
|
+
That means object validation stays aligned with the rest of the library:
|
|
53
|
+
|
|
54
|
+
- field-level checks reuse the same assertions and combinators;
|
|
55
|
+
- violations keep regular nested `path` values;
|
|
56
|
+
- introspection goes through the same `describe(...)` contract;
|
|
57
|
+
- metadata stays opt-in through `meta(...)`.
|
|
58
|
+
|
|
59
|
+
## Basic Shape Construction
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import {
|
|
63
|
+
hasLength,
|
|
64
|
+
isDefined,
|
|
65
|
+
isString,
|
|
66
|
+
shape,
|
|
67
|
+
} from '@modulify/validator'
|
|
68
|
+
|
|
69
|
+
const registration = shape({
|
|
70
|
+
email: [isDefined, isString],
|
|
71
|
+
password: [isString, hasLength({ min: 8 })],
|
|
72
|
+
})
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Runtime behavior:
|
|
76
|
+
|
|
77
|
+
- the input must be a plain record-like object;
|
|
78
|
+
- every declared field is validated against its own slot;
|
|
79
|
+
- nested violations are reported on the field path;
|
|
80
|
+
- unknown keys are allowed by default.
|
|
81
|
+
|
|
82
|
+
## Unknown Keys
|
|
83
|
+
|
|
84
|
+
Shapes have two unknown-key modes:
|
|
85
|
+
|
|
86
|
+
- `'passthrough'` - extra keys are allowed;
|
|
87
|
+
- `'strict'` - extra keys produce `shape.unknown-key` violations on the extra key path.
|
|
88
|
+
|
|
89
|
+
`shape(...)` starts in `'passthrough'` mode.
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
const profile = shape({
|
|
93
|
+
id: isString,
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
const strictProfile = profile.strict()
|
|
97
|
+
const permissiveProfile = strictProfile.passthrough()
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Important behavior:
|
|
101
|
+
|
|
102
|
+
- `strict()` and `passthrough()` keep the same field descriptor;
|
|
103
|
+
- `strict()` and `passthrough()` keep existing object-level rules;
|
|
104
|
+
- only the unknown-key handling changes.
|
|
105
|
+
|
|
106
|
+
## Exposed Shape Properties
|
|
107
|
+
|
|
108
|
+
Shape instances expose:
|
|
109
|
+
|
|
110
|
+
- `descriptor` - the current object descriptor;
|
|
111
|
+
- `unknownKeys` - the current unknown-key mode;
|
|
112
|
+
- all standard validator behavior through `check(...)` and `run(...)`.
|
|
113
|
+
|
|
114
|
+
This is useful when a shape needs to be validated, described, and then derived further without rebuilding it from scratch.
|
|
115
|
+
|
|
116
|
+
## Derived Shapes
|
|
117
|
+
|
|
118
|
+
All shape helpers are immutable. Each call returns a new shape.
|
|
119
|
+
|
|
120
|
+
### `pick(keys)` and `omit(keys)`
|
|
121
|
+
|
|
122
|
+
Use these when you need a subset of the current object schema.
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
const profile = shape({
|
|
126
|
+
id: isString,
|
|
127
|
+
nickname: optional(isString),
|
|
128
|
+
role: exact('admin'),
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
const publicProfile = profile.pick(['id', 'nickname'])
|
|
132
|
+
const internalProfile = profile.omit(['nickname'])
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### `partial()`
|
|
136
|
+
|
|
137
|
+
`partial()` wraps every field in `optional(...)`.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const editableProfile = profile.partial()
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
This follows the current library model where:
|
|
144
|
+
|
|
145
|
+
- an omitted key;
|
|
146
|
+
- and a key with value `undefined`;
|
|
147
|
+
|
|
148
|
+
are treated the same during validation.
|
|
149
|
+
|
|
150
|
+
### `extend(descriptor)`
|
|
151
|
+
|
|
152
|
+
`extend(...)` adds or overrides fields using a plain object descriptor.
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
const account = profile.extend({
|
|
156
|
+
team: isString,
|
|
157
|
+
})
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### `merge(shape)`
|
|
161
|
+
|
|
162
|
+
`merge(...)` merges another shape into the current one.
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
const account = profile.merge(shape({
|
|
166
|
+
team: isString,
|
|
167
|
+
role: exact('editor'),
|
|
168
|
+
}))
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Behavior notes:
|
|
172
|
+
|
|
173
|
+
- the receiver keeps its own unknown-key mode;
|
|
174
|
+
- overlapping keys are overridden by the right-hand shape;
|
|
175
|
+
- object-level rules from the merged shape are not combined into a new shared rule set.
|
|
176
|
+
|
|
177
|
+
## Rule Retention Semantics
|
|
178
|
+
|
|
179
|
+
There is an intentional distinction between mode switches and structural derivations.
|
|
180
|
+
|
|
181
|
+
`strict()` and `passthrough()` keep object-level rules because the same shape structure is still present.
|
|
182
|
+
|
|
183
|
+
`pick()`, `omit()`, `partial()`, `extend()`, and `merge()` drop object-level rules intentionally, because generic refinements are opaque and may depend on fields that are no longer present or now behave differently.
|
|
184
|
+
|
|
185
|
+
This keeps derived schemas predictable instead of guessing whether an old refinement is still valid.
|
|
186
|
+
|
|
187
|
+
## Object-Level Rules
|
|
188
|
+
|
|
189
|
+
Shapes can express cross-field invariants without introducing a second schema language.
|
|
190
|
+
|
|
191
|
+
### `refine(...)`
|
|
192
|
+
|
|
193
|
+
`refine(...)` adds a synchronous object-level rule that runs only after the base shape has already validated successfully as an object.
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
const registration = shape({
|
|
197
|
+
password: isString,
|
|
198
|
+
confirmPassword: isString,
|
|
199
|
+
}).refine(value => {
|
|
200
|
+
return value.password === value.confirmPassword
|
|
201
|
+
? []
|
|
202
|
+
: [{
|
|
203
|
+
path: ['confirmPassword'],
|
|
204
|
+
code: 'shape.fields.mismatch',
|
|
205
|
+
args: [['password', 'confirmPassword']],
|
|
206
|
+
}]
|
|
207
|
+
})
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
`refine(...)` is intentionally thin:
|
|
211
|
+
|
|
212
|
+
- it is sync-only;
|
|
213
|
+
- it returns `[]`, `null`, or `undefined` when the rule passes;
|
|
214
|
+
- it returns one issue or an array of issues when it fails;
|
|
215
|
+
- `path` is relative to the current shape and defaults to `[]`;
|
|
216
|
+
- `value` is optional and defaults to the object value at that relative path;
|
|
217
|
+
- `code` stays machine-readable.
|
|
218
|
+
|
|
219
|
+
Produced violations use:
|
|
220
|
+
|
|
221
|
+
- `violates.kind === 'validator'`;
|
|
222
|
+
- `violates.name === 'shape'`.
|
|
223
|
+
|
|
224
|
+
### Describing a refine rule
|
|
225
|
+
|
|
226
|
+
Callbacks themselves are not serialized, but you can attach a compact machine-readable descriptor to the rule:
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
const registration = shape({
|
|
230
|
+
password: isString,
|
|
231
|
+
confirmPassword: isString,
|
|
232
|
+
}).refine(value => {
|
|
233
|
+
return value.password === value.confirmPassword
|
|
234
|
+
? []
|
|
235
|
+
: [{ path: ['confirmPassword'], code: 'shape.fields.mismatch' }]
|
|
236
|
+
}, {
|
|
237
|
+
kind: 'passwordConfirmation',
|
|
238
|
+
metadata: {
|
|
239
|
+
fields: ['password', 'confirmPassword'],
|
|
240
|
+
},
|
|
241
|
+
})
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
This shows up later in `describe(...)` under the shape `rules` array.
|
|
245
|
+
|
|
246
|
+
### `fieldsMatch(...)`
|
|
247
|
+
|
|
248
|
+
`fieldsMatch(...)` is a small helper for the common confirmation-field case.
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
const registration = shape({
|
|
252
|
+
password: isString,
|
|
253
|
+
confirmPassword: isString,
|
|
254
|
+
}).fieldsMatch(['password', 'confirmPassword'])
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
It also supports nested selectors:
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
const registration = shape({
|
|
261
|
+
password: isString,
|
|
262
|
+
confirm: shape({
|
|
263
|
+
password: isString,
|
|
264
|
+
}),
|
|
265
|
+
}).fieldsMatch(['password', ['confirm', 'password']])
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Validation Order
|
|
269
|
+
|
|
270
|
+
At a high level, shape validation works like this:
|
|
271
|
+
|
|
272
|
+
1. The input must be a plain record-like object.
|
|
273
|
+
2. Every declared field is validated recursively.
|
|
274
|
+
3. Strict unknown-key checks run if the shape is in `'strict'` mode.
|
|
275
|
+
4. Object-level rules run only if structural validation succeeded first.
|
|
276
|
+
|
|
277
|
+
That ordering matters because object-level rules can then assume a stable validated object shape.
|
|
278
|
+
|
|
279
|
+
## Nested Shapes
|
|
280
|
+
|
|
281
|
+
Shapes can be nested freely because they are regular validators.
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
const form = shape({
|
|
285
|
+
profile: shape({
|
|
286
|
+
email: isString,
|
|
287
|
+
nickname: optional(isString),
|
|
288
|
+
}).strict(),
|
|
289
|
+
})
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Nested failures keep precise paths such as `['profile', 'email']`.
|
|
293
|
+
|
|
294
|
+
## Introspection
|
|
295
|
+
|
|
296
|
+
Shapes participate in the public descriptor tree returned by `describe(...)`.
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
import { describe } from '@modulify/validator'
|
|
300
|
+
|
|
301
|
+
const descriptor = describe(shape({
|
|
302
|
+
email: isString,
|
|
303
|
+
}).strict())
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Shape descriptors expose:
|
|
307
|
+
|
|
308
|
+
- `unknownKeys`;
|
|
309
|
+
- `fields`;
|
|
310
|
+
- `rules`;
|
|
311
|
+
- optional `metadata`.
|
|
312
|
+
|
|
313
|
+
This is useful for adapters, tooling, and derived exports such as JSON Schema.
|
|
314
|
+
|
|
315
|
+
## Metadata
|
|
316
|
+
|
|
317
|
+
`meta(...)` can annotate shapes and their fields without changing validation semantics.
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
import {
|
|
321
|
+
describe,
|
|
322
|
+
meta,
|
|
323
|
+
} from '@modulify/validator'
|
|
324
|
+
|
|
325
|
+
const profile = meta(shape({
|
|
326
|
+
email: meta(isString, {
|
|
327
|
+
title: 'Email',
|
|
328
|
+
format: 'email',
|
|
329
|
+
}),
|
|
330
|
+
}).strict(), {
|
|
331
|
+
title: 'Profile',
|
|
332
|
+
})
|
|
333
|
+
|
|
334
|
+
const descriptor = describe(profile)
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
Metadata stays explicit:
|
|
338
|
+
|
|
339
|
+
- there is no implicit inheritance across the tree;
|
|
340
|
+
- shape metadata and field metadata are attached exactly where `meta(...)` was applied.
|
|
341
|
+
|
|
342
|
+
## Practical Notes
|
|
343
|
+
|
|
344
|
+
- `shape(...)` is object-focused, not schema-first;
|
|
345
|
+
- it reuses the same constraints you already use elsewhere in the library;
|
|
346
|
+
- derived helpers are intentionally small and predictable;
|
|
347
|
+
- object-level rules are expressive, but intentionally lightweight;
|
|
348
|
+
- mismatch between runtime semantics and external schema formats should be handled explicitly through adapter layers such as `describe(...)` or `toJsonSchema(...)`.
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# Metadata And Introspection
|
|
2
|
+
|
|
3
|
+
[Documentation index](./00-index.md)
|
|
4
|
+
[Russian translation](../ru/02-metadata-and-introspection.md)
|
|
5
|
+
|
|
6
|
+
`@modulify/validator` exposes a public introspection layer built around two small entrypoints:
|
|
7
|
+
|
|
8
|
+
- `meta(...)` for attaching machine-readable metadata to any constraint;
|
|
9
|
+
- `describe(...)` for reading a stable recursive descriptor tree from built-in constraints and compatible custom validators.
|
|
10
|
+
|
|
11
|
+
This layer is intentionally adapter-oriented. It exists so application code and tooling can inspect validation structures without depending on private runtime internals.
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import {
|
|
17
|
+
describe,
|
|
18
|
+
isString,
|
|
19
|
+
meta,
|
|
20
|
+
optional,
|
|
21
|
+
shape,
|
|
22
|
+
} from '@modulify/validator'
|
|
23
|
+
|
|
24
|
+
const registration = meta(shape({
|
|
25
|
+
email: meta(isString, {
|
|
26
|
+
title: 'Email',
|
|
27
|
+
format: 'email',
|
|
28
|
+
}),
|
|
29
|
+
nickname: optional(isString),
|
|
30
|
+
}).strict(), {
|
|
31
|
+
title: 'Registration form',
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
const descriptor = describe(registration)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## What `meta(...)` Does
|
|
38
|
+
|
|
39
|
+
`meta(...)` attaches read-only machine-readable metadata to a constraint without changing validation semantics.
|
|
40
|
+
|
|
41
|
+
That means:
|
|
42
|
+
|
|
43
|
+
- the original constraint is not mutated;
|
|
44
|
+
- validation success and failure behavior stays the same;
|
|
45
|
+
- the metadata becomes visible through `describe(...)`;
|
|
46
|
+
- nested metadata remains attached exactly where it was applied.
|
|
47
|
+
|
|
48
|
+
Example:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
const email = meta(isString, {
|
|
52
|
+
title: 'Email',
|
|
53
|
+
widget: 'email',
|
|
54
|
+
})
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The same mechanism works for:
|
|
58
|
+
|
|
59
|
+
- assertions;
|
|
60
|
+
- wrappers such as `optional(...)`;
|
|
61
|
+
- object shapes;
|
|
62
|
+
- structural validators such as `each(...)` or `tuple(...)`;
|
|
63
|
+
- custom validators.
|
|
64
|
+
|
|
65
|
+
## Metadata Is Explicit, Not Inherited
|
|
66
|
+
|
|
67
|
+
Metadata does not automatically flow through the descriptor tree.
|
|
68
|
+
|
|
69
|
+
If metadata is attached to a parent shape, it stays on that shape node. If metadata is attached to a child field, it stays on that child field node.
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
const profile = meta(shape({
|
|
73
|
+
email: meta(isString, { title: 'Email' }),
|
|
74
|
+
name: isString,
|
|
75
|
+
}), {
|
|
76
|
+
title: 'Profile',
|
|
77
|
+
})
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
In this example:
|
|
81
|
+
|
|
82
|
+
- the shape node gets `title: 'Profile'`;
|
|
83
|
+
- the `email` field gets `title: 'Email'`;
|
|
84
|
+
- the `name` field gets no metadata unless you annotate it explicitly.
|
|
85
|
+
|
|
86
|
+
This keeps metadata predictable and avoids hidden tree-wide behavior.
|
|
87
|
+
|
|
88
|
+
## Metadata Merging
|
|
89
|
+
|
|
90
|
+
If `meta(...)` is applied multiple times to the same constraint, metadata objects are merged from left to right.
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
const annotated = meta(
|
|
94
|
+
meta(isString, { title: 'Email' }),
|
|
95
|
+
{ placeholder: 'name@example.com' }
|
|
96
|
+
)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
This produces one descriptor node whose `metadata` contains both keys.
|
|
100
|
+
|
|
101
|
+
## What `describe(...)` Returns
|
|
102
|
+
|
|
103
|
+
`describe(...)` returns a stable recursive descriptor tree.
|
|
104
|
+
|
|
105
|
+
The descriptor is intentionally machine-readable rather than presentation-oriented. It is designed for adapters and tooling, not for rendering built-in human-readable messages.
|
|
106
|
+
|
|
107
|
+
Examples of built-in `kind` values:
|
|
108
|
+
|
|
109
|
+
- `'assertion'`;
|
|
110
|
+
- `'allOf'`;
|
|
111
|
+
- `'optional'`, `'nullable'`, `'nullish'`;
|
|
112
|
+
- `'shape'`, `'each'`, `'tuple'`, `'record'`;
|
|
113
|
+
- `'union'`, `'discriminatedUnion'`;
|
|
114
|
+
- `'validator'` as a generic fallback for custom validators without a public structural descriptor.
|
|
115
|
+
|
|
116
|
+
## Assertion Descriptors
|
|
117
|
+
|
|
118
|
+
Leaf assertions produce descriptors with:
|
|
119
|
+
|
|
120
|
+
- `kind: 'assertion'`;
|
|
121
|
+
- `name`;
|
|
122
|
+
- `bail`;
|
|
123
|
+
- primary `code` and `args`;
|
|
124
|
+
- `constraints` for extra checker pipeline entries;
|
|
125
|
+
- optional `metadata`.
|
|
126
|
+
|
|
127
|
+
Example:
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
const descriptor = describe(meta(isString, { title: 'Display name' }))
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
This makes assertion metadata visible without changing the assertion runtime itself.
|
|
134
|
+
|
|
135
|
+
## Wrapper And Structural Descriptors
|
|
136
|
+
|
|
137
|
+
Composed validators describe themselves recursively.
|
|
138
|
+
|
|
139
|
+
Examples:
|
|
140
|
+
|
|
141
|
+
- `optional(...)` exposes `child`;
|
|
142
|
+
- `each(...)` exposes `item`;
|
|
143
|
+
- `tuple(...)` exposes `items`;
|
|
144
|
+
- `union(...)` exposes `branches`;
|
|
145
|
+
- `record(...)` exposes `values`.
|
|
146
|
+
|
|
147
|
+
This recursive structure is what makes adapter layers possible without touching runtime validator internals.
|
|
148
|
+
|
|
149
|
+
## Shape Descriptors
|
|
150
|
+
|
|
151
|
+
Shapes provide one of the richest built-in descriptor nodes.
|
|
152
|
+
|
|
153
|
+
Shape descriptors include:
|
|
154
|
+
|
|
155
|
+
- `metadata`;
|
|
156
|
+
- `unknownKeys` with `'passthrough'` or `'strict'`;
|
|
157
|
+
- `fields` with one descriptor per object field;
|
|
158
|
+
- `rules` with compact summaries of object-level rules such as `refine(...)` and `fieldsMatch(...)`.
|
|
159
|
+
|
|
160
|
+
Example:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
const descriptor = describe(shape({
|
|
164
|
+
email: meta(isString, { format: 'email' }),
|
|
165
|
+
password: isString,
|
|
166
|
+
}).strict())
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
This is especially useful for:
|
|
170
|
+
|
|
171
|
+
- form adapters;
|
|
172
|
+
- contract adapters;
|
|
173
|
+
- custom documentation generators;
|
|
174
|
+
- JSON Schema export through a separate derivation layer.
|
|
175
|
+
|
|
176
|
+
## Object-Level Rules In Introspection
|
|
177
|
+
|
|
178
|
+
`refine(...)` callbacks themselves are not serialized.
|
|
179
|
+
|
|
180
|
+
Instead, shapes keep lightweight rule descriptors in `rules`.
|
|
181
|
+
|
|
182
|
+
Built-in examples:
|
|
183
|
+
|
|
184
|
+
- `fieldsMatch(...)` produces a compact `fieldsMatch` rule descriptor;
|
|
185
|
+
- `refine(...)` can accept a custom compact rule descriptor object.
|
|
186
|
+
|
|
187
|
+
This keeps the public descriptor tree stable and serializable enough for tooling, while avoiding the impossible task of serializing arbitrary callbacks.
|
|
188
|
+
|
|
189
|
+
## Custom Validators
|
|
190
|
+
|
|
191
|
+
Custom validators can participate in the same introspection layer through `custom(...)` plus a public `describe()` method.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import { custom } from '@modulify/validator'
|
|
195
|
+
|
|
196
|
+
const isoDate = custom({
|
|
197
|
+
check(value: unknown): value is string {
|
|
198
|
+
return typeof value === 'string'
|
|
199
|
+
},
|
|
200
|
+
run() {
|
|
201
|
+
return []
|
|
202
|
+
},
|
|
203
|
+
describe() {
|
|
204
|
+
return {
|
|
205
|
+
kind: 'stringFormat',
|
|
206
|
+
format: 'iso-date',
|
|
207
|
+
} as const
|
|
208
|
+
},
|
|
209
|
+
})
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Then:
|
|
213
|
+
|
|
214
|
+
- `describe(isoDate)` returns that public descriptor;
|
|
215
|
+
- `meta(...)` can still annotate the custom validator above it.
|
|
216
|
+
|
|
217
|
+
If a custom validator does not expose `describe()`, `describe(...)` falls back to:
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
{ kind: 'validator' }
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
That fallback is intentionally minimal.
|
|
224
|
+
|
|
225
|
+
## Adapter Example
|
|
226
|
+
|
|
227
|
+
A small adapter can walk a shape descriptor and collect widget hints:
|
|
228
|
+
|
|
229
|
+
```typescript
|
|
230
|
+
import type { ConstraintDescriptor } from '@modulify/validator'
|
|
231
|
+
|
|
232
|
+
function collectFieldWidgets(node: ConstraintDescriptor) {
|
|
233
|
+
if (node.kind !== 'shape') {
|
|
234
|
+
return {}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return Object.fromEntries(
|
|
238
|
+
Object.entries(node.fields).map(([key, child]) => [key, child.metadata?.widget ?? 'text'])
|
|
239
|
+
)
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
This is the main purpose of the introspection layer: external code can derive its own view without knowing how runtime validation is implemented internally.
|
|
244
|
+
|
|
245
|
+
## Relationship To JSON Schema Export
|
|
246
|
+
|
|
247
|
+
`toJsonSchema(...)` is a separate layer derived from the public descriptor contract.
|
|
248
|
+
|
|
249
|
+
That means:
|
|
250
|
+
|
|
251
|
+
- `describe(...)` is the public introspection source of truth;
|
|
252
|
+
- JSON Schema export builds on top of that public shape;
|
|
253
|
+
- the library does not maintain a second hidden schema model for exporters.
|
|
254
|
+
|
|
255
|
+
This separation is intentional:
|
|
256
|
+
|
|
257
|
+
- runtime validation stays runtime-first;
|
|
258
|
+
- metadata stays explicit;
|
|
259
|
+
- export behavior can evolve as a thin adapter layer.
|
|
260
|
+
|
|
261
|
+
## Practical Boundaries
|
|
262
|
+
|
|
263
|
+
Current boundaries of the metadata and introspection layer:
|
|
264
|
+
|
|
265
|
+
- no built-in message rendering or i18n;
|
|
266
|
+
- no metadata inheritance across the tree;
|
|
267
|
+
- no separate schema DSL alongside runtime constraints;
|
|
268
|
+
- no serialization of runtime callbacks from `refine(...)`;
|
|
269
|
+
- custom validators without public descriptors intentionally remain opaque.
|
|
270
|
+
|
|
271
|
+
## Practical Notes
|
|
272
|
+
|
|
273
|
+
- use `meta(...)` when you need machine-readable annotations, not hidden behavior;
|
|
274
|
+
- use `describe(...)` when you need a stable structural view of a constraint tree;
|
|
275
|
+
- keep custom descriptors compact and ecosystem-facing;
|
|
276
|
+
- prefer deriving external formats from descriptors instead of re-reading private validator internals.
|