UNPKG

@tsed/schema-formio

Version:

Transform Ts.ED Schema & JsonSchema to a valid Formio schema

51 lines (50 loc) 1.84 kB
import "../components/anyToComponent.js"; import "../components/arrayToComponent.js"; import "../components/booleanToComponent.js"; import "../components/dateToComponent.js"; import "../components/defaultToComponent.js"; import "../components/enumToComponent.js"; import "../components/mapToComponent.js"; import "../components/nestedToComponent.js"; import "../components/numberToComponent.js"; import "../components/objectToEditGrid.js"; import "../components/panelToComponent.js"; import "../components/propertiesToComponents.js"; import "../components/stringToComponent.js"; import { isString } from "@tsed/core"; import { getJsonSchema, JsonEntityStore } from "@tsed/schema"; import { kebabCase } from "change-case"; import { execMapper } from "../registries/FormioMappersContainer.js"; import { FormsContainer } from "../registries/FormsContainer.js"; export async function getFormioSchema(model, options = {}) { if (!model) { return undefined; } if (isString(model)) { return getFormioSchema(FormsContainer.get(model), options); } const entity = JsonEntityStore.from(model); const schema = getJsonSchema(model, { ...options, inlineEnums: true, customKeys: true }); const name = entity.schema.getName(); const machineName = kebabCase(name); const resolvers = []; const components = execMapper("properties", schema, { ...options, definitions: schema.definitions, resolvers }); const form = { title: name, type: "form", display: "form", tags: [], access: [], submissionAccess: [], ...entity.store.get("formio:form", {}), name: machineName, machineName, components }; await Promise.all(resolvers.map((resolver) => resolver(form, options))); return form; }