@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,264 @@
|
|
|
1
|
+
# Экспорт JSON Schema
|
|
2
|
+
|
|
3
|
+
[Оглавление документации](./00-index.md)
|
|
4
|
+
[English version](../en/04-json-schema-export.md)
|
|
5
|
+
|
|
6
|
+
`@modulify/validator/json-schema` предоставляет тонкий слой экспорта в JSON Schema поверх публичного descriptor contract.
|
|
7
|
+
|
|
8
|
+
Это именно derivation layer, а не вторая schema model. Exporter читает публичные descriptors и строит по ним представление в виде JSON Schema.
|
|
9
|
+
|
|
10
|
+
## Быстрый старт
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import {
|
|
14
|
+
isNumber,
|
|
15
|
+
isString,
|
|
16
|
+
meta,
|
|
17
|
+
optional,
|
|
18
|
+
shape,
|
|
19
|
+
} from '@modulify/validator'
|
|
20
|
+
import { toJsonSchema } from '@modulify/validator/json-schema'
|
|
21
|
+
|
|
22
|
+
const profile = meta(shape({
|
|
23
|
+
email: meta(isString, {
|
|
24
|
+
title: 'Email',
|
|
25
|
+
format: 'email',
|
|
26
|
+
}),
|
|
27
|
+
age: optional(isNumber),
|
|
28
|
+
}).strict(), {
|
|
29
|
+
title: 'Profile',
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
const jsonSchema = toJsonSchema(profile)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Ментальная модель
|
|
36
|
+
|
|
37
|
+
Поток экспорта специально устроен просто:
|
|
38
|
+
|
|
39
|
+
1. validators публикуют публичные descriptors через `describe(...)`;
|
|
40
|
+
2. `toJsonSchema(...)` строит JSON Schema поверх этих descriptors;
|
|
41
|
+
3. unsupported или opaque nodes либо пропускаются в best-effort режиме, либо приводят к ошибке в strict режиме.
|
|
42
|
+
|
|
43
|
+
Это разделение важно, потому что:
|
|
44
|
+
|
|
45
|
+
- runtime validation остаётся runtime-first;
|
|
46
|
+
- поведение exporter-а остаётся явным;
|
|
47
|
+
- custom tooling может опираться на один публичный introspection contract.
|
|
48
|
+
|
|
49
|
+
## Точка входа
|
|
50
|
+
|
|
51
|
+
JSON Schema export импортируется из отдельного subpath:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import {
|
|
55
|
+
JsonSchemaExportError,
|
|
56
|
+
toJsonSchema,
|
|
57
|
+
} from '@modulify/validator/json-schema'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Root package намеренно не делает реэкспорт этого API.
|
|
61
|
+
|
|
62
|
+
## Поддерживаемые built-in mappings
|
|
63
|
+
|
|
64
|
+
Exporter покрывает built-in descriptor set, который уже участвует в публичной introspection.
|
|
65
|
+
|
|
66
|
+
### Базовые assertions
|
|
67
|
+
|
|
68
|
+
Практические mappings включают:
|
|
69
|
+
|
|
70
|
+
- `isString` -> `type: 'string'`
|
|
71
|
+
- `isNumber` -> `type: 'number'`
|
|
72
|
+
- `isBoolean` -> `type: 'boolean'`
|
|
73
|
+
- `isNull` -> `type: 'null'`
|
|
74
|
+
- `isEmail` -> `type: 'string'` и `format: 'email'`
|
|
75
|
+
- `exact(...)` -> `const`
|
|
76
|
+
- `oneOf(...)` -> `enum`
|
|
77
|
+
- `hasLength(...)` -> ограничения длины для строк и массивов
|
|
78
|
+
|
|
79
|
+
### Обёртки
|
|
80
|
+
|
|
81
|
+
Поддерживаются wrappers:
|
|
82
|
+
|
|
83
|
+
- `optional(...)`
|
|
84
|
+
- `nullable(...)`
|
|
85
|
+
- `nullish(...)`
|
|
86
|
+
|
|
87
|
+
`optional(...)` влияет на вычисление object `required`. `nullable(...)` и `nullish(...)` экспортируются как union с `null`.
|
|
88
|
+
|
|
89
|
+
### Структурные combinators
|
|
90
|
+
|
|
91
|
+
Поддерживаются structural mappings:
|
|
92
|
+
|
|
93
|
+
- `shape(...)`
|
|
94
|
+
- `each(...)`
|
|
95
|
+
- `tuple(...)`
|
|
96
|
+
- `record(...)`
|
|
97
|
+
|
|
98
|
+
### Ветвящиеся combinators
|
|
99
|
+
|
|
100
|
+
Поддерживаются branching mappings:
|
|
101
|
+
|
|
102
|
+
- `union(...)`
|
|
103
|
+
- `discriminatedUnion(...)`
|
|
104
|
+
|
|
105
|
+
### Последовательные slots
|
|
106
|
+
|
|
107
|
+
Массивы constraints в одном slot экспортируются как JSON Schema `allOf`.
|
|
108
|
+
|
|
109
|
+
## Преобразование object schemas
|
|
110
|
+
|
|
111
|
+
`shape(...)` экспортируется как JSON Schema object с:
|
|
112
|
+
|
|
113
|
+
- `type: 'object'`
|
|
114
|
+
- `properties`
|
|
115
|
+
- `required`
|
|
116
|
+
- `additionalProperties`
|
|
117
|
+
|
|
118
|
+
Поведение unknown keys отображается так:
|
|
119
|
+
|
|
120
|
+
- `.strict()` -> `additionalProperties: false`
|
|
121
|
+
- default или `.passthrough()` -> `additionalProperties: true`
|
|
122
|
+
|
|
123
|
+
## `required` и `undefined`
|
|
124
|
+
|
|
125
|
+
Одна из важных границ касается наличия объектных полей.
|
|
126
|
+
|
|
127
|
+
Runtime layer во многих практических сценариях рассматривает как один и тот же случай:
|
|
128
|
+
|
|
129
|
+
- отсутствие ключа;
|
|
130
|
+
- и ключ со значением `undefined`;
|
|
131
|
+
|
|
132
|
+
особенно вокруг `optional(...)` и derived helpers вроде `partial()`.
|
|
133
|
+
|
|
134
|
+
JSON Schema моделирует это не так. Поэтому exporter аппроксимирует наличие полей через JSON Schema `required`, а не обещает точную semantic parity.
|
|
135
|
+
|
|
136
|
+
Это сделано намеренно: экспорт нужно воспринимать как interoperability layer, а не как обещание полной эквивалентности runtime semantics и JSON Schema.
|
|
137
|
+
|
|
138
|
+
## Преобразование metadata
|
|
139
|
+
|
|
140
|
+
Exporter не копирует всю metadata в JSON Schema автоматически.
|
|
141
|
+
|
|
142
|
+
Вместо этого используется небольшой явный whitelist:
|
|
143
|
+
|
|
144
|
+
- `title`
|
|
145
|
+
- `description`
|
|
146
|
+
- `format`
|
|
147
|
+
- `default`
|
|
148
|
+
- `examples`
|
|
149
|
+
- `deprecated`
|
|
150
|
+
- `readOnly`
|
|
151
|
+
- `writeOnly`
|
|
152
|
+
|
|
153
|
+
Остальная metadata остаётся библиотечно-специфичной и автоматически в экспорт не попадает.
|
|
154
|
+
|
|
155
|
+
Так metadata layer остаётся явным и не превращается в implicit magic.
|
|
156
|
+
|
|
157
|
+
## Best-Effort режим
|
|
158
|
+
|
|
159
|
+
Best-effort режим используется по умолчанию:
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
const schema = toJsonSchema(profile)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
В этом режиме:
|
|
166
|
+
|
|
167
|
+
- unsupported или opaque nodes превращаются в permissive `{}` schema nodes;
|
|
168
|
+
- unsupported object-level shape rules отбрасываются;
|
|
169
|
+
- отброшенные shape rules по возможности помечаются через `$comment`.
|
|
170
|
+
|
|
171
|
+
Этот режим удобен, когда нужен максимально широкий внешний schema export, даже если часть runtime semantics нельзя выразить честно.
|
|
172
|
+
|
|
173
|
+
## Strict режим
|
|
174
|
+
|
|
175
|
+
Strict режим отклоняет unsupported nodes:
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
const schema = toJsonSchema(profile, { mode: 'strict' })
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Если export нельзя представить faithfully, exporter выбрасывает `JsonSchemaExportError`.
|
|
182
|
+
|
|
183
|
+
Эта ошибка содержит:
|
|
184
|
+
|
|
185
|
+
- descriptor, на котором произошёл сбой;
|
|
186
|
+
- machine-readable причину;
|
|
187
|
+
- путь внутри descriptor tree, где возникла ошибка.
|
|
188
|
+
|
|
189
|
+
Strict режим полезен, когда silent fallback был бы вводящим в заблуждение.
|
|
190
|
+
|
|
191
|
+
## Неподдерживаемые и opaque cases
|
|
192
|
+
|
|
193
|
+
Не всё runtime behavior имеет faithful representation в JSON Schema.
|
|
194
|
+
|
|
195
|
+
Важные примеры:
|
|
196
|
+
|
|
197
|
+
- custom validators без поддерживаемого публичного descriptor;
|
|
198
|
+
- неизвестные custom descriptor kinds;
|
|
199
|
+
- object-level `refine(...)` rules;
|
|
200
|
+
- descriptor nodes, чья семантика зависит от runtime-only behavior;
|
|
201
|
+
- значения, которые нельзя практично представить как JSON Schema constants или enums.
|
|
202
|
+
|
|
203
|
+
Exporter фиксирует эти границы явно и не пытается гадать.
|
|
204
|
+
|
|
205
|
+
## Связь с `describe(...)`
|
|
206
|
+
|
|
207
|
+
`toJsonSchema(...)` находится downstream от `describe(...)`.
|
|
208
|
+
|
|
209
|
+
Это значит:
|
|
210
|
+
|
|
211
|
+
- JSON Schema export должен опираться на публичные descriptors;
|
|
212
|
+
- логика exporter-а не должна зависеть от приватных runtime internals;
|
|
213
|
+
- custom validators участвуют в export сначала через публичный descriptor contract.
|
|
214
|
+
|
|
215
|
+
Так архитектура остаётся тонкой и стабильной для внешнего tooling.
|
|
216
|
+
|
|
217
|
+
## Пример metadata-aware экспорта shape
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
const profile = meta(shape({
|
|
221
|
+
email: meta(isString, {
|
|
222
|
+
title: 'Email',
|
|
223
|
+
format: 'email',
|
|
224
|
+
}),
|
|
225
|
+
age: optional(isNumber),
|
|
226
|
+
}).strict(), {
|
|
227
|
+
title: 'Profile',
|
|
228
|
+
})
|
|
229
|
+
|
|
230
|
+
const schema = toJsonSchema(profile)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Практически это означает:
|
|
234
|
+
|
|
235
|
+
- metadata shape может стать schema metadata;
|
|
236
|
+
- metadata полей может стать metadata свойств;
|
|
237
|
+
- strict object behavior становится `additionalProperties: false`.
|
|
238
|
+
|
|
239
|
+
## Пример ошибки в strict режиме
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
const schema = shape({
|
|
243
|
+
publishedAt: custom({
|
|
244
|
+
check(value: unknown): value is string {
|
|
245
|
+
return typeof value === 'string'
|
|
246
|
+
},
|
|
247
|
+
run() {
|
|
248
|
+
return []
|
|
249
|
+
},
|
|
250
|
+
}),
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
toJsonSchema(schema, { mode: 'strict' })
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Здесь будет исключение, потому что custom validator остаётся opaque для exporter-а.
|
|
257
|
+
|
|
258
|
+
## Практические замечания
|
|
259
|
+
|
|
260
|
+
- воспринимайте JSON Schema export как interoperability layer;
|
|
261
|
+
- используйте best-effort режим, когда partial export допустим;
|
|
262
|
+
- используйте strict режим, когда unsupported semantics должны приводить к явной ошибке;
|
|
263
|
+
- если custom descriptors должны участвовать в export, держите их компактными и публичными;
|
|
264
|
+
- не считайте JSON Schema export заменой runtime validation semantics.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Публичный API
|
|
2
|
+
|
|
3
|
+
[Оглавление документации](./00-index.md)
|
|
4
|
+
[English version](../en/05-public-api.md)
|
|
5
|
+
|
|
6
|
+
Этот документ суммирует package surface `@modulify/validator` и поддерживаемые subpath exports.
|
|
7
|
+
|
|
8
|
+
Это навигационный guide о том:
|
|
9
|
+
|
|
10
|
+
- где находится каждый публичный entrypoint;
|
|
11
|
+
- какие группы функций экспортируются вместе;
|
|
12
|
+
- как выглядит результат валидации;
|
|
13
|
+
- какие API вынесены в отдельные subpath вроде predicates и JSON Schema export.
|
|
14
|
+
|
|
15
|
+
## Корневой пакет
|
|
16
|
+
|
|
17
|
+
Root package экспортирует:
|
|
18
|
+
|
|
19
|
+
- `validate`
|
|
20
|
+
- `validate.sync`
|
|
21
|
+
- `matches.sync`
|
|
22
|
+
- `meta`
|
|
23
|
+
- `describe`
|
|
24
|
+
- `custom`
|
|
25
|
+
- `collection`
|
|
26
|
+
- `ViolationCollection`
|
|
27
|
+
- все экспорты из `./assertions`
|
|
28
|
+
- все экспорты из `./combinators`
|
|
29
|
+
|
|
30
|
+
Используйте root package, когда нужен основной validation API, composed validators, metadata/introspection и violation utilities.
|
|
31
|
+
|
|
32
|
+
## Assertions и combinators
|
|
33
|
+
|
|
34
|
+
Root package включает:
|
|
35
|
+
|
|
36
|
+
- низкоуровневое создание assertions через `assert(...)`
|
|
37
|
+
- built-in assertions вроде `isString`, `isNumber`, `isBoolean`, `isNull`, `isEmail`, `hasLength(...)`, `oneOf(...)`
|
|
38
|
+
- structural combinators вроде `shape(...)`, `each(...)`, `tuple(...)`, `record(...)`
|
|
39
|
+
- wrappers вроде `optional(...)`, `nullable(...)`, `nullish(...)`
|
|
40
|
+
- branching combinators вроде `union(...)` и `discriminatedUnion(...)`
|
|
41
|
+
- проверку точного значения через `exact(...)`
|
|
42
|
+
|
|
43
|
+
Это основной runtime-facing API surface библиотеки.
|
|
44
|
+
|
|
45
|
+
## Метаданные и интроспекция
|
|
46
|
+
|
|
47
|
+
Тот же root package также включает:
|
|
48
|
+
|
|
49
|
+
- `meta(...)`
|
|
50
|
+
- `describe(...)`
|
|
51
|
+
- `custom(...)`
|
|
52
|
+
|
|
53
|
+
Вместе они дают публичный machine-readable descriptor contract и metadata layer поверх него.
|
|
54
|
+
|
|
55
|
+
## Утилиты для нарушений
|
|
56
|
+
|
|
57
|
+
Root package также содержит:
|
|
58
|
+
|
|
59
|
+
- raw violation results, возвращаемые `validate(...)`
|
|
60
|
+
- `collection(...)`
|
|
61
|
+
- `ViolationCollection`
|
|
62
|
+
|
|
63
|
+
Это основные утилиты для постобработки machine-readable validation failures.
|
|
64
|
+
|
|
65
|
+
## Результат валидации
|
|
66
|
+
|
|
67
|
+
`validate(...)` и `validate.sync(...)` возвращают:
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
type ValidationTuple<T> =
|
|
71
|
+
| [ok: true, validated: T, violations: []]
|
|
72
|
+
| [ok: false, validated: unknown, violations: Violation[]]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Практически это значит:
|
|
76
|
+
|
|
77
|
+
- `ok` показывает, прошла ли валидация;
|
|
78
|
+
- `validated` становится строго типизированным только в успешной ветке;
|
|
79
|
+
- `violations` пуст при успехе и содержит структурированные ошибки при неуспехе.
|
|
80
|
+
|
|
81
|
+
## Subpath predicates
|
|
82
|
+
|
|
83
|
+
Predicates доступны из:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
@modulify/validator/predicates
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Этот subpath содержит переиспользуемые runtime/type-guard helpers и predicate combinators, например:
|
|
90
|
+
|
|
91
|
+
- `isString`
|
|
92
|
+
- `isNumber`
|
|
93
|
+
- `isRecord`
|
|
94
|
+
- `isArray`
|
|
95
|
+
- `isShape`
|
|
96
|
+
- `And`, `Or`, `Not`
|
|
97
|
+
|
|
98
|
+
Используйте этот subpath, когда нужны guard-style runtime checks без более высокого validation layer.
|
|
99
|
+
|
|
100
|
+
## Subpath экспорта JSON Schema
|
|
101
|
+
|
|
102
|
+
JSON Schema export доступен из:
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
@modulify/validator/json-schema
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Этот subpath содержит:
|
|
109
|
+
|
|
110
|
+
- `toJsonSchema(...)`
|
|
111
|
+
- `JsonSchemaExportError`
|
|
112
|
+
|
|
113
|
+
Он намеренно отделён от root package, чтобы export-specific concerns не смешивались с основным validation entrypoint.
|
|
114
|
+
|
|
115
|
+
## Как читать package surface
|
|
116
|
+
|
|
117
|
+
На верхнем уровне:
|
|
118
|
+
|
|
119
|
+
- root package = validation, combinators, metadata, violations;
|
|
120
|
+
- `./predicates` = standalone runtime/type-guard helpers;
|
|
121
|
+
- `./json-schema` = производный слой JSON Schema export.
|
|
122
|
+
|
|
123
|
+
Такое разделение сохраняет основной API понятным и в то же время позволяет держать специализированные subpath там, где это действительно нужно.
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Практические рецепты
|
|
2
|
+
|
|
3
|
+
[Оглавление документации](./00-index.md)
|
|
4
|
+
[Английская версия](../en/06-common-recipes.md)
|
|
5
|
+
|
|
6
|
+
Это руководство отвечает на практический вопрос:
|
|
7
|
+
|
|
8
|
+
> Какую часть `@modulify/validator` использовать для задачи `X`?
|
|
9
|
+
|
|
10
|
+
Оно специально ориентировано на практические сценарии. Открывайте его, когда общее направление библиотеки уже понятно и нужен быстрый путь к конкретному решению.
|
|
11
|
+
|
|
12
|
+
## Сначала выберите правильный слой
|
|
13
|
+
|
|
14
|
+
Быстрое правило выбора:
|
|
15
|
+
|
|
16
|
+
- используйте `@modulify/validator/predicates`, когда нужны только runtime checks и type guards;
|
|
17
|
+
- используйте built-in assertions вроде `isString`, `isDefined`, `hasLength(...)`, `oneOf(...)`, когда нужны машиночитаемые ошибки;
|
|
18
|
+
- используйте combinators вроде `shape(...)`, `each(...)`, `tuple(...)`, `record(...)`, `union(...)`, `discriminatedUnion(...)`, когда валидация становится структурной;
|
|
19
|
+
- используйте `meta(...)` и `describe(...)`, когда другой слой нуждается в стабильных машиночитаемых descriptors;
|
|
20
|
+
- используйте `toJsonSchema(...)` только тогда, когда нужно представление для interoperability или экспорта, а не источник runtime truth.
|
|
21
|
+
|
|
22
|
+
## Валидация API payload
|
|
23
|
+
|
|
24
|
+
Используйте `shape(...)` вместе с leaf assertions.
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import {
|
|
28
|
+
hasLength,
|
|
29
|
+
isDefined,
|
|
30
|
+
isString,
|
|
31
|
+
shape,
|
|
32
|
+
validate,
|
|
33
|
+
} from '@modulify/validator'
|
|
34
|
+
|
|
35
|
+
const createUser = shape({
|
|
36
|
+
email: [isDefined, isString],
|
|
37
|
+
password: [isString, hasLength({ min: 8 })],
|
|
38
|
+
}).strict()
|
|
39
|
+
|
|
40
|
+
const [ok, validated, violations] = validate.sync(input, createUser)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Практический шаблон:
|
|
44
|
+
|
|
45
|
+
- используйте `.strict()` для request payload, если неизвестные ключи должны отклоняться;
|
|
46
|
+
- держите leaf checks маленькими и хорошо сочетаемыми друг с другом;
|
|
47
|
+
- используйте элемент кортежа `validated` внутри успешной ветки;
|
|
48
|
+
- используйте `violations` как структурированные данные для ответов API, логов или сопоставления с UI.
|
|
49
|
+
|
|
50
|
+
## Сужение уже существующей переменной в sync-коде
|
|
51
|
+
|
|
52
|
+
Используйте `matches.sync(...)`.
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import {
|
|
56
|
+
isDefined,
|
|
57
|
+
isString,
|
|
58
|
+
matches,
|
|
59
|
+
} from '@modulify/validator'
|
|
60
|
+
|
|
61
|
+
const value: unknown = source()
|
|
62
|
+
|
|
63
|
+
if (matches.sync(value, [isDefined, isString])) {
|
|
64
|
+
value.toUpperCase()
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Используйте этот API, когда нужно сузить саму исходную переменную.
|
|
69
|
+
|
|
70
|
+
Не используйте для этого `validate.sync(...)`, если главная цель — сузить исходную переменную. `validate.sync(...)` сужает `validated` в кортеже, а не исходное входное значение.
|
|
71
|
+
|
|
72
|
+
## Моделирование optional, nullable и nullish полей
|
|
73
|
+
|
|
74
|
+
Используйте wrapper, который соответствует вашей runtime-семантике:
|
|
75
|
+
|
|
76
|
+
- `optional(x)` принимает `undefined`
|
|
77
|
+
- `nullable(x)` принимает `null`
|
|
78
|
+
- `nullish(x)` принимает и `null`, и `undefined`
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const profile = shape({
|
|
82
|
+
nickname: optional(isString),
|
|
83
|
+
middleName: nullable(isString),
|
|
84
|
+
bio: nullish(isString),
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Практическое правило:
|
|
89
|
+
|
|
90
|
+
- используйте `optional(...)` для отсутствующих или неустановленных полей;
|
|
91
|
+
- используйте `nullable(...)`, когда `null` — это осмысленное явное значение;
|
|
92
|
+
- используйте `nullish(...)` только тогда, когда оба случая действительно допустимы.
|
|
93
|
+
|
|
94
|
+
## Переиспользование одной shape в нескольких представлениях
|
|
95
|
+
|
|
96
|
+
Соберите одну базовую shape, а затем выводите производные варианты.
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
import {
|
|
100
|
+
exact,
|
|
101
|
+
isString,
|
|
102
|
+
optional,
|
|
103
|
+
shape,
|
|
104
|
+
} from '@modulify/validator'
|
|
105
|
+
|
|
106
|
+
const account = shape({
|
|
107
|
+
id: isString,
|
|
108
|
+
nickname: optional(isString),
|
|
109
|
+
role: exact('admin'),
|
|
110
|
+
}).strict()
|
|
111
|
+
|
|
112
|
+
const publicAccount = account.pick(['id', 'nickname'])
|
|
113
|
+
const editableAccount = account.partial()
|
|
114
|
+
const adminAccount = account.extend({ team: isString })
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Этот шаблон полезен, когда один доменный объект используется в:
|
|
118
|
+
|
|
119
|
+
- API payload;
|
|
120
|
+
- состоянии формы;
|
|
121
|
+
- внутренних границах сервиса;
|
|
122
|
+
- публичных представлениях с урезанным набором полей.
|
|
123
|
+
|
|
124
|
+
Помните, что структурные derivations вроде `pick()`, `omit()`, `partial()`, `extend()` и `merge()` намеренно сбрасывают object-level rules.
|
|
125
|
+
|
|
126
|
+
## Добавление metadata для UI без жёсткой связи UI со слоем валидации
|
|
127
|
+
|
|
128
|
+
Используйте `meta(...)` поверх любого constraint.
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
import {
|
|
132
|
+
isString,
|
|
133
|
+
meta,
|
|
134
|
+
shape,
|
|
135
|
+
} from '@modulify/validator'
|
|
136
|
+
|
|
137
|
+
const registration = shape({
|
|
138
|
+
email: meta(isString, {
|
|
139
|
+
title: 'Email',
|
|
140
|
+
description: 'Primary login address',
|
|
141
|
+
}),
|
|
142
|
+
})
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Это удобно, когда отдельному слою нужны:
|
|
146
|
+
|
|
147
|
+
- названия полей;
|
|
148
|
+
- placeholders или подсказки для отображения;
|
|
149
|
+
- предметно-ориентированные метаданные для отображения;
|
|
150
|
+
- инструменты, работающие через descriptors.
|
|
151
|
+
|
|
152
|
+
Только часть метаданных позже отображается в JSON Schema. Остальные ключи остаются специфичными для библиотеки.
|
|
153
|
+
|
|
154
|
+
## Построение состояния ошибок полей для форм
|
|
155
|
+
|
|
156
|
+
Используйте `collection(...)` поверх `violations`.
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
import {
|
|
160
|
+
collection,
|
|
161
|
+
isString,
|
|
162
|
+
shape,
|
|
163
|
+
validate,
|
|
164
|
+
} from '@modulify/validator'
|
|
165
|
+
|
|
166
|
+
const schema = shape({
|
|
167
|
+
profile: shape({
|
|
168
|
+
email: isString,
|
|
169
|
+
}),
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
const [ok, validated, violations] = validate.sync(input, schema)
|
|
173
|
+
const errors = collection(violations)
|
|
174
|
+
|
|
175
|
+
const rootErrors = errors.at([])
|
|
176
|
+
const emailErrors = errors.at(['profile', 'email'])
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Это рекомендуемая форма, когда нужен точный поиск по path, а не разбор строк.
|
|
180
|
+
|
|
181
|
+
## Добавление межполевых правил
|
|
182
|
+
|
|
183
|
+
Используйте `fieldsMatch(...)` для частого случая подтверждения поля и `refine(...)` для всего остального.
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
const registration = shape({
|
|
187
|
+
password: isString,
|
|
188
|
+
confirmPassword: isString,
|
|
189
|
+
}).fieldsMatch(['password', 'confirmPassword'])
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
const registration = shape({
|
|
194
|
+
password: isString,
|
|
195
|
+
confirmPassword: isString,
|
|
196
|
+
}).refine(value => {
|
|
197
|
+
return value.password === value.confirmPassword
|
|
198
|
+
? []
|
|
199
|
+
: [{
|
|
200
|
+
path: ['confirmPassword'],
|
|
201
|
+
code: 'shape.fields.mismatch',
|
|
202
|
+
args: [['password', 'confirmPassword']],
|
|
203
|
+
}]
|
|
204
|
+
})
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Выбирайте `fieldsMatch(...)`, когда правило — это именно равенство двух selectors.
|
|
208
|
+
|
|
209
|
+
Выбирайте `refine(...)`, когда:
|
|
210
|
+
|
|
211
|
+
- участвуют больше двух полей;
|
|
212
|
+
- правило доменно-специфично;
|
|
213
|
+
- нужен явный контроль над выходным path;
|
|
214
|
+
- нужен custom descriptor для introspection.
|
|
215
|
+
|
|
216
|
+
## Написание custom validator, понятного инструментам
|
|
217
|
+
|
|
218
|
+
Используйте `custom(...)` и добавляйте `describe()`, если validator должен участвовать в публичной introspection.
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
import { custom } from '@modulify/validator'
|
|
222
|
+
|
|
223
|
+
const isoDate = custom({
|
|
224
|
+
check(value: unknown): value is string {
|
|
225
|
+
return typeof value === 'string'
|
|
226
|
+
},
|
|
227
|
+
run() {
|
|
228
|
+
return []
|
|
229
|
+
},
|
|
230
|
+
describe() {
|
|
231
|
+
return {
|
|
232
|
+
kind: 'stringFormat' as const,
|
|
233
|
+
format: 'iso-date' as const,
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
})
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Без `describe()` validator намеренно остаётся непрозрачным для `describe(...)` и `toJsonSchema(...)`.
|
|
240
|
+
|
|
241
|
+
## Безопасный экспорт JSON Schema
|
|
242
|
+
|
|
243
|
+
Используйте `toJsonSchema(...)` в двух режимах в зависимости от потребителя.
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import { toJsonSchema } from '@modulify/validator/json-schema'
|
|
247
|
+
|
|
248
|
+
const schema = toJsonSchema(profile)
|
|
249
|
+
const strictSchema = toJsonSchema(profile, { mode: 'strict' })
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Используйте best-effort режим, когда:
|
|
253
|
+
|
|
254
|
+
- внешние потребители допускают permissive `{}` nodes;
|
|
255
|
+
- частичный экспорт лучше, чем его отсутствие;
|
|
256
|
+
- нужно максимально широкое представление schema.
|
|
257
|
+
|
|
258
|
+
Используйте strict режим, когда:
|
|
259
|
+
|
|
260
|
+
- экспорт с потерями был бы вводящим в заблуждение;
|
|
261
|
+
- JSON Schema является частью контракта;
|
|
262
|
+
- unsupported runtime semantics должны падать явно.
|
|
263
|
+
|
|
264
|
+
## Рекомендуемый порядок чтения
|
|
265
|
+
|
|
266
|
+
Если вы только входите в библиотеку, самый короткий полезный маршрут такой:
|
|
267
|
+
|
|
268
|
+
1. `README.md`
|
|
269
|
+
2. `01-shape-api.md`
|
|
270
|
+
3. `03-violations.md`
|
|
271
|
+
4. `02-metadata-and-introspection.md`
|
|
272
|
+
5. `04-json-schema-export.md`
|
|
273
|
+
6. `07-ai-reference.md`, если нужна компактная сводка по контракту
|