API
Version: 5.0.0
Objects
- rtv :
object
RTV.js Public Interface
Provides the externally-facing API. It wraps the implementation, adding a bit of syntactic sugar, and adds the configuration facilities.
- rtvref :
object
RTV.js Reference
Members herein are indirectly accessed and/or exposed through the RTV.js Public Interface.
rtv : object
RTV.js Public Interface
Provides the externally-facing API. It wraps the implementation, adding a bit of syntactic sugar, and adds the configuration facilities.
Kind: global namespace
- rtv :
object
- .types :
Enumeration
- .qualifiers :
Enumeration
- .version :
string
- .config :
object
- .enabled :
boolean
- .enabled :
- .isTypeset()
- .fullyQualify()
- .RtvSuccess()
- .RtvError()
- .check(value, typeset, [options]) ⇒
RtvSuccess
|RtvError
- .verify(value, typeset, [options]) ⇒
RtvSuccess
- .types :
rtv.types : Enumeration
Enumeration of types.
For convenience, each type is also available directly from this module,
e.g. STRING
, FINITE
, etc.
The Enumeration can be used to perform additional validations (e.g.
types.verify('foo')
would throw because “foo” is not a valid type),
however whether the type is referenced as STRING
or types.STRING
makes no difference to typeset validation.
Kind: static property of rtv
Read only: true
rtv.qualifiers : Enumeration
Enumeration of qualifiers.
For convenience, each qualifier is also available directly from this module,
e.g. EXPECTED
, OPTIONAL
, etc.
The Enumeration can be used to perform additional validations (e.g.
qualifiers.verify('x')
would throw because “x” is not a valid qualifier),
however whether the qualifier is referenced as EXPECTED
or
qualifiers.EXPECTED
` makes no difference to typeset validation.
Kind: static property of rtv
Read only: true
rtv.version : string
Library version.
Kind: static property of rtv
Read only: true
rtv.config : object
RTV.js Configuration
Kind: static namespace of rtv
config.enabled : boolean
Globally enables or disables verify and check. When set
to false
, these methods are no-ops and always return success.
Use this to enable code optimization when building source with a bundler that supports tree shaking, like Rollup or Webpack.
The following plugins can redefine the statement rtv.config.enabled
as false
prior to code optimizations that remove unreachable code:
- Rollup: rollup-plugin-replace
- Webpack: DefinePlugin
Enabled Example: Rollup
By conditionally calling verify based on the state of enabled, a bundler can be configured to completely remove the code from a production build.
Given this module code snippet:
...
if (rtv.config.enabled) {
rtv.verify(jsonResult, expectedShape);
}
rtv.config.enabled && rtv.verify(jsonResult, expectedShape); // a bit shorter
...
And using this rollup.config.js
snippet:
const replacePlugin = require('rollup-plugin-replace');
module.exports = {
...
plugins: [
// invoke this plugin _before_ any other plugins
replacePlugin({
'rtv.config.enabled': JSON.stringify(false)
}),
...
]
};
You could also define your own global to achieve the same result:
...
DO_TYPE_CHECKS && rtv.verify(...);
const replacePlugin = require('rollup-plugin-replace');
module.exports = {
...
plugins: [
// invoke this plugin _before_ any other plugins
replacePlugin({
DO_TYPE_CHECKS: JSON.stringify(false)
}),
...
]
};
The code in the module snippet above would be completely removed from the build’s output, thereby removing any rtv.js overhead from production.
If you’re using Webpack, be sure to also not explicitly mark the rtvjs
module as an external when disabling RTV.js: Doing so will result in the
module always being required as an external, even when tree shaking eliminates
all the code that comes from it.
Kind: static property of config
See
rtv.isTypeset()
Determines if a value is a typeset.
Kind: static method of rtv
See: isTypeset
rtv.fullyQualify()
Fully-qualifies a given typeset.
Kind: static method of rtv
See: fullyQualify
rtv.RtvSuccess()
Reference to the RtvSuccess class/constructor.
This can be used to determine, for example, if the result of rtv.check()
is the success indicator: if (result instanceof rtv.RtvSuccess) ...
Note that both
RtvSuccess and RtvError have a
valid: boolean
property which you can also use to easily test for success or failure.
Kind: static method of rtv
See: RtvSuccess
rtv.RtvError()
Reference to the RtvError class/constructor.
This is useful if you need to determine whether an Error
is an RtvError
using the instanceof
operator: if (err instanceof rtv.RtvError) ...
Kind: static method of rtv
See: RtvError
rtv.check(value, typeset, [options]) ⇒ RtvSuccess
| RtvError
Checks a value against a typeset for compliance.
Kind: static method of rtv
Returns: RtvSuccess
| RtvError
- Success indicator if the
value
is compliant to the shape
; RtvError
if not. Unlike
verify(), an exception is not thrown if the
value
is non-compliant.
Since both RtvSuccess (returned when
the check succeeds) as well as RtvError (returned
when the check fails) have a valid: boolean
property in common, it’s
easy to test for success/failure like this:
if (rtv.check(2, rtv.FINITE).valid) {...}
.
NOTE: This method always returns a success indicator if RTV.js is currently
disabled.
Throws:
Error
Iftypeset
is not a valid typeset.
See
Param | Type | Description |
---|---|---|
value | \* |
Value to check. |
typeset | typeset |
Expected shape of (or typeset describing) the value . A shape is a kind of typeset. Normally, this is a shape descriptor. |
[options] | type\_validator\_context\_options |
Configuration options. |
rtv.verify(value, typeset, [options]) ⇒ RtvSuccess
Requires a value to be compliant to a shape.
NOTE: This method always returns a success indicator if RTV.js is currently disabled.
Kind: static method of rtv
Returns: RtvSuccess
- Success indicator IIF the value
is compliant
to the shape
. Otherwise, an RtvError is thrown.
Throws:
RtvError
If thevalue
is not compliant to theshape
.Error
Iftypeset
is not a valid typeset.
See
Param | Type | Description |
---|---|---|
value | \* |
Value to check. |
typeset | typeset |
Expected shape of (or typeset describing) the value . A shape is a kind of typeset. Normally, this is a shape descriptor. |
[options] | type\_validator\_context\_options |
Configuration options. |
rtvref : object
RTV.js Reference
Members herein are indirectly accessed and/or exposed through the RTV.js Public Interface.
Kind: global namespace
- rtvref :
object
- .Enumeration
- new Enumeration(map, [name])
- .$name :
string
- .$values :
Array.<String>
- .check(value) ⇒
\*
|undefined
- .verify(value, [silent]) ⇒
\*
- .toString() ⇒
string
- .RtvError ⇐
JS\_Error
- new RtvError(value, typeset, path, mismatch, [rootCause])
- .valid :
boolean
- .value :
\*
- .typeset :
typeset
- .path :
Array.<string>
- .mismatch :
fully\_qualified\_typeset
- .rootCause :
Error
|undefined
- .toString() ⇒
string
- .RtvSuccess
- new RtvSuccess(params)
- .valid :
boolean
- .mvv :
\*
- .toString() ⇒
string
- .impl :
object
- .getQualifier(typeset) ⇒
string
- .toTypeset(type, [qualifier], [args], [fullyQualified]) ⇒
typeset
- .fullyQualify(typeset, [qualifier]) ⇒
fully\_qualified\_typeset
- .extractNextType(typeset, [qualifier]) ⇒
typeset
|Array
- .checkWithType(value, singleType, [context]) ⇒
RtvSuccess
|RtvError
- .checkWithShape(value, shape, [context]) ⇒
RtvSuccess
|RtvError
- .checkWithArray(value, arrayTs, [context]) ⇒
RtvSuccess
|RtvError
- .check(value, typeset, [context]) ⇒
RtvSuccess
|RtvError
- .getQualifier(typeset) ⇒
- .qualifiers :
object
- .REQUIRED
- .EXPECTED
- .OPTIONAL
- .TRUTHY
- .qualifiers :
Enumeration
- .DEFAULT_QUALIFIER :
string
- .valuePermitted(v, [q]) ⇒
boolean
- .restricted_values :
void
- .types :
object
- .objTypes :
Enumeration
- .argTypes :
Enumeration
- .types :
Enumeration
- .ANY :
string
- .NULL :
string
- .STRING :
string
- .BOOLEAN :
string
- .SYMBOL :
string
- .NUMBER :
string
- .FINITE :
string
- .INT :
string
- .SAFE_INT :
string
- .FLOAT :
string
- .FUNCTION :
string
- .REGEXP :
string
- .DATE :
string
- .ERROR :
string
- .PROMISE :
string
- .ARRAY :
string
- .ANY_OBJECT :
string
- .OBJECT :
string
- .PLAIN_OBJECT :
string
- .CLASS_OBJECT :
string
- .HASH_MAP :
string
- .MAP :
string
- .WEAK_MAP :
string
- .SET :
string
- .WEAK_SET :
string
- .JSON :
string
- .DEFAULT_OBJECT_TYPE :
string
- .primitives :
void
- .falsy_values :
void
- .qualifier_rules :
void
- .shape_descriptor :
Object
- .type_arguments :
Object
- .STRING_args :
Object
- .SYMBOL_args :
Object
- .numeric_args :
Object
- .shape_object_args :
Object
- .ARRAY_args :
Object
- .collection_args :
Object
- .typeset :
Object
|string
|Array
|function
- .fully_qualified_typeset :
Array
- .custom_validator ⇒
\*
- .objTypes :
- .util :
object
- .print(printValue, printOptions) ⇒
string
- .hasOwnProp(obj, prop) ⇒
boolean
- .print(printValue, printOptions) ⇒
- .validation :
object
- .method(value) ⇒
boolean
- .isAny :
Module
- .isAnyObject :
Module
- .isArray :
Module
- .isBoolean :
Module
- .isClassObject :
Module
- .isCustomValidator :
Module
- .isDate :
Module
- .isError :
Module
- .isFalsy :
Module
- .isFinite :
Module
- .isFloat :
Module
- .isFunction :
Module
- .isHashMap :
Module
- .isInt :
Module
- .isJson :
Module
- .isMap :
Module
- .isNull :
Module
- .isNumber :
Module
- .isObject :
Module
- .isPlainObject :
Module
- .isPrimitive :
Module
- .isPromise :
Module
- .isRegExp :
Module
- .isSafeInt :
Module
- .isSet :
Module
- .isShape :
Module
- .isString :
Module
- .type :
string
- .check(v, [options]) ⇒
boolean
- .type :
- .isSymbol :
Module
- .isTypeArgs :
Module
- .isTypeset :
Module
- .type :
string
- .check(v, [options]) ⇒
boolean
- .type :
- .isWeakMap :
Module
- .isWeakSet :
Module
- .method(value) ⇒
- .validator :
object
- .type_validator(value, qualifier, args, context) ⇒
RtvSuccess
|RtvError
- .validator_config(settings)
- .valAny :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valAnyObject :
Module
- .valArray :
Module
- .valBoolean :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valClassObject :
Module
- .valDate :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valError :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valFinite :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valFloat :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valFunction :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valHashMap :
Module
- .valInt :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valJson :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valMap :
Module
- .valNull :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valNumber :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valObject :
Module
- .valPlainObject :
Module
- .valPromise :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valRegExp :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valSafeInt :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valSet :
Module
- .valString :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valSymbol :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valWeakMap :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valWeakSet :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .type_validator_context_options :
Object
- .type_validator_context :
Object
- .validator_config_settings :
Object
- .type_validator(value, qualifier, args, context) ⇒
- .Enumeration
rtvref.Enumeration
Kind: static class of rtvref
- .Enumeration
- new Enumeration(map, [name])
- .$name :
string
- .$values :
Array.<String>
- .check(value) ⇒
\*
|undefined
- .verify(value, [silent]) ⇒
\*
- .toString() ⇒
string
new Enumeration(map, [name])
Simple enumeration type. Own-properties on an instance are the keys in the
specified map
, with their associated values. Key names cannot start with
“$”.
const state = new Enumeration({
READY: 1,
RUNNING: 2,
STOPPED: 3,
COMPLETE: 4
});
state.RUNNING; // 2
state.verify(3); // 3 (returns the value since found in enumeration)
state.verify(5); // ERROR thrown
state.check(3); // 3 (same as verify(3) since found in enumeration)
state.check(5); // undefined (silent failure)
state.$values; // [1, 2, 3, 4] (special non-enumerable own-property)
Throws:
Error
Ifmap
is falsy or empty.Error
Ifmap
has a key that maps toundefined
.Error
Ifmap
contains a duplicate value.Error
Ifmap
has a key that is a restricted property (starts with “$”).
Param | Type | Description |
---|---|---|
map | Object.<String, \*> |
Object mapping keys to values. Values cannot be undefined . |
[name] | string |
Friendly name used to identify this enumeration, especially in validation error messages. |
enumeration.$name : string
Friendly name (not necessarily unique among all enumeration instances) used to identify this enumeration, especially in validation error messages. Empty string if not specified during construction.
Note that this own-property is non-enumerable on purpose. Enumerable properties on this instance are the keys in this enumeration.
Kind: instance property of Enumeration
Read only: true
enumeration.$values : Array.<String>
List of enumeration values. Values are references to values in this enumeration.
Note that this own-property is non-enumerable on purpose. Enumerable properties on this instance are the keys in this enumeration.
Kind: instance property of Enumeration
Read only: true
enumeration.check(value) ⇒ \*
| undefined
Checks if a value is in this enumeration.
Kind: instance method of Enumeration
Returns: \*
| undefined
- The specified value if it is in this enumeration, or undefined
if not. An exception is not thrown if the value is not in this enumeration.
See: verify
Param | Type | Description |
---|---|---|
value | \* |
Value to check. Cannot be undefined. |
enumeration.verify(value, [silent]) ⇒ \*
Validates a value as being in this enumeration. Throws an exception if the value
is not in this enumeration, unless silent
is true.
Kind: instance method of Enumeration
Returns: \*
- The specified value if it is in this enumeration, or undefined
if
silent
is true and the value is not in this enumeration.
Throws:
Error
If notsilent
and the value is not in this enumeration.
See: check
Param | Type | Default | Description |
---|---|---|---|
value | \* |
Value to check. Cannot be undefined. | |
[silent] | boolean |
false |
If truthy, returns undefined instead of throwing an exception if the specified value is not in this enumeration. |
enumeration.toString() ⇒ string
A string representation of this Enumeration.
Kind: instance method of Enumeration
Returns: string
- String representation.
rtvref.RtvError ⇐ JS\_Error
Kind: static class of rtvref
Extends: JS\_Error
- .RtvError ⇐
JS\_Error
- new RtvError(value, typeset, path, mismatch, [rootCause])
- .valid :
boolean
- .value :
\*
- .typeset :
typeset
- .path :
Array.<string>
- .mismatch :
fully\_qualified\_typeset
- .rootCause :
Error
|undefined
- .toString() ⇒
string
new RtvError(value, typeset, path, mismatch, [rootCause])
Runtime Verification Error Indicator
Describes a failed runtime verification of a value against a given shape or typeset (note that a shape is a type of typeset).
Throws:
Error
Iftypeset
,path
, ormismatch
is invalid.
Param | Type | Description |
---|---|---|
value | \* |
The value being verified. |
typeset | typeset |
The typeset used for verification. |
path | Array.<string> |
The path deep into value where the failure occurred. An empty array signifies the root (top-level) value that was checked. |
mismatch | fully\_qualified\_typeset |
The fully-qualified typeset that resulted in the failed validation. This is normally the fully-qualified version of typeset , but could be a subtype if typeset is an Array typeset or a shape descriptor. |
[rootCause] | RtvError | Error |
Custom Validator error, if the RtvError is a result of a failed custom validation and the validator threw an exception; or some other nested error that was the root cause for the failed validation. |
rtvError.valid : boolean
Flag indicating the validation failed. Always false
.
Kind: instance property of RtvError
Read only: true
See: valid
rtvError.value : \*
Value that failed verification against the typeset.
Kind: instance property of RtvError
Read only: true
rtvError.typeset : typeset
Reference to the typeset used for verification.
Kind: instance property of RtvError
Read only: true
rtvError.path : Array.<string>
Path from value to the nested property that caused the failure.
Note that paths into collections such as HASH_MAP
or ES6 structures such as MAP, where it’s possible
to specify arguments to verify keys vs values, will have elements with special
prefixes to differentiate whether the path points to a key (“key={key-name}
”)
or a value (“valueKey={key-name}
”).
For example, given the has map {hello: 'world'}
, if all keys were supposed to be
numerical, then the path for the validation error would be ["key=hello"]
, indicating
that the problem occurred with the key named “hello”, not the associated value.
If, however, keys could be anything, but values had to be numerical, then the path
would be ["valueKey=hello"]
, indicating that the problem occurred with the value
associated to the key rather than the key itself.
SECURITY
Some collection types, such as MAP and
SET, can have actual objects as keys or elements,
and these are used (in JSON-stringified form) as part of the error path.
If these objects happen to contain sensitive information, that information
may end-up in the path, and the path gets included in this error’s
message
property, which may get logged by your systems.
Other object types where keys can technically be any string value could also
contain sensitive information depending on how these keys are defined. These
keys will also end-up in the path that gets included in this error’s message
property.
It is YOUR responsibility to exercise necessary caution when validating data structures containing sensitive data.
Kind: instance property of RtvError
Read only: true
rtvError.mismatch : fully\_qualified\_typeset
Fully-qualified typeset that caused the validation error (i.e. the mismatched subtype). This will be a subset/subtype of the typeset, and possibly of a nested typeset within it, expressing only the direct cause of the error.
For example, of typeset
is [[rtv.STRING]]
(a required array of required strings),
and value
is ['a', 2]
, this property would be [rtv.REQUIRED, rtv.STRING]
because the validation error would ultimately have been caused by the nested
rtv.STRING
typeset.
Remember that the fully-qualified typeset
would be
[rtv.REQUIRED, rtv.ARRAY, {$: [rtv.REQUIRED, rtv.STRING]}]
, which demonstrates
that [rtv.REQUIRED, rtv.STRING]
is indeed a subset/subtype.
Kind: instance property of RtvError
Read only: true
rtvError.rootCause : Error
| undefined
Validation error thrown by a Custom Validator,
which resulted in this RtvError
. undefined
if this error was not the result
of a failed custom validation. If the custom validator throws an error, this will
be a reference to the error it threw; otherwise, it’ll be a generic Error
generated by the library.
Kind: instance property of RtvError
Read only: true
rtvError.toString() ⇒ string
A string representation of this instance.
Kind: instance method of RtvError
Returns: string
- String representation.
rtvref.RtvSuccess
Kind: static class of rtvref
- .RtvSuccess
- new RtvSuccess(params)
- .valid :
boolean
- .mvv :
\*
- .toString() ⇒
string
new RtvSuccess(params)
Runtime Verification Success Indicator
Describes a successful runtime verification of a value against a given shape or typeset (note that a shape is a type of typeset).
Param | Type | Description |
---|---|---|
params | Object |
|
params.mvv | \* |
Minimum Viable Value representing the smallest version of the original value checked that satisfies the original Typeset against which it was checked. See the mvv property for more information. |
rtvSuccess.valid : boolean
Flag indicating the validation succeeded. Always true
.
Kind: instance property of RtvSuccess
Read only: true
See: valid
rtvSuccess.mvv : \*
Minimum Viable Value (MVV). If the original value checked is one that can be deeply checked
(see list below of supported types), this is essentially a representation (stressing
it is not necessarily a clone) of the original value, filtered by removing any
parts of it that were not specifically checked (i.e. extra properties in an object that
were not included in a shape, however deep it was nested, even in the key of a Map
).
Otherwise, it’s a reference to the original value.
Validating this value (instead of the original value) against the same Typeset would yield the same successful result.
This property is most useful when checking a plain array or object (e.g. JSON API response) against an expected shape when the shape you care about is much smaller than the payload itself. Once the the check is complete, keep the minimum viable value instead of the larger original payload to reduce the overall memory footprint of your code.
The following types are deeply checked and so will produce an MVV, but note the stated
exceptions to types that are not plain objects ({}
) or arrays ([]
):
- ARRAY: Note that none of the
ARRAY_args except for the typeset (
$
) are used, which means items won’t be removed if the array is longer than a statedlength
ormax
length. - PLAIN_OBJECT
- OBJECT: Interpreted as an object (
{}
). - CLASS_OBJECT: Interpreted as an object (
{}
). - HASH_MAP: Interpreted as an object (
{}
). - ANY_OBJECT: Interpreted as an object (
{}
) because it’s essentially treated as one when it’s being checked. - MAP: Interpreted as the native
Map
type. - SET: Interpreted as the native
Set
type.
All other types will be referenced, not interpreted.
NOTE: The MVV will based on the Typeset that validates
the original value. If you use an Array Typeset with multiple possibilities for an
object value to check (e.g. [OBJECT, { $: { foo: NUMBER } }, OBJECT, { $: { bar: STRING } }]
),
the resulting MVV will use the matching sub-Typeset. Checking { foo: 1, bar: 'a' }
would
result in { foo: 1 }
as the MVV because OBJECT, { $: { foo: NUMBER } }
is the first
sub-Typeset in the list, and so the first match.
Kind: instance property of RtvSuccess
Read only: true
rtvSuccess.toString() ⇒ string
A string representation of this instance.
Kind: instance method of RtvSuccess
Returns: string
- String representation.
rtvref.impl : object
RTV.js Implementation
Provides the internal implementation for the externally-facing RTV API, as well as utilities for type validators.
Kind: static namespace of rtvref
- .impl :
object
- .getQualifier(typeset) ⇒
string
- .toTypeset(type, [qualifier], [args], [fullyQualified]) ⇒
typeset
- .fullyQualify(typeset, [qualifier]) ⇒
fully\_qualified\_typeset
- .extractNextType(typeset, [qualifier]) ⇒
typeset
|Array
- .checkWithType(value, singleType, [context]) ⇒
RtvSuccess
|RtvError
- .checkWithShape(value, shape, [context]) ⇒
RtvSuccess
|RtvError
- .checkWithArray(value, arrayTs, [context]) ⇒
RtvSuccess
|RtvError
- .check(value, typeset, [context]) ⇒
RtvSuccess
|RtvError
- .getQualifier(typeset) ⇒
impl.getQualifier(typeset) ⇒ string
Get the qualifier given any kind of typeset.
The typeset’s validity is not checked. The function attempts to get a qualifier, and defaults to the default qualifier if it cannot.
Kind: static method of impl
Returns: string
- The applicable qualifier for the
specified typeset, which is assumed to be valid.
Param | Type | Description |
---|---|---|
typeset | typeset |
The typeset in question. |
impl.toTypeset(type, [qualifier], [args], [fullyQualified]) ⇒ typeset
Convert a type, qualifier, and args into a typeset.
While the qualifier
, args
, and fullyQualified
parameters are all
optional and may be omitted, their order must be maintained: If needed,
the qualifier
must always be before args
, and args
before
fullyQualified
. Parameters with undefined
values will be ignored.
Kind: static method of impl
Returns: typeset
- The simplest typeset that represents the
combination of the specified type, qualifier, and args, unless fullyQualified
was set to true
, in which case it’ll always be an array typeset and
fully-qualified.
Throws:
Error
Iftype
,qualifier
, orargs
is invalid.
Param | Type | Default | Description |
---|---|---|---|
type | string |
A single type from types. | |
[qualifier] | string | Object | boolean |
"rtvref.qualifiers.DEFAULT_QUALIFIER" |
Optional qualifier from qualifiers. Can also be either the args parameter, or the fullyQualified parameter if the default qualifier is being used. |
[args] | Object | boolean |
Optional type arguments. If specified, this parameter must be an object, however the properties of the object are not validated against the specified type (i.e. they are not guaranteed to be valid for that type). Can also be the fullyQualified parameter if type arguments aren’t applicable. |
|
[fullyQualified] | boolean |
false |
If truthy, the generated typeset will always be fully-qualified. Otherwise, it’ll be the simplest typeset possible. |
impl.fullyQualify(typeset, [qualifier]) ⇒ fully\_qualified\_typeset
Fully-qualifies a typeset, shallow (i.e. the first level only; nested typesets are not fully-qualified).
This function does not modify the input typeset
.
Kind: static method of impl
Returns: fully\_qualified\_typeset
- A new, fully-qualified typeset
representing the input typeset
. Only the first/immediate level of the
input typeset is fully-qualified. The new array returned contains references
to elements within the input typeset.
Throws:
Error
Iftypeset
orqualifier
is not a valid.
Param | Type | Description |
---|---|---|
typeset | typeset |
Typeset to fully-qualify. |
[qualifier] | qualifiers |
Optional qualifier to be used. If the typeset is a simple type, a shape, or a custom validator that was cherry-picked out of a typeset whose qualifier should be used instead of the default one. If typeset is an Array typeset, specifying this parameter will override the typeset’s qualifier (otherwise, its own qualifier will be used). |
impl.extractNextType(typeset, [qualifier]) ⇒ typeset
| Array
Extracts (modifies) the next complete type from an Array typeset.
For example, if the given typeset
is [EXPECTED, STRING, {string_args}, FINITE]
,
the returned array would be [EXPECTED, STRING, {string_args}]
and typeset
would then be [FINITE]
.
Kind: static method of impl
Returns: typeset
| Array
- The extracted Array typeset as a
new Array, which is a sub-type of the given typeset
. This sub-typeset is
not necessarily fully-qualified. If typeset
was an empty array, an empty
array is returned (which is the only case where an invalid Array typeset
is tolerated, so that this function is easy to use in loops, checking for
the stopping condition where the returned sub-typeset is empty).
Throws:
Error
Iftypeset
is not empty and not a valid Array typeset.Error
Ifqualifier
is specified but not valid.
Param | Type | Description |
---|---|---|
typeset | typeset | Array |
An Array typeset from which to extract the next complete type. This Array will be modified. Can also be an empty array (which is not a valid typeset, but is tolerated; see the return value for more information). |
[qualifier] | qualifiers | boolean |
Optional, and can either be a valid qualifier, true , or false . <h4>Parameter is specified, and is a qualifier</h4> If a qualifier is not found in typeset , this qualifier will be used to qualify the returned sub-type Array typeset. If a qualifier is found in typeset , this parameter is ignored. If a qualifier is not found in typeset and this parameter is specified, then this qualifier will be used to qualify the returned sub-type Array typeset. Examples: - typeset = [EXPECTED, STRING, FINITE]; - extractNextType(typeset, REQUIRED) === [EXPECTED, STRING] , typeset === [FINITE] - extractNextType(typeset) === [FINITE] , typeset === [] - typeset = [FINITE]; - extractNextType(typeset, EXPECTED) === [EXPECTED, FINITE] <h4>Parameter is specified, and is a boolean</h4> If true , the qualifier, if any, will be included in the returned sub-type Array typeset. If false , the qualifier, if any, will be ignored. Examples: - extractNextType([STRING], true) === [STRING] - extractNextType([REQUIRED, STRING], true) === [EXPECTED, STRING] - extractNextType([REQUIRED, STRING], false) === [STRING] |
impl.checkWithType(value, singleType, [context]) ⇒ RtvSuccess
| RtvError
Checks a value using a single type.
Kind: static method of impl
Returns: RtvSuccess
| RtvError
- A success indicator if the
value
is compliant to the type; an error indicator if not.
Throws:
Error
IfsingleType
is not a valid simple type or single type.Error
If the specifiedcontext
is not valid.
See: types
Param | Type | Description |
---|---|---|
value | \* |
Value to check. |
singleType | string | Array | Object |
Either a simple type name (one of types), a shape descriptor, or an Array typeset which represents a single type. In the string/simple case, the default qualifier is assumed. In the shape descriptor case, the default object type is assumed. In the Array case, the qualifier is optional, and a type, along with args, if any, is expected (e.g. [type] , [qualifier, type] , [type, args] , or [qualifier, type, args] ). Note that the type may be implied if the shorthand notation is being used for an ARRAY, or if the default object type is being implied for a shape, e.g. [{foo: rtv.STRING}] . NOTE: A custom validator is not considered a valid single type. It’s also considered a separate type if it were passed-in via an Array, e.g. [STRING, validator] , which would violate the fact that singleType should be one type, and therefore cause an exception to be thrown. |
[context] | type\_validator\_context | undefined |
Additional context for the check. If falsy, a new context will be created for all downstream checks using value as the original value, and undefined as the parent. |
impl.checkWithShape(value, shape, [context]) ⇒ RtvSuccess
| RtvError
Checks a value using a shape descriptor and ensure the value’s type is the default object type.
Kind: static method of impl
Returns: RtvSuccess
| RtvError
- A success indicator if the
value
is compliant to the shape; an error indicator if not.
Throws:
Error
Ifshape
is not an OBJECT.Error
If the specifiedcontext
is not valid.
Param | Type | Description |
---|---|---|
value | Object |
Value to check. Must be of the default object type. |
shape | Object |
Expected shape of the value . Must be an OBJECT. |
[context] | type\_validator\_context | undefined |
Additional context for the check. If falsy, a new context will be created for all downstream checks using value as the original value, and an empty/root path. |
impl.checkWithArray(value, arrayTs, [context]) ⇒ RtvSuccess
| RtvError
Checks a value using an Array typeset.
Kind: static method of impl
Returns: RtvSuccess
| RtvError
- Success indicator if the value
is compliant to the typeset
; error indicator otherwise. An exception is
not thrown if the value
is non-compliant.
Throws:
Error
Iftypeset
is not a valid Array typeset.Error
If the specifiedcontext
is not valid.
Param | Type | Description |
---|---|---|
value | \* |
Value to check. |
arrayTs | Array |
The Array typeset to check against. |
[context] | type\_validator\_context | undefined |
Additional context for the check. If falsy, a new context will be created for all downstream checks using value as the original value, and an empty/root path. |
impl.check(value, typeset, [context]) ⇒ RtvSuccess
| RtvError
Checks a value against a typeset.
Kind: static method of impl
Returns: RtvSuccess
| RtvError
- Success indicator if the value
is compliant to the typeset
; error indicator otherwise. An exception is
not thrown if the value
is non-compliant.
Throws:
Error
Iftypeset
is not a valid typeset.Error
If the specifiedcontext
is not valid.
Param | Type | Description |
---|---|---|
value | \* |
Value to check. |
typeset | typeset |
Expected shape/type of the value. |
[context] | type\_validator\_context | undefined |
Additional context for the check. If falsy, a new context will be created for all downstream checks using value as the original value, and an empty/root path. |
rtvref.qualifiers : object
Qualifiers
Qualifiers determine the degree at which a value must be of a given type.
Kind: static namespace of rtvref
- .qualifiers :
object
- .REQUIRED
- .EXPECTED
- .OPTIONAL
- .TRUTHY
- .qualifiers :
Enumeration
- .DEFAULT_QUALIFIER :
string
- .valuePermitted(v, [q]) ⇒
boolean
- .restricted_values :
void
qualifiers.REQUIRED
Required qualifier: The value must be of the expected type. Depending on the type, additional requirements may be enforced.
Unless otherwise stated in type-specific rules, this qualifier does not
permit the value to be null
or undefined
.
Note the fact the value cannot be undefined
implicitly requires a
shape’s property to be defined somewhere
its prototype chain (if it weren’t, then its value would be undefined
,
violating the requirements). For example, the shape {name: [EXPECTED, STRING]}
would require the name
property to exist and not be undefined
, but would
permit it to be null
or even an empty string.
See specific type for additional rules.
Kind: static property of qualifiers
See
qualifiers.EXPECTED
Expected qualifier: The value should be of the expected type. Depending on the type, additional requirements may be enforced.
Unless otherwise stated in type-specific rules, this qualifier does not permit
the value to be undefined
, but does permit it to be null
.
Note the fact the value cannot be undefined
implicitly requires a
shape’s property to be defined somewhere
its prototype chain (if it weren’t, then its value would be undefined
,
violating the requirements). For example, the shape {name: [EXPECTED, STRING]}
would require the name
property to exist and not be undefined
, but would
permit it to be null
or even an empty string.
See specific type for additional rules.
Kind: static property of qualifiers
See
qualifiers.OPTIONAL
Optional qualifier: The value may be of the expected type. Depending on the type, additional requirements may be enforced.
Unless otherwise stated in type-specific rules, this qualifier permits a
the value to be null
as well as undefined
.
Note the fact the value can be undefined
implies it does not require a
shape’s property to be defined anywhere in
its prototype chain.
See specific type for additional rules.
Kind: static property of qualifiers
See: types
qualifiers.TRUTHY
Truthy qualifier: If the value is truthy, it must be of the expected type. Depending on the type, additional requirements may be enforced.
Think of this qualifier as, “if truthy, the value is required to be of the specified type.”
Unless otherwise stated in type-specific rules, this qualifier does permit the value to be any falsy value.
Note the fact the value can be undefined
implies it does not require a
shape’s property to be defined anywhere in
its prototype chain.
See specific type for additional rules.
Kind: static property of qualifiers
See: types
qualifiers.qualifiers : Enumeration
Enumeration (string -> string
) of all qualifiers:
Kind: static property of qualifiers
qualifiers.DEFAULT_QUALIFIER : string
Default qualifier: REQUIRED
Kind: static constant of qualifiers
qualifiers.valuePermitted(v, [q]) ⇒ boolean
Convenience function to check if a value is permitted under basic qualifier rules:
- REQUIRED: Cannot be any falsy value, including
undefined
andnull
. - EXPECTED: Can be
null
. - OPTIONAL: Can be either
undefined
ornull
. - TRUTHY: Can be any falsy value.
Kind: static method of qualifiers
Returns: boolean
- true
if the value is falsy and the specific value
is permitted by the basic qualifier’s rules; false
otherwise.
For example,
valuePermitted(null, REQUIRED) === false
valuePermitted(null, EXPECTED) === true
valuePermitted(1, *) === false
because the value1
is not any of the permitted falsy values for any qualifiervaluePermitted(false, OPTIONAL) === false
because the valuefalse
is not permitted by OPTIONAL
Param | Type | Description |
---|---|---|
v | \* |
Value to check. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
qualifiers.restricted_values : void
Restricted Values
Qualifiers impose restrictions on certain JavaScript values. Currently, the list of restricted values is the same as the list of JavaScript’s falsy values. This may change in the future if more qualifiers are added.
See the documentation for each qualifier to know which of these values they permit or restrict.
Kind: static typedef of qualifiers
See: valuePermitted
rtvref.types : object
Types
Kind: static namespace of rtvref
- .types :
object
- .objTypes :
Enumeration
- .argTypes :
Enumeration
- .types :
Enumeration
- .ANY :
string
- .NULL :
string
- .STRING :
string
- .BOOLEAN :
string
- .SYMBOL :
string
- .NUMBER :
string
- .FINITE :
string
- .INT :
string
- .SAFE_INT :
string
- .FLOAT :
string
- .FUNCTION :
string
- .REGEXP :
string
- .DATE :
string
- .ERROR :
string
- .PROMISE :
string
- .ARRAY :
string
- .ANY_OBJECT :
string
- .OBJECT :
string
- .PLAIN_OBJECT :
string
- .CLASS_OBJECT :
string
- .HASH_MAP :
string
- .MAP :
string
- .WEAK_MAP :
string
- .SET :
string
- .WEAK_SET :
string
- .JSON :
string
- .DEFAULT_OBJECT_TYPE :
string
- .primitives :
void
- .falsy_values :
void
- .qualifier_rules :
void
- .shape_descriptor :
Object
- .type_arguments :
Object
- .STRING_args :
Object
- .SYMBOL_args :
Object
- .numeric_args :
Object
- .shape_object_args :
Object
- .ARRAY_args :
Object
- .collection_args :
Object
- .typeset :
Object
|string
|Array
|function
- .fully_qualified_typeset :
Array
- .custom_validator ⇒
\*
- .objTypes :
types.objTypes : Enumeration
Enumeration (string -> string
) of object types:
Kind: static property of types
types.argTypes : Enumeration
Enumeration (string -> string
) of types that accept arguments:
- STRING
- SYMBOL
- NUMBER
- FINITE
- INT
- SAFE_INT
- FLOAT
- ARRAY
- ANY_OBJECT
- OBJECT
- PLAIN_OBJECT
- CLASS_OBJECT
- HASH_MAP
- MAP
- SET
Kind: static property of types
types.types : Enumeration
Enumeration (string -> string
) of all types:
- ANY
- NULL
- STRING
- BOOLEAN
- SYMBOL
- NUMBER
- FINITE
- INT
- SAFE_INT
- FLOAT
- FUNCTION
- REGEXP
- DATE
- ERROR
- PROMISE
- ARRAY
- ANY_OBJECT
- OBJECT
- PLAIN_OBJECT
- CLASS_OBJECT
- HASH_MAP
- MAP
- WEAK_MAP
- SET
- WEAK_SET
- JSON
Kind: static property of types
types.ANY : string
The any type is special in that it allows anything, which includes null
and undefined
values. Because of this, it’s the most liberal in terms of
types as well as in its interaction with qualifiers. A more specific type
should be used whenever possible to ensure a higher degree of confidence
in the value being validated.
Any rules per qualifiers:
- REQUIRED: Can be any value, including
null
andundefined
. - EXPECTED: Same rules as REQUIRED.
- OPTIONAL: Same rules as EXPECTED.
- TRUTHY: Same rules as OPTIONAL.
Since this type removes the property’s need for existence in the prototype chain, it renders the verification moot (i.e. the property of this type might as well not be included in a shape descriptor unless a custom validator is being used to do customized verification.
Kind: static constant of types
See: qualifiers
types.NULL : string
Null rules per qualifiers: Must be the null
primitive.
Use this special type to explicitly test for a null
value. For example,
a shape’s property may be required to be
null
under certain circumstances.
Kind: static constant of types
See: qualifiers
types.STRING : string
String rules per qualifiers:
- REQUIRED: Must be a non-empty string, unless an argument allows it.
- EXPECTED | OPTIONAL: May be an empty string, unless an argument disallows it.
Note that the value
null
(for EXPECTED and OPTIONAL) orundefined
(for OPTIONAL) will not be subject to any restrictions imposed by arguments (i.e. the arguments will be ignored; for example,rtv.verify(null, [EXPECTED, STRING, {min: 1}])
would pass verification becausenull
is permitted with EXPECTED). - TRUTHY: May be an empty string regardless of arguments, since an empty
string is falsy, and this qualifier permits all falsy values. Therefore,
rtv.verify("", [TRUTHY, STRING, {min: 1}])
would still pass verification because an empty string is permitted with TRUTHY.
In all cases, the value must be a string primitive.
Note that new String('hello') !== 'hello'
because the former is an object, not a string.
Arguments (optional): STRING_args
Kind: static constant of types
See: qualifiers
types.BOOLEAN : string
Boolean rules per qualifiers: Must be a boolean primitive.
Note that new Boolean(true) !== true
because the former is an object, not a boolean.
Kind: static constant of types
See: qualifiers
types.SYMBOL : string
Symbol rules per qualifiers: Must be a symbol primitive.
Arguments (optional): SYMBOL_args.
Kind: static constant of types
See: qualifiers
types.NUMBER : string
Number rules per qualifiers:
- REQUIRED: Cannot be
NaN
, but could be+Infinity
,-Infinity
. -
EXPECTED OPTIONAL: Could be NaN
,+Infinity
,-Infinity
. - TRUTHY: Could be
NaN
(since that is a falsy value),+Infinity
,-Infinity
.
In all cases, the value must be a number primitive.
Note that new Number(1) !== 1
because the former is an object, not a number.
An number is not guaranteed to be a safe integer.
Arguments (optional): numeric_args
Kind: static constant of types
See
types.FINITE : string
Finite rules per qualifiers: Cannot be NaN
(unless the qualifier is TRUTHY),
+Infinity
, -Infinity
. The value can be either an integer,
or a floating point number. It must also be a
number primitive.
A finite number is not guaranteed to be a safe integer.
Arguments (optional): numeric_args
Kind: static constant of types
See
types.INT : string
Int rules per qualifiers: Must be a finite number,
an integer, and a number primitive. NaN
,
however, is permitted if the qualifier is TRUTHY.
An integer is not guaranteed to be a safe integer.
Arguments (optional): numeric_args
Kind: static constant of types
See
types.SAFE_INT : string
Int rules per qualifiers: Must be a finite number, a
safe integer,
and a number primitive. NaN
, however, is
permitted if the qualifier is TRUTHY.
An integer is safe if it’s an IEEE-754 double precision number which isn’t
the result of a rounded unsafe integer. For example, 2^53 - 1
is safe,
but 2^53
is not because 2^53 + 1
would be rounded to 2^53
.
Arguments (optional): numeric_args
Kind: static constant of types
See
types.FLOAT : string
Float rules per qualifiers: Must be a finite
floating point number, and a number primitive.
Per IEEE 754, zero (0
) is considered a float. Note that NaN
is permitted
if the qualifier is TRUTHY.
Arguments (optional): numeric_args
Kind: static constant of types
See
types.FUNCTION : string
Function rules per qualifiers: Must be a function
.
Kind: static constant of types
See: qualifiers
types.REGEXP : string
RegExp rules per qualifiers: Must be a RegExp
instance.
Kind: static constant of types
See
- qualifiers
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
types.DATE : string
Date rules per qualifiers: Must be a Date
instance.
Kind: static constant of types
See
- qualifiers
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
types.ERROR : string
Error rules per qualifiers: Must be an Error
instance, which includes TypeError
,
RangeError
, ReferenceError
, etc.
Kind: static constant of types
See
- qualifiers
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error
types.PROMISE : string
Promise rules per qualifiers: Must be a Promise
instance.
Kind: static constant of types
See
- qualifiers
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
types.ARRAY : string
Array rules per qualifiers: Must be an Array
. Empty arrays are permitted,
unless arguments prevent them.
Arguments (optional): ARRAY_args. Note that the ARRAY
type must be specified when using arguments (i.e. the shorthand notation cannot
be used).
When describing arrays, either shorthand or full notation may be used.
In the shorthand notation, the ARRAY
type isn’t necessary, but it’s only
possible to specify the Array typeset to use to validate each array element,
and arguments can’t be specified. In the
fully-qualified notation, the
ARRAY
type is required, but the Array typeset must be moved into the
typeset
argument (along with any other argument necessary).
NOTE: It’s important to realize that arrays (as in the JavaScript Array type) are essentially nested Array typesets. They represent a set of types that will be used to validate each element of an array using a short-circuit OR conjunction, looking for the first type that matches.
Array Example: Simple array
The value
property must be an array (possibly empty) of any type of value.
{
value: [ARRAY]
}
NOTE: Since arrays are, in reality, nested
Array typesets, and since an empty array is
an invalid Array typeset, it’s not possible to use the shorthand notation
to indicate what could be the equivalent: [[]]
. The inner Array typeset
would be deemed invalid.
Array Example: Shorthand notation
The value
property must be an array (possibly empty) of finite numbers of
any value.
{
value: [[FINITE]]
}
Array Example: Shorthand, mixed types
The value
property must be either a boolean; or an array (possibly empty) of
finite numbers of any value, or non-empty strings, or a mix of both.
{
value: [BOOLEAN, [FINITE, STRING]]
}
Array Example: Fully-qualified notation, no typeset
The value
property must be a non-empty array of any type of value.
{
value: [REQUIRED, ARRAY, {min: 1}]
}
Array Example: Fully-qualified notation
The value
property must be an array (possibly empty) of finite numbers of
any value (nested typeset is not fully-qualified).
{
value: [REQUIRED, ARRAY, {$: [FINITE]}]
}
Array Example: Fully-qualified, mixed types
The value
property must be either a boolean; or an array (possibly empty) of
finite numbers of any value, or non-empty strings, or a mix of both
(nested typeset is not fully-qualified).
{
value: [REQUIRED, BOOLEAN, ARRAY, {$: [FINITE, STRING]}]
}
Kind: static constant of types
See: qualifiers
types.ANY_OBJECT : string
An any object is anything that is not a primitive, which
means it includes the Array
type, as well as functions and arguments, and
other JavaScript object types. To test for an array, use the
ARRAY type. To test for a function, use the
FUNCTION type.
The following values are considered any objects:
{}
new Object()
new (function() {}) | new (class {})()
(class instance) (also see CLASS_OBJECT)new String('')
new Boolean(true)
new Number(1)
[]
(also see ARRAY)new Array()
(also see ARRAY)/re/
(also see REGEXP)new RegExp('re')
(also see REGEXP)new Date()
(also see DATE)new Error()
(also see ERROR)new Promise()
(also see PROMISE)function(){}
(also see FUNCTION)arguments
(function arguments)new Map()
(also see MAP)new WeakMap()
(also see WEAK_MAP)new Set()
(also see SET)new WeakSet()
(also see WEAK_SET)
Primitive values are not considered any objects,
especially when the qualifier is REQUIRED.
Note that typeof null === 'object'
in JavaScript; the ANY_OBJECT
type
allows testing for this undesirable fact.
Any object rules per qualifiers:
- REQUIRED: Per the lists above.
- EXPECTED:
null
is allowed. - OPTIONAL:
undefined
is allowed.
Arguments (optional): shape_object_args
Kind: static constant of types
See
types.OBJECT : string
An object is one that extends from JavaScript.Object
(i.e. an instance
of something that extends from Object) and is not a
function, array,
regular expression, DATE,
function arguments object,
map, weak map,
set, weak set, nor a
primitive.
This is the default (imputed) type for shape descriptors, which means the object itself (the value being tested), prior to being checked against its shape, will be tested according to this type.
The following values are considered objects:
{}
new Object()
new (function() {}) | new (class {})()
(class instance) (also see CLASS_OBJECT)
The following values are not considered objects:
new String('')
new Boolean(true)
new Number(1)
[]
(also see ARRAY)new Array()
(also see ARRAY)/re/
(also see REGEXP)new RegExp('re')
(also see REGEXP)new Date()
(also see DATE)new Error()
(also see ERROR)new Promise()
(also see PROMISE)function(){}
(also see FUNCTION)arguments
(function arguments)new Map()
(also see MAP)new WeakMap()
(also see WEAK_MAP)new Set()
(also see SET)new WeakSet()
(also see WEAK_SET)- all primitives
Object rules per qualifiers:
- REQUIRED: Per the lists above.
- EXPECTED:
null
is allowed. - OPTIONAL:
undefined
is allowed.
Arguments (optional): shape_object_args
Kind: static constant of types
See
types.PLAIN_OBJECT : string
A plain object is one that is created directly from the Object
constructor,
whether using new Object()
or the literal {}
.
The following values are considered plain objects:
{}
new Object()
The following values are not considered plain objects:
new (function() {}) | new (class {})()
(class instance) (also see CLASS_OBJECT)new String('')
new Boolean(true)
new Number(1)
[]
(also see ARRAY)new Array()
(also see ARRAY)/re/
(also see REGEXP)new RegExp('re')
(also see REGEXP)new Date()
(also see DATE)new Error()
(also see ERROR)new Promise()
(also see PROMISE)function(){}
(also see FUNCTION)arguments
(function arguments)new Map()
(also see MAP)new WeakMap()
(also see WEAK_MAP)new Set()
(also see SET)new WeakSet()
(also see WEAK_SET)- all primitives
Plain object rules per qualifiers:
- REQUIRED: Per the lists above.
- EXPECTED:
null
is allowed. - OPTIONAL:
undefined
is allowed.
Arguments (optional): shape_object_args
Kind: static constant of types
See
types.CLASS_OBJECT : string
A class object is one that is created by invoking the new
operator on a
function (other than a primitive type function), generating a new object,
commonly referred to as a class instance. This object’s prototype
(__proto__
) is a reference to that function’s prototype
and has a
constructor
property that is ===
to the function.
The following values are considered class objects:
new (function() {}) | new (class {})()
(tip: use thector
argument to test for a specific class)
The following values are not considered class objects:
{}
new Object()
new String('')
new Boolean(true)
new Number(1)
[]
(also see ARRAY)new Array()
(also see ARRAY)/re/
(also see REGEXP)new RegExp('re')
(also see REGEXP)new Date()
(also see DATE)new Error()
(also see ERROR)new Promise()
(also see PROMISE)function(){}
(also see FUNCTION)arguments
(function arguments)new Map()
(also see MAP)new WeakMap()
(also see WEAK_MAP)new Set()
(also see SET)new WeakSet()
(also see WEAK_SET)- all primitives
Class object rules per qualifiers:
- REQUIRED: Per the lists above.
- EXPECTED:
null
is allowed. - OPTIONAL:
undefined
is allowed.
Arguments (optional): shape_object_args
Kind: static constant of types
See
types.HASH_MAP : string
A simple OBJECT that is treated as a hash map
with an expected set of keys (forcibly strings due to the nature of the
native JavaScript Object
type) and values. Keys are own-properties only,
and can be described using a regular expression. Values can be described using a
typeset. Empty maps are permitted.
Map object rules per qualifiers: Same as OBJECT rules.
Arguments (optional): collection_args
Kind: static constant of types
See
types.MAP : string
An ES6 map supports any value as its keys, unlike a HASH_MAP that only supports strings. Keys can be described using a regular expression (if they are strings), and values can be described using a typeset. Empty maps are permitted by default.
Map rules per qualifiers: Must be a Map
instance.
Arguments (optional): collection_args
Kind: static constant of types
See
types.WEAK_MAP : string
An ES6 weak map supports any object as its keys, unlike a HASH_MAP that only supports strings, and a MAP that supports any type of value.
Weak map rules per qualifiers: Must be a WeakMap
instance.
Kind: static constant of types
See
types.SET : string
An ES6 set is a collection of unique values without associated keys. Values can be described using a typeset. Empty sets are permitted by default.
Set rules per qualifiers: Must be a Set
instance.
Arguments (optional): collection_args
Kind: static constant of types
See
types.WEAK_SET : string
An ES6 weak set is a collection of weakly held unique objects without associated keys.
Weak set rules per qualifiers: Must be a WeakSet
instance.
Kind: static constant of types
See
types.JSON : string
JSON rules per qualifiers: Must be a JSON value:
- null
- string, however empty strings are permitted,
even if the qualifier is
REQUIRED
- boolean
- finite number, however
NaN
is permitted if the qualifier is TRUTHY since it is a falsy value. - plain object
- array
Since this type checks for any valid JSON value, empty string and null
values are permitted, even when the typeset is qualified as REQUIRED
.
Therefore, the REQUIRED
qualifier has the same effect as the EXPECTED
qualifier.
Also note that if the qualifier is OPTIONAL
or TRUTHY
, then undefined
will be a permitted value, even though it is not a JSON value.
Kind: static constant of types
See: qualifiers
types.DEFAULT_OBJECT_TYPE : string
Default object type: OBJECT. This type is associated with an un-qualified shape descriptor.
Kind: static constant of types
types.primitives : void
Primitives
In RTV.js (as in ECMAScript 2015), a primitive is considered one of the following types:
undefined
null
string
(note thatnew String('s')
does not produce a primitive, it produces an object, and should be avoided).boolean
(note thatnew Boolean(true)
does not produce a primitive, it produces an object, and should be avoided).number
(note thatnew Number(1)
does not produce a primitive, it produces an object, and should be avoided).Symbol
Kind: static typedef of types
See: isPrimitive
types.falsy_values : void
Falsy Values
In JavaScript, a falsy value means any one of these values which, when
tested in a logical operation like &&
, ||
, or an IF
statement, evaluates
to false
:
undefined
null
false
0
""
NaN
Kind: static typedef of types
See: isFalsy
types.qualifier_rules : void
Rules Per Qualifiers
Qualifiers state basic rules. Unless otherwise stated, every type herein abides by those basic rules. Each type will also impose additional rules specific to the type of value it represents.
For example, while the FINITE type states that the
value must not be NaN
, +Infinity
, nor -Infinity
; it could be null
if
the qualifier used is EXPECTED
; and it could be undefined
if the qualifier
used is OPTIONAL
.
Kind: static typedef of types
types.shape_descriptor : Object
Shape Descriptor
Describes the shape (i.e. interface) of an object as a map of properties to typesets. Each typeset indicates whether the property is required, expected, or optional, using qualifiers, along with possible types. Only own-enumerable properties of the shape are considered part of the shape.
When a value is checked or verified against a given shape, properties on the value that are not part of the shape are ignored (this is to stay true to the concept of an interface whereby an object may have other functionality, but remains compatible or usable as long as it meets the specified contract as a subset of its properties and methods). If successfully checked/verified, the value is guaranteed to provide the properties described in the shape, and each property is guaranteed to be assigned to a value of at least one type described in each property’s typeset.
The shape descriptor itself must be an OBJECT. An empty shape descriptor is valid, but will result in nothing being verified on the value, other than whether its type is the default object type.
NOTE: A shape is simply a specific type of typeset since a typeset can come in the form of multiple value types, including an object which represents a shape.
Kind: static typedef of types
See
types.type_arguments : Object
Type Arguments
Some types will accept, or may even expect, one or more arguments. Each type will specify whether it has arguments, and if they’re optional or required. Arguments are specified as a single object immediately following a type in an Array typeset (i.e. an Array must be used as the typeset in order to provide arguments for a type).
An arguments object immediately follows its type in a typeset, such as
[PLAIN_OBJECT, {$: {hello: STRING}}]
. This would specify the value must be a
plain object with a shape that includes a
property named ‘hello’, that property being a
required string.
Another example would be [STRING, {min: 5}]
, which would require a string
of at least 5 characters in length.
Since qualifiers may affect how a value is validated against a type, qualifier rules will take precedence over any argument specified, unless otherwise stated in the type’s qualifier rules or arguments spec.
Kind: static typedef of types
See: isTypeArgs
types.STRING_args : Object
String Arguments
Kind: static typedef of types
See: STRING
Properties
Name | Type | Description |
---|---|---|
[oneOf] | string | Array.<string> |
An exact string to match (=== ). Can also be a list of strings, one of which must be an exact match. An empty string is allowed, and will override the normal rules of the REQUIRED qualifier which would otherwise require a non-empty string as the value. The list may contain an empty string. An empty list will be ignored. This argument is ignored if exp is specified. |
[partial] | string |
A partial value to match (must be somewhere within the string). Ignored if not a string, an empty string, or oneOf or exp is specified. min and max take precedence over this argument (min/max will be validated first, then a partial match will be attempted). |
[min] | number |
Minimum inclusive length. Defaults to 1 for a REQUIRED string, and 0 for an EXPECTED or OPTIONAL string. Ignored if oneOf or exp is specified, or min is not a FINITE number >= 0. |
[max] | number |
Maximum inclusive length. Negative means no maximum. Ignored if oneOf or exp is specified, max is not a FINITE number, or max is less than min . Defaults to -1 (unlimited length). Can be set to zero to require a zero-length string. |
[exp] | string |
A string-based regular expression describing the string. For example, to require a string of numbers with a minimum length of 1, the following expression could be used: "^\\d+$" . |
[expFlags] | string |
A string specifying any flags to use with the regular expression specified in exp . Ignored if falsy or if exp is not specified. See the RegExp#flags parameter for more information. |
types.SYMBOL_args : Object
Symbol Arguments
Kind: static typedef of types
See: SYMBOL
Properties
Name | Type | Description |
---|---|---|
[oneOf] | symbol | Array.<symbol> |
An exact symbol to match (=== ). Can also be a list of symbols, one of which must be an exact match. Values to match are ignored if they are not symbols. An empty list will be ignored. |
types.numeric_args : Object
Numeric Value Arguments
Applicable to all numeric types:
Kind: static typedef of types
See
Properties
Name | Type | Description |
---|---|---|
[oneOf] | number | Array.<number> |
An exact number to match (=== ). Can also be a list of numbers, one of which must be an exact match. An empty list will be ignored. Values to match are ignored if they are not within normal range of the type (e.g. for NUMBER , could be +Infinity , or even NaN if the qualifier is not REQUIRED ; but these values would be ignored by FINITE since they aren’t part of the FINITE range), or not numbers at all. Note that 0 and NaN are permitted when the qualifier is TRUTHY even if they aren’t part of the list or aren’t the single match. |
[min] | number |
Minimum inclusive value. Ignored if oneOf is specified, min is NaN , or min is not within normal range of the type. Note that 0 is permitted when the qualifier is TRUTHY even if the minimum does not permit it. |
[max] | number |
Maximum inclusive value. Ignored if oneOf is specified, max is NaN , max is not within normal range of the type, or max is less than min . Note that 0 is permitted when the qualifier is TRUTHY even if the minimum does not permit it. |
types.shape_object_args : Object
Shape Object Arguments
Applicable to all object types that may have a shape:
Kind: static typedef of types
See
Properties
Name | Type | Description |
---|---|---|
[$] | Object |
The shape descriptor describing the expected interface of the value being verified. If not specified, none of the value’s properties will be verified, and the exact flag (as well as the exactShapes verification option) will be ignored. NOTE: Any properties in the shape itself that are undefined will be ignored. This facilitates merging shapes with destructuring when combining shapes into larger ones. Applies to all shape object types. |
[ctor] | function |
A reference to a constructor function. If specified, the class object (instance) must have this class function in its inheritance chain such that <class_object> instanceof ctor === true . Note that this property is not serializable to JSON. Ignored if not a function. Applies to: CLASS_OBJECT. |
[exact] | boolean |
If true , this will restrict the immediate object being verified to having the exact set of own-properties as those specified on the shape. By default, additional own-properties on the object are ignored. In other words, the object must always have all of the shape’s properties, but (by default) it may also have additional properties that are not in the shape. Setting exact: true would cause the verification to fail if the object has more properties than those specified in the shape. If specified, whether true or false , this flag overrides the exactShapes option for the verification for this shape only. Nested shapes will not be affected. The exactShapes flag that may be set in the verification’s context options via a call to check or verify. NOTE: If this flag is true and the shape is empty, it will restrict the object being verified to an empty object (i.e. no own-properties). NOTE: If this flag is true and the shape is not specified, the flag will be ignored, not verifying the value being checked has any specific own-properties. Applies to all shape object types. |
types.ARRAY_args : Object
Array Arguments
Kind: static typedef of types
See: ARRAY
Properties
Name | Type | Description |
---|---|---|
[$] | typeset |
The typeset which every value in the array must match. Defaults to ANY which means any value will match. |
[length] | number |
Exact length. Ignored if not a FINITE number >= 0. |
[min] | number |
Minimum inclusive length. Ignored if length is specified, or min is not a FINITE number >= 0. Defaults to 0. |
[max] | number |
Maximum inclusive length. Negative means no maximum. Ignored if length is specified, max is not a FINITE number, or max is less than min . Defaults to -1 (unlimited). |
types.collection_args : Object
Collection Arguments
Describes the keys and values in a collection-based object, which is one of the following types:
- HASH_MAP (NOTE: only own-enumerable properties are considered part of this collection type)
- MAP
- SET (with some exceptions)
For example, the following arguments both verify a collection of 3-letter string keys (upper- or lowercase) to finite numbers:
{keyExp: '[a-z]{3}', keyFlags: 'i', $values: FINITE}
{keyExp: '[a-zA-Z]{3}', $values: FINITE}
Note that ARRAY is not included in this list because the array type has special syntax for describing the type of its items. See ARRAY_args instead.
The WEAK_MAP and WEAK_SET types do not apply because, due to their nature, their elements cannot be iterated.
Kind: static typedef of types
See
Properties
Name | Type | Description |
---|---|---|
[length] | number |
The exact number of elements required in the collection. A negative value allows for any number of entries. Zero requires an empty collection. Ignored if not a FINITE number. Applies to: All collection types. |
[$keys] | typeset |
A typeset describing each key in the collection. If the type is HASH_MAP, this argument is ignored due to the nature of its JavaScript Object -based implementation which requires that all keys be non-empty strings. Applies to: MAP. |
[keyExp] | string |
A string-based regular expression describing the names of keys found in the collection. By default, there are no restrictions on key names. Ignored if the key type is not STRING, as specified in $keys (when $keys is applicable to the collection type). For example, to require numerical keys, the following expression could be used: "^\\d+$" . Applies to: HASH_MAP, MAP. |
[keyFlags] | string |
A string specifying any flags to use with the regular expression specified in keyExp . Ignored if falsy, or if keyExp is not specified or irrelevant. See the RegExp#flags parameter for more information. Applies to: HASH_MAP, MAP. |
[$values] | typeset |
A typeset describing each value in the collection. If specified, all values must match this typeset (but the collection is not required to have any elements to be considered valid, unless length is specified). If not specified, no validation is performed on values. For example, to require arrays of non-empty string values as values in the collection, the following typeset could be used: [[types.STRING]] . Applies to: All collection types. |
[deep] | boolean |
If true , the property value being tested does not match the $values typeset, and the property value is a hash map, then verification will recurse into the property value and will attempt to verify its properties against the typeset in $values . If false (default), the property value must match the $values typeset. Applies to: HASH_MAP. |
types.typeset : Object
| string
| Array
| function
Typeset
Describes the possible types for a given value. It can be any one of the following JavaScript types:
- Object: For the root or a nested
shape descriptor of implied
OBJECT type (unless paired with a specific object type
like PLAIN_OBJECT, for example, when using the
Array notation, e.g.
[PLAIN_OBJECT, {...}]
). If the object is empty (has no properties), nothing will be verified (anything will pass). - String: For a single type, such as FINITE for a finite number. Must be one of the types defined in types.
- Function: For a custom validator that will verify the value of the property using custom code. Since the Array form is not being used (only the validator is being provided), it’s always invoked immediately. Since a type is not provided, the ANY type is implied.
- Array: For multiple type possibilities, optionally
qualified, using a short-circuit OR conjunction, which means
the value of the property being described must match at least one of the types listed, but
not all. Matching is done in a short-circuit fashion, from the first to the last element in
the typeset. If a simpler type is a more likely match, it’s more performant to specify it
first/earlier in the typeset to avoid a match attempt on a nested shape or Array.
- Cannot be an empty Array.
- A given type may be included more than once in the typeset. This allows for greater
composition. The first-matched will win.
[STRING, {oneOf: 'foo'}, STRING]
would validate both'foo'
and'bar'
because the second occurrence ofSTRING
is not restricted to any specific value. - An Array is necessary to qualify the typeset as not required (see Typeset Qualifiers below).
- An Array is necessary if a type needs or requires arguments.
- If the first element is an
Object
(or second, if a qualifier is provided, and this, in a typeset that is not fully-qualified), it’s treated as a nested shape descriptor describing an object of the default object type. To include a shape descriptor at any other position within the array, it must be preceded by a type, even if the default object type is being used (i.e.OBJECT
must be specified as the type). For example, all these typesets are equivalent (and equivalent to just{name: STRING}
as the typeset):[{name: STRING}]
,[REQUIRED, {name: STRING}]
, and[REQUIRED, OBJECT, {$: {name: STRING}}]
, describing an object that has a name property which is a non-empty string. Changing it to[STRING, {$: {name: STRING}}]
, however, does not mean, “a non-empty string, or an object with a name property which is a non-empty string”. In this case, the object arguments{$: {name: STRING}}
would be treated as STRING arguments, which is likely not the intent. The arguments would have to be preceded by an object type (e.g. OBJECT, PLAIN_OBJECT, etc.) to have them interpreted as in the former “OR” case. - If an element is an
Array
(any position), it’s treated as a nested list with an implied ARRAY type, e.g.[BOOLEAN, [STRING, FINITE]]
would describe a property that should be a boolean, or an array of non-empty strings or finite numbers. See theARRAY
type reference for more information on shorthand and full notations. - If an element is a
Function
, it must be the last element in the Array and will be treated as a custom validator. Only one validator can be specified for a given typeset (additional validators may appear in nested typesets).
Typeset Qualifiers
All typesets use an implied REQUIRED
qualifier unless otherwise specified. To qualify a typeset, a
qualifier may be specified as the first element
in the Array
form (if specified, it must be the first element). For example,
{note: [EXPECTED, STRING]}
would describe an object with a ‘note’ property
that is an expected, but not required, string, which could therefore be either
empty or even null
. The Array
form must be used in order to qualify a
typeset as other than required, and the qualifier applies to all immediate
types in the typeset (which means each nested typeset can have its own qualifier).
JSON Serialization
ALL typesets should be fully JSON-serializable (via JSON.stringify()
and
JSON.parse()
) with the following unavoidable exceptions:
- Custom validators
- CLASS_OBJECT arguments ‘ctor’ property
Those exceptions are due to the fact that these represent functions, and functions are not serializable to JSON. They will be ignored in the stringification process, unless a custom replacer is provided which, somehow (up to you), handles them.
This could, among other possibilities, enable the transmission of typesets over network requests, perhaps embedded in JSON payloads, similar to JSON-LD schemas.
Typeset Example: Object
const contactShape = {
name: rtv.STRING, // required, non-empty, string
tags: [rtv.ARRAY, [rtv.STRING]], // required array of non-empty strings
// tags: [[rtv.STRING]], // same as above, but using shortcut array format
details: { // required nested object of type `OBJECT` (default)
birthday: [rtv.EXPECTED, rtv.DATE] // Date (could be null)
},
notes: [rtv.OPTIONAL, rtv.STRING, function(value) { // optional string...
if (value && !value.test(/^[A-Z].+\.$/)) {
throw new Error('Note must start with a capital letter, end with a ' +
period, and have something in between, if specified.');
}
}]
};
const contact = {
name: 'John Doe',
tags: ['colleagues', 'sports'],
details: {
birthday: null // not specified
}
};
rtv.verify(contact, contactShape); // OK
const walletShape = {
contacts: [[contactShape]], // list of contacts using nested shape
address: {
street: rtv.STRING
// ...
},
money: rtv.FINITE
};
rtv.verify({
contacts: [contact],
address: {street: '123 Main St'},
money: 100
}, walletShape); // OK
Typeset Example: String
rtv.verify('foo', rtv.STRING); // OK
rtv.verify('foo', rtv.FINITE); // ERROR
Typeset Example: Array
const typeset = [rtv.STRING, rtv.FINITE]; // non-empty string, or finite number
rtv.verify('foo', typeset); // OK
rtv.verify(1, typeset); // OK
Typeset Example: Function
const validator = (v) => {
if (v % 10) {
throw new Error('Number must be a factor of 10.');
}
};
rtv.verify(100, validator); // OK
rtv.verify(120, [rtv.INT, validator]); // OK
Typeset Example: Alternate Qualifier
const person = {
name: rtv.STRING, // required, non-empty
age: [rtv.OPTIONAL, rtv.FINITE, (v) => { // 18 or older, if specified
if (v < 18) {
throw new Error('Must be 18 or older.');
}
}]
};
rtv.verify({name: 'Bob'}, person); // OK
rtv.verify({name: ''}, person); // ERROR
rtv.verify({name: 'Steve', age: 17}, person); // ERROR
rtv.verify({name: 'Steve', age: null}, person); // OK
Kind: static typedef of types
types.fully_qualified_typeset : Array
Fully-Qualified Typeset
A typeset expressed without any shortcut notations
or implied/default types to make it easier to parse, especially as the match
parameter given to a custom validator.
A fully-qualified typeset always uses the array notation, and has a single
qualifier as its first element, followed by
at least one type, and at most one validator.
For example:
STRING
->[REQUIRED, STRING]
{note: STRING}
->[REQUIRED, OBJECT, {$: {note: [REQUIRED, STRING]}}]
[[FINITE]]
->[REQUIRED, ARRAY, {$: [REQUIRED, FINITE]}]
(v) => if (!v) { throw new Error(); }
->[REQUIRED, ANY, (v) => if (!v) { throw new Error(); }]
Kind: static typedef of types
types.custom_validator ⇒ \*
Custom Validator
A function used as a typeset, or as a subset to a typeset, to provide custom verification of the value being verified.
A typeset may only have one validator, and the validator is only called if the value being verified was verified by at least one type in the typeset. The validator must be the last element within the typeset (if the typeset is an array, and a validator is needed). The validator must also be specified after the qualifier in a typeset Array.
The validator is invoked immediately after the first type match, but only if a type match is made. If the typeset is not fully-qualified and does not explicitly specify a type, the ANY type is implied, which will match any value, which means the validator will always be called.
NOTE about qualifiers: Validators will be invoked regardless of the qualifier.
If the typeset’s qualifier is EXPECTED
, the validator must handle null
values.
If the qualifier is OPTIONAL
, the validator must handle undefined
and null
values.
Also note that a value of null
or undefined
, if permitted by the qualifier,
will always be type-matched to the first type in the typeset because all types
allow these values for their related qualifiers.
There is one disadvantage to using a custom validator: It cannot be serialized
via JSON, which means it cannot be easily transmitted or persisted. One option
would be to customize the serialization to JSON by serializing the validator to a
special object with properties that would inform the deserialization process
on how to reconstruct the validator dynamically. There may also be a way to
persist the function’s code, but that would require the use of the unsafe
eval()
function to later reconstitute it as an actual function.
Kind: static typedef of types
Returns: \*
- Either undefined
or a truthy value to pass the verification, or a falsy
value to fail it. The validator may also throw an Error
to fail the verification.
If a falsy value (other than undefined
) is returned, an Error
will be generated and
included in the resulting RtvError
as its failure property,
as well as part of its message
.
While undefined
is falsy, it’s also the result of a function that did not return anything,
which is interpreted as indicating the validator found no fault with the value.
It’s recommend to throw an Error
with a helpful message rather than simply returning a
falsy value to fail the verification.
Throws:
-
Error
(Optional) If the validation fails. This error will fail the overall verification, and will be included in the resultingRtvError
as its failure property, as well as part of itsmessage
.Although not required, it’s recommended to throw an error with a message that will help the developer determine why the custom validation failed, while avoiding exposing any sensitive information that may be found in the
value
(such as passwords).
See: isCustomValidator
Param | Type | Description |
---|---|---|
value | \* |
The value being verified. This value differs from context.originalValue in that it is the value currently being verified, closest to the custom validator itself, e.g. the value of element in an array, as opposed to the array itself, or the value of a property in an object, as opposed to the object itself. |
match | Array |
A fully-qualified typeset describing the sub-type within the typeset parameter that matched, resulting in the custom validator being called (if no sub-types matched, it would not get called). For example, if the typeset used for verification was [PLAIN_OBJECT, {$: {note: STRING}}, validator] , this parameter would be a new Array typeset [REQUIRED, PLAIN_OBJECT, {$: {note: STRING}}] , and the typeset parameter would be a reference to the original [PLAIN_OBJECT, {$: {note: STRING}}, validator] . If the verification typeset was [STRING, FINITE, validator] and FINITE matched, this parameter would be [REQUIRED, FINITE] and the typeset parameter would be a reference to the original [STRING, FINITE, validator] . If the verification typeset was [{message: STRING}, validator] and the shape matched, this parameter would be [REQUIRED, OBJECT, {$: {message: STRING}}] (because of the default object type) and the typeset parameter would be a reference to the original [{message: STRING}, validator] . If the verification typeset was simply validator (just the validator itself), this parameter would be [REQUIRED, ANY] (because of the implied ANY type) and the typeset would be a reference to the original validator . |
typeset | typeset |
Reference to the typeset used for verification. Note the typeset may contain nested typeset(s), and may be part of a larger parent typeset (though there would be no reference to the parent typeset, if any). |
context | type\_validator\_context |
Additional context for the validation. |
rtvref.util : object
RTV.js Utilities
Kind: static namespace of rtvref
- .util :
object
- .print(printValue, printOptions) ⇒
string
- .hasOwnProp(obj, prop) ⇒
boolean
- .print(printValue, printOptions) ⇒
util.print(printValue, printOptions) ⇒ string
Pretty-print a value.
Kind: static method of util
Returns: string
- Pretty-printed value. It’s not perfect and may not catch
all types, but attempts to be good enough.
Param | Type | Default | Description |
---|---|---|---|
printValue | \* |
Value to print. | |
printOptions | Object |
Print options. | |
[printOptions.isTypeset] | boolean |
false |
true if the value being printed is a typeset; false otherwise. |
util.hasOwnProp(obj, prop) ⇒ boolean
Safely determines if a property is an own-property of an object.
Kind: static method of util
Returns: boolean
- true
if it is; false
otherwise. Also false
if obj
is falsy.
Param | Type | Description |
---|---|---|
obj | Object |
Object to check. Can be falsy. |
prop | string |
Own-property to check. |
rtvref.validation : object
RTV.js Validation
This namespace provides type validations which verify values to be of
the types defined in this library. If permitted values
differ between qualifiers, the validation must
only permit the REQUIRED
values. Validations strictly check for types;
they do not consider type arguments or
qualifiers like type validators do.
Validations may also check for pseudo-types, such as the isTypeset validation verifying a value as a typeset, which is not an actual type.
Every validation module must provide the following interface:
{function} check
: The validation method itself.{(string|undefined)} type
: The type verified;undefined
for a pseudo-type (e.g. primitive or typeset).
Validations are meant to be leaf modules. They should not import other modules
other than types and other validations. Validation modules should be named
as is<Type>
such that their default export is named is<Type>
.
NOTE: Where possible, validations should use the other validations rather than third-party code (e.g. isTypeset.js needs to check for objects, so it should use the isObject.js validation rather than ‘lodash/isObject’, and let isObject.js decide the best way to check a value as being an ‘object’ as defined by this library in rtvref.types.OBJECT). This way, it makes it much easier to change the definition of a type later on.
Kind: static namespace of rtvref
- .validation :
object
- .method(value) ⇒
boolean
- .isAny :
Module
- .isAnyObject :
Module
- .isArray :
Module
- .isBoolean :
Module
- .isClassObject :
Module
- .isCustomValidator :
Module
- .isDate :
Module
- .isError :
Module
- .isFalsy :
Module
- .isFinite :
Module
- .isFloat :
Module
- .isFunction :
Module
- .isHashMap :
Module
- .isInt :
Module
- .isJson :
Module
- .isMap :
Module
- .isNull :
Module
- .isNumber :
Module
- .isObject :
Module
- .isPlainObject :
Module
- .isPrimitive :
Module
- .isPromise :
Module
- .isRegExp :
Module
- .isSafeInt :
Module
- .isSet :
Module
- .isShape :
Module
- .isString :
Module
- .type :
string
- .check(v, [options]) ⇒
boolean
- .type :
- .isSymbol :
Module
- .isTypeArgs :
Module
- .isTypeset :
Module
- .type :
string
- .check(v, [options]) ⇒
boolean
- .type :
- .isWeakMap :
Module
- .isWeakSet :
Module
- .method(value) ⇒
validation.method(value) ⇒ boolean
Type Validation Method
Verifies a value is of a certain type.
Kind: static method of validation
Returns: boolean
- true
if the value matches the type; false
otherwise.
Param | Type | Description |
---|---|---|
value | \* |
The value to validate. |
validation.isAny : Module
Validation Module: isAny
Kind: static typedef of validation
isAny.type : string
Type: ANY
Kind: static constant of isAny
isAny.check(v) ⇒ boolean
Validation for the ANY type.
Kind: static method of isAny
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isAnyObject : Module
Validation Module: isAnyObject
Kind: static typedef of validation
- .isAnyObject :
Module
isAnyObject.type : string
Type: ANY_OBJECT
Kind: static constant of isAnyObject
isAnyObject.check(v) ⇒ boolean
Validation for the ANY_OBJECT type.
Kind: static method of isAnyObject
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isArray : Module
Validation Module: isArray
Kind: static typedef of validation
isArray.type : string
Type: ARRAY
Kind: static constant of isArray
isArray.check(v) ⇒ boolean
Validation for the ARRAY type.
Kind: static method of isArray
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isBoolean : Module
Validation Module: isBoolean
Kind: static typedef of validation
- .isBoolean :
Module
isBoolean.type : string
Type: BOOLEAN
Kind: static constant of isBoolean
isBoolean.check(v) ⇒ boolean
Validation for the BOOLEAN type.
Determines if a value is a boolean literal only (i.e. a
primitive). It does not validate
new Boolean(true)
, which is an object that is a boolean.
Kind: static method of isBoolean
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isClassObject : Module
Validation Module: isClassObject
Kind: static typedef of validation
- .isClassObject :
Module
isClassObject.type : string
Type: CLASS_OBJECT
Kind: static constant of isClassObject
isClassObject.check(v) ⇒ boolean
Validation for the CLASS_OBJECT type.
Kind: static method of isClassObject
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isCustomValidator : Module
Validation Module: isCustomValidator
Kind: static typedef of validation
- .isCustomValidator :
Module
isCustomValidator.type : string
Type: undefined
, custom validator pseudo-type.
Kind: static constant of isCustomValidator
isCustomValidator.check(v) ⇒ boolean
Determines if a value is a custom validator.
Kind: static method of isCustomValidator
Returns: boolean
- true
if it is; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isDate : Module
Validation Module: isDate
Kind: static typedef of validation
isDate.type : string
Type: DATE
Kind: static constant of isDate
isDate.check(v) ⇒ boolean
Validation for the DATE type.
Kind: static method of isDate
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isError : Module
Validation Module: isError
Kind: static typedef of validation
isError.type : string
Type: ERROR
Kind: static constant of isError
isError.check(v) ⇒ boolean
Validation for the ERROR type.
Kind: static method of isError
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isFalsy : Module
Validation Module: isFalsy
Kind: static typedef of validation
isFalsy.type : string
Type: undefined
, falsy value pseudo-type.
Kind: static constant of isFalsy
isFalsy.check(v) ⇒ boolean
Determines if a value is a JavaScript falsy value.
Kind: static method of isFalsy
Returns: boolean
- true
if it is; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isFinite : Module
Validation Module: isFinite
Kind: static typedef of validation
isFinite.type : string
Type: FINITE
Kind: static constant of isFinite
isFinite.check(v) ⇒ boolean
Validation for the FINITE type.
Determines if a value is a finite number literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of isFinite
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isFloat : Module
Validation Module: isFloat
Kind: static typedef of validation
isFloat.type : string
Type: FLOAT
Kind: static constant of isFloat
isFloat.check(v) ⇒ boolean
Validation for the FLOAT type.
Determines if a value is a floating point literal only (i.e. a
primitive). It does not validate
new Number(1.5)
, which is an object that is a number.
Kind: static method of isFloat
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isFunction : Module
Validation Module: isFunction
Kind: static typedef of validation
- .isFunction :
Module
isFunction.type : string
Type: FUNCTION
Kind: static constant of isFunction
isFunction.check(v) ⇒ boolean
Validation for the FUNCTION type.
Kind: static method of isFunction
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isHashMap : Module
Validation Module: isHashMap
Kind: static typedef of validation
- .isHashMap :
Module
isHashMap.type : string
Type: HASH_MAP
Kind: static constant of isHashMap
isHashMap.check(v) ⇒ boolean
Validation for the HASH_MAP type.
Kind: static method of isHashMap
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isInt : Module
Validation Module: isInt
Kind: static typedef of validation
isInt.type : string
Type: INT
Kind: static constant of isInt
isInt.check(v) ⇒ boolean
Validation for the INT type.
Determines if a value is an integer literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of isInt
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isJson : Module
Validation Module: isJson
Kind: static typedef of validation
isJson.type : string
Type: JSON
Kind: static constant of isJson
isJson.check(v) ⇒ boolean
Validation for the JSON type.
Kind: static method of isJson
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isMap : Module
Validation Module: isMap
Kind: static typedef of validation
isMap.type : string
Type: MAP
Kind: static constant of isMap
isMap.check(v) ⇒ boolean
Validation for the MAP type.
Kind: static method of isMap
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isNull : Module
Validation Module: isNull
Kind: static typedef of validation
isNull.type : string
Type: NULL
Kind: static constant of isNull
isNull.check(v) ⇒ boolean
Validation for the NULL type.
Kind: static method of isNull
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isNumber : Module
Validation Module: isNumber
Kind: static typedef of validation
isNumber.type : string
Type: NUMBER
Kind: static constant of isNumber
isNumber.check(v) ⇒ boolean
Validation for the NUMBER type.
Determines if a value is a number literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number, neither does it
validate NaN
.
Kind: static method of isNumber
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isObject : Module
Validation Module: isObject
Kind: static typedef of validation
isObject.type : string
Type: OBJECT
Kind: static constant of isObject
isObject.check(v) ⇒ boolean
Validation for the OBJECT type.
Kind: static method of isObject
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isPlainObject : Module
Validation Module: isPlainObject
Kind: static typedef of validation
- .isPlainObject :
Module
isPlainObject.type : string
Type: PLAIN_OBJECT
Kind: static constant of isPlainObject
isPlainObject.check(v) ⇒ boolean
Validation for the PLAIN_OBJECT type.
Kind: static method of isPlainObject
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isPrimitive : Module
Validation Module: isPrimitive
Kind: static typedef of validation
- .isPrimitive :
Module
isPrimitive.type : string
Type: undefined
, primitive pseudo-type.
Kind: static constant of isPrimitive
isPrimitive.check(v) ⇒ boolean
Determines if a value is a JavaScript primitive.
Kind: static method of isPrimitive
Returns: boolean
- true
if it is; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isPromise : Module
Validation Module: isPromise
Kind: static typedef of validation
- .isPromise :
Module
isPromise.type : string
Type: PROMISE
Kind: static constant of isPromise
isPromise.check(v) ⇒ boolean
Validation for the PROMISE type.
Kind: static method of isPromise
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isRegExp : Module
Validation Module: isRegExp
Kind: static typedef of validation
isRegExp.type : string
Type: REGEXP
Kind: static constant of isRegExp
isRegExp.check(v) ⇒ boolean
Validation for the REGEXP type.
Kind: static method of isRegExp
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isSafeInt : Module
Validation Module: isSafeInt
Kind: static typedef of validation
- .isSafeInt :
Module
isSafeInt.type : string
Type: SAFE_INT
Kind: static constant of isSafeInt
isSafeInt.check(v) ⇒ boolean
Validation for the SAFE_INT type.
Determines if a value is an integer literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of isSafeInt
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isSet : Module
Validation Module: isSet
Kind: static typedef of validation
isSet.type : string
Type: SET
Kind: static constant of isSet
isSet.check(v) ⇒ boolean
Validation for the SET type.
Kind: static method of isSet
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isShape : Module
Validation Module: isShape
Kind: static typedef of validation
isShape.type : string
Type: undefined
, shape pseudo-type.
Kind: static constant of isShape
isShape.check(v) ⇒ boolean
Determines if a value is a shape.
Kind: static method of isShape
Returns: boolean
- true
if it is; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isString : Module
Validation Module: isString
Kind: static typedef of validation
- .isString :
Module
- .type :
string
- .check(v, [options]) ⇒
boolean
- .type :
isString.type : string
Type: STRING
Kind: static constant of isString
isString.check(v, [options]) ⇒ boolean
Validation for the STRING type.
Determines if a value is a string literal only (i.e. a
primitive), including an empty string.
It does not validate new String('value')
, which is an object that is a
string.
Kind: static method of isString
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Default | Description |
---|---|---|---|
v | \* |
Value to validate. | |
[options] | Object |
Validation options. | |
[options.allowEmpty] | boolean |
false |
If truthy, empty strings are permitted. |
validation.isSymbol : Module
Validation Module: isSymbol
Kind: static typedef of validation
isSymbol.type : string
Type: SYMBOL
Kind: static constant of isSymbol
isSymbol.check(v) ⇒ boolean
Validation for the SYMBOL type.
Kind: static method of isSymbol
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isTypeArgs : Module
Validation Module: isTypeArgs
Kind: static typedef of validation
- .isTypeArgs :
Module
isTypeArgs.type : string
Type: undefined
, type arguments pseudo-type.
Kind: static constant of isTypeArgs
isTypeArgs.check(v) ⇒ boolean
Determines if a value is a type arguments object.
Kind: static method of isTypeArgs
Returns: boolean
- true
if it is; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isTypeset : Module
Validation Module: isTypeset
Kind: static typedef of validation
- .isTypeset :
Module
- .type :
string
- .check(v, [options]) ⇒
boolean
- .type :
isTypeset.type : string
Type: undefined
, typeset pseudo-type.
Kind: static constant of isTypeset
isTypeset.check(v, [options]) ⇒ boolean
Determines if a value is a typeset.
Kind: static method of isTypeset
Returns: boolean
- true
if it is; false
otherwise.
See: typeset
Param | Type | Default | Description |
---|---|---|---|
v | \* |
Value to validate. | |
[options] | Object |
Validation options. | |
[options.deep] | boolean |
false |
If truthy, deeply-validates any nested typesets. Note that typesets in nested shapes are also deeply-validated. |
[options.fullyQualified] | boolean |
false |
If truthy, the typeset must be fully-qualified to be valid. |
[options.rootCause] | string | undefined |
(Output property) If an options object is specified, this property will be added and set to a failure message IIF the validation fails. |
validation.isWeakMap : Module
Validation Module: isWeakMap
Kind: static typedef of validation
- .isWeakMap :
Module
isWeakMap.type : string
Type: WEAK_MAP
Kind: static constant of isWeakMap
isWeakMap.check(v) ⇒ boolean
Validation for the WEAK_MAP type.
Kind: static method of isWeakMap
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
validation.isWeakSet : Module
Validation Module: isWeakSet
Kind: static typedef of validation
- .isWeakSet :
Module
isWeakSet.type : string
Type: WEAK_SET
Kind: static constant of isWeakSet
isWeakSet.check(v) ⇒ boolean
Validation for the WEAK_SET type.
Kind: static method of isWeakSet
Returns: boolean
- true
if validated; false
otherwise.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
rtvref.validator : object
RTV.js Type Validators
This namespace provides validators for each supported type, capable of fully validating a value against that type. Validators differ from type validations provided by the validation module in that validators verify a value against a single, specific type, considering qualifiers as well as type arguments.
Every validator module must provide the following interface:
{function} validate
: The type validator itself.{string} type
: The type verified.{function} config
: The configuration function.
Validator modules should be named as val<Type>
such that their default
export is named val<Type>
.
There can only be one validator for any given type. Where possible, each validator should use applicable type validations rather than third-party code (e.g. lodash) to ensure that the semantics of each type is properly interpreted. If the validator introduces an entirely new type, then it should use whatever means necessary to properly identify the type which it validates.
Kind: static namespace of rtvref
- .validator :
object
- .type_validator(value, qualifier, args, context) ⇒
RtvSuccess
|RtvError
- .validator_config(settings)
- .valAny :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valAnyObject :
Module
- .valArray :
Module
- .valBoolean :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valClassObject :
Module
- .valDate :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valError :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valFinite :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valFloat :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valFunction :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valHashMap :
Module
- .valInt :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valJson :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valMap :
Module
- .valNull :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valNumber :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valObject :
Module
- .valPlainObject :
Module
- .valPromise :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valRegExp :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valSafeInt :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valSet :
Module
- .valString :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valSymbol :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
- .valWeakMap :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .valWeakSet :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
- .type_validator_context_options :
Object
- .type_validator_context :
Object
- .validator_config_settings :
Object
- .type_validator(value, qualifier, args, context) ⇒
validator.type_validator(value, qualifier, args, context) ⇒ RtvSuccess
| RtvError
Type Validator Function
NOTE: A validator must always give precedence to qualifier rules for the type it’s validating, over any arguments specified. For example,
NOTE: A validator must support all its qualifier rules, including proper
handling of null
values when EXPECTED
and undefined
values when OPTIONAL,
in addition to any type-specific qualifier rules. For example, the
STRING type permits empty strings when not
REQUIRED.
Kind: static method of validator
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid;
RtvError
if not.
Param | Type | Description |
---|---|---|
value | \* |
The value to validate. |
qualifier | string |
The validation qualifier from the immediate typeset in which the pertaining type was specified. Validators should always explicitly default to REQUIRED to maintain consistent behavior. |
args | Object |
The arguments object, if any/applicable, for the type being validated. For example, string args in a typeset such as [rtv.STRING, {min: 5}] (a required string of at least 5 characters in length). |
context | type\_validator\_context |
Additional context for the validation. |
validator.validator_config(settings)
Type Validator Configuration Function
This function is called to provide the type validator with access to internal utilities.
Kind: static method of validator
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
validator.valAny : Module
Validator Module: valAny
Kind: static typedef of validator
- .valAny :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valAny.type : string
Type: ANY
Kind: static constant of valAny
valAny.config(settings)
Kind: static method of valAny
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valAny.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Kind: static method of valAny
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valAnyObject : Module
Validator Module: valAnyObject
Kind: static typedef of validator
- .valAnyObject :
Module
valAnyObject.type : string
Type: ANY_OBJECT
Kind: static constant of valAnyObject
valAnyObject.config(settings)
Kind: static method of valAnyObject
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valAnyObject.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Validator for the ANY_OBJECT type.
Kind: static method of valAnyObject
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | shape\_object\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valArray : Module
Validator Module: valArray
Kind: static typedef of validator
- .valArray :
Module
valArray.type : string
Type: ARRAY
Kind: static constant of valArray
valArray.config(settings)
Kind: static method of valArray
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valArray.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Kind: static method of valArray
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | ARRAY\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valBoolean : Module
Validator Module: valBoolean
Kind: static typedef of validator
- .valBoolean :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valBoolean.type : string
Type: BOOLEAN
Kind: static constant of valBoolean
valBoolean.config(settings)
Kind: static method of valBoolean
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valBoolean.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Validator for the BOOLEAN type.
Determines if a value is a boolean literal only (i.e. a
primitive). It does not validate
new Boolean(true)
, which is an object that is a boolean.
Kind: static method of valBoolean
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valClassObject : Module
Validator Module: valClassObject
Kind: static typedef of validator
- .valClassObject :
Module
valClassObject.type : string
Type: CLASS_OBJECT
Kind: static constant of valClassObject
valClassObject.config(settings)
Kind: static method of valClassObject
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valClassObject.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Validator for the CLASS_OBJECT type.
Kind: static method of valClassObject
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | shape\_object\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valDate : Module
Validator Module: valDate
Kind: static typedef of validator
- .valDate :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valDate.type : string
Type: DATE
Kind: static constant of valDate
valDate.config(settings)
Kind: static method of valDate
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valDate.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Kind: static method of valDate
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valError : Module
Validator Module: valError
Kind: static typedef of validator
- .valError :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valError.type : string
Type: ERROR
Kind: static constant of valError
valError.config(settings)
Kind: static method of valError
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valError.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Kind: static method of valError
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valFinite : Module
Validator Module: valFinite
Kind: static typedef of validator
- .valFinite :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valFinite.type : string
Type: FINITE
Kind: static constant of valFinite
valFinite.config(settings)
Kind: static method of valFinite
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valFinite.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Validator for the FINITE type.
Determines if a value is a number literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of valFinite
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | numeric\_args |
Type arguments. |
validator.valFloat : Module
Validator Module: valFloat
Kind: static typedef of validator
- .valFloat :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valFloat.type : string
Type: FLOAT
Kind: static constant of valFloat
valFloat.config(settings)
Kind: static method of valFloat
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valFloat.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Determines if a value is a number literal only (i.e. a
primitive). It does not validate
new Number(1.5)
, which is an object that is a number.
Kind: static method of valFloat
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | numeric\_args |
Type arguments. |
validator.valFunction : Module
Validator Module: valFunction
Kind: static typedef of validator
- .valFunction :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valFunction.type : string
Type: FUNCTION
Kind: static constant of valFunction
valFunction.config(settings)
Kind: static method of valFunction
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valFunction.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Validator for the FUNCTION type.
Kind: static method of valFunction
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valHashMap : Module
Validator Module: valHashMap
Kind: static typedef of validator
- .valHashMap :
Module
valHashMap.type : string
Type: HASH_MAP
Kind: static constant of valHashMap
valHashMap.config(settings)
Kind: static method of valHashMap
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valHashMap.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Validator for the HASH_MAP type.
Kind: static method of valHashMap
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | collection\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valInt : Module
Validator Module: valInt
Kind: static typedef of validator
- .valInt :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valInt.type : string
Type: INT
Kind: static constant of valInt
valInt.config(settings)
Kind: static method of valInt
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valInt.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Determines if a value is a number literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of valInt
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | numeric\_args |
Type arguments. |
validator.valJson : Module
Validator Module: valJson
Kind: static typedef of validator
- .valJson :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valJson.type : string
Type: JSON
Kind: static constant of valJson
valJson.config(settings)
Kind: static method of valJson
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valJson.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Kind: static method of valJson
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valMap : Module
Validator Module: valMap
Kind: static typedef of validator
- .valMap :
Module
valMap.type : string
Type: MAP
Kind: static constant of valMap
valMap.config(settings)
Kind: static method of valMap
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valMap.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Kind: static method of valMap
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | collection\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valNull : Module
Validator Module: valNull
Kind: static typedef of validator
- .valNull :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valNull.type : string
Type: NULL
Kind: static constant of valNull
valNull.config(settings)
Kind: static method of valNull
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valNull.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Kind: static method of valNull
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valNumber : Module
Validator Module: valNumber
Kind: static typedef of validator
- .valNumber :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valNumber.type : string
Type: NUMBER
Kind: static constant of valNumber
valNumber.config(settings)
Kind: static method of valNumber
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valNumber.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Validator for the NUMBER type.
Determines if a value is a number literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of valNumber
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | numeric\_args |
Type arguments. |
validator.valObject : Module
Validator Module: valObject
Kind: static typedef of validator
- .valObject :
Module
valObject.type : string
Type: OBJECT
Kind: static constant of valObject
valObject.config(settings)
Kind: static method of valObject
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valObject.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Validator for the OBJECT type.
Kind: static method of valObject
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | shape\_object\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valPlainObject : Module
Validator Module: valPlainObject
Kind: static typedef of validator
- .valPlainObject :
Module
valPlainObject.type : string
Type: PLAIN_OBJECT
Kind: static constant of valPlainObject
valPlainObject.config(settings)
Kind: static method of valPlainObject
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valPlainObject.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Validator for the PLAIN_OBJECT type.
Kind: static method of valPlainObject
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | shape\_object\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valPromise : Module
Validator Module: valPromise
Kind: static typedef of validator
- .valPromise :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valPromise.type : string
Type: PROMISE
Kind: static constant of valPromise
valPromise.config(settings)
Kind: static method of valPromise
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valPromise.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Validator for the PROMISE type.
Kind: static method of valPromise
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valRegExp : Module
Validator Module: valRegExp
Kind: static typedef of validator
- .valRegExp :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valRegExp.type : string
Type: REGEXP
Kind: static constant of valRegExp
valRegExp.config(settings)
Kind: static method of valRegExp
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valRegExp.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Validator for the REGEXP type.
Kind: static method of valRegExp
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valSafeInt : Module
Validator Module: valSafeInt
Kind: static typedef of validator
- .valSafeInt :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valSafeInt.type : string
Type: SAFE_INT
Kind: static constant of valSafeInt
valSafeInt.config(settings)
Kind: static method of valSafeInt
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valSafeInt.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Validator for the SAFE_INT type.
Determines if a value is a number literal only (i.e. a
primitive). It does not validate
new Number(1)
, which is an object that is a number.
Kind: static method of valSafeInt
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | numeric\_args |
Type arguments. |
validator.valSet : Module
Validator Module: valSet
Kind: static typedef of validator
- .valSet :
Module
valSet.type : string
Type: SET
Kind: static constant of valSet
valSet.config(settings)
Kind: static method of valSet
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valSet.validate(v, [q], [args], [context]) ⇒ RtvSuccess
| RtvError
Kind: static method of valSet
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | collection\_args |
Type arguments. |
[context] | type\_validator\_context |
Validation context. |
validator.valString : Module
Validator Module: valString
Kind: static typedef of validator
- .valString :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valString.type : string
Type: STRING
Kind: static constant of valString
valString.config(settings)
Kind: static method of valString
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valString.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Validator for the STRING type.
Determines if a value is a string literal only (i.e. a
primitive). It does not validate
new String('value')
, which is an object that is a string.
Kind: static method of valString
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | STRING\_args |
Type arguments. |
validator.valSymbol : Module
Validator Module: valSymbol
Kind: static typedef of validator
- .valSymbol :
Module
- .type :
string
- .config(settings)
- .validate(v, [q], [args]) ⇒
RtvSuccess
|RtvError
- .type :
valSymbol.type : string
Type: SYMBOL
Kind: static constant of valSymbol
valSymbol.config(settings)
Kind: static method of valSymbol
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valSymbol.validate(v, [q], [args]) ⇒ RtvSuccess
| RtvError
Validator for the SYMBOL type.
Kind: static method of valSymbol
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
[args] | numeric\_args |
Type arguments. |
validator.valWeakMap : Module
Validator Module: valWeakMap
Kind: static typedef of validator
- .valWeakMap :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valWeakMap.type : string
Type: WEAK_MAP
Kind: static constant of valWeakMap
valWeakMap.config(settings)
Kind: static method of valWeakMap
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valWeakMap.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Validator for the WEAK_MAP type.
Kind: static method of valWeakMap
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.valWeakSet : Module
Validator Module: valWeakSet
Kind: static typedef of validator
- .valWeakSet :
Module
- .type :
string
- .config(settings)
- .validate(v, [q]) ⇒
RtvSuccess
|RtvError
- .type :
valWeakSet.type : string
Type: WEAK_SET
Kind: static constant of valWeakSet
valWeakSet.config(settings)
Kind: static method of valWeakSet
Param | Type | Description |
---|---|---|
settings | validator\_config\_settings |
Configuration settings. |
valWeakSet.validate(v, [q]) ⇒ RtvSuccess
| RtvError
Validator for the WEAK_SET type.
Kind: static method of valWeakSet
Returns: RtvSuccess
| RtvError
- An RtvSuccess
if valid; RtvError
if not.
Param | Type | Description |
---|---|---|
v | \* |
Value to validate. |
[q] | string |
Validation qualifier. Defaults to REQUIRED. |
validator.type_validator_context_options : Object
Type Validator Context Options
General options for configuring the behavior of one or more validators invoked during a check or verification based on the specified typeset. All validators will receive these options.
Validator-specific options are known as type arguments and are specified inline within a typeset.
Kind: static typedef of validator
Properties
Name | Type | Description |
---|---|---|
[exactShapes] | boolean |
If true , any shape encountered, top-level or nested, unless specifically configured not to, will require that the related object’s own-properties be exactly those specified in the shape, no more, no less, as long as a shape is specified. By default, extra properties on the object (i.e. not in the shape) being verified are ignored. If a shape isn’t specified on a given object-related typeset, this flag will be ignored for that typeset. This flag can be overridden on an individual shape basis with the shape’s exact argument. |
validator.type_validator_context : Object
Type Validator Context
This object provides important information to a type validator, including a custom validator, about the context of the current validation check.
For example, a call to rtv.verify({foo: 1}, {foo: validator})
would provide the
following context
to the invoked validator
:
{
originalValue: {foo: 1},
parent: {foo: 1},
parentKey: 'foo'
}
// and here, the validator's `value` parameter would be set to 1.
Kind: static typedef of validator
Properties
Name | Type | Description |
---|---|---|
originalValue | \* |
The original/first value given to rtv.check() or rtv.verify(). |
parent | Object | Array | Map | Set | undefined |
Reference to the immediate parent of the property or element being validated. For example, if we have this object: <pre>const foods = { fruits: ['apple', 'orange', 'banana'], vegetables: ['celery', 'cucumber', 'kale'] } </pre> and we validate it with the following typeset: <pre>[rtv.HASH_MAP, { keyExp: '\\w+', $values: [[rtv.STRING, (value, match, typeset, context) => { // called for each element of both arrays value; // 'apple', 'orange', ..., 'cucumber', 'kale' context.originalValue; // `foods` context.parent; // first `fruits`, then `vegetables` }]] }] </pre> we see (in the comments) how originalValue and parent differ. parent gives more immediate context than originalValue does since it changes as the validation digs into the object hierarchy. parent will be undefined if the custom validator is placed at the top top of the typeset since there is no parent to reference in that case. For example: <pre>[ rtv.HASH_MAP, { keyExp: '\\w+', $values: [[rtv.STRING]] }, (value, match, typeset, context) => { // called once for the hash map itself value; // `foods` context.originalValue; // `foods` context.parent; // `undefined` } ] </pre> |
parentKey | \* |
Reference to the key/index in the parent that is being validated. The associated value is provided as the first parameter to the custom validator. parentKey differs depending on the type of parent : - Set : undefined since Sets do not have indexes. Use the value parameter provided to the custom validator as the key into the parent in this case. - Map : When validating keys, always undefined . Use the value parameter provided to the custom validator to know which key is being validated. When validating values, parentKey will be any value that is a valid key in a Map . - Object (i.e. HASH_MAP): string , the key name. - Array : number , the element’s index. - undefined : undefined . |
[options] | type\_validator\_context\_options |
Configuration options. |
validator.validator_config_settings : Object
Type Validator Configuration Settings
The settings provided to the configuration function.
Kind: static typedef of validator
Properties
Name | Type | Description |
---|---|---|
impl | impl |
Reference to the impl module. |