keystone-seeder
Version:
A flexible data seeder for Keystone 6 projects
57 lines (56 loc) • 1.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAvailableModels = getAvailableModels;
exports.getModelConfig = getModelConfig;
exports.getFieldsMeta = getFieldsMeta;
const internals_1 = require("@prisma/internals");
const queries_1 = require("./queries");
/**
* Get a list of all available models that can be seeded
*/
async function getAvailableModels(context) {
try {
const { keystone: { adminMeta: { lists }, }, } = (await context.sudo().graphql.run({ query: queries_1.ListsQuery }));
return lists.map((list) => list.key);
}
catch (error) {
console.error("Error fetching available models:", error);
throw error;
}
}
/**
* Get the Prisma model configuration for a specific model
*/
async function getModelConfig(modelName) {
try {
const dmmf = await (0, internals_1.getDMMF)({ datamodelPath: "schema.prisma" });
const model = dmmf.datamodel.models.find((m) => m.name === modelName);
if (!model) {
throw new Error(`Model '${modelName}' not found in Prisma DMMF.`);
}
return model;
}
catch (error) {
console.error(`Error getting model config for ${modelName}:`, error);
throw error;
}
}
/**
* Get field metadata for a specific model from Keystone
*/
async function getFieldsMeta(context, modelName) {
try {
const { keystone: { adminMeta: { list }, }, } = (await context.sudo().graphql.run({
query: queries_1.FieldsAdminMetaQuery,
variables: { key: modelName },
}));
return list.fields.reduce((result, item) => {
result[item.path] = item.fieldMeta;
return result;
}, {});
}
catch (error) {
console.error(`Error getting fields metadata for ${modelName}:`, error);
throw error;
}
}