@modulify/validator 0.0.2 → 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 +55 -0
- package/CODE_OF_CONDUCT.md +128 -0
- package/README.md +300 -119
- package/dist/assert.cjs +66 -0
- package/dist/assert.d.ts +16 -0
- package/dist/assert.mjs +66 -0
- package/dist/assertions.cjs +207 -0
- package/dist/assertions.d.ts +58 -0
- package/dist/assertions.mjs +207 -0
- 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 +219 -315
- package/dist/index.d.ts +12 -0
- package/dist/index.mjs +220 -306
- 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 +116 -0
- package/dist/predicates.d.ts +56 -0
- package/dist/predicates.mjs +116 -0
- 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/logo.png +0 -0
- package/package.json +85 -35
- 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 +780 -86
- package/types/json-schema.d.ts +75 -0
- package/dist/index.cjs.map +0 -1
- package/dist/index.mjs.map +0 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Violation Code Types
|
|
2
|
+
|
|
3
|
+
[Documentation index](./00-index.md)
|
|
4
|
+
[Russian translation](../ru/08-violation-code-types.md)
|
|
5
|
+
|
|
6
|
+
`@modulify/validator` exposes two related layers around machine-readable codes:
|
|
7
|
+
|
|
8
|
+
- exact literal codes in assertion descriptors and structured violations;
|
|
9
|
+
- an extensible global registry that can be used to derive a project-wide union of known codes.
|
|
10
|
+
|
|
11
|
+
This guide explains when each layer is useful, how they work together, and how to extend them safely.
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
The public entrypoints are:
|
|
16
|
+
|
|
17
|
+
- `ViolationCodeEntry` - a compact contract record for a known code;
|
|
18
|
+
- `ViolationCodeRegistry` - an interface that collects known codes;
|
|
19
|
+
- `ViolationCode` - a union extracted from `keyof ViolationCodeRegistry`;
|
|
20
|
+
- `ViolationArgs<C>`, `ViolationKindOf<C>`, and `ViolationNameOf<C>` - code-driven utility types.
|
|
21
|
+
|
|
22
|
+
The package ships built-in keys for its own built-in violations, for example:
|
|
23
|
+
|
|
24
|
+
- `'type.string'`
|
|
25
|
+
- `'length.min'`
|
|
26
|
+
- `'shape.unknown-key'`
|
|
27
|
+
- `'runtime.rejection'`
|
|
28
|
+
|
|
29
|
+
So the following works out of the box:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import type { ViolationCode } from '@modulify/validator'
|
|
33
|
+
|
|
34
|
+
const code: ViolationCode = 'type.string'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Exact Codes From `describe(...)`
|
|
38
|
+
|
|
39
|
+
Built-in assertions now preserve their exact code literals in introspection.
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import {
|
|
43
|
+
describe,
|
|
44
|
+
hasLength,
|
|
45
|
+
isString,
|
|
46
|
+
} from '@modulify/validator'
|
|
47
|
+
|
|
48
|
+
const stringDescriptor = describe(isString)
|
|
49
|
+
const lengthDescriptor = describe(hasLength({ min: 3 }))
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
In TypeScript this means:
|
|
53
|
+
|
|
54
|
+
- `stringDescriptor.code` is typed as `'type.string'`;
|
|
55
|
+
- `stringDescriptor.args` is typed as `[]`;
|
|
56
|
+
- `lengthDescriptor.code` is typed as `'length.unsupported-type'`;
|
|
57
|
+
- `lengthDescriptor.constraints[number].code` is typed as a concrete length-code union instead of plain `string`.
|
|
58
|
+
|
|
59
|
+
This is useful when adapters inspect descriptors and want code-aware branching without hand-written casts.
|
|
60
|
+
|
|
61
|
+
## What The Global Registry Solves
|
|
62
|
+
|
|
63
|
+
Exact literals on individual values are good for local introspection.
|
|
64
|
+
|
|
65
|
+
The global registry solves a different problem: extracting one reusable union for the whole app.
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import type { ViolationCode } from '@modulify/validator'
|
|
69
|
+
|
|
70
|
+
type AppViolationCode = ViolationCode
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
That union can be reused in:
|
|
74
|
+
|
|
75
|
+
- message dictionaries;
|
|
76
|
+
- analytics payload contracts;
|
|
77
|
+
- API error envelopes;
|
|
78
|
+
- UI error-state mappers;
|
|
79
|
+
- shared helper utilities.
|
|
80
|
+
|
|
81
|
+
## Extending `ViolationCodeRegistry`
|
|
82
|
+
|
|
83
|
+
The registry is designed for module augmentation and now stores small code contracts.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import type { ViolationCodeEntry } from '@modulify/validator'
|
|
87
|
+
import '@modulify/validator'
|
|
88
|
+
|
|
89
|
+
declare module '@modulify/validator' {
|
|
90
|
+
interface ViolationCodeRegistry {
|
|
91
|
+
'user.email.taken': ViolationCodeEntry<'validator', 'user', readonly []>;
|
|
92
|
+
'profile.password.mismatch': ViolationCodeEntry<'validator', 'shape', readonly []>;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
After that:
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
import type { ViolationCode } from '@modulify/validator'
|
|
101
|
+
|
|
102
|
+
const codeA: ViolationCode = 'user.email.taken'
|
|
103
|
+
const codeB: ViolationCode = 'profile.password.mismatch'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
This lets you define project-specific codes once and reuse the extracted union everywhere else.
|
|
107
|
+
|
|
108
|
+
If you still have older augmentations that use `never`, they continue to contribute to `ViolationCode`, but they fall back to generic `kind` / `name` / `args` typing until you migrate them to `ViolationCodeEntry`.
|
|
109
|
+
|
|
110
|
+
## Deriving Related Types From A Code
|
|
111
|
+
|
|
112
|
+
Once a code is registered with a contract entry, it becomes a key into the related type information.
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
import type {
|
|
116
|
+
ViolationArgs,
|
|
117
|
+
ViolationKindOf,
|
|
118
|
+
ViolationNameOf,
|
|
119
|
+
ViolationSubject,
|
|
120
|
+
} from '@modulify/validator'
|
|
121
|
+
|
|
122
|
+
type PasswordArgs = ViolationArgs<'profile.password.mismatch'>
|
|
123
|
+
type PasswordKind = ViolationKindOf<'profile.password.mismatch'>
|
|
124
|
+
type PasswordName = ViolationNameOf<'profile.password.mismatch'>
|
|
125
|
+
type PasswordSubject = ViolationSubject<'profile.password.mismatch'>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
That means:
|
|
129
|
+
|
|
130
|
+
- `PasswordArgs` becomes `readonly []`;
|
|
131
|
+
- `PasswordKind` becomes `'validator'`;
|
|
132
|
+
- `PasswordName` becomes `'shape'`;
|
|
133
|
+
- `PasswordSubject` gets the matching `kind`, `name`, `code`, and `args`.
|
|
134
|
+
|
|
135
|
+
## Using Augmented Codes In Custom Assertions
|
|
136
|
+
|
|
137
|
+
Custom assertions can keep their own explicit code literals.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { assert } from '@modulify/validator/assertions'
|
|
141
|
+
|
|
142
|
+
const isAvailableEmail = assert(
|
|
143
|
+
(value: unknown): value is string => typeof value === 'string' && value.includes('@'),
|
|
144
|
+
{
|
|
145
|
+
name: 'isAvailableEmail',
|
|
146
|
+
bail: true,
|
|
147
|
+
code: 'user.email.taken',
|
|
148
|
+
}
|
|
149
|
+
)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Then `describe(isAvailableEmail).code` is typed as `'user.email.taken'`.
|
|
153
|
+
|
|
154
|
+
This part does not depend on the global union extraction. The literal is preserved directly from the assertion definition.
|
|
155
|
+
|
|
156
|
+
## Using Augmented Codes In Shape Refinements
|
|
157
|
+
|
|
158
|
+
The same idea applies to object-level refinement issues.
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
import type { ObjectShapeRefinementIssue } from '@modulify/validator'
|
|
162
|
+
import {
|
|
163
|
+
isEmail,
|
|
164
|
+
isString,
|
|
165
|
+
shape,
|
|
166
|
+
} from '@modulify/validator'
|
|
167
|
+
|
|
168
|
+
const signUpForm = shape({
|
|
169
|
+
email: [isString, isEmail],
|
|
170
|
+
password: isString,
|
|
171
|
+
confirmation: shape({
|
|
172
|
+
password: isString,
|
|
173
|
+
}),
|
|
174
|
+
}).refine(value => {
|
|
175
|
+
if (value.password === value.confirmation.password) {
|
|
176
|
+
return []
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return [{
|
|
180
|
+
path: ['confirmation', 'password'],
|
|
181
|
+
code: 'profile.password.mismatch',
|
|
182
|
+
args: [],
|
|
183
|
+
}] satisfies ObjectShapeRefinementIssue<'profile.password.mismatch'>
|
|
184
|
+
})
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
That keeps the refinement code aligned with the same registry-backed union used elsewhere.
|
|
188
|
+
|
|
189
|
+
## A Practical Pattern For App-Level Mappers
|
|
190
|
+
|
|
191
|
+
Many consumers want a small helper layer that maps codes into rendering or transport concerns.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import type {
|
|
195
|
+
Violation,
|
|
196
|
+
ViolationCode,
|
|
197
|
+
} from '@modulify/validator'
|
|
198
|
+
|
|
199
|
+
const labels: Partial<Record<ViolationCode, string>> = {
|
|
200
|
+
'type.string': 'Expected a string',
|
|
201
|
+
'length.min': 'Value is too short',
|
|
202
|
+
'user.email.taken': 'Email is already taken',
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function toLabel(violation: Violation) {
|
|
206
|
+
return labels[violation.violates.code as ViolationCode] ?? violation.violates.code
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
You do not need to force every possible code into one giant exhaustive map. `Partial<Record<ViolationCode, ...>>` is often the most practical option.
|
|
211
|
+
|
|
212
|
+
## Built-In Union vs Explicit Literal Preservation
|
|
213
|
+
|
|
214
|
+
These two behaviors are complementary:
|
|
215
|
+
|
|
216
|
+
- built-in and augmented codes appear in the reusable `ViolationCode` union;
|
|
217
|
+
- explicit custom literals are preserved directly where values are created, such as `assert(...)` or typed refinement issues.
|
|
218
|
+
|
|
219
|
+
That distinction is important.
|
|
220
|
+
|
|
221
|
+
If you define a custom literal but do not augment `ViolationCodeRegistry`:
|
|
222
|
+
|
|
223
|
+
- local descriptor and violation values can still carry that exact literal;
|
|
224
|
+
- the global `ViolationCode` union will not include it yet.
|
|
225
|
+
|
|
226
|
+
If you augment `ViolationCodeRegistry` with `never` instead of `ViolationCodeEntry`:
|
|
227
|
+
|
|
228
|
+
- the global `ViolationCode` union will include the code;
|
|
229
|
+
- the code still falls back to generic `kind`, `name`, and `args` typing.
|
|
230
|
+
|
|
231
|
+
So the usual recommendation is:
|
|
232
|
+
|
|
233
|
+
1. define the custom code where the violation is produced;
|
|
234
|
+
2. add it to `ViolationCodeRegistry`;
|
|
235
|
+
3. reuse `ViolationCode` in adapters and app-level helper types.
|
|
236
|
+
|
|
237
|
+
## Related APIs
|
|
238
|
+
|
|
239
|
+
- [Metadata And Introspection](./02-metadata-and-introspection.md)
|
|
240
|
+
- [Violations](./03-violations.md)
|
|
241
|
+
- [Public API](./05-public-api.md)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Документация
|
|
2
|
+
|
|
3
|
+
- [README на русском](./README.md) - Перевод основного README с обзором библиотеки и ссылками на подробные руководства.
|
|
4
|
+
- [API объектных схем](./01-shape-api.md) - Подробное описание `shape(...)`, производных вспомогательных методов, режимов unknown keys и правил уровня объекта.
|
|
5
|
+
- [Метаданные и интроспекция](./02-metadata-and-introspection.md) - Подробное описание слоя метаданных, introspection и пользовательских descriptors.
|
|
6
|
+
- [Нарушения](./03-violations.md) - Подробное описание формата violation, `collection(...)` и дерева ошибок.
|
|
7
|
+
- [Экспорт JSON Schema](./04-json-schema-export.md) - Подробное описание слоя экспорта, поддерживаемых преобразований и режимов strict и best-effort.
|
|
8
|
+
- [Публичный API](./05-public-api.md) - Обзор публичных точек входа, subpath exports и результата валидации.
|
|
9
|
+
- [Практические рецепты](./06-common-recipes.md) - Практические сценарии по выбору слоя, валидации payload, переиспользованию shape, построению состояния ошибок в UI и безопасному экспорту схемы.
|
|
10
|
+
- [Справка для AI](./07-ai-reference.md) - Краткое описание контракта для AI agents, инструментов и быстрого поиска стабильной семантики библиотеки.
|
|
11
|
+
- [Типы кодов нарушений](./08-violation-code-types.md) - Подробное руководство по `ViolationCodeRegistry`, `ViolationCode`, сохранению literal-кодов в descriptors и внешнему расширению реестра.
|
|
12
|
+
|
|
13
|
+
## Переводы
|
|
14
|
+
|
|
15
|
+
- [English](../en/00-index.md)
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
# API объектных схем
|
|
2
|
+
|
|
3
|
+
[Оглавление документации](./00-index.md)
|
|
4
|
+
[English version](../en/01-shape-api.md)
|
|
5
|
+
|
|
6
|
+
`shape(...)` — это переиспользуемый API объектных схем в `@modulify/validator`.
|
|
7
|
+
|
|
8
|
+
Он сохраняет тот же runtime validation kernel, что и остальная библиотека, но добавляет небольшой неизменяемый object-oriented слой для:
|
|
9
|
+
|
|
10
|
+
- валидации вложенных объектов;
|
|
11
|
+
- переиспользуемых object schema;
|
|
12
|
+
- производных схем вроде `pick(...)`, `omit(...)` и `partial(...)`;
|
|
13
|
+
- object-level rules вроде `refine(...)` и `fieldsMatch(...)`;
|
|
14
|
+
- descriptor-based introspection через `describe(...)`.
|
|
15
|
+
|
|
16
|
+
## Быстрый старт
|
|
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(...)` возвращает обычный validator, поэтому его можно использовать везде, где принимается regular constraint.
|
|
41
|
+
|
|
42
|
+
## Ментальная модель
|
|
43
|
+
|
|
44
|
+
Shape по-прежнему остаётся validator-ом. Дополнительный API — это тонкая обёртка поверх object descriptor и небольшого набора immutable helpers для derivation.
|
|
45
|
+
|
|
46
|
+
Каждое поле в descriptor может содержать:
|
|
47
|
+
|
|
48
|
+
- один constraint;
|
|
49
|
+
- массив constraint-ов, которые выполняются последовательно;
|
|
50
|
+
- другой structural validator вроде `shape(...)`, `each(...)`, `tuple(...)`, `record(...)`, `union(...)` или `discriminatedUnion(...)`.
|
|
51
|
+
|
|
52
|
+
Поэтому object validation остаётся согласованной с остальной библиотекой:
|
|
53
|
+
|
|
54
|
+
- field-level checks переиспользуют те же assertions и combinators;
|
|
55
|
+
- violations сохраняют обычные вложенные `path`;
|
|
56
|
+
- introspection идёт через тот же контракт `describe(...)`;
|
|
57
|
+
- metadata остаётся явной через `meta(...)`.
|
|
58
|
+
|
|
59
|
+
## Базовое создание shape
|
|
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
|
+
- входное значение должно быть plain record-like object;
|
|
78
|
+
- каждое объявленное поле валидируется по своему slot;
|
|
79
|
+
- вложенные violations возвращаются на пути поля;
|
|
80
|
+
- unknown keys по умолчанию разрешены.
|
|
81
|
+
|
|
82
|
+
## Неизвестные ключи
|
|
83
|
+
|
|
84
|
+
У shape есть два режима работы с неизвестными ключами:
|
|
85
|
+
|
|
86
|
+
- `'passthrough'` — лишние ключи разрешены;
|
|
87
|
+
- `'strict'` — лишние ключи создают `shape.unknown-key` violations на пути лишнего ключа.
|
|
88
|
+
|
|
89
|
+
`shape(...)` по умолчанию создаётся в режиме `'passthrough'`.
|
|
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
|
+
Важно:
|
|
101
|
+
|
|
102
|
+
- `strict()` и `passthrough()` сохраняют тот же field descriptor;
|
|
103
|
+
- `strict()` и `passthrough()` сохраняют существующие object-level rules;
|
|
104
|
+
- меняется только поведение unknown keys.
|
|
105
|
+
|
|
106
|
+
## Публичные свойства shape
|
|
107
|
+
|
|
108
|
+
У экземпляров shape есть:
|
|
109
|
+
|
|
110
|
+
- `descriptor` — текущий object descriptor;
|
|
111
|
+
- `unknownKeys` — текущий режим unknown keys;
|
|
112
|
+
- стандартное validator-поведение через `check(...)` и `run(...)`.
|
|
113
|
+
|
|
114
|
+
Это удобно, когда одну и ту же shape нужно валидировать, описывать через `describe(...)` и затем выводить производные схемы без ручной пересборки.
|
|
115
|
+
|
|
116
|
+
## Производные схемы
|
|
117
|
+
|
|
118
|
+
Все helpers у shape immutable. Каждый вызов возвращает новую shape.
|
|
119
|
+
|
|
120
|
+
### `pick(keys)` и `omit(keys)`
|
|
121
|
+
|
|
122
|
+
Используются, когда нужен поднабор текущей 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()` оборачивает каждое поле в `optional(...)`.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const editableProfile = profile.partial()
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Это соответствует текущей модели библиотеки, в которой:
|
|
144
|
+
|
|
145
|
+
- отсутствующий ключ;
|
|
146
|
+
- и ключ со значением `undefined`;
|
|
147
|
+
|
|
148
|
+
во время валидации трактуются одинаково.
|
|
149
|
+
|
|
150
|
+
### `extend(descriptor)`
|
|
151
|
+
|
|
152
|
+
`extend(...)` добавляет или переопределяет поля через обычный object descriptor.
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
const account = profile.extend({
|
|
156
|
+
team: isString,
|
|
157
|
+
})
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### `merge(shape)`
|
|
161
|
+
|
|
162
|
+
`merge(...)` объединяет текущую shape с другой shape.
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
const account = profile.merge(shape({
|
|
166
|
+
team: isString,
|
|
167
|
+
role: exact('editor'),
|
|
168
|
+
}))
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Поведение:
|
|
172
|
+
|
|
173
|
+
- unknown-key mode берётся у receiver shape;
|
|
174
|
+
- пересекающиеся ключи переопределяются правой shape;
|
|
175
|
+
- object-level rules из merge target не пытаются автоматически объединяться в новый общий набор.
|
|
176
|
+
|
|
177
|
+
## Семантика сохранения rules
|
|
178
|
+
|
|
179
|
+
Есть намеренное различие между переключением режима и структурным derivation.
|
|
180
|
+
|
|
181
|
+
`strict()` и `passthrough()` сохраняют object-level rules, потому что структура shape по сути остаётся той же.
|
|
182
|
+
|
|
183
|
+
`pick()`, `omit()`, `partial()`, `extend()` и `merge()` намеренно сбрасывают object-level rules, потому что generic refinements непрозрачны и могут зависеть от полей, которых больше нет или которые теперь ведут себя иначе.
|
|
184
|
+
|
|
185
|
+
Так derived schemas остаются предсказуемыми и библиотека не делает сомнительных предположений о валидности старых refinements.
|
|
186
|
+
|
|
187
|
+
## Правила уровня объекта
|
|
188
|
+
|
|
189
|
+
Shapes позволяют выражать cross-field invariants без внедрения второй schema language.
|
|
190
|
+
|
|
191
|
+
### `refine(...)`
|
|
192
|
+
|
|
193
|
+
`refine(...)` добавляет синхронное object-level rule, которое запускается только после того, как базовая shape уже успешно провалидировалась как объект.
|
|
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(...)` специально остаётся тонким:
|
|
211
|
+
|
|
212
|
+
- он только sync;
|
|
213
|
+
- при успехе возвращает `[]`, `null` или `undefined`;
|
|
214
|
+
- при ошибке возвращает один issue или массив issue;
|
|
215
|
+
- `path` задаётся относительно текущей shape и по умолчанию равен `[]`;
|
|
216
|
+
- `value` необязателен и по умолчанию берётся из значения объекта по этому относительному пути;
|
|
217
|
+
- `code` остаётся machine-readable.
|
|
218
|
+
|
|
219
|
+
Сгенерированные violations используют:
|
|
220
|
+
|
|
221
|
+
- `violates.kind === 'validator'`;
|
|
222
|
+
- `violates.name === 'shape'`.
|
|
223
|
+
|
|
224
|
+
### Descriptor для refine rule
|
|
225
|
+
|
|
226
|
+
Сами callbacks не сериализуются, но для rule можно добавить компактный machine-readable descriptor:
|
|
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
|
+
Позже это попадает в `describe(...)` в массив `rules`.
|
|
245
|
+
|
|
246
|
+
### `fieldsMatch(...)`
|
|
247
|
+
|
|
248
|
+
`fieldsMatch(...)` — небольшой helper для частого случая с полем подтверждения.
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
const registration = shape({
|
|
252
|
+
password: isString,
|
|
253
|
+
confirmPassword: isString,
|
|
254
|
+
}).fieldsMatch(['password', 'confirmPassword'])
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Он также поддерживает 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
|
+
## Порядок валидации
|
|
269
|
+
|
|
270
|
+
На верхнем уровне валидация shape устроена так:
|
|
271
|
+
|
|
272
|
+
1. Вход должен быть plain record-like object.
|
|
273
|
+
2. Каждое объявленное поле валидируется рекурсивно.
|
|
274
|
+
3. В режиме `'strict'` выполняются проверки неизвестных ключей.
|
|
275
|
+
4. Object-level rules запускаются только если structural validation до этого полностью прошла.
|
|
276
|
+
|
|
277
|
+
Этот порядок важен, потому что object-level rules тогда работают уже с устойчивой провалидированной формой объекта.
|
|
278
|
+
|
|
279
|
+
## Вложенные shape
|
|
280
|
+
|
|
281
|
+
Shape можно свободно вкладывать друг в друга, потому что это обычные validators.
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
const form = shape({
|
|
285
|
+
profile: shape({
|
|
286
|
+
email: isString,
|
|
287
|
+
nickname: optional(isString),
|
|
288
|
+
}).strict(),
|
|
289
|
+
})
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Вложенные ошибки сохраняют точные пути вроде `['profile', 'email']`.
|
|
293
|
+
|
|
294
|
+
## Интроспекция
|
|
295
|
+
|
|
296
|
+
Shape участвуют в публичном descriptor tree, который возвращает `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 содержат:
|
|
307
|
+
|
|
308
|
+
- `unknownKeys`;
|
|
309
|
+
- `fields`;
|
|
310
|
+
- `rules`;
|
|
311
|
+
- опциональную `metadata`.
|
|
312
|
+
|
|
313
|
+
Это полезно для adapters, tooling и производных export layers, например для JSON Schema.
|
|
314
|
+
|
|
315
|
+
## Метаданные
|
|
316
|
+
|
|
317
|
+
`meta(...)` может аннотировать и shape целиком, и отдельные поля, не меняя 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 остаётся полностью явной:
|
|
338
|
+
|
|
339
|
+
- никакого implicit inheritance по дереву нет;
|
|
340
|
+
- metadata shape и metadata полей появляются ровно там, где был вызван `meta(...)`.
|
|
341
|
+
|
|
342
|
+
## Практические замечания
|
|
343
|
+
|
|
344
|
+
- `shape(...)` ориентирован на объекты, а не на schema-first подход;
|
|
345
|
+
- он переиспользует те же constraints, что и остальная библиотека;
|
|
346
|
+
- derived helpers намеренно маленькие и предсказуемые;
|
|
347
|
+
- object-level rules выразительны, но остаются лёгкими;
|
|
348
|
+
- расхождения между runtime semantics и внешними форматами схем лучше отражать явно через adapter layers вроде `describe(...)` или `toJsonSchema(...)`.
|