Metadata
Each of the types above has an associated metadata function in M.metadata(), with some useful additions:
const {
_,
base,
asIs,
any,
anyOf,
maybe,
withDefault,
number,
string,
boolean,
date,
wrappedNumber,
map,
enumMap,
stringMap,
list,
set
} = M.metadata()_(Type, innerMetadata = [])
eg. _(Animal), _(M.List, [string()]), _(M.Map, [date(), number()])
To retrieve the metadata of Modélico types
base(Type)
Retrieve the metadata of standard models for extension. See JSON validation (Overridingthe reviver) for an example.
asIs(transform = identity)
Useful for simple transformations, eg.: asIs(x => 2 * x) to double numbers. It serves as base for primitive metadata and can be used to fix a value for debugging purposes, eg.: asIs(() => 0). It is up to you to implement toJSON() on the instance to reverse the transformation if you need to.
any()
Leaves the JSON input untouched (same as asIs(identity)).
anyOf([[metadata1, enumValue1], ..., [metadataN, enumValueN]] = [], field = 'type')
Useful to revive polymorphic JSON based on an enumerated field. The field defaults to type if not provided. See Reviving polymorphic JSON: (example 1) for an example. Note that anyOf does not return metadata, but a metadata-returning function. This is something you can use as well to revive some cases of polymorphic JSON.
number()
For native numbers
wrappedNumber()
Wraps numbers with ModelicoNumber to support -0, NaN and ±Infinity.
string()
For native numbers
boolean()
For native booleans
date()
To parse date-time strings, as defined by RFC 3339, section 5.6, eg. 1978-12-06T00:00:00.000Z.
map(keyMetadata = any(), valueMetadata = any())
eg. map(date(), string())
For ordered maps with arbitrary keys and values with JSON representation
[[<key1>, <value1>], [<key2>, <value2>]]enumMap(enumMetadata, valueMetadata = any())
eg. enumMap(_(MyEnum), number())
For ordered maps with enum keys and arbitrary values with JSON representation
{"<enum1>": <value1>, "<enum2>": <value2>}stringMap(valueMetadata = any())
eg. stringMap(date())
For ordered maps with string keys and arbitrary values with JSON representation
{"<string1>": <value1>, "<string2>": <value2>}list(itemMetadata = any()), list([...itemMetadata])
eg. list(string()); tuples: list([number(), string()])
For arrays. It has support for tuples in the sense of fixed-length arrays with per-item metadata.
set(itemMetadata)
eg. set(number())
For ordered collections with no repeated values
maybe(metadata = any())
eg. maybe(string())
To declare a value as optional. Unless a value is a Maybe, it cannot be missing from the JSON or be null. See Optional / null values: Maybes for more details.
withDefault(metadata, default)
eg. withDefault(number(), 100)
To set a default if the value is null or missing. See Optional / null values: using with default for more details.
Last updated