Skip to main content

@versionzero/schema / Schema

Class: Schema

Defined in: src/schema.js:33

Schema - allows the definition of structure and rules for data

Essentially acts as a fluent builder; must be compiled by SchemaCompiler for use.

Constructors​

Constructor​

new Schema(base?, options?, metadata?): Schema

Defined in: src/schema.js:64

Construct a Schema.

Pass a string name of a registered schema to resolve as the base, or pass a schema-shaped object to extend.

Prefer the fluent setters over passing in options/metadata or attributes.

Parameters​

ParameterTypeDescription
base?string | ISchema | SchemaDataschema type or base to extend
options?anyschema options (also supports "attribute" shorthand syntax, but prefer being explicit)
metadata?ISchemaMetadataschema metadata

Returns​

Schema

Accessors​

base​

Get Signature​

get base(): string | undefined

Defined in: src/schema.js:98

Name of a schema registered in SchemaResolver that this schema extends

Returns​

string | undefined


properties​

Get Signature​

get properties(): SchemaProperties

Defined in: src/schema.js:112

Properties are named child schemas.

Use the property setter rather than direct access to ensure data consistency.

Returns​

SchemaProperties


handlers​

Get Signature​

get handlers(): SchemaHandlers

Defined in: src/schema.js:123

Handlers are grouped lists of value processors.

Assign using the individual value processor setters.

Returns​

SchemaHandlers


options​

Get Signature​

get options(): ISchemaOptions

Defined in: src/schema.js:132

Options are settings that define how the schema behaves.

Returns​

ISchemaOptions


metadata​

Get Signature​

get metadata(): ISchemaMetadata

Defined in: src/schema.js:141

Metadata defines settings that describe how the schema should interact with users.

Returns​

ISchemaMetadata


unionSchemas​

Get Signature​

get unionSchemas(): SchemaUnionSchemas

Defined in: src/schema.js:150

Unions are sets of alternative schemas; a discriminator selects which to use.

Returns​

SchemaUnionSchemas

Methods​

toData()​

toData(): SchemaData

Defined in: src/schema.js:159

Extract the contents of this schema and its children as a regular object.

Returns​

SchemaData


property()​

property(propertyName, propertySchema): Schema

Defined in: src/schema.js:238

Attach a named child schema

Parameters​

ParameterTypeDescription
propertyNamestringproperty name
propertySchemastring | CompiledSchema | Schema | undefinedschema to associate with the property, undefined to delete current

Returns​

Schema

  • returns self for fluent chaining

option()​

option(option, value?): Schema

Defined in: src/schema.js:297

Define a schema option

Options are settings that define how the schema behaves.

Parameters​

ParameterTypeDescription
optionstringoption
value?anyoption value

Returns​

Schema

  • returns self for fluent chaining

meta()​

meta(meta, value?): Schema

Defined in: src/schema.js:421

Define schema metadata (like options, but for humans and ConfigurationSource hints) - todo: locale-aware

(Note: named "meta" instead of "metadata" to differentiate from the object getter)

Parameters​

ParameterTypeDescription
metastringmetadata key
value?anyoption value

Returns​

Schema

  • returns self for fluent chaining

unionDiscriminator()​

unionDiscriminator(spec): Schema

Defined in: src/schema.js:468

The discriminator handler returns the key or schema of the union member that should be used. This function appends a single value processor to the handler pipeline.

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema

  • returns self for fluent chaining

unionDiscriminators()​

unionDiscriminators(specs, policy?): Schema

Defined in: src/schema.js:481

The discriminator handler returns the key or schema of the union member that should be used. This function applies multiple value processors to the handler pipeline. (Note that it would be highly unusual to want more than one!)

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema

  • returns self for fluent chaining

unionSchema()​

unionSchema(key, unionSchema): Schema

Defined in: src/schema.js:492

Add a schema as an alternative member of this schema's union.

Parameters​

ParameterTypeDescription
keystringunion schema key (used by some discriminators to select this schema)
unionSchemaCompiledSchema | Schemaschema that the discriminator selects, or true/false override if a group

Returns​

Schema


unionKey()​

unionKey(value?): Schema

Defined in: src/schema.js:533

Mark this schema as containing (and only permitting) storage of union keys.

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


selector()​

selector(value?): Schema

Defined in: src/schema.js:547

Mark this schema as a selector.

Selectors are a convenience wrapper for controlling selection conditions that only are true when the selector contains the correct selection value.

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


selection()​

selection(value?): Schema

Defined in: src/schema.js:564

Mark this schema as a selection.

A selection schema automatically creates a condition that only activates the schema if the corresponding selector has the correct value.

With the default argument, the selection schema condition uses the property name as the selector value.

Parameters​

ParameterTypeDescription
value?any-

Returns​

Schema


required()​

required(value?): Schema

Defined in: src/schema.js:598

Mark this schema as defining a required value (or not)

Schema requirements are enforced during validation.

Requirements are shallow; this can be changed via the deep() option.

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


optional()​

optional(value?): Schema

Defined in: src/schema.js:614

Mark this schema as defining an optional value (or not); the default is optional.

(Syntactic sugar to negate required()) Schema requirements are enforced during validation.

Requirements are shallow; this can be changed via the deep() option.

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


default()​

default(value): Schema

Defined in: src/schema.js:628

Define a default value for this schema to use if there is no input.

Defaults are shallow and will not cause children of undefined inputs to populate; this can be changed via the deep() option.

Parameters​

ParameterTypeDescription
valueany-

Returns​

Schema


deep()​

deep(value?): Schema

Defined in: src/schema.js:640

Indicate that this schema should be deeply traversed even if the input is empty (e.g. to enable deep defaults and requirements)

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


allowEmpty()​

allowEmpty(value?): Schema

Defined in: src/schema.js:651

Mark this array/string as allowing empty values.

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


allowIncremental()​

allowIncremental(value?): Schema

Defined in: src/schema.js:667

Mark this schema as allowing incremental assignment to children.

(The default is true for any schema with children, so most of the time you'd be disabling it.)

Deprecated; use the "opaque" option as it more clearly indicates the actual intent.

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema

Deprecated​


opaque()​

opaque(value?): Schema

Defined in: src/schema.js:690

Mark this schema as defining a value whose internal structure is hidden after transformation.

This has implications both for assignment processing and validation.

Deep property assignments usually result in any mid-path containers being automatically created (normalized and transformed) and property values are incrementally assigned.

Opaque schemas do not allow incremental assignments, so they only create normalized mid-path containers that are staged until all relevant assignments are complete. The transform is then run, and passed the staged normalized container contents as input.

Validators for opaque schemas only run on the value itself, and do not traverse into any child properties. Opaque schemas thus generally require custom validators that know how to properly handle the value.

Parameters​

ParameterTypeDefault valueDescription
value?booleantrue-

Returns​

Schema


strict()​

strict(value?): Schema

Defined in: src/schema.js:706

Mark this schema as requiring strict enforcement (the default)

Strict mode means that the data cannot have any extra data, and exactly matches the schema definition. Lax mode allows a more "fuzzy" interpretation of the data, but the data still must pass all value processors including the validation phases. (To prevent exceptions during validation, wrap the processors in a $filter, which will just return undefined.)

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


lax()​

lax(value?): Schema

Defined in: src/schema.js:717

Syntactic sugar for the opposite of strict

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


implicit()​

implicit(value?): Schema

Defined in: src/schema.js:728

Mark this schema as implicit in the transformed output (so no need to assign or check)

Parameters​

ParameterTypeDescription
value?boolean-

Returns​

Schema


value()​

value(v): Schema

Defined in: src/schema.js:742

Define a legal input value this schema will accept.

Values will be normalized for comparison.

Parameters​

ParameterTypeDescription
vany-

Returns​

Schema


values()​

values(va?, policy?): Schema

Defined in: src/schema.js:755

Define a list of one or more legal values this schema will accept

Values will be normalized for comparison.

Parameters​

ParameterTypeDefault valueDescription
vaany[][]-
policy?symbolSchemaPolicy.APPEND-

Returns​

Schema


condition()​

condition(spec): Schema

Defined in: src/schema.js:782

The condition handler determines if the schema should be processed at all. This function appends a single value processor to the handler pipeline

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema


conditions()​

conditions(specs, policy?): Schema

Defined in: src/schema.js:794

The condition handler determines if the schema should be processed at all. This call applies one or more value processors to the handler pipeline (default policy = append)

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema


normalizer()​

normalizer(spec): Schema

Defined in: src/schema.js:805

The normalizer handler ensures input is in a format that the transformer can handle. This call appends a single value processor to the handler pipeline.

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema


normalizers()​

normalizers(specs, policy?): Schema

Defined in: src/schema.js:817

The normalizer handler ensures input is in a format that the transformer can handle. This call applies one or more value processors to the handler pipeline.

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema


transformer()​

transformer(spec): Schema

Defined in: src/schema.js:828

The transformer handler converts a normalized input value into the final output value for the schema. This call appends a single value processor to the handler pipeline.

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema


transformers()​

transformers(specs, policy?): Schema

Defined in: src/schema.js:840

The transformer handler converts a normalized input value into the final output value for the schema. This call applies one or more value processors to the handler pipeline.

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema


finalizer()​

finalizer(spec): Schema

Defined in: src/schema.js:850

The finalizer handler performs any required post-processing of a transformed value.

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema


finalizers()​

finalizers(specs, policy?): Schema

Defined in: src/schema.js:862

The finalizer handler does any required post-processing of a transformed value. This call applies one or more value processors to the handler pipeline.

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema


validator()​

validator(spec): Schema

Defined in: src/schema.js:874

The validator handler ensures an input value matches the schema, and returns a (potentially enhanced) fully validated output value. This call appends a single value processor to the handler pipeline.

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema


validators()​

validators(specs, policy?): Schema

Defined in: src/schema.js:886

The validator handler ensures an input value matches the schema, and returns a (potentially enhanced) fully validated output value. This call applies one or more value processors to the handler pipeline.

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema


serializer()​

serializer(spec): Schema

Defined in: src/schema.js:897

The serialize handler restores a configuration value to its pre-transform normalized form. This call appends a single value processor to the handler pipeline.

Parameters​

ParameterTypeDescription
specany-

Returns​

Schema


serializers()​

serializers(specs, policy?): Schema

Defined in: src/schema.js:909

The serialize handler restores a configuration value to its pre-transform normalized form. This call applies one or more value processors to the handler pipeline.

Parameters​

ParameterTypeDescription
specsany[]-
policy?symbol-

Returns​

Schema


extend()​

extend(otherSchema, seen?): Schema

Defined in: src/schema.js:921

Use another schema to extend the current one without overwriting.

Parameters​

ParameterTypeDescription
otherSchemaISchema | SchemaDatasource schema
seen?Map<any, any>-

Returns​

Schema

  • returns self

clone()​

clone(): Schema

Defined in: src/schema.js:950

Make a copy of this schema

Returns​

Schema


createFromModel()​

static createFromModel(model, seen?): Schema

Defined in: src/schema.js:961

Create a new Schema from something schema-shaped

Parameters​

ParameterTypeDescription
modelstring | ISchema | SchemaData-
seen?Map<any, any>-

Returns​

Schema


create()​

static create(base?, options?, metadata?): Schema

Defined in: src/schema.js:988

Static schema factory (useful for aliasing to reduce typing!)

Prefer using fluent setters over passing options/metadata to this call

Parameters​

ParameterTypeDescription
base?string | CompiledSchema | ISchema | SchemaData | Schemaschema
options?anyschema options
metadata?ISchemaMetadataschema metadata

Returns​

Schema


literal()​

static literal(literalValue, options?, metadata?): Schema

Defined in: src/schema.js:1002

Static schema factory for special schemas that ignore assignments and produce a single defined value

Prefer using fluent setters over passing options/metadata to this call

Parameters​

ParameterTypeDescription
literalValueanythe value this schema will always emit
options?anyadditional options
metadata?ISchemaMetadataadditional metadata

Returns​

Schema