@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
JavaScript
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