@versionzero/schema 1.0.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/LICENSE +177 -0
- package/README.md +246 -0
- package/package.json +84 -0
- package/src/compilation/handler-compilation.js +28 -0
- package/src/compilation/metadata-compilation.js +35 -0
- package/src/compilation/schema-compilation.js +142 -0
- package/src/compilation/selection-compilation.js +84 -0
- package/src/compilation/union-compilation.js +510 -0
- package/src/compilation/values-compilation.js +35 -0
- package/src/compiled-schema.js +1709 -0
- package/src/constants.js +1 -0
- package/src/core-library/index.js +32 -0
- package/src/core-library/processors/aggregation-operators.js +75 -0
- package/src/core-library/processors/alpha-constraint.js +20 -0
- package/src/core-library/processors/alphanum-constraint.js +20 -0
- package/src/core-library/processors/array-operator.js +51 -0
- package/src/core-library/processors/assert-constraint.js +75 -0
- package/src/core-library/processors/base64-constraint.js +26 -0
- package/src/core-library/processors/camel-case-operator.js +24 -0
- package/src/core-library/processors/capitalize-operator.js +16 -0
- package/src/core-library/processors/cardnum-constraint.js +193 -0
- package/src/core-library/processors/ceil-operator.js +44 -0
- package/src/core-library/processors/collapse-operator.js +29 -0
- package/src/core-library/processors/compact-operator.js +34 -0
- package/src/core-library/processors/compile-operator.js +65 -0
- package/src/core-library/processors/concat-operator.js +51 -0
- package/src/core-library/processors/conditional-operators.js +301 -0
- package/src/core-library/processors/constant-case-operator.js +16 -0
- package/src/core-library/processors/data-size-operator.js +86 -0
- package/src/core-library/processors/date-object-operator.js +54 -0
- package/src/core-library/processors/date-operator.js +67 -0
- package/src/core-library/processors/date-range-constraint.js +76 -0
- package/src/core-library/processors/defined-constraint.js +30 -0
- package/src/core-library/processors/each-operator.js +57 -0
- package/src/core-library/processors/email-constraint.js +112 -0
- package/src/core-library/processors/entries-operator.js +25 -0
- package/src/core-library/processors/eq-constraint.js +37 -0
- package/src/core-library/processors/filter-operator.js +74 -0
- package/src/core-library/processors/find-schema-operator.js +45 -0
- package/src/core-library/processors/flatten-operator.js +40 -0
- package/src/core-library/processors/floor-operator.js +47 -0
- package/src/core-library/processors/get-operator.js +44 -0
- package/src/core-library/processors/group-by-operator.js +84 -0
- package/src/core-library/processors/has-prefix-constraint.js +37 -0
- package/src/core-library/processors/has-suffix-constraint.js +35 -0
- package/src/core-library/processors/hex-constraint.js +20 -0
- package/src/core-library/processors/hostname-constraint.js +22 -0
- package/src/core-library/processors/http-url-constraint.js +27 -0
- package/src/core-library/processors/in-constraint.js +66 -0
- package/src/core-library/processors/index-by-operator.js +98 -0
- package/src/core-library/processors/index.js +131 -0
- package/src/core-library/processors/input-operator.js +23 -0
- package/src/core-library/processors/instanceof-constraint.js +38 -0
- package/src/core-library/processors/integer-constraint.js +22 -0
- package/src/core-library/processors/invoke-operator.js +33 -0
- package/src/core-library/processors/ipv4-constraint.js +188 -0
- package/src/core-library/processors/ipv6-constraint.js +205 -0
- package/src/core-library/processors/is-array-constraint.js +21 -0
- package/src/core-library/processors/is-date-constraint.js +22 -0
- package/src/core-library/processors/is-number-constraint.js +21 -0
- package/src/core-library/processors/is-object-constraint.js +21 -0
- package/src/core-library/processors/is-string-constraint.js +21 -0
- package/src/core-library/processors/join-operator.js +41 -0
- package/src/core-library/processors/json-constraint.js +22 -0
- package/src/core-library/processors/json-decode-operator.js +25 -0
- package/src/core-library/processors/json-encode-operator.js +35 -0
- package/src/core-library/processors/kebab-case-operator.js +23 -0
- package/src/core-library/processors/keys-operator.js +20 -0
- package/src/core-library/processors/length-constraint.js +85 -0
- package/src/core-library/processors/lookup-operator.js +84 -0
- package/src/core-library/processors/lowercase-operator.js +14 -0
- package/src/core-library/processors/map-operator.js +84 -0
- package/src/core-library/processors/match-operator.js +64 -0
- package/src/core-library/processors/matches-constraint.js +54 -0
- package/src/core-library/processors/math-operators.js +151 -0
- package/src/core-library/processors/merge-deep-operator.js +61 -0
- package/src/core-library/processors/merge-operator.js +54 -0
- package/src/core-library/processors/metadata-operator.js +100 -0
- package/src/core-library/processors/negative-constraint.js +23 -0
- package/src/core-library/processors/never-constraint.js +69 -0
- package/src/core-library/processors/non-empty-constraint.js +59 -0
- package/src/core-library/processors/not-constraint.js +71 -0
- package/src/core-library/processors/number-operator.js +24 -0
- package/src/core-library/processors/numeric-constraint.js +22 -0
- package/src/core-library/processors/object-operator.js +38 -0
- package/src/core-library/processors/omit-operator.js +57 -0
- package/src/core-library/processors/parallel-operator.js +64 -0
- package/src/core-library/processors/pascal-case-operator.js +16 -0
- package/src/core-library/processors/phone-constraint.js +235 -0
- package/src/core-library/processors/pick-operator.js +62 -0
- package/src/core-library/processors/pipeline-operator.js +63 -0
- package/src/core-library/processors/port-constraint.js +22 -0
- package/src/core-library/processors/positive-constraint.js +23 -0
- package/src/core-library/processors/process-operator.js +55 -0
- package/src/core-library/processors/property-operator.js +49 -0
- package/src/core-library/processors/range-constraint.js +72 -0
- package/src/core-library/processors/reference-operator.js +79 -0
- package/src/core-library/processors/require-constraint.js +74 -0
- package/src/core-library/processors/reverse-operator.js +20 -0
- package/src/core-library/processors/round-operator.js +53 -0
- package/src/core-library/processors/schema-handler-operators.js +54 -0
- package/src/core-library/processors/semver-constraint.js +282 -0
- package/src/core-library/processors/sequence-processors.js +406 -0
- package/src/core-library/processors/sort-operator.js +52 -0
- package/src/core-library/processors/split-operator.js +43 -0
- package/src/core-library/processors/string-extra-operators.js +141 -0
- package/src/core-library/processors/string-operator.js +34 -0
- package/src/core-library/processors/target-operator.js +30 -0
- package/src/core-library/processors/template-operator.js +60 -0
- package/src/core-library/processors/title-case-operator.js +17 -0
- package/src/core-library/processors/trim-operator.js +14 -0
- package/src/core-library/processors/truthy-constraint.js +35 -0
- package/src/core-library/processors/type-operator.js +24 -0
- package/src/core-library/processors/unique-operator.js +21 -0
- package/src/core-library/processors/uppercase-operator.js +14 -0
- package/src/core-library/processors/url-constraint.js +31 -0
- package/src/core-library/processors/url-decode-operator.js +50 -0
- package/src/core-library/processors/url-encode-operator.js +44 -0
- package/src/core-library/processors/uuid-constraint.js +31 -0
- package/src/core-library/processors/values-operator.js +20 -0
- package/src/core-library/schemas/any-schema.js +23 -0
- package/src/core-library/schemas/array-schema.js +8 -0
- package/src/core-library/schemas/boolean-schema.js +10 -0
- package/src/core-library/schemas/date-schema.js +12 -0
- package/src/core-library/schemas/function-schema.js +40 -0
- package/src/core-library/schemas/number-schema.js +9 -0
- package/src/core-library/schemas/object-schema.js +10 -0
- package/src/core-library/schemas/root-schema.js +21 -0
- package/src/core-library/schemas/string-schema.js +9 -0
- package/src/core-library-node/index.js +47 -0
- package/src/core-library-node/processors/base64-decode-operator.js +20 -0
- package/src/core-library-node/processors/base64-encode-operator.js +20 -0
- package/src/core-library-node/processors/buffer-operator.js +39 -0
- package/src/core-library-node/processors/directory-constraint.js +35 -0
- package/src/core-library-node/processors/executable-constraint.js +34 -0
- package/src/core-library-node/processors/file-constraint.js +34 -0
- package/src/core-library-node/processors/file-size-constraint.js +94 -0
- package/src/core-library-node/processors/is-buffer-constraint.js +21 -0
- package/src/core-library-node/processors/reachable-constraint.js +28 -0
- package/src/core-library-node/processors/readable-constraint.js +34 -0
- package/src/core-library-node/processors/writable-constraint.js +59 -0
- package/src/core-library-node/schemas/buffer-schema.js +10 -0
- package/src/errors.js +209 -0
- package/src/executor/array-executor.js +78 -0
- package/src/executor/conditional-executor.js +134 -0
- package/src/executor/each-executor.js +68 -0
- package/src/executor/executor.js +123 -0
- package/src/executor/object-executor.js +98 -0
- package/src/executor/parallel-executor.js +43 -0
- package/src/executor/pipeline-executor.js +65 -0
- package/src/executor/sequence-executor.js +206 -0
- package/src/executor/serial-executor.js +24 -0
- package/src/executor/step-executor.js +68 -0
- package/src/helpers/case.js +124 -0
- package/src/helpers/data-size.js +144 -0
- package/src/helpers/debug-sink.js +15 -0
- package/src/helpers/deep.js +280 -0
- package/src/helpers/format.js +121 -0
- package/src/helpers/has-string-properties.js +30 -0
- package/src/helpers/index.js +16 -0
- package/src/helpers/object.js +115 -0
- package/src/helpers/parse-date.js +75 -0
- package/src/helpers/path.js +28 -0
- package/src/helpers/regex.js +18 -0
- package/src/helpers/stringify.js +309 -0
- package/src/helpers/to-data.js +64 -0
- package/src/helpers/truthy.js +55 -0
- package/src/index.js +29 -0
- package/src/schema-compiler.js +531 -0
- package/src/schema-location.js +200 -0
- package/src/schema-resolver.js +546 -0
- package/src/schema.js +1182 -0
- package/src/traversal/executors/check-condition.js +42 -0
- package/src/traversal/executors/check-input.js +27 -0
- package/src/traversal/executors/check-required.js +19 -0
- package/src/traversal/executors/check-schema.js +45 -0
- package/src/traversal/executors/defaults.js +21 -0
- package/src/traversal/executors/enter-existing.js +25 -0
- package/src/traversal/executors/enter-input.js +25 -0
- package/src/traversal/executors/enter.js +37 -0
- package/src/traversal/executors/exit.js +74 -0
- package/src/traversal/executors/finalize.js +64 -0
- package/src/traversal/executors/index.js +42 -0
- package/src/traversal/executors/normalize.js +38 -0
- package/src/traversal/executors/prepare-existing.js +27 -0
- package/src/traversal/executors/prepare-pending.js +54 -0
- package/src/traversal/executors/resolve-union.js +50 -0
- package/src/traversal/executors/serialize.js +48 -0
- package/src/traversal/executors/transform-early.js +51 -0
- package/src/traversal/executors/transform.js +68 -0
- package/src/traversal/executors/traversal-state-executor.js +46 -0
- package/src/traversal/executors/validate.js +63 -0
- package/src/traversal/traversal-context.js +231 -0
- package/src/traversal/traversal-state.js +809 -0
- package/src/types.js +102 -0
- package/src/value-processor/composed-value-processor.js +43 -0
- package/src/value-processor/defined-value-processor.js +72 -0
- package/src/value-processor/function-value-processor.js +68 -0
- package/src/value-processor/parameterized-value-processor.js +45 -0
- package/src/value-processor/parameters-value-processor.js +178 -0
- package/src/value-processor/spec.js +89 -0
- package/src/value-processor/value-processor.js +105 -0
- package/types/compilation/handler-compilation.d.ts +13 -0
- package/types/compilation/metadata-compilation.d.ts +6 -0
- package/types/compilation/schema-compilation.d.ts +32 -0
- package/types/compilation/selection-compilation.d.ts +9 -0
- package/types/compilation/union-compilation.d.ts +42 -0
- package/types/compilation/values-compilation.d.ts +12 -0
- package/types/compiled-schema.d.ts +883 -0
- package/types/constants.d.ts +1 -0
- package/types/core-library/index.d.ts +7 -0
- package/types/core-library/processors/aggregation-operators.d.ts +24 -0
- package/types/core-library/processors/alpha-constraint.d.ts +9 -0
- package/types/core-library/processors/alphanum-constraint.d.ts +9 -0
- package/types/core-library/processors/array-operator.d.ts +12 -0
- package/types/core-library/processors/assert-constraint.d.ts +30 -0
- package/types/core-library/processors/base64-constraint.d.ts +11 -0
- package/types/core-library/processors/camel-case-operator.d.ts +17 -0
- package/types/core-library/processors/capitalize-operator.d.ts +11 -0
- package/types/core-library/processors/cardnum-constraint.d.ts +51 -0
- package/types/core-library/processors/ceil-operator.d.ts +30 -0
- package/types/core-library/processors/collapse-operator.d.ts +24 -0
- package/types/core-library/processors/compact-operator.d.ts +29 -0
- package/types/core-library/processors/compile-operator.d.ts +34 -0
- package/types/core-library/processors/concat-operator.d.ts +23 -0
- package/types/core-library/processors/conditional-operators.d.ts +219 -0
- package/types/core-library/processors/constant-case-operator.d.ts +9 -0
- package/types/core-library/processors/data-size-operator.d.ts +31 -0
- package/types/core-library/processors/date-object-operator.d.ts +16 -0
- package/types/core-library/processors/date-operator.d.ts +21 -0
- package/types/core-library/processors/date-range-constraint.d.ts +26 -0
- package/types/core-library/processors/defined-constraint.d.ts +20 -0
- package/types/core-library/processors/each-operator.d.ts +34 -0
- package/types/core-library/processors/email-constraint.d.ts +54 -0
- package/types/core-library/processors/entries-operator.d.ts +13 -0
- package/types/core-library/processors/eq-constraint.d.ts +20 -0
- package/types/core-library/processors/filter-operator.d.ts +35 -0
- package/types/core-library/processors/find-schema-operator.d.ts +28 -0
- package/types/core-library/processors/flatten-operator.d.ts +26 -0
- package/types/core-library/processors/floor-operator.d.ts +33 -0
- package/types/core-library/processors/get-operator.d.ts +31 -0
- package/types/core-library/processors/group-by-operator.d.ts +36 -0
- package/types/core-library/processors/has-prefix-constraint.d.ts +22 -0
- package/types/core-library/processors/has-suffix-constraint.d.ts +20 -0
- package/types/core-library/processors/hex-constraint.d.ts +9 -0
- package/types/core-library/processors/hostname-constraint.d.ts +11 -0
- package/types/core-library/processors/http-url-constraint.d.ts +9 -0
- package/types/core-library/processors/in-constraint.d.ts +27 -0
- package/types/core-library/processors/index-by-operator.d.ts +26 -0
- package/types/core-library/processors/index.d.ts +8 -0
- package/types/core-library/processors/input-operator.d.ts +20 -0
- package/types/core-library/processors/instanceof-constraint.d.ts +23 -0
- package/types/core-library/processors/integer-constraint.d.ts +9 -0
- package/types/core-library/processors/invoke-operator.d.ts +12 -0
- package/types/core-library/processors/ipv4-constraint.d.ts +37 -0
- package/types/core-library/processors/ipv6-constraint.d.ts +34 -0
- package/types/core-library/processors/is-array-constraint.d.ts +10 -0
- package/types/core-library/processors/is-date-constraint.d.ts +10 -0
- package/types/core-library/processors/is-number-constraint.d.ts +10 -0
- package/types/core-library/processors/is-object-constraint.d.ts +10 -0
- package/types/core-library/processors/is-string-constraint.d.ts +10 -0
- package/types/core-library/processors/join-operator.d.ts +29 -0
- package/types/core-library/processors/json-constraint.d.ts +10 -0
- package/types/core-library/processors/json-decode-operator.d.ts +9 -0
- package/types/core-library/processors/json-encode-operator.d.ts +27 -0
- package/types/core-library/processors/kebab-case-operator.d.ts +16 -0
- package/types/core-library/processors/keys-operator.d.ts +9 -0
- package/types/core-library/processors/length-constraint.d.ts +34 -0
- package/types/core-library/processors/lookup-operator.d.ts +36 -0
- package/types/core-library/processors/lowercase-operator.d.ts +9 -0
- package/types/core-library/processors/map-operator.d.ts +38 -0
- package/types/core-library/processors/match-operator.d.ts +34 -0
- package/types/core-library/processors/matches-constraint.d.ts +29 -0
- package/types/core-library/processors/math-operators.d.ts +91 -0
- package/types/core-library/processors/merge-deep-operator.d.ts +32 -0
- package/types/core-library/processors/merge-operator.d.ts +26 -0
- package/types/core-library/processors/metadata-operator.d.ts +56 -0
- package/types/core-library/processors/negative-constraint.d.ts +13 -0
- package/types/core-library/processors/never-constraint.d.ts +26 -0
- package/types/core-library/processors/non-empty-constraint.d.ts +28 -0
- package/types/core-library/processors/not-constraint.d.ts +28 -0
- package/types/core-library/processors/number-operator.d.ts +9 -0
- package/types/core-library/processors/numeric-constraint.d.ts +10 -0
- package/types/core-library/processors/object-operator.d.ts +10 -0
- package/types/core-library/processors/omit-operator.d.ts +24 -0
- package/types/core-library/processors/parallel-operator.d.ts +41 -0
- package/types/core-library/processors/pascal-case-operator.d.ts +9 -0
- package/types/core-library/processors/phone-constraint.d.ts +65 -0
- package/types/core-library/processors/pick-operator.d.ts +27 -0
- package/types/core-library/processors/pipeline-operator.d.ts +40 -0
- package/types/core-library/processors/port-constraint.d.ts +11 -0
- package/types/core-library/processors/positive-constraint.d.ts +13 -0
- package/types/core-library/processors/process-operator.d.ts +37 -0
- package/types/core-library/processors/property-operator.d.ts +34 -0
- package/types/core-library/processors/range-constraint.d.ts +30 -0
- package/types/core-library/processors/reference-operator.d.ts +38 -0
- package/types/core-library/processors/require-constraint.d.ts +29 -0
- package/types/core-library/processors/reverse-operator.d.ts +9 -0
- package/types/core-library/processors/round-operator.d.ts +34 -0
- package/types/core-library/processors/schema-handler-operators.d.ts +28 -0
- package/types/core-library/processors/semver-constraint.d.ts +43 -0
- package/types/core-library/processors/sequence-processors.d.ts +213 -0
- package/types/core-library/processors/sort-operator.d.ts +31 -0
- package/types/core-library/processors/split-operator.d.ts +33 -0
- package/types/core-library/processors/string-extra-operators.d.ts +83 -0
- package/types/core-library/processors/string-operator.d.ts +10 -0
- package/types/core-library/processors/target-operator.d.ts +27 -0
- package/types/core-library/processors/template-operator.d.ts +31 -0
- package/types/core-library/processors/title-case-operator.d.ts +12 -0
- package/types/core-library/processors/trim-operator.d.ts +9 -0
- package/types/core-library/processors/truthy-constraint.d.ts +23 -0
- package/types/core-library/processors/type-operator.d.ts +11 -0
- package/types/core-library/processors/unique-operator.d.ts +10 -0
- package/types/core-library/processors/uppercase-operator.d.ts +9 -0
- package/types/core-library/processors/url-constraint.d.ts +20 -0
- package/types/core-library/processors/url-decode-operator.d.ts +31 -0
- package/types/core-library/processors/url-encode-operator.d.ts +36 -0
- package/types/core-library/processors/uuid-constraint.d.ts +20 -0
- package/types/core-library/processors/values-operator.d.ts +9 -0
- package/types/core-library/schemas/any-schema.d.ts +2 -0
- package/types/core-library/schemas/array-schema.d.ts +2 -0
- package/types/core-library/schemas/boolean-schema.d.ts +2 -0
- package/types/core-library/schemas/date-schema.d.ts +2 -0
- package/types/core-library/schemas/function-schema.d.ts +2 -0
- package/types/core-library/schemas/number-schema.d.ts +2 -0
- package/types/core-library/schemas/object-schema.d.ts +2 -0
- package/types/core-library/schemas/root-schema.d.ts +2 -0
- package/types/core-library/schemas/string-schema.d.ts +2 -0
- package/types/core-library-node/index.d.ts +12 -0
- package/types/core-library-node/processors/base64-decode-operator.d.ts +9 -0
- package/types/core-library-node/processors/base64-encode-operator.d.ts +9 -0
- package/types/core-library-node/processors/buffer-operator.d.ts +15 -0
- package/types/core-library-node/processors/directory-constraint.d.ts +14 -0
- package/types/core-library-node/processors/executable-constraint.d.ts +17 -0
- package/types/core-library-node/processors/file-constraint.d.ts +13 -0
- package/types/core-library-node/processors/file-size-constraint.d.ts +43 -0
- package/types/core-library-node/processors/is-buffer-constraint.d.ts +10 -0
- package/types/core-library-node/processors/reachable-constraint.d.ts +13 -0
- package/types/core-library-node/processors/readable-constraint.d.ts +17 -0
- package/types/core-library-node/processors/writable-constraint.d.ts +18 -0
- package/types/core-library-node/schemas/buffer-schema.d.ts +2 -0
- package/types/errors.d.ts +58 -0
- package/types/executor/array-executor.d.ts +17 -0
- package/types/executor/conditional-executor.d.ts +45 -0
- package/types/executor/each-executor.d.ts +15 -0
- package/types/executor/executor.d.ts +84 -0
- package/types/executor/object-executor.d.ts +14 -0
- package/types/executor/parallel-executor.d.ts +27 -0
- package/types/executor/pipeline-executor.d.ts +11 -0
- package/types/executor/sequence-executor.d.ts +32 -0
- package/types/executor/serial-executor.d.ts +16 -0
- package/types/executor/step-executor.d.ts +14 -0
- package/types/helpers/case.d.ts +30 -0
- package/types/helpers/data-size.d.ts +25 -0
- package/types/helpers/debug-sink.d.ts +9 -0
- package/types/helpers/deep.d.ts +33 -0
- package/types/helpers/format.d.ts +14 -0
- package/types/helpers/has-string-properties.d.ts +5 -0
- package/types/helpers/index.d.ts +13 -0
- package/types/helpers/object.d.ts +46 -0
- package/types/helpers/parse-date.d.ts +6 -0
- package/types/helpers/path.d.ts +13 -0
- package/types/helpers/regex.d.ts +7 -0
- package/types/helpers/stringify.d.ts +33 -0
- package/types/helpers/to-data.d.ts +13 -0
- package/types/helpers/truthy.d.ts +26 -0
- package/types/index.d.ts +6 -0
- package/types/schema-compiler.d.ts +49 -0
- package/types/schema-location.d.ts +64 -0
- package/types/schema-resolver.d.ts +145 -0
- package/types/schema.d.ts +586 -0
- package/types/traversal/executors/check-condition.d.ts +8 -0
- package/types/traversal/executors/check-input.d.ts +6 -0
- package/types/traversal/executors/check-required.d.ts +6 -0
- package/types/traversal/executors/check-schema.d.ts +7 -0
- package/types/traversal/executors/defaults.d.ts +8 -0
- package/types/traversal/executors/enter-existing.d.ts +6 -0
- package/types/traversal/executors/enter-input.d.ts +8 -0
- package/types/traversal/executors/enter.d.ts +7 -0
- package/types/traversal/executors/exit.d.ts +6 -0
- package/types/traversal/executors/finalize.d.ts +6 -0
- package/types/traversal/executors/index.d.ts +15 -0
- package/types/traversal/executors/normalize.d.ts +7 -0
- package/types/traversal/executors/prepare-existing.d.ts +6 -0
- package/types/traversal/executors/prepare-pending.d.ts +6 -0
- package/types/traversal/executors/resolve-union.d.ts +6 -0
- package/types/traversal/executors/serialize.d.ts +11 -0
- package/types/traversal/executors/transform-early.d.ts +6 -0
- package/types/traversal/executors/transform.d.ts +6 -0
- package/types/traversal/executors/traversal-state-executor.d.ts +19 -0
- package/types/traversal/executors/validate.d.ts +6 -0
- package/types/traversal/traversal-context.d.ts +67 -0
- package/types/traversal/traversal-state.d.ts +97 -0
- package/types/types.d.ts +218 -0
- package/types/value-processor/composed-value-processor.d.ts +17 -0
- package/types/value-processor/defined-value-processor.d.ts +16 -0
- package/types/value-processor/function-value-processor.d.ts +15 -0
- package/types/value-processor/parameterized-value-processor.d.ts +14 -0
- package/types/value-processor/parameters-value-processor.d.ts +28 -0
- package/types/value-processor/spec.d.ts +22 -0
- package/types/value-processor/value-processor.d.ts +92 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { CompiledSchema } from '../compiled-schema.js';
|
|
2
|
+
import { SchemaCompiler } from '../schema-compiler.js';
|
|
3
|
+
import { SchemaLocation } from '../schema-location.js';
|
|
4
|
+
import { Schema } from '../schema.js';
|
|
5
|
+
import { SchemaCompilationError } from '../errors.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Convert a schema to a simple object form compatible with the SchemaCompiler SchemaSchema assumptions
|
|
9
|
+
*
|
|
10
|
+
* @param {any} schema
|
|
11
|
+
* @param {any} _
|
|
12
|
+
* @param {SchemaLocation} location
|
|
13
|
+
* @returns {import("../types.js").SchemaData}
|
|
14
|
+
* @this {SchemaCompiler}
|
|
15
|
+
*/
|
|
16
|
+
export function normalizeSchema(schema, _, location) {
|
|
17
|
+
if (schema === true) {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (schema instanceof CompiledSchema) {
|
|
22
|
+
return schema;
|
|
23
|
+
}
|
|
24
|
+
if (this.normalizeCache.has(schema)) {
|
|
25
|
+
//return new CachedSchemaReference(schema);
|
|
26
|
+
return this.normalizeCache.get(schema);
|
|
27
|
+
}
|
|
28
|
+
const data = {};
|
|
29
|
+
this.normalizeCache.set(schema, data);
|
|
30
|
+
|
|
31
|
+
schema = this.resolver.resolve(schema, false);
|
|
32
|
+
|
|
33
|
+
// return toData(schema);
|
|
34
|
+
|
|
35
|
+
// todo - Q: why are we not using schema.toData()? A: because it's recursive, and has its own cache that behaves differently
|
|
36
|
+
for (const group of ['properties', 'unionSchemas', 'metadata', 'options', 'handlers']) {
|
|
37
|
+
if (!schema[group]) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
for (const [key, value] of Object.entries(schema[group])) {
|
|
42
|
+
if (value === undefined) {
|
|
43
|
+
continue
|
|
44
|
+
}
|
|
45
|
+
if (data[group] === undefined) {
|
|
46
|
+
data[group] = {};
|
|
47
|
+
}
|
|
48
|
+
let v = value;
|
|
49
|
+
if (group === 'handlers') {
|
|
50
|
+
if (value === null) {
|
|
51
|
+
v = '$null'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
(data[group])[key] = v;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return data;
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
*
|
|
63
|
+
* @param {Schema|CompiledSchema} inputSchema
|
|
64
|
+
* @param {any} _
|
|
65
|
+
* @param {SchemaLocation} location
|
|
66
|
+
* @param {object} transformOptions
|
|
67
|
+
* @returns {CompiledSchema}
|
|
68
|
+
* @this {SchemaCompiler}
|
|
69
|
+
*/
|
|
70
|
+
export function transformSchema(inputSchema, _, location, transformOptions) {
|
|
71
|
+
if (inputSchema instanceof CompiledSchema) {
|
|
72
|
+
return inputSchema;
|
|
73
|
+
}
|
|
74
|
+
const cs = new CompiledSchema(CompiledSchema.__TOKEN);
|
|
75
|
+
|
|
76
|
+
this.compileCache.set(transformOptions.state.assignedInput, cs);
|
|
77
|
+
|
|
78
|
+
for (const [propertyName, propertySchema] of Object.entries(inputSchema.properties ?? {})) {
|
|
79
|
+
if (propertySchema instanceof CompiledSchema) {
|
|
80
|
+
cs._setPropertySchema(propertyName, propertySchema);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw new SchemaCompilationError(`Failed to compile property "${propertyName}" schema`, {location});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
for (const [unionKey, unionSchema] of Object.entries(inputSchema.unionSchemas ?? {})) {
|
|
87
|
+
if (unionSchema instanceof CompiledSchema) {
|
|
88
|
+
cs._setUnionSchema(unionKey, unionSchema);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
throw new SchemaCompilationError(`Failed to compile union "${unionKey}" schema `, {location});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
Object.assign(cs.handlers, inputSchema.handlers);
|
|
95
|
+
Object.assign(cs.metadata, inputSchema.metadata);
|
|
96
|
+
Object.assign(cs.options, inputSchema.options); // options.values will get re-written later
|
|
97
|
+
|
|
98
|
+
return cs;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @param {CompiledSchema} schema
|
|
103
|
+
* @param {any} _
|
|
104
|
+
* @param {SchemaLocation} location
|
|
105
|
+
* @returns {CompiledSchema}
|
|
106
|
+
* @this {SchemaCompiler}
|
|
107
|
+
*/
|
|
108
|
+
export function validateSchema(schema, _, location) {
|
|
109
|
+
if (!(schema instanceof CompiledSchema)) {
|
|
110
|
+
throw new SchemaCompilationError('Not a schema', {location});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (schema.isUnion && !schema.handlers.discriminators) {
|
|
114
|
+
throw new SchemaCompilationError(`No discriminator defined for union`, {location});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (schema.hasChildren && (!schema.options.container || (schema.options.type !== 'object' && schema.options.type !== 'array' && schema.options.type !== 'any'))) {
|
|
118
|
+
throw new SchemaCompilationError(`Schema defines child properties but does not identify as a container`, {location});
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (schema.isUnion && schema.hasWildcard) {
|
|
122
|
+
throw new SchemaCompilationError(`Wildcard properties cannot be set on a union`, {location});
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (schema.hasChildSelector !== schema.hasChildSelection) {
|
|
126
|
+
throw new SchemaCompilationError(`Inconsistently defined selector/selections in properties`, {location});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (location.path === '') {
|
|
130
|
+
if (schema.isSelector) {
|
|
131
|
+
throw new SchemaCompilationError('The root schema cannot be a selector', {location});
|
|
132
|
+
}
|
|
133
|
+
if (schema.isSelection) {
|
|
134
|
+
throw new SchemaCompilationError('The root schema cannot be a selection', {location});
|
|
135
|
+
}
|
|
136
|
+
if (schema.isUnionKey) {
|
|
137
|
+
throw new SchemaCompilationError('The root schema cannot be a union key', {location});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return schema;
|
|
142
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { CompiledSchema } from '../compiled-schema.js';
|
|
2
|
+
import { SchemaLocation } from '../schema-location.js';
|
|
3
|
+
import { SchemaCompilationError } from '../errors.js';
|
|
4
|
+
|
|
5
|
+
// TODO - Consider making selection values default to '$name' rather than using true as a signal.
|
|
6
|
+
// (This could enable making the synthesized condition be an arbitrary value processor pipeline!)
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param {CompiledSchema} inputSchema
|
|
10
|
+
* @param {any} _
|
|
11
|
+
* @param {SchemaLocation} location
|
|
12
|
+
* @returns {CompiledSchema}
|
|
13
|
+
*/
|
|
14
|
+
export function populateChildSelectorValues(inputSchema, _, location) {
|
|
15
|
+
// if (!inputSchema.isSelector || inputSchema.hasValues) {
|
|
16
|
+
// return inputSchema;
|
|
17
|
+
// }
|
|
18
|
+
|
|
19
|
+
const selectorProperties = [];
|
|
20
|
+
const selectionProperties = [];
|
|
21
|
+
for (const e of inputSchema.propertyEntries) {
|
|
22
|
+
if (e[1].isSelector) {
|
|
23
|
+
selectorProperties.push(e);
|
|
24
|
+
}
|
|
25
|
+
if (e[1].isSelection) {
|
|
26
|
+
selectionProperties.push(e);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (selectorProperties.length === 0 && selectionProperties.length === 0) {
|
|
31
|
+
return inputSchema;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (selectorProperties.length > 1) {
|
|
35
|
+
// todo - allow multiple selector/selection sets in a single schema? (can always get same effect manually, though)
|
|
36
|
+
throw new SchemaCompilationError(
|
|
37
|
+
`Schema multiple properties marked as selectors: ${selectorProperties.map(p => p[0]).join(', ')}`,
|
|
38
|
+
{location});
|
|
39
|
+
}
|
|
40
|
+
const selectorPropertyName = selectorProperties[0][0];
|
|
41
|
+
const selectorPropertySchema = selectorProperties[0][1];
|
|
42
|
+
|
|
43
|
+
const selectorPropertyLocation = location.relative(`properties.${selectorPropertyName}`);
|
|
44
|
+
|
|
45
|
+
if (selectionProperties.length === 0) {
|
|
46
|
+
throw new SchemaCompilationError(
|
|
47
|
+
`Schema has selector at property ${selectorPropertyName} but no selections`, {location});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const existingSelectorValueSet = new Set([...selectorPropertySchema.values ?? []]);
|
|
51
|
+
const selectionValueSet = new Set();
|
|
52
|
+
|
|
53
|
+
for (const selectionProperty of selectionProperties) {
|
|
54
|
+
const selectionPropertyName = selectionProperty[0];
|
|
55
|
+
const selectionPropertySchema = selectionProperty[1];
|
|
56
|
+
const selectionPropertyLocation = location.relative(`properties.${selectionPropertyName}`);
|
|
57
|
+
|
|
58
|
+
let selectionValue = selectionPropertySchema.selection;
|
|
59
|
+
if (selectionValue === true) {
|
|
60
|
+
selectionValue = selectionPropertyName;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const selectorValue = selectorPropertySchema._normalizeValue(selectionValue, undefined, undefined, {sync: true});
|
|
64
|
+
|
|
65
|
+
if (existingSelectorValueSet.size && !existingSelectorValueSet.has(selectorValue)) {
|
|
66
|
+
throw new SchemaCompilationError(
|
|
67
|
+
`Existing selector schema values {${[...existingSelectorValueSet].join('|')}} are missing selection`, {value: selectionValue,
|
|
68
|
+
location: selectorPropertyLocation});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
selectionValueSet.add(selectorValue);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (!selectorPropertySchema.hasValues) {
|
|
75
|
+
if (selectorPropertySchema.isUnionKey) {
|
|
76
|
+
throw new SchemaCompilationError(
|
|
77
|
+
'Cannot populate values for a schema that is both a selector and a union key', {location: selectorPropertyLocation}
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
selectorPropertySchema.options.values = [...selectionValueSet].sort();
|
|
81
|
+
}
|
|
82
|
+
return inputSchema;
|
|
83
|
+
}
|
|
84
|
+
|