UNPKG

@proofkit/typegen

Version:

`@proofkit/typegen` is a tool for generating TypeScript types from FileMaker database schemas, making it easier to work with FileMaker data in modern TypeScript projects.

63 lines (62 loc) 2 kB
import chalk from "chalk"; import { FileMakerError } from "@proofkit/fmdapi"; const getLayoutMetadata = async (args) => { var _a; const schemaReducer = (schema2) => schema2.reduce((acc, field) => { if (acc.find((o) => o.name === field.name)) return acc; if (meta && field.valueList && meta.valueLists && valueLists !== "ignore") { const list = meta.valueLists.find((o) => o.name === field.valueList); const values = (list == null ? void 0 : list.values.map((o) => o.value)) ?? []; return [ ...acc, { name: field.name, type: "valueList", values: valueLists === "allowEmpty" ? [...values, ""] : values } ]; } return [ ...acc, { name: field.name, type: field.result === "number" ? "fmnumber" : "string" } ]; }, []); const { client, valueLists = "ignore" } = args; const meta = await client.layoutMetadata().catch((err) => { if (err instanceof FileMakerError && err.code === "105") { console.log( chalk.bold.red("ERROR:"), "Skipping typegen for layout:", chalk.bold.underline(client.layout), "(not found)" ); return; } throw err; }); if (!meta) return; const schema = schemaReducer(meta.fieldMetaData); const portalSchema = Object.keys(meta.portalMetaData).map((schemaName) => { const schema2 = schemaReducer(meta.portalMetaData[schemaName] ?? []); return { schemaName, schema: schema2 }; }); const valueListValues = ((_a = meta.valueLists) == null ? void 0 : _a.map((vl) => ({ name: vl.name, values: vl.values.map((o) => o.value) }))) ?? []; const valueListValuesUnique = valueListValues.reduce( (acc, vl) => { if (acc.find((o) => o.name === vl.name)) return acc; return [...acc, vl]; }, [] ); return { schema, portalSchema, valueLists: valueListValuesUnique }; }; export { getLayoutMetadata }; //# sourceMappingURL=getLayoutMetadata.js.map