diff --git a/source/data/field-configuration-factories.mjs b/source/data/field-configuration-factories.mjs index 3d29cc2..f7ba9d8 100644 --- a/source/data/field-configuration-factories.mjs +++ b/source/data/field-configuration-factories.mjs @@ -11,6 +11,11 @@ export function factory(factory_function, description) { return new Field_Configuration(null, null, factory_function, description); } +export function instance(type, description) { + + return new Field_Configuration((i) => i instanceof type, null, () => new type(), description); +} + export function typed_value(coercion_function, default_value, description) { return new Field_Configuration(null, coercion_function, () => default_value, description); } @@ -33,6 +38,14 @@ export function typed_required(coercion_function, description) { return new Field_Configuration((value) => value !== undefined, coercion_function, null, description); } +export function schema(field_schema, default_value, description) { + return new Field_Configuration(null, (v) => field_schema.load(v), () => field_schema.load(default_value), description); +} + +export function symbol(symbol_set, default_value, description) { + return new Field_Configuration(null, (v) => symbol_set.load(v), () => symbol_set.load(default_value), description); +} + export function symbol_set(description_to_name_mapping, description=null) { const symbols_by_name = Object.fromEntries(Object.keys(description_to_name_mapping).map(k => [k, Symbol(k)]));