M
M
Modélico
Search…
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.
Copy link
Outline
_(Type, innerMetadata = [])
base(Type)
asIs(transform = identity)
any()
anyOf([[metadata1, enumValue1], ..., [metadataN, enumValueN]] = [], field = 'type')
number()
wrappedNumber()
string()
boolean()
date()
map(keyMetadata = any(), valueMetadata = any())
enumMap(enumMetadata, valueMetadata = any())
stringMap(valueMetadata = any())
list(itemMetadata = any()), list([...itemMetadata])
set(itemMetadata)
maybe(metadata = any())
withDefault(metadata, default)