@vaadin/hilla-models
Version:
Generative form models for Hilla
44 lines • 1.79 kB
JavaScript
import { $assertSupportedModel, $constraints, $name, $optional, } from './Model.js';
import { CoreModelBuilder } from './modelBuilders.js';
import { $itemModel, ArrayModel } from './models.js';
function createModelConverter(modelConverterFn) {
return ((modelOrConverter, ...extraArgs) => {
if (typeof modelOrConverter === 'function') {
return (model) => modelConverterFn(modelOrConverter(model), ...extraArgs);
}
return modelConverterFn(modelOrConverter, ...extraArgs);
});
}
function selfImpl(model) {
return model;
}
const _self = selfImpl;
export { _self as self };
function optionalImpl(model) {
return new CoreModelBuilder(model).name(model[$name]).define($optional, { value: true }).build();
}
export const optional = createModelConverter(optionalImpl);
function arrayImpl(model) {
return new CoreModelBuilder(ArrayModel, () => [])
.name(`Array<${model[$name]}>`)
.define($itemModel, { value: model })
.build();
}
export const array = createModelConverter(arrayImpl);
function constrainedImpl(model, constraint, ...moreConstraints) {
const previousConstraints = model[$constraints];
const newConstraints = [constraint, ...moreConstraints];
for (const newConstraint of newConstraints) {
newConstraint[$assertSupportedModel](model);
}
return new CoreModelBuilder(model)
.name(model[$name])
.define($constraints, { value: [...previousConstraints, ...newConstraints] })
.build();
}
export const constrained = createModelConverter(constrainedImpl);
function metaImpl(model, metadata) {
return new CoreModelBuilder(model).name(model[$name]).meta(metadata).build();
}
export const meta = createModelConverter(metaImpl);
//# sourceMappingURL=converters.js.map