@serum-enterprises/schema 3.3.0-beta.0 → 4.0.0-alpha.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/README.md +34 -12
- package/dist/index.cjs +62 -0
- package/dist/index.mjs +32 -0
- package/dist/types/Domain.d.ts +23 -0
- package/dist/types/Validator.d.ts +13 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/lib/Operations.d.ts +36 -0
- package/dist/types/lib/errors.d.ts +11 -0
- package/dist/types/lib/types.d.ts +13 -0
- package/dist/types/validators/Intersect.d.ts +20 -0
- package/dist/types/validators/Never.d.ts +12 -0
- package/dist/types/validators/Union.d.ts +20 -0
- package/dist/types/validators/Unknown.d.ts +12 -0
- package/dist/types/validators/index.d.ts +4 -0
- package/package.json +23 -12
- package/build/index.js +0 -1077
- package/build/index.js.map +0 -7
- package/types/Builders/Array.d.ts +0 -15
- package/types/Builders/Boolean.d.ts +0 -7
- package/types/Builders/JSON.d.ts +0 -4
- package/types/Builders/Number.d.ts +0 -10
- package/types/Builders/Object.d.ts +0 -30
- package/types/Builders/String.d.ts +0 -9
- package/types/Builders/Union.d.ts +0 -7
- package/types/Builders/index.d.ts +0 -6
- package/types/Definitions.d.ts +0 -52
- package/types/Validator.d.ts +0 -9
- package/types/index.d.ts +0 -43
- package/types/lib/fromJSON.d.ts +0 -2
- package/types/lib/util.d.ts +0 -26
- package/types/validators/Array.d.ts +0 -17
- package/types/validators/Boolean.d.ts +0 -14
- package/types/validators/JSON.d.ts +0 -12
- package/types/validators/Number.d.ts +0 -18
- package/types/validators/Object.d.ts +0 -24
- package/types/validators/String.d.ts +0 -17
- package/types/validators/Union.d.ts +0 -13
- package/types/validators/index.d.ts +0 -6
package/build/index.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/@serum-enterprises/json/build/index.js", "../node_modules/@serum-enterprises/option/build/Option.js", "../src/index.ts", "../src/Validator.ts", "../src/lib/fromJSON.ts", "../src/Validators/JSON.ts", "../src/lib/util.ts", "../src/Validators/Boolean.ts", "../src/Validators/Number.ts", "../src/Validators/String.ts", "../src/Validators/Array.ts", "../src/Validators/Object.ts", "../src/Builders/JSON.ts", "../src/Builders/Boolean.ts", "../src/Builders/Number.ts", "../src/Builders/String.ts", "../src/Builders/Array.ts", "../src/Builders/Object.ts"],
|
|
4
|
-
"sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSON = void 0;\nvar JSON;\n(function (JSON) {\n function isNull(value) {\n return value === null;\n }\n JSON.isNull = isNull;\n function isBoolean(value) {\n return typeof value === 'boolean';\n }\n JSON.isBoolean = isBoolean;\n function isNumber(value) {\n // Using Number.isFinite here as NaN, Infinity and -Infinity are not valid JSON Numbers\n return Number.isFinite(value);\n }\n JSON.isNumber = isNumber;\n function isInteger(value) {\n // Using Number.isSafeInteger here as JS Numbers are 64-bit floating point numbers and not all integers can be represented accurately\n return Number.isSafeInteger(value);\n }\n JSON.isInteger = isInteger;\n function isString(value) {\n return typeof value === 'string';\n }\n JSON.isString = isString;\n function isShallowArray(value) {\n return Array.isArray(value);\n }\n JSON.isShallowArray = isShallowArray;\n function isArray(value) {\n return isShallowArray(value) && value.every((v) => isJSON(v));\n }\n JSON.isArray = isArray;\n function isShallowObject(value) {\n // Using Object.prototype.toString.call here as it is the most reliable way to check if something is an Object\n return (Object.prototype.toString.call(value) === '[object Object]');\n }\n JSON.isShallowObject = isShallowObject;\n function isObject(value) {\n return isShallowObject(value) && Object.values(value).every((v) => isJSON(v));\n }\n JSON.isObject = isObject;\n function isPrimitive(value) {\n return isBoolean(value) || isNumber(value) || isString(value);\n }\n JSON.isPrimitive = isPrimitive;\n function isShallowContainer(value) {\n return isShallowArray(value) || isShallowObject(value);\n }\n JSON.isShallowContainer = isShallowContainer;\n function isContainer(value) {\n return isArray(value) || isObject(value);\n }\n JSON.isContainer = isContainer;\n function isShallowJSON(value) {\n return isNull(value) || isPrimitive(value) || isShallowArray(value) || isShallowObject(value);\n }\n JSON.isShallowJSON = isShallowJSON;\n function isJSON(value) {\n return isNull(value) || isPrimitive(value) || isContainer(value);\n }\n JSON.isJSON = isJSON;\n function clone(value) {\n // Using Shallow Checks here as it is expected that value is JSON anyway, and this function is recursive anyway\n if (isShallowObject(value))\n return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, clone(v)]));\n else if (isShallowArray(value))\n return value.map((v) => clone(v));\n else\n return value;\n }\n JSON.clone = clone;\n // Compatibility Method for the native JSON.parse\n function parse(value) {\n return globalThis.JSON.parse(value);\n }\n JSON.parse = parse;\n // Compatibility Method for the native JSON.stringify\n function stringify(value) {\n return globalThis.JSON.stringify(value);\n }\n JSON.stringify = stringify;\n})(JSON || (exports.JSON = JSON = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Option = exports.None = exports.Some = void 0;\nclass BaseOption {\n isSome() {\n return this instanceof Some;\n }\n isNone() {\n return this instanceof None;\n }\n onSome(fn) {\n if (this.isSome())\n fn(this.value);\n return this;\n }\n onNone(fn) {\n if (this.isNone())\n fn();\n return this;\n }\n map(fn) {\n return this.match(value => exports.Option.Some(fn(value)), () => exports.Option.None());\n }\n match(onSome, onNone) {\n if (this.isSome())\n return onSome(this.value);\n else\n return onNone();\n }\n equals(other, fn = (a, b) => Object.is(a, b)) {\n if (this.isNone() && other.isNone())\n return true;\n if (this.isSome() && other.isSome())\n return fn(this.value, other.value);\n return false;\n }\n}\nclass Some extends BaseOption {\n value;\n constructor(value) {\n super();\n this.value = value;\n }\n}\nexports.Some = Some;\nclass None extends BaseOption {\n}\nexports.None = None;\nexports.Option = {\n Some(value) {\n return new Some(value);\n },\n None() {\n return new None();\n }\n};\n", "import {Validator} from './Validator';\nimport {fromJSON} from './lib/fromJSON';\n\nexport {Validator};\n\nimport {\n\tJSONValidatorDefinition,\n\tBooleanValidatorDefinition,\n\tNumberValidatorDefinition,\n\tStringValidatorDefinition,\n\tArrayValidatorDefinition,\n\tObjectValidatorDefinition\n} from './Definitions';\n\nimport {\n\tJSONValidator,\n\tBooleanValidator,\n\tNumberValidator,\n\tStringValidator,\n\tArrayValidator,\n\tObjectValidator\n} from './Validators';\n\nimport {\n\tJSONBuilder,\n\tBooleanBuilder,\n\tNumberBuilder,\n\tStringBuilder,\n\tArrayBuilder,\n\tObjectBuilder\n} from './Builders';\n\nexport class Schema {\n\t// Static Factories for Builders\n\tstatic get JSON(): JSONBuilder {\n\t\treturn new JSONBuilder();\n\t}\n\n\tstatic get Boolean(): BooleanBuilder {\n\t\treturn new BooleanBuilder();\n\t}\n\n\tstatic get Number(): NumberBuilder {\n\t\treturn new NumberBuilder();\n\t}\n\n\tstatic get String(): StringBuilder {\n\t\treturn new StringBuilder();\n\t}\n\n\tstatic get Array(): ArrayBuilder {\n\t\treturn new ArrayBuilder();\n\t}\n\n\tstatic get Object(): ObjectBuilder {\n\t\treturn new ObjectBuilder();\n\t}\n\n\t// Static fromJSON. Returns a basic Validator with no Type Inference\n\tstatic fromJSON(definition: unknown, path: string = 'definition'): Validator {\n\t\treturn fromJSON(definition, path);\n\t}\n\n\t// Utility Method for Checking if a variable holds a valid Definition\n\tstatic assertDefinition(definition: unknown, path: string = 'definition'): asserts definition is Definition {\n\t\tthis.fromJSON(definition, path);\n\t}\n\n\t// Utility Method for validating a Definition\n\tstatic validateDefinition(definition: unknown, path: string = 'definition'): Definition {\n\t\tthis.assertDefinition(definition, path);\n\n\t\treturn definition;\n\t}\n\n\t// Utility Method for Type-Guarding a Definition\n\tstatic isDefinition(definition: unknown, path: string = 'definition'): definition is Definition {\n\t\ttry {\n\t\t\tthis.assertDefinition(definition, path);\n\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\n// Export all Definitions as a Namespace\nexport namespace Definitions {\n\texport type JSON = JSONValidatorDefinition;\n\texport type Boolean = BooleanValidatorDefinition;\n\texport type Number = NumberValidatorDefinition;\n\texport type String = StringValidatorDefinition;\n\texport type Array = ArrayValidatorDefinition;\n\texport type Object = ObjectValidatorDefinition;\n}\n\n// Utility Type describing all Definitions as a Union\nexport type Definition =\n\tJSONValidatorDefinition |\n\tBooleanValidatorDefinition |\n\tNumberValidatorDefinition |\n\tStringValidatorDefinition |\n\tArrayValidatorDefinition |\n\tObjectValidatorDefinition\n\n// All Validators for re-use (for example, building custom Validators with these as a Basis)\nexport const Validators = {\n\tJSON: JSONValidator,\n\tBoolean: BooleanValidator,\n\tNumber: NumberValidator,\n\tString: StringValidator,\n\tArray: ArrayValidator,\n\tObject: ObjectValidator\n} as const;\n\n// All Builders for re-use\nexport const Builders = {\n\tJSON: JSONBuilder,\n\tBoolean: BooleanBuilder,\n\tNumber: NumberBuilder,\n\tString: StringBuilder,\n\tArray: ArrayBuilder,\n\tObject: ObjectBuilder\n}\n\n// Extra Utilities to infer a Definition Type or a Validator Return Type for statically defined Schemas\nexport {InferDefinitionType, InferValidatorReturnType} from './lib/util';", "import {Definition} from './Definitions';\n\nexport abstract class Validator<T = unknown> {\n\n\tpublic abstract assert(data: unknown, path: string): asserts data is T;\n\tpublic validate(data: unknown, path: string = 'data'): T {\n\t\tthis.assert(data, path);\n\n\t\treturn data;\n\t}\n\tpublic is(data: unknown, path: string = 'data'): data is T {\n\t\ttry {\n\t\t\tthis.assert(data, path);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic abstract isSubset(other: Validator): boolean;\n\tpublic abstract isEquals(other: Validator): boolean;\n\n\tpublic abstract toJSON(): Definition;\n}", "import {JSON} from '@serum-enterprises/json';\nimport type {Validator} from '../Validator';\nimport {\n\tJSONValidator,\n\tBooleanValidator,\n\tNumberValidator,\n\tStringValidator,\n\tArrayValidator,\n\tObjectValidator\n} from '../Validators';\nimport {DefinitionError} from './util';\nimport {Definition} from '../Definitions';\n\nexport function fromJSON(\n\tdefinition: unknown,\n\tpath: string\n): Validator {\n\tif (!JSON.isShallowObject(definition))\n\t\tthrow new DefinitionError(`Expected ${path} to be an Object`);\n\n\tif (!JSON.isString(definition['type']))\n\t\tthrow new DefinitionError(`Expected ${path}.type to be a String`);\n\n\tswitch(definition['type']) {\n\t\tcase 'json':\n\t\t\treturn JSONValidator.fromJSON(definition as Definition & {[key: string]: unknown}, path);\n\t\tcase 'boolean':\n\t\t\treturn BooleanValidator.fromJSON(definition as Definition & {[key: string]: unknown}, path);\n\t\tcase 'number':\n\t\t\treturn NumberValidator.fromJSON(definition as Definition & {[key: string]: unknown}, path);\n\t\tcase 'string':\n\t\t\treturn StringValidator.fromJSON(definition as Definition & {[key: string]: unknown}, path);\n\t\tcase 'array':\n\t\t\treturn ArrayValidator.fromJSON(definition as Definition & {[key: string]: unknown}, path);\n\t\tcase 'object':\n\t\t\treturn ObjectValidator.fromJSON(definition as Definition & {[key: string]: unknown}, path);\n\t\tdefault:\n\t\t\tthrow new DefinitionError(`Expected ${path}.type to be a registered Validator`);\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Validator} from '../Validator';\nimport {AssertError} from '../lib/util';\nimport {Definition, JSONValidatorDefinition} from '../Definitions';\n\nexport class JSONValidator<T extends JSON.JSON = JSON.JSON> extends Validator<T> {\n\tpublic static fromJSON(\n\t\t_definition: Definition & { [key: string]: unknown },\n\t\t_path: string = 'definition'\n\t): JSONValidator {\n\t\treturn new JSONValidator();\n\t}\n\n\tpublic assert(data: unknown, path: string = 'data'): asserts data is JSON.JSON {\n\t\tif (!JSON.isJSON(data))\n\t\t\tthrow new AssertError(`Expected ${path} to be valid JSON`);\n\t}\n\n\tpublic isSubset(other: Validator): boolean {\n\t\treturn other instanceof JSONValidator;\n\t}\n\n\tpublic isEquals(other: Validator): boolean {\n\t\treturn other instanceof JSONValidator;\n\t}\n\n\tpublic toJSON(): JSONValidatorDefinition {\n\t\treturn {\n\t\t\ttype: 'json'\n\t\t};\n\t}\n}", "import type {Validator} from '../Validator';\n\nexport type ApplyNullability<T, N extends boolean> =\n\tN extends true ? T | null : Exclude<T, null>;\n\nexport type InferDefinitionType<V> = V extends { toJSON(): infer D } ? D : never;\nexport type InferValidatorReturnType<V> = V extends Validator<infer T> ? T : unknown;\n\nexport type InferListDefinitionType<T extends readonly Validator[]> = {\n\t[K in keyof T]: InferDefinitionType<T[K]>;\n};\nexport type InferListReturnType<T> = T extends readonly Validator[] ?\n\t{ [K in keyof T]: InferValidatorReturnType<T[K]> } :\n\tunknown;\n\nexport type InferObjectDefinitionType<T extends { [key: string]: Validator }> = {\n\t[K in keyof T]: InferDefinitionType<T[K]>\n}\nexport type InferObjectReturnType<T> = T extends { [key: string]: Validator } ?\n\t{ [K in keyof T]: InferValidatorReturnType<T[K]> } :\n\tunknown;\n\nexport class AssertError extends Error {}\n\nexport class DefinitionError extends Error {}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {AssertError, DefinitionError} from '../lib/util';\nimport {JSONValidator} from './JSON';\nimport {Definition, BooleanValidatorDefinition} from '../Definitions';\n\nexport class BooleanValidator<T = unknown> extends Validator<T> {\n\tpublic static fromJSON(\n\t\tdefinition: Definition & { [key: string]: unknown },\n\t\tpath: string = 'definition'\n\t): BooleanValidator {\n\t\tconst validatorInstance = new BooleanValidator();\n\n\t\tif ('nullable' in definition) {\n\t\t\tif (!JSON.isBoolean(definition['nullable']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.nullable to be a Boolean`);\n\n\t\t\tif(definition['nullable'])\n\t\t\t\tvalidatorInstance._nullable = Option.Some(null);\n\t\t}\n\n\t\tif ('equals' in definition) {\n\t\t\tif (!JSON.isBoolean(definition['equals']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.equals to be a Boolean`);\n\n\t\t\tvalidatorInstance._equals = Option.Some(definition['equals']);\n\t\t}\n\n\t\treturn validatorInstance;\n\t}\n\n\tprotected _nullable: Option<null> = Option.None();\n\tprotected _equals: Option<boolean> = Option.None();\n\n\tpublic assert(data: unknown, path: string = 'data'): asserts data is T {\n\t\tif (JSON.isBoolean(data)) {\n\t\t\tif (this._equals.isSome() && this._equals.value !== data)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be ${this._equals.value}${this._nullable.isSome() ? '' : ' or Null'}`);\n\t\t}\n\t\telse if(JSON.isNull(data)) {\n\t\t\tif(!this._nullable.isSome())\n\t\t\t\tthrow new AssertError(`Expected ${path} to be a Boolean${this._nullable.isSome() ? ' or Null' : ''}`);\n\t\t}\n\t\telse\n\t\t\tthrow new AssertError(`Expected ${path} to be a Boolean${this._nullable.isSome() ? ' or Null' : ''}`);\n\t}\n\n\tpublic isSubset(other: Validator): boolean {\n\t\tif (other instanceof JSONValidator)\n\t\t\treturn true;\n\n\t\tif (!(other instanceof BooleanValidator))\n\t\t\treturn false;\n\n\t\tif (this._nullable.isSome() && !other._nullable.isSome())\n\t\t\treturn false;\n\n\t\tif (other._equals.isSome()) {\n\t\t\tif (this._equals.isSome())\n\t\t\t\treturn this._equals.value === other._equals.value;\n\t\t\telse\n\t\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\tpublic isEquals(other: Validator): boolean {\n\t\tif(!(other instanceof BooleanValidator))\n\t\t\treturn false;\n\n\t\treturn this._nullable.equals(other._nullable) && this._equals.equals(other._equals);\n\t}\n\n\tpublic toJSON(): BooleanValidatorDefinition {\n\t\tconst definition: BooleanValidatorDefinition = {\n\t\t\ttype: 'boolean'\n\t\t};\n\n\t\tif (this._nullable.isSome())\n\t\t\tdefinition['nullable'] = true;\n\n\t\tif (this._equals.isSome())\n\t\t\tdefinition['equals'] = this._equals.value;\n\n\t\treturn definition;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {AssertError, DefinitionError} from '../lib/util';\nimport {JSONValidator} from './JSON';\nimport {Definition, NumberValidatorDefinition} from '../Definitions';\n\nexport class NumberValidator<T = unknown> extends Validator<T> {\n\tpublic static fromJSON(\n\t\tdefinition: Definition & { [key: string]: unknown },\n\t\tpath: string = 'definition'\n\t): NumberValidator {\n\t\tconst validatorInstance = new NumberValidator();\n\n\t\tif ('nullable' in definition) {\n\t\t\tif (!JSON.isBoolean(definition['nullable']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.nullable to be a Boolean`);\n\n\t\t\tif (definition['nullable'])\n\t\t\t\tvalidatorInstance._nullable = Option.Some(null);\n\t\t}\n\n\t\tif ('equals' in definition) {\n\t\t\tif (!JSON.isNumber(definition['equals']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.equals to be a Number`);\n\n\t\t\tvalidatorInstance._equals = Option.Some(definition['equals']);\n\t\t}\n\n\t\tif ('integer' in definition) {\n\t\t\tif (!JSON.isBoolean(definition['integer']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.integer to be a Boolean`);\n\n\t\t\tif (definition['integer'])\n\t\t\t\tvalidatorInstance._integer = Option.Some(null);\n\t\t}\n\n\t\tif ('min' in definition) {\n\t\t\tif (!JSON.isNumber(definition['min']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.min to be a Number`);\n\n\t\t\tvalidatorInstance._min = Option.Some(definition['min']);\n\t\t}\n\n\t\tif ('max' in definition) {\n\t\t\tif (!JSON.isNumber(definition['max']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.max to be a Number`);\n\n\t\t\tvalidatorInstance._max = Option.Some(definition['max']);\n\t\t}\n\n\t\treturn validatorInstance;\n\t}\n\n\tprotected _nullable: Option<null> = Option.None();\n\tprotected _integer: Option<null> = Option.None();\n\tprotected _min: Option<number> = Option.None();\n\tprotected _max: Option<number> = Option.None();\n\tprotected _equals: Option<JSON.Number> = Option.None();\n\n\tpublic assert(data: unknown, path: string = 'data'): asserts data is T {\n\t\tif (JSON.isNumber(data)) {\n\t\t\tif (this._equals.isSome() && this._equals.value !== data)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be ${this._equals.value}`);\n\n\t\t\tif (this._integer.isSome() && !Number.isInteger(data))\n\t\t\t\tthrow new AssertError(`Expected ${path} to be an Integer`);\n\n\t\t\tif (this._min.isSome() && this._min.value > data)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be at least ${this._min.value}`);\n\n\t\t\tif (this._max.isSome() && this._max.value < data)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be at most ${this._max.value}`);\n\t\t}\n\t\telse if (JSON.isNull(data)) {\n\t\t\tif (!this._nullable.isSome())\n\t\t\t\tthrow new AssertError(`Expected ${path} to be a Number${this._nullable.isSome() ? ' or Null' : ''}`);\n\t\t}\n\t\telse\n\t\t\tthrow new AssertError(`Expected ${path} to be a Number${this._nullable.isSome() ? ' or Null' : ''}`);\n\t}\n\n\tpublic isSubset(other: Validator): boolean {\n\t\tif (other instanceof JSONValidator)\n\t\t\treturn true;\n\n\t\tif (!(other instanceof NumberValidator))\n\t\t\treturn false;\n\n\t\tif (this._nullable.isSome() && !other._nullable.isSome())\n\t\t\treturn false;\n\n\t\tif (this._equals.isSome()) {\n\t\t\tif (other._equals.isSome() && other._equals.value !== this._equals.value)\n\t\t\t\treturn false;\n\n\t\t\tif (other._integer.isSome() && !Number.isInteger(this._equals.value))\n\t\t\t\treturn false;\n\n\t\t\tif (other._min.isSome() && other._min.value > this._equals.value)\n\t\t\t\treturn false;\n\n\t\t\tif (other._max.isSome() && other._max.value < this._equals.value)\n\t\t\t\treturn false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (other._equals.isSome())\n\t\t\treturn false;\n\n\t\tif (!this._integer.isSome() && other._integer.isSome())\n\t\t\treturn false;\n\n\t\tif (other._min.isSome() && (!this._min.isSome() || this._min.value < other._min.value))\n\t\t\treturn false;\n\n\t\tif (other._max.isSome() && (!this._max.isSome() || this._max.value > other._max.value))\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\tpublic isEquals(other: Validator): boolean {\n\t\tif(!(other instanceof NumberValidator))\n\t\t\treturn false;\n\n\t\treturn this._nullable.equals(other._nullable) &&\n\t\t\tthis._integer.equals(other._integer) &&\n\t\t\tthis._min.equals(other._min) &&\n\t\t\tthis._max.equals(other._max) &&\n\t\t\tthis._equals.equals(other._equals);\n\t}\n\n\tpublic toJSON(): NumberValidatorDefinition {\n\t\tconst definition: NumberValidatorDefinition = {\n\t\t\ttype: 'number'\n\t\t};\n\n\t\tif (this._nullable.isSome())\n\t\t\tdefinition['nullable'] = true;\n\n\t\tif (this._equals.isSome())\n\t\t\tdefinition['equals'] = this._equals.value;\n\n\t\tif (this._integer.isSome())\n\t\t\tdefinition['integer'] = true;\n\n\t\tif (this._min.isSome())\n\t\t\tdefinition['min'] = this._min.value;\n\n\t\tif (this._max.isSome())\n\t\t\tdefinition['max'] = this._max.value;\n\n\t\treturn definition;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {AssertError, DefinitionError} from '../lib/util';\nimport {JSONValidator} from './JSON';\nimport {Definition, StringValidatorDefinition} from '../Definitions';\n\nexport class StringValidator<T = unknown> extends Validator<T> {\n\tpublic static fromJSON(\n\t\tdefinition: Definition & { [key: string]: unknown },\n\t\tpath: string = 'schema'\n\t): StringValidator {\n\t\tconst validatorInstance = new StringValidator();\n\n\t\tif ('nullable' in definition) {\n\t\t\tif (!JSON.isBoolean(definition['nullable']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.nullable to be a Boolean`);\n\n\t\t\tif(definition['nullable'])\n\t\t\t\tvalidatorInstance._nullable = Option.Some(null);\n\t\t}\n\n\t\tif ('equals' in definition) {\n\t\t\tif (!JSON.isString(definition['equals']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.equals to be a String`);\n\n\t\t\tvalidatorInstance._equals = Option.Some(definition['equals']);\n\t\t}\n\n\t\tif ('min' in definition) {\n\t\t\tif (!JSON.isNumber(definition['min']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.min to be a Number`);\n\n\t\t\tvalidatorInstance._min = Option.Some(definition['min']);\n\t\t}\n\n\t\tif ('max' in definition) {\n\t\t\tif (!JSON.isNumber(definition['max']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.max to be a Number`);\n\n\t\t\tvalidatorInstance._max = Option.Some(definition['max']);\n\t\t}\n\n\t\treturn validatorInstance;\n\t}\n\n\tprotected _nullable: Option<null> = Option.None();\n\tprotected _min: Option<number> = Option.None();\n\tprotected _max: Option<number> = Option.None();\n\tprotected _equals: Option<JSON.String> = Option.None();\n\n\tpublic assert(data: unknown, path: string = 'data'): asserts data is T {\n\t\tif (JSON.isString(data)) {\n\t\t\tif (this._equals.isSome() && this._equals.value !== data)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be ${this._equals.value}`);\n\n\t\t\tif (this._min.isSome() && this._min.value > data.length)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be at least ${this._min.value} characters long`);\n\n\t\t\tif (this._max.isSome() && this._max.value < data.length)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be at most ${this._max.value} characters long`);\n\t\t}\n\t\telse if(JSON.isNull(data)) {\n\t\t\tif(!this._nullable.isSome())\n\t\t\t\tthrow new AssertError(`Expected ${path} to be a String${this._nullable.isSome() ? ' or Null' : ''}`);\n\t\t}\n\t\telse\n\t\t\tthrow new AssertError(`Expected ${path} to be a String${this._nullable.isSome() ? ' or Null' : ''}`);\n\t}\n\n\tpublic isSubset(other: Validator): boolean {\n\t\tif (other instanceof JSONValidator)\n\t\t\treturn true;\n\n\t\tif (!(other instanceof StringValidator))\n\t\t\treturn false;\n\n\t\tif (this._nullable.isSome() && !other._nullable.isSome())\n\t\t\treturn false;\n\n\t\tif (this._equals.isSome()) {\n\t\t\tif (other._equals.isSome() && other._equals.value !== this._equals.value)\n\t\t\t\treturn false;\n\n\t\t\tif (other._min.isSome() && other._min.value > this._equals.value.length)\n\t\t\t\treturn false;\n\n\t\t\tif (other._max.isSome() && other._max.value < this._equals.value.length)\n\t\t\t\treturn false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (other._equals.isSome())\n\t\t\treturn false;\n\n\t\tif (other._min.isSome() && (!this._min.isSome() || this._min.value < other._min.value))\n\t\t\treturn false;\n\n\t\tif (other._max.isSome() && (!this._max.isSome() || this._max.value > other._max.value))\n\t\t\treturn false;\n\n\t\treturn true;\n\t}\n\n\tpublic isEquals(other: Validator): boolean {\n\t\tif (!(other instanceof StringValidator))\n\t\t\treturn false;\n\n\t\treturn this._nullable.equals(other._nullable) &&\n\t\t\tthis._min.equals(other._min) &&\n\t\t\tthis._max.equals(other._max) &&\n\t\t\tthis._equals.equals(other._equals);\n\t}\n\n\tpublic toJSON(): StringValidatorDefinition {\n\t\tconst definition: StringValidatorDefinition = {\n\t\t\ttype: 'string'\n\t\t};\n\n\t\tif (this._nullable.isSome())\n\t\t\tdefinition['nullable'] = true;\n\n\t\tif (this._equals.isSome())\n\t\t\tdefinition['equals'] = this._equals.value;\n\n\t\tif (this._min.isSome())\n\t\t\tdefinition['min'] = this._min.value;\n\n\t\tif (this._max.isSome())\n\t\t\tdefinition['max'] = this._max.value;\n\n\t\treturn definition;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {fromJSON} from '../lib/fromJSON';\nimport {AssertError, DefinitionError} from '../lib/util';\nimport {JSONValidator} from './JSON';\nimport {Definition, ArrayValidatorDefinition} from '../Definitions';\n\nexport class ArrayValidator<\n\tT = unknown,\n\t// EV & TV are the Every and Tuple Definitions\n\tED extends Definition = Definition,\n\tTD extends readonly Definition[] = readonly Definition[],\n> extends Validator<T> {\n\tpublic static fromJSON(\n\t\tdefinition: Definition & { [key: string]: unknown },\n\t\tpath: string = 'definition'\n\t): ArrayValidator {\n\t\tconst validatorInstance = new ArrayValidator();\n\n\t\tif ('nullable' in definition) {\n\t\t\tif (!JSON.isBoolean(definition['nullable']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.nullable to be a Boolean`);\n\n\t\t\tif(definition['nullable'])\n\t\t\t\tvalidatorInstance._nullable = Option.Some(null);\n\t\t}\n\n\t\tif ('min' in definition) {\n\t\t\tif (!JSON.isNumber(definition['min']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.min to be a Number`);\n\n\t\t\tvalidatorInstance._min = Option.Some(definition['min']);\n\t\t}\n\n\t\tif ('max' in definition) {\n\t\t\tif (!JSON.isNumber(definition['max']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.max to be a Number`);\n\n\t\t\tvalidatorInstance._max = Option.Some(definition['max']);\n\t\t}\n\n\t\tif ('every' in definition)\n\t\t\tvalidatorInstance._every = Option.Some(fromJSON(definition['every'], `${path}.every`));\n\n\t\tif ('tuple' in definition) {\n\t\t\tif (!JSON.isShallowArray(definition['tuple']))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.tuple to be an Array`);\n\n\t\t\tconst tupleSchemas: Validator[] = [];\n\t\t\tconst errors: DefinitionError[] = [];\n\n\t\t\tdefinition['tuple'].forEach((tupleDef, index) => {\n\t\t\t\ttry {\n\t\t\t\t\ttupleSchemas.push(fromJSON(tupleDef, `${path}.tuple[${index}]`));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (!(e instanceof DefinitionError))\n\t\t\t\t\t\tthrow new DefinitionError(`Fatal Error: Undefined Error thrown by Domain.fromJSON at ${path}`);\n\n\t\t\t\t\terrors.push(e);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (errors.length > 0)\n\t\t\t\tthrow new DefinitionError(`Multiple Definition Errors detected at ${path} (see cause)`, {cause: errors});\n\n\t\t\tvalidatorInstance._tuple = Option.Some(tupleSchemas);\n\t\t}\n\n\t\treturn validatorInstance;\n\t}\n\n\tprotected _nullable: Option<null> = Option.None();\n\tprotected _every: Option<Validator> = Option.None();\n\tprotected _tuple: Option<readonly Validator[]> = Option.None();\n\tprotected _min: Option<number> = Option.None();\n\tprotected _max: Option<number> = Option.None();\n\n\tpublic assert(data: unknown, path: string = 'data'): asserts data is T {\n\t\tif (JSON.isShallowArray(data)) {\n\t\t\tif (this._min.isSome() && this._min.value > data.length)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be at least ${this._min.value} Elements long`);\n\n\t\t\tif (this._max.isSome() && this._max.value < data.length)\n\t\t\t\tthrow new AssertError(`Expected ${path} to be at most ${this._max.value} Elements long`);\n\n\t\t\tconst errors: AssertError[] = [];\n\n\t\t\tif (this._every.isSome()) {\n\t\t\t\tconst validator: Validator = this._every.value;\n\n\t\t\t\tdata.forEach((value, index) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidator.assert(value, `${path}[${index}]`);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (!(e instanceof AssertError))\n\t\t\t\t\t\t\tthrow new AssertError(`Fatal Error: Undefined Error thrown by an Assert Method at ${path}[${index}]`);\n\n\t\t\t\t\t\terrors.push(e);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this._tuple.isSome()) {\n\t\t\t\tif (data.length < this._tuple.value.length)\n\t\t\t\t\tthrow new AssertError(`Expected ${path} to be at least ${this._tuple.value.length} Elements long (Tuple Constraint)`);\n\n\t\t\t\tthis._tuple.value.forEach((validator: Validator, index) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidator.assert(data[index], `${path}[${index}]`);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (!(e instanceof AssertError))\n\t\t\t\t\t\t\tthrow new AssertError(`Fatal Error: Undefined Error thrown by an Assert Method at ${path}[${index}]`);\n\n\t\t\t\t\t\terrors.push(e);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (errors.length > 0)\n\t\t\t\tthrow new AssertError(`Multiple Errors while asserting ${path} (see cause)`, {cause: errors});\n\t\t}\n\t\telse if(JSON.isNull(data)) {\n\t\t\tif(!this._nullable.isSome())\n\t\t\t\tthrow new AssertError(`Expected ${path} to be an Array${this._nullable.isSome() ? ' or Null' : ''}`);\n\t\t}\n\t\telse\n\t\t\tthrow new AssertError(`Expected ${path} to be an Array${this._nullable.isSome() ? ' or Null' : ''}`);\n\t}\n\n\tpublic isSubset(other: Validator): boolean {\n\t\tif(other instanceof JSONValidator)\n\t\t\treturn true;\n\n\t\tif (!(other instanceof ArrayValidator))\n\t\t\treturn false;\n\n\t\tif (this._nullable.isSome() && !other._nullable.isSome())\n\t\t\treturn false;\n\n\t\tconst thisTupleLen = this._tuple.isSome() ? this._tuple.value.length : 0;\n\t\tconst otherTupleLen = other._tuple.isSome() ? other._tuple.value.length : 0;\n\n\t\tconst thisMin = this._min.isSome() ? this._min.value : 0;\n\t\tconst otherMin = other._min.isSome() ? other._min.value : 0;\n\n\t\tconst thisMax = this._max.isSome() ? this._max.value : Infinity;\n\t\tconst otherMax = other._max.isSome() ? other._max.value : Infinity;\n\n\t\tconst thisEffectiveMin = Math.max(thisMin, thisTupleLen);\n\t\tconst otherEffectiveMin = Math.max(otherMin, otherTupleLen);\n\n\t\tif (thisEffectiveMin < otherEffectiveMin)\n\t\t\treturn false;\n\n\t\tif (thisMax > otherMax)\n\t\t\treturn false;\n\n\t\t// Helper: this index constraints are the intersection of (every, tuple[i])\n\t\t// To soundly prove (A_every \u2229 A_tuple[i]) \u2286 Target, it's sufficient that\n\t\t// at least one conjunct is itself a subset of Target (false negatives allowed).\n\t\tconst indexConjuncts = (i: number): Validator[] => {\n\t\t\tconst conjuncts: Validator[] = [];\n\n\t\t\tif (this._every.isSome())\n\t\t\t\tconjuncts.push(this._every.value);\n\n\t\t\tif (this._tuple.isSome() && i < this._tuple.value.length)\n\t\t\t\tconjuncts.push(this._tuple.value[i]!);\n\n\t\t\treturn conjuncts;\n\t\t};\n\n\t\tconst conjunctsSubset = (conjuncts: Validator[], target: Validator): boolean => {\n\t\t\t// If we have no constraint at all, we accept \"anything\" at that position,\n\t\t\t// so we can only be a subset if the target also accepts anything \u2014 we\n\t\t\t// cannot prove that here, so be conservative.\n\t\t\tif (conjuncts.length === 0)\n\t\t\t\treturn false;\n\n\t\t\treturn conjuncts.some(c => c.isSubset(target));\n\t\t};\n\n\t\tif (other._tuple.isSome()) {\n\t\t\tfor (let i = 0; i < other._tuple.value.length; i++) {\n\t\t\t\tconst aConj = indexConjuncts(i);\n\n\t\t\t\tif (!conjunctsSubset(aConj, other._tuple.value[i]!))\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (other._every.isSome() && !conjunctsSubset(aConj, other._every.value))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn !(other._every.isSome() && (thisMax === Infinity ? true : thisMax > Math.max(thisTupleLen, otherTupleLen)) && (!this._every.isSome() || !this._every.value.isSubset(other._every.value)));\n\t}\n\tpublic isEquals(other: Validator): boolean {\n\t\tif(!(other instanceof ArrayValidator))\n\t\t\treturn false;\n\n\t\treturn this._nullable.equals(other._nullable) &&\n\t\t\tthis._min.equals(other._min) &&\n\t\t\tthis._max.equals(other._max) &&\n\t\t\tthis._every.equals(other._every, (a, b) => a.isEquals(b)) &&\n\t\t\tthis._tuple.equals(other._tuple, (a, b) => {\n\t\t\t\tif(a.length !== b.length)\n\t\t\t\t\treturn false;\n\n\t\t\t\tfor(let i = 0; i < a.length; i++) {\n\t\t\t\t\tif(!a[i]!.isEquals(b[i]!))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t}\n\n\tpublic toJSON(): ArrayValidatorDefinition<ED, TD> {\n\t\tconst definition: ArrayValidatorDefinition = {type: 'array'};\n\n\t\tif (this._nullable.isSome())\n\t\t\tdefinition.nullable = true;\n\n\t\tif (this._min.isSome())\n\t\t\tdefinition.min = this._min.value;\n\n\t\tif (this._max.isSome())\n\t\t\tdefinition.max = this._max.value;\n\n\t\tif (this._every.isSome())\n\t\t\tdefinition.every = this._every.value.toJSON();\n\n\t\tif (this._tuple.isSome())\n\t\t\tdefinition.tuple = this._tuple.value.map(validator => validator.toJSON());\n\n\t\treturn definition as ArrayValidatorDefinition<ED, TD>;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {fromJSON} from '../lib/fromJSON';\nimport {AssertError, DefinitionError} from '../lib/util';\nimport {JSONValidator} from './JSON';\nimport {Definition, ObjectValidatorDefinition} from '../Definitions';\n\nexport class ObjectValidator<\n\tT = unknown,\n\t// TD & SD are the Every (Type) and Shape definitions\n\tTD extends Definition = Definition,\n\tSD extends { [key: string]: Definition } = { [key: string]: Definition }\n> extends Validator<T> {\n\tpublic static fromJSON(\n\t\tdefinition: Definition & { [key: string]: unknown },\n\t\tpath: string = \"definition\"\n\t): ObjectValidator {\n\t\tconst validatorInstance = new ObjectValidator();\n\n\t\tif (\"nullable\" in definition) {\n\t\t\tif (!JSON.isBoolean(definition[\"nullable\"]))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.nullable to be a Boolean`);\n\n\t\t\tif (definition['nullable'])\n\t\t\t\tvalidatorInstance._nullable = Option.Some(null);\n\t\t}\n\n\t\tif (\"exact\" in definition) {\n\t\t\tif (!JSON.isBoolean(definition[\"exact\"]))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.exact to be a Boolean`);\n\n\t\t\tif (definition['exact'])\n\t\t\t\tvalidatorInstance._exact = Option.Some(null);\n\t\t}\n\n\t\tif (\"min\" in definition) {\n\t\t\tif (!JSON.isNumber(definition[\"min\"]))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.min to be a Number`);\n\n\t\t\tvalidatorInstance._min = Option.Some(definition['min']);\n\t\t}\n\n\t\tif (\"max\" in definition) {\n\t\t\tif (!JSON.isNumber(definition[\"max\"]))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.max to be a Number`);\n\n\t\t\tvalidatorInstance._max = Option.Some(definition['max']);\n\t\t}\n\n\t\tif (\"every\" in definition)\n\t\t\tvalidatorInstance._every = Option.Some(fromJSON(definition['every'], `${path}.every`));\n\n\t\tif (\"shape\" in definition) {\n\t\t\tif (!JSON.isShallowObject(definition[\"shape\"]))\n\t\t\t\tthrow new DefinitionError(`Expected ${path}.shape to be an Object`);\n\n\t\t\tconst shape: { [key: string]: Validator } = {};\n\t\t\tconst errors: DefinitionError[] = [];\n\n\t\t\tfor (const [key, value] of Object.entries(definition[\"shape\"])) {\n\t\t\t\ttry {\n\t\t\t\t\tshape[key] = fromJSON(value, `${path}.shape.${key}`);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (!(e instanceof DefinitionError))\n\t\t\t\t\t\tthrow new DefinitionError(`Fatal Error: Undefined Error thrown by Domain.fromJSON at ${path}.shape.${key}`);\n\n\t\t\t\t\terrors.push(e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (errors.length > 0) {\n\t\t\t\tthrow new DefinitionError(`Multiple Definition Errors detected at ${path}.shape (see cause)`, {cause: errors});\n\t\t\t}\n\n\t\t\tvalidatorInstance._shape = Option.Some(shape);\n\t\t}\n\n\t\treturn validatorInstance;\n\t}\n\n\tprotected _nullable: Option<null> = Option.None();\n\tprotected _min: Option<number> = Option.None();\n\tprotected _max: Option<number> = Option.None();\n\tprotected _every: Option<Validator> = Option.None();\n\tprotected _shape: Option<{ [key: string]: Validator }> = Option.None();\n\tprotected _exact: Option<null> = Option.None();\n\n\tpublic assert(data: unknown, path: string = \"data\"): asserts data is T {\n\t\tif (JSON.isShallowObject(data)) {\n\t\t\tconst keys = Object.keys(data);\n\n\t\t\tif (this._min.isSome() && keys.length < this._min.value)\n\t\t\t\tthrow new AssertError(`Expected ${path} to have at least ${this._min.value} Properties`);\n\n\t\t\tif (this._max.isSome() && keys.length > this._max.value)\n\t\t\t\tthrow new AssertError(`Expected ${path} to have at most ${this._max.value} Properties`);\n\n\t\t\tconst errors: AssertError[] = [];\n\n\t\t\tif (this._shape.isSome()) {\n\t\t\t\tfor (const key of Object.keys(this._shape.value)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst validator: Validator = this._shape.value[key]!;\n\n\t\t\t\t\t\tvalidator.assert(data[key], `${path}.${key}`);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (!(e instanceof AssertError))\n\t\t\t\t\t\t\tthrow new AssertError(`Fatal Error: Undefined Error thrown by an Assert Method at ${path}.${key}`);\n\n\t\t\t\t\t\terrors.push(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._exact.isSome()) {\n\t\t\t\t\tfor (const key of keys) {\n\t\t\t\t\t\tif (!(key in this._shape.value)) {\n\t\t\t\t\t\t\terrors.push(new AssertError(`Unexpected property ${path}.${key}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this._every.isSome()) {\n\t\t\t\tconst validator: Validator = this._every.value;\n\n\t\t\t\tfor (const key of keys) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvalidator.assert(data[key], `${path}.${key}`);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tif (!(e instanceof AssertError))\n\t\t\t\t\t\t\tthrow new AssertError(`Fatal Error: Undefined Error thrown by an Assert Method at ${path}.${key}`);\n\n\t\t\t\t\t\terrors.push(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (errors.length > 0)\n\t\t\t\tthrow new AssertError(`Multiple Errors while asserting ${path} (see cause)`, {cause: errors});\n\t\t}\n\t\telse if (JSON.isNull(data)) {\n\t\t\tif (!this._nullable.isSome())\n\t\t\t\tthrow new AssertError(`Expected ${path} to be an Object${this._nullable.isSome() ? ' or Null' : ''}`);\n\t\t}\n\t\telse\n\t\t\tthrow new AssertError(`Expected ${path} to be an Object${this._nullable.isSome() ? ' or Null' : ''}`);\n\t}\n\n\tpublic isSubset(other: Validator): boolean {\n\t\tif (other instanceof JSONValidator)\n\t\t\treturn true;\n\n\t\t// Must be the same validator type\n\t\tif (!(other instanceof ObjectValidator))\n\t\t\treturn false;\n\n\t\t// ---- 1) Nullability ----\n\t\t// If this allows null, the other must allow null as well\n\t\tif (this._nullable.isSome() && !other._nullable.isSome())\n\t\t\treturn false;\n\n\t\t// ---- 2) Min / Max (property count) ----\n\t\t// For subset: this must be at least as strict as other.\n\t\tconst thisMin = this._min.isSome() ? this._min.value : 0;\n\t\tconst otherMin = other._min.isSome() ? other._min.value : 0;\n\t\tif (thisMin < otherMin)\n\t\t\treturn false;\n\n\t\tconst thisMax = this._max.isSome() ? this._max.value : Number.POSITIVE_INFINITY;\n\t\tconst otherMax = other._max.isSome() ? other._max.value : Number.POSITIVE_INFINITY;\n\t\tif (thisMax > otherMax)\n\t\t\treturn false;\n\n\t\t// ---- 3) Shape requirements ----\n\t\t// If other requires certain keys (shape), this must also require them, and be compatible per key.\n\t\tif (other._shape.isSome()) {\n\t\t\tif (!this._shape.isSome())\n\t\t\t\treturn false;\n\n\t\t\tconst thisShape = this._shape.value;\n\t\t\tconst otherShape = other._shape.value;\n\n\t\t\tfor (const key of Object.keys(otherShape)) {\n\t\t\t\tif (!(key in thisShape))\n\t\t\t\t\treturn false;\n\n\t\t\t\tconst a = thisShape[key]!;\n\t\t\t\tconst b = otherShape[key]!;\n\t\t\t\tif (!a.isSubset(b))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// ---- 4) Exactness ----\n\t\t// If other is exact, then this must be exact AND must have the exact same key set as other.shape.\n\t\tif (other._exact.isSome()) {\n\t\t\tif (!this._exact.isSome())\n\t\t\t\treturn false;\n\n\t\t\tif (!other._shape.isSome() || !this._shape.isSome())\n\t\t\t\treturn false;\n\n\t\t\tconst aKeys = Object.keys(this._shape.value).sort();\n\t\t\tconst bKeys = Object.keys(other._shape.value).sort();\n\n\t\t\tif (aKeys.length !== bKeys.length)\n\t\t\t\treturn false;\n\n\t\t\tfor (let i = 0; i < aKeys.length; i++) {\n\t\t\t\tif (aKeys[i] !== bKeys[i])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// ---- 5) \"every\" constraint ----\n\t\t// If other has an \"every\" constraint, all values in any object accepted by this must satisfy it.\n\t\tif (other._every.isSome()) {\n\t\t\tconst bEvery = other._every.value;\n\n\t\t\t// All *possible* properties accepted by this must be constrained to bEvery.\n\t\t\t// If this can accept arbitrary keys (not exact), then we need this.every \u2286 bEvery.\n\t\t\tif (!this._exact.isSome()) {\n\t\t\t\tif (!this._every.isSome())\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (!this._every.value.isSubset(bEvery))\n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Additionally, any explicitly shaped properties must also imply bEvery.\n\t\t\t// (Even if this.every exists, shape validators might allow values outside bEvery.)\n\t\t\tif (this._shape.isSome()) {\n\t\t\t\tfor (const [_, v] of Object.entries(this._shape.value)) {\n\t\t\t\t\tif (!v.isSubset(bEvery))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If this is exact and has a shape, then there are no unknown keys;\n\t\t\t// the per-shape check above is sufficient (and this.every is optional).\n\t\t\tif (this._exact.isSome() && !this._shape.isSome()) {\n\t\t\t\t// Exact without shape is effectively meaningless for bounding keys,\n\t\t\t\t// so conservatively require this.every in that case.\n\t\t\t\tif (!this._every.isSome())\n\t\t\t\t\treturn false;\n\n\t\t\t\tif (!this._every.value.isSubset(bEvery))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\t// If other has no \"every\", this can be stricter or looser on value-types freely (as long as above holds).\n\n\t\treturn true;\n\t}\n\t\n\tpublic isEquals(other: Validator): boolean {\n\t\tif(!(other instanceof ObjectValidator))\n\t\t\treturn false;\n\t\t\n\t\treturn this._nullable.equals(other._nullable) &&\n\t\t\tthis._min.equals(other._min) &&\n\t\t\tthis._max.equals(other._max) &&\n\t\t\tthis._exact.equals(other._exact) &&\n\t\t\tthis._every.equals(other._every, (a, b) => a.isEquals(b)) &&\n\t\t\tthis._shape.equals(other._shape, (a, b) => {\n\t\t\t\tconst keysA = Object.keys(a);\n\t\t\t\tconst keysB = Object.keys(b);\n\n\t\t\t\tif (keysA.length !== keysB.length)\n\t\t\t\t\treturn false;\n\n\t\t\t\tfor (const key of keysA) {\n\t\t\t\t\tif (!(key in b) || !a[key]?.isEquals(b[key]!))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t});\n\t}\n\n\tpublic toJSON(): ObjectValidatorDefinition<TD, SD> {\n\t\tconst schema: ObjectValidatorDefinition = {type: \"object\"};\n\n\t\tif (this._nullable.isSome())\n\t\t\tschema.nullable = true;\n\n\t\tif (this._exact.isSome())\n\t\t\tschema.exact = true;\n\n\t\tif (this._min.isSome())\n\t\t\tschema.min = this._min.value;\n\n\t\tif (this._max.isSome())\n\t\t\tschema.max = this._max.value;\n\n\t\tif (this._every.isSome())\n\t\t\tschema.every = this._every.value.toJSON();\n\n\t\tif (this._shape.isSome()) {\n\t\t\tschema.shape = Object.fromEntries(\n\t\t\t\tObject.entries(this._shape.value).map(([k, s]) => [k, s.toJSON()])\n\t\t\t) as any;\n\t\t}\n\n\t\treturn schema as ObjectValidatorDefinition<TD, SD>;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {JSONValidator} from '../Validators/JSON';\n\nexport class JSONBuilder<T extends JSON.JSON = JSON.JSON> extends JSONValidator<T> {}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {ApplyNullability} from '../lib/util';\nimport {BooleanValidator} from '../Validators/Boolean';\n\nexport class BooleanBuilder<\n\tT extends JSON.Boolean = JSON.Boolean,\n\tN extends boolean = false\n> extends BooleanValidator<ApplyNullability<T, N>> {\n\tpublic nullable<const F extends boolean = true>(flag?: F): BooleanBuilder<T, F> {\n\t\tthis._nullable = flag ?? true ? Option.Some(null) : Option.None();\n\n\t\treturn this as unknown as BooleanBuilder<T, F>;\n\t}\n\n\tpublic equals<const V extends boolean>(value: V): BooleanBuilder<V, N> {\n\t\tthis._equals = Option.Some(value);\n\n\t\treturn this as unknown as BooleanBuilder<V, N>;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {ApplyNullability} from '../lib/util';\nimport {NumberValidator} from '../Validators/Number';\n\nexport class NumberBuilder<\n\tT extends JSON.Number = JSON.Number,\n\tN extends boolean = false\n> extends NumberValidator<ApplyNullability<T, N>> {\n\tpublic nullable<const F extends boolean = true>(flag?: F): NumberBuilder<T, F> {\n\t\tthis._nullable = (flag ?? true) ? Option.Some(null) : Option.None();\n\n\t\treturn this as unknown as NumberBuilder<T, F>;\n\t}\n\n\tpublic equals<const V extends number>(value: V): NumberBuilder<V, N> {\n\t\tthis._equals = Option.Some(value);\n\n\t\treturn this as unknown as NumberBuilder<V, N>;\n\t}\n\n\tpublic integer(flag: boolean = true): this {\n\t\tthis._integer = flag ? Option.Some(null) : Option.None();\n\n\t\treturn this;\n\t}\n\n\tpublic min(value: number): this {\n\t\tthis._min = Option.Some(value);\n\n\t\treturn this;\n\t}\n\n\tpublic max(value: number): this {\n\t\tthis._max = Option.Some(value);\n\n\t\treturn this;\n\t}\n}", "import {JSON} from '@serum-enterprises/json';\nimport {Option} from '@serum-enterprises/option';\nimport {ApplyNullability} from '../lib/util';\nimport {StringValidator} from \"../Validators/String\";\n\nexport class StringBuilder<\n\tT extends JSON.String = JSON.String,\n\tN extends boolean = false\n> extends StringValidator<ApplyNullability<T, N>> {\n\tpublic nullable<const F extends boolean = true>(flag?: F): StringBuilder<T, F> {\n\t\tthis._nullable = (flag ?? true) ? Option.Some(null) : Option.None();\n\n\t\treturn this as unknown as StringBuilder<T, F>;\n\t}\n\n\tpublic equals<const V extends string>(value: V): StringBuilder<V, N> {\n\t\tthis._equals = Option.Some(value);\n\n\t\treturn this as unknown as StringBuilder<V, N>;\n\t}\n\n\tpublic min(value: number): this {\n\t\tthis._min = Option.Some(value);\n\n\t\treturn this;\n\t}\n\n\tpublic max(value: number): this {\n\t\tthis._max = Option.Some(value);\n\n\t\treturn this;\n\t}\n}", "import {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {\n\tApplyNullability,\n\tInferDefinitionType, InferValidatorReturnType,\n\tInferListDefinitionType, InferListReturnType\n} from '../lib/util';\nimport {Definition} from '../Definitions';\nimport {ArrayValidator} from '../Validators/Array';\n\ntype ArrayResult<E, T> =\n\tT extends readonly unknown[]\n\t\t? [...{ [K in keyof T]: T[K] & E }, ...E[]]\n\t\t: E[];\n\nexport class ArrayBuilder<\n\t// E & T are the Every and Tuple Return Types\n\tE = unknown,\n\tT = unknown,\n\t// EV & TV are the Every and Tuple Definitions\n\tED extends Definition = Definition,\n\tTD extends readonly Definition[] = readonly Definition[],\n\t// N is the Nullable Flag\n\tN extends boolean = false\n> extends ArrayValidator<ApplyNullability<ArrayResult<E, T>, N>, ED, TD> {\n\tpublic nullable<const F extends boolean = true>(flag?: F): ArrayBuilder<E, T, ED, TD, F> {\n\t\tthis._nullable = (flag ?? true) ? Option.Some(null) : Option.None();\n\n\t\treturn this as unknown as ArrayBuilder<E, T, ED, TD, F>;\n\t}\n\n\tpublic min(value: number): this {\n\t\tthis._min = Option.Some(value);\n\n\t\treturn this;\n\t}\n\n\tpublic max(value: number): this {\n\t\tthis._max = Option.Some(value);\n\n\t\treturn this;\n\t}\n\n\tpublic every<const V extends Validator>(validator: V): ArrayBuilder<InferValidatorReturnType<V>, T, InferDefinitionType<V>, TD, N> {\n\t\tthis._every = Option.Some(validator);\n\n\t\treturn this as unknown as ArrayBuilder<InferValidatorReturnType<V>, T, InferDefinitionType<V>, TD, N>;\n\t}\n\n\tpublic tuple<const V extends readonly Validator[]>(validators: V): ArrayBuilder<E, InferListReturnType<V>, ED, InferListDefinitionType<V>, N> {\n\t\tthis._tuple = Option.Some(validators);\n\n\t\treturn this as unknown as ArrayBuilder<E, InferListReturnType<V>, ED, InferListDefinitionType<V>, N>;\n\t}\n}", "import {Option} from '@serum-enterprises/option';\nimport {Validator} from '../Validator';\nimport {\n\tInferDefinitionType, InferValidatorReturnType,\n\tInferObjectDefinitionType, InferObjectReturnType\n} from '../lib/util';\nimport {Definition} from '../Definitions';\nimport {ObjectValidator} from \"../Validators/Object\";\n\ntype ObjectResult<T, S, E extends boolean> =\n\tS extends { [key: string]: unknown }\n\t\t? E extends true\n\t\t\t? { [K in keyof S]: S[K] & T }\n\t\t\t: { [K in keyof S]: S[K] & T } & { [key: string]: T }\n\t\t: { [key: string]: T };\n\nexport class ObjectBuilder<\n\t// T & S are the Every (Type) and Shape return types\n\tT = unknown,\n\tS = unknown,\n\t// TD & SD are the Every (Type) and Shape definitions\n\tTD extends Definition = Definition,\n\tSD extends { [key: string]: Definition } = { [key: string]: Definition },\n\t// N is nullable\n\tN extends boolean = false,\n\t// E is exact (no extra props when shape is set)\n\tE extends boolean = false\n> extends ObjectValidator<ObjectResult<T, S, E>> {\n\tpublic nullable<const F extends boolean = true>(flag?: F): ObjectBuilder<T, S, TD, SD, F, E> {\n\t\tthis._nullable = (flag ?? true) ? Option.Some(null) : Option.None();\n\n\t\treturn this as unknown as ObjectBuilder<T, S, TD, SD, F, E>;\n\t}\n\n\tpublic min(value: number): this {\n\t\tthis._min = Option.Some(value);\n\n\t\treturn this;\n\t}\n\n\tpublic max(value: number): this {\n\t\tthis._max = Option.Some(value);\n\n\t\treturn this;\n\t}\n\n\tpublic every<V extends Validator>(validator: V): ObjectBuilder<InferValidatorReturnType<V>, S, InferDefinitionType<V>, SD, N, E> {\n\t\tthis._every = Option.Some(validator);\n\n\t\treturn this as unknown as ObjectBuilder<InferValidatorReturnType<V>, S, InferDefinitionType<V>, SD, N, E>;\n\t}\n\n\tpublic shape<S extends { [key: string]: Validator }>(value: S): ObjectBuilder<T, InferObjectReturnType<S>, TD, InferObjectDefinitionType<S>, N, E> {\n\t\tthis._shape = Option.Some(value);\n\n\t\treturn this as unknown as ObjectBuilder<T, InferObjectReturnType<S>, TD, InferObjectDefinitionType<S>, N, E>;\n\t}\n\n\tpublic exact<const F extends boolean = true>(flag?: F): ObjectBuilder<T, S, TD, SD, N, F> {\n\t\tthis._exact = (flag ?? true) ? Option.Some(null) : Option.None();\n\n\t\treturn this as unknown as ObjectBuilder<T, S, TD, SD, N, F>;\n\t}\n}"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["exports", "JSON", "exports", "import_json", "import_json", "import_json", "import_option", "import_json", "import_option", "import_json", "import_option", "import_json", "import_option", "import_option", "import_option", "import_option", "import_option", "import_option"]
|
|
7
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Validator } from '../Validator';
|
|
2
|
-
import { ApplyNullability, InferDefinitionType, InferValidatorReturnType, InferListDefinitionType, InferListReturnType } from '../lib/util';
|
|
3
|
-
import { Definition } from '../Definitions';
|
|
4
|
-
import { ArrayValidator } from '../Validators/Array';
|
|
5
|
-
type ArrayResult<E, T> = T extends readonly unknown[] ? [...{
|
|
6
|
-
[K in keyof T]: T[K] & E;
|
|
7
|
-
}, ...E[]] : E[];
|
|
8
|
-
export declare class ArrayBuilder<E = unknown, T = unknown, ED extends Definition = Definition, TD extends readonly Definition[] = readonly Definition[], N extends boolean = false> extends ArrayValidator<ApplyNullability<ArrayResult<E, T>, N>, ED, TD> {
|
|
9
|
-
nullable<const F extends boolean = true>(flag?: F): ArrayBuilder<E, T, ED, TD, F>;
|
|
10
|
-
min(value: number): this;
|
|
11
|
-
max(value: number): this;
|
|
12
|
-
every<const V extends Validator>(validator: V): ArrayBuilder<InferValidatorReturnType<V>, T, InferDefinitionType<V>, TD, N>;
|
|
13
|
-
tuple<const V extends readonly Validator[]>(validators: V): ArrayBuilder<E, InferListReturnType<V>, ED, InferListDefinitionType<V>, N>;
|
|
14
|
-
}
|
|
15
|
-
export {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { JSON } from '@serum-enterprises/json';
|
|
2
|
-
import { ApplyNullability } from '../lib/util';
|
|
3
|
-
import { BooleanValidator } from '../Validators/Boolean';
|
|
4
|
-
export declare class BooleanBuilder<T extends JSON.Boolean = JSON.Boolean, N extends boolean = false> extends BooleanValidator<ApplyNullability<T, N>> {
|
|
5
|
-
nullable<const F extends boolean = true>(flag?: F): BooleanBuilder<T, F>;
|
|
6
|
-
equals<const V extends boolean>(value: V): BooleanBuilder<V, N>;
|
|
7
|
-
}
|
package/types/Builders/JSON.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { JSON } from '@serum-enterprises/json';
|
|
2
|
-
import { ApplyNullability } from '../lib/util';
|
|
3
|
-
import { NumberValidator } from '../Validators/Number';
|
|
4
|
-
export declare class NumberBuilder<T extends JSON.Number = JSON.Number, N extends boolean = false> extends NumberValidator<ApplyNullability<T, N>> {
|
|
5
|
-
nullable<const F extends boolean = true>(flag?: F): NumberBuilder<T, F>;
|
|
6
|
-
equals<const V extends number>(value: V): NumberBuilder<V, N>;
|
|
7
|
-
integer(flag?: boolean): this;
|
|
8
|
-
min(value: number): this;
|
|
9
|
-
max(value: number): this;
|
|
10
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Validator } from '../Validator';
|
|
2
|
-
import { InferDefinitionType, InferValidatorReturnType, InferObjectDefinitionType, InferObjectReturnType } from '../lib/util';
|
|
3
|
-
import { Definition } from '../Definitions';
|
|
4
|
-
import { ObjectValidator } from "../Validators/Object";
|
|
5
|
-
type ObjectResult<T, S, E extends boolean> = S extends {
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
} ? E extends true ? {
|
|
8
|
-
[K in keyof S]: S[K] & T;
|
|
9
|
-
} : {
|
|
10
|
-
[K in keyof S]: S[K] & T;
|
|
11
|
-
} & {
|
|
12
|
-
[key: string]: T;
|
|
13
|
-
} : {
|
|
14
|
-
[key: string]: T;
|
|
15
|
-
};
|
|
16
|
-
export declare class ObjectBuilder<T = unknown, S = unknown, TD extends Definition = Definition, SD extends {
|
|
17
|
-
[key: string]: Definition;
|
|
18
|
-
} = {
|
|
19
|
-
[key: string]: Definition;
|
|
20
|
-
}, N extends boolean = false, E extends boolean = false> extends ObjectValidator<ObjectResult<T, S, E>> {
|
|
21
|
-
nullable<const F extends boolean = true>(flag?: F): ObjectBuilder<T, S, TD, SD, F, E>;
|
|
22
|
-
min(value: number): this;
|
|
23
|
-
max(value: number): this;
|
|
24
|
-
every<V extends Validator>(validator: V): ObjectBuilder<InferValidatorReturnType<V>, S, InferDefinitionType<V>, SD, N, E>;
|
|
25
|
-
shape<S extends {
|
|
26
|
-
[key: string]: Validator;
|
|
27
|
-
}>(value: S): ObjectBuilder<T, InferObjectReturnType<S>, TD, InferObjectDefinitionType<S>, N, E>;
|
|
28
|
-
exact<const F extends boolean = true>(flag?: F): ObjectBuilder<T, S, TD, SD, N, F>;
|
|
29
|
-
}
|
|
30
|
-
export {};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { JSON } from '@serum-enterprises/json';
|
|
2
|
-
import { ApplyNullability } from '../lib/util';
|
|
3
|
-
import { StringValidator } from "../Validators/String";
|
|
4
|
-
export declare class StringBuilder<T extends JSON.String = JSON.String, N extends boolean = false> extends StringValidator<ApplyNullability<T, N>> {
|
|
5
|
-
nullable<const F extends boolean = true>(flag?: F): StringBuilder<T, F>;
|
|
6
|
-
equals<const V extends string>(value: V): StringBuilder<V, N>;
|
|
7
|
-
min(value: number): this;
|
|
8
|
-
max(value: number): this;
|
|
9
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ApplyNullability, InferValidatorReturnType } from '../lib/util';
|
|
2
|
-
import { UnionValidator } from '../Validators/Union';
|
|
3
|
-
import { Validator } from '../Validator';
|
|
4
|
-
export declare class UnionBuilder<T extends readonly Validator[] = readonly Validator[], N extends boolean = false> extends UnionValidator<ApplyNullability<InferValidatorReturnType<T[number]>, N>> {
|
|
5
|
-
nullable<const F extends boolean = true>(flag?: F): UnionBuilder<T, F>;
|
|
6
|
-
variants<V extends Validator[]>(variants: V): UnionBuilder<V, N>;
|
|
7
|
-
}
|
package/types/Definitions.d.ts
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
export interface Definition {
|
|
2
|
-
type: string;
|
|
3
|
-
}
|
|
4
|
-
export interface JSONValidatorDefinition extends Definition {
|
|
5
|
-
type: 'json';
|
|
6
|
-
}
|
|
7
|
-
export interface BooleanValidatorDefinition extends Definition {
|
|
8
|
-
type: 'boolean';
|
|
9
|
-
nullable?: boolean;
|
|
10
|
-
equals?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export interface NumberValidatorDefinition extends Definition {
|
|
13
|
-
type: 'number';
|
|
14
|
-
nullable?: boolean;
|
|
15
|
-
equals?: number;
|
|
16
|
-
integer?: boolean;
|
|
17
|
-
min?: number;
|
|
18
|
-
max?: number;
|
|
19
|
-
}
|
|
20
|
-
export interface StringValidatorDefinition extends Definition {
|
|
21
|
-
type: 'string';
|
|
22
|
-
nullable?: boolean;
|
|
23
|
-
equals?: string;
|
|
24
|
-
min?: number;
|
|
25
|
-
max?: number;
|
|
26
|
-
}
|
|
27
|
-
export interface ArrayValidatorDefinition<E extends Definition = Definition, T extends readonly Definition[] = readonly Definition[]> extends Definition {
|
|
28
|
-
type: 'array';
|
|
29
|
-
nullable?: boolean;
|
|
30
|
-
min?: number;
|
|
31
|
-
max?: number;
|
|
32
|
-
every?: E;
|
|
33
|
-
tuple?: T;
|
|
34
|
-
}
|
|
35
|
-
export interface ObjectValidatorDefinition<E extends Definition = Definition, S extends {
|
|
36
|
-
[key: string]: Definition;
|
|
37
|
-
} = {
|
|
38
|
-
[key: string]: Definition;
|
|
39
|
-
}> extends Definition {
|
|
40
|
-
type: 'object';
|
|
41
|
-
nullable?: boolean;
|
|
42
|
-
exact?: boolean;
|
|
43
|
-
min?: number;
|
|
44
|
-
max?: number;
|
|
45
|
-
every?: E;
|
|
46
|
-
shape?: S;
|
|
47
|
-
}
|
|
48
|
-
export interface UnionValidatorDefinition<V extends readonly Definition[] = readonly Definition[]> extends Definition {
|
|
49
|
-
type: 'union';
|
|
50
|
-
nullable?: boolean;
|
|
51
|
-
variants: V;
|
|
52
|
-
}
|
package/types/Validator.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Definition } from './Definitions';
|
|
2
|
-
export declare abstract class Validator<T = unknown> {
|
|
3
|
-
abstract assert(data: unknown, path: string): asserts data is T;
|
|
4
|
-
validate(data: unknown, path?: string): T;
|
|
5
|
-
is(data: unknown, path?: string): data is T;
|
|
6
|
-
abstract isSubset(other: Validator): boolean;
|
|
7
|
-
abstract isEquals(other: Validator): boolean;
|
|
8
|
-
abstract toJSON(): Definition;
|
|
9
|
-
}
|
package/types/index.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { Validator } from './Validator';
|
|
2
|
-
export { Validator };
|
|
3
|
-
import { JSONValidatorDefinition, BooleanValidatorDefinition, NumberValidatorDefinition, StringValidatorDefinition, ArrayValidatorDefinition, ObjectValidatorDefinition } from './Definitions';
|
|
4
|
-
import { JSONValidator, BooleanValidator, NumberValidator, StringValidator, ArrayValidator, ObjectValidator } from './Validators';
|
|
5
|
-
import { JSONBuilder, BooleanBuilder, NumberBuilder, StringBuilder, ArrayBuilder, ObjectBuilder } from './Builders';
|
|
6
|
-
export declare class Schema {
|
|
7
|
-
static get JSON(): JSONBuilder;
|
|
8
|
-
static get Boolean(): BooleanBuilder;
|
|
9
|
-
static get Number(): NumberBuilder;
|
|
10
|
-
static get String(): StringBuilder;
|
|
11
|
-
static get Array(): ArrayBuilder;
|
|
12
|
-
static get Object(): ObjectBuilder;
|
|
13
|
-
static fromJSON(definition: unknown, path?: string): Validator;
|
|
14
|
-
static assertDefinition(definition: unknown, path?: string): asserts definition is Definition;
|
|
15
|
-
static validateDefinition(definition: unknown, path?: string): Definition;
|
|
16
|
-
static isDefinition(definition: unknown, path?: string): definition is Definition;
|
|
17
|
-
}
|
|
18
|
-
export declare namespace Definitions {
|
|
19
|
-
type JSON = JSONValidatorDefinition;
|
|
20
|
-
type Boolean = BooleanValidatorDefinition;
|
|
21
|
-
type Number = NumberValidatorDefinition;
|
|
22
|
-
type String = StringValidatorDefinition;
|
|
23
|
-
type Array = ArrayValidatorDefinition;
|
|
24
|
-
type Object = ObjectValidatorDefinition;
|
|
25
|
-
}
|
|
26
|
-
export type Definition = JSONValidatorDefinition | BooleanValidatorDefinition | NumberValidatorDefinition | StringValidatorDefinition | ArrayValidatorDefinition | ObjectValidatorDefinition;
|
|
27
|
-
export declare const Validators: {
|
|
28
|
-
readonly JSON: typeof JSONValidator;
|
|
29
|
-
readonly Boolean: typeof BooleanValidator;
|
|
30
|
-
readonly Number: typeof NumberValidator;
|
|
31
|
-
readonly String: typeof StringValidator;
|
|
32
|
-
readonly Array: typeof ArrayValidator;
|
|
33
|
-
readonly Object: typeof ObjectValidator;
|
|
34
|
-
};
|
|
35
|
-
export declare const Builders: {
|
|
36
|
-
JSON: typeof JSONBuilder;
|
|
37
|
-
Boolean: typeof BooleanBuilder;
|
|
38
|
-
Number: typeof NumberBuilder;
|
|
39
|
-
String: typeof StringBuilder;
|
|
40
|
-
Array: typeof ArrayBuilder;
|
|
41
|
-
Object: typeof ObjectBuilder;
|
|
42
|
-
};
|
|
43
|
-
export { InferDefinitionType, InferValidatorReturnType } from './lib/util';
|
package/types/lib/fromJSON.d.ts
DELETED
package/types/lib/util.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Validator } from '../Validator';
|
|
2
|
-
export type ApplyNullability<T, N extends boolean> = N extends true ? T | null : Exclude<T, null>;
|
|
3
|
-
export type InferDefinitionType<V> = V extends {
|
|
4
|
-
toJSON(): infer D;
|
|
5
|
-
} ? D : never;
|
|
6
|
-
export type InferValidatorReturnType<V> = V extends Validator<infer T> ? T : unknown;
|
|
7
|
-
export type InferListDefinitionType<T extends readonly Validator[]> = {
|
|
8
|
-
[K in keyof T]: InferDefinitionType<T[K]>;
|
|
9
|
-
};
|
|
10
|
-
export type InferListReturnType<T> = T extends readonly Validator[] ? {
|
|
11
|
-
[K in keyof T]: InferValidatorReturnType<T[K]>;
|
|
12
|
-
} : unknown;
|
|
13
|
-
export type InferObjectDefinitionType<T extends {
|
|
14
|
-
[key: string]: Validator;
|
|
15
|
-
}> = {
|
|
16
|
-
[K in keyof T]: InferDefinitionType<T[K]>;
|
|
17
|
-
};
|
|
18
|
-
export type InferObjectReturnType<T> = T extends {
|
|
19
|
-
[key: string]: Validator;
|
|
20
|
-
} ? {
|
|
21
|
-
[K in keyof T]: InferValidatorReturnType<T[K]>;
|
|
22
|
-
} : unknown;
|
|
23
|
-
export declare class AssertError extends Error {
|
|
24
|
-
}
|
|
25
|
-
export declare class DefinitionError extends Error {
|
|
26
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Option } from '@serum-enterprises/option';
|
|
2
|
-
import { Validator } from '../Validator';
|
|
3
|
-
import { Definition, ArrayValidatorDefinition } from '../Definitions';
|
|
4
|
-
export declare class ArrayValidator<T = unknown, ED extends Definition = Definition, TD extends readonly Definition[] = readonly Definition[]> extends Validator<T> {
|
|
5
|
-
static fromJSON(definition: Definition & {
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}, path?: string): ArrayValidator;
|
|
8
|
-
protected _nullable: Option<null>;
|
|
9
|
-
protected _every: Option<Validator>;
|
|
10
|
-
protected _tuple: Option<readonly Validator[]>;
|
|
11
|
-
protected _min: Option<number>;
|
|
12
|
-
protected _max: Option<number>;
|
|
13
|
-
assert(data: unknown, path?: string): asserts data is T;
|
|
14
|
-
isSubset(other: Validator): boolean;
|
|
15
|
-
isEquals(other: Validator): boolean;
|
|
16
|
-
toJSON(): ArrayValidatorDefinition<ED, TD>;
|
|
17
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Option } from '@serum-enterprises/option';
|
|
2
|
-
import { Validator } from '../Validator';
|
|
3
|
-
import { Definition, BooleanValidatorDefinition } from '../Definitions';
|
|
4
|
-
export declare class BooleanValidator<T = unknown> extends Validator<T> {
|
|
5
|
-
static fromJSON(definition: Definition & {
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}, path?: string): BooleanValidator;
|
|
8
|
-
protected _nullable: Option<null>;
|
|
9
|
-
protected _equals: Option<boolean>;
|
|
10
|
-
assert(data: unknown, path?: string): asserts data is T;
|
|
11
|
-
isSubset(other: Validator): boolean;
|
|
12
|
-
isEquals(other: Validator): boolean;
|
|
13
|
-
toJSON(): BooleanValidatorDefinition;
|
|
14
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { JSON } from '@serum-enterprises/json';
|
|
2
|
-
import { Validator } from '../Validator';
|
|
3
|
-
import { Definition, JSONValidatorDefinition } from '../Definitions';
|
|
4
|
-
export declare class JSONValidator<T extends JSON.JSON = JSON.JSON> extends Validator<T> {
|
|
5
|
-
static fromJSON(_definition: Definition & {
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}, _path?: string): JSONValidator;
|
|
8
|
-
assert(data: unknown, path?: string): asserts data is JSON.JSON;
|
|
9
|
-
isSubset(other: Validator): boolean;
|
|
10
|
-
isEquals(other: Validator): boolean;
|
|
11
|
-
toJSON(): JSONValidatorDefinition;
|
|
12
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { JSON } from '@serum-enterprises/json';
|
|
2
|
-
import { Option } from '@serum-enterprises/option';
|
|
3
|
-
import { Validator } from '../Validator';
|
|
4
|
-
import { Definition, NumberValidatorDefinition } from '../Definitions';
|
|
5
|
-
export declare class NumberValidator<T = unknown> extends Validator<T> {
|
|
6
|
-
static fromJSON(definition: Definition & {
|
|
7
|
-
[key: string]: unknown;
|
|
8
|
-
}, path?: string): NumberValidator;
|
|
9
|
-
protected _nullable: Option<null>;
|
|
10
|
-
protected _integer: Option<null>;
|
|
11
|
-
protected _min: Option<number>;
|
|
12
|
-
protected _max: Option<number>;
|
|
13
|
-
protected _equals: Option<JSON.Number>;
|
|
14
|
-
assert(data: unknown, path?: string): asserts data is T;
|
|
15
|
-
isSubset(other: Validator): boolean;
|
|
16
|
-
isEquals(other: Validator): boolean;
|
|
17
|
-
toJSON(): NumberValidatorDefinition;
|
|
18
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Option } from '@serum-enterprises/option';
|
|
2
|
-
import { Validator } from '../Validator';
|
|
3
|
-
import { Definition, ObjectValidatorDefinition } from '../Definitions';
|
|
4
|
-
export declare class ObjectValidator<T = unknown, TD extends Definition = Definition, SD extends {
|
|
5
|
-
[key: string]: Definition;
|
|
6
|
-
} = {
|
|
7
|
-
[key: string]: Definition;
|
|
8
|
-
}> extends Validator<T> {
|
|
9
|
-
static fromJSON(definition: Definition & {
|
|
10
|
-
[key: string]: unknown;
|
|
11
|
-
}, path?: string): ObjectValidator;
|
|
12
|
-
protected _nullable: Option<null>;
|
|
13
|
-
protected _min: Option<number>;
|
|
14
|
-
protected _max: Option<number>;
|
|
15
|
-
protected _every: Option<Validator>;
|
|
16
|
-
protected _shape: Option<{
|
|
17
|
-
[key: string]: Validator;
|
|
18
|
-
}>;
|
|
19
|
-
protected _exact: Option<null>;
|
|
20
|
-
assert(data: unknown, path?: string): asserts data is T;
|
|
21
|
-
isSubset(other: Validator): boolean;
|
|
22
|
-
isEquals(other: Validator): boolean;
|
|
23
|
-
toJSON(): ObjectValidatorDefinition<TD, SD>;
|
|
24
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { JSON } from '@serum-enterprises/json';
|
|
2
|
-
import { Option } from '@serum-enterprises/option';
|
|
3
|
-
import { Validator } from '../Validator';
|
|
4
|
-
import { Definition, StringValidatorDefinition } from '../Definitions';
|
|
5
|
-
export declare class StringValidator<T = unknown> extends Validator<T> {
|
|
6
|
-
static fromJSON(definition: Definition & {
|
|
7
|
-
[key: string]: unknown;
|
|
8
|
-
}, path?: string): StringValidator;
|
|
9
|
-
protected _nullable: Option<null>;
|
|
10
|
-
protected _min: Option<number>;
|
|
11
|
-
protected _max: Option<number>;
|
|
12
|
-
protected _equals: Option<JSON.String>;
|
|
13
|
-
assert(data: unknown, path?: string): asserts data is T;
|
|
14
|
-
isSubset(other: Validator): boolean;
|
|
15
|
-
isEquals(other: Validator): boolean;
|
|
16
|
-
toJSON(): StringValidatorDefinition;
|
|
17
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Option } from '@serum-enterprises/option';
|
|
2
|
-
import { Validator } from '../Validator';
|
|
3
|
-
import { Definition, UnionValidatorDefinition } from '../Definitions';
|
|
4
|
-
export declare class UnionValidator<T = unknown> extends Validator<T> {
|
|
5
|
-
static fromJSON(definition: Definition & {
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}, path?: string): UnionValidator;
|
|
8
|
-
protected _nullable: Option<null>;
|
|
9
|
-
protected _variants: Validator[];
|
|
10
|
-
assert(data: unknown, path?: string): asserts data is T;
|
|
11
|
-
protected _isSubset(other: Validator): boolean;
|
|
12
|
-
toJSON(): UnionValidatorDefinition;
|
|
13
|
-
}
|