@stryke/prisma-trpc-generator
Version:
A fork of the prisma-trpc-generator code to work in ESM with Prisma v6.
76 lines (75 loc) • 2.96 kB
JavaScript
//#region src/zod/comments-helpers.ts
const modelAttributeRegex = /(?:@@Gen\.)+[A-z]+\(.+\)/;
const attributeNameRegex = /\.+[A-Z]+\(+/i;
const attributeArgsRegex = /\(+[A-Z]+:.+\)/i;
function resolveZodModelsComments(models, modelOperations, enumTypes, hiddenModels, hiddenFields) {
models = collectHiddenModels(models, hiddenModels);
collectHiddenFields(models, hiddenModels, hiddenFields);
hideModelOperations(models, modelOperations);
hideEnums(enumTypes, hiddenModels);
}
function collectHiddenModels(models, hiddenModels) {
return models.map((model) => {
if (model.documentation) {
const attribute = model.documentation?.match(modelAttributeRegex)?.[0];
if (attribute?.match(attributeNameRegex)?.[0]?.slice(1, -1) !== "model") return model;
const rawAttributeArgs = attribute?.match(attributeArgsRegex)?.[0]?.slice(1, -1);
const parsedAttributeArgs = {};
if (rawAttributeArgs) {
const rawAttributeArgsParts = rawAttributeArgs.split(":").map((it) => it.trim()).map((part) => part.startsWith("[") ? part : part.split(",")).flat().map((it) => it.trim());
for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {
const key = rawAttributeArgsParts[i];
const value = rawAttributeArgsParts[i + 1];
parsedAttributeArgs[key] = JSON.parse(value);
}
}
if (parsedAttributeArgs.hide) {
hiddenModels.push(model.name);
return null;
}
}
return model;
}).filter(Boolean);
}
function collectHiddenFields(models, hiddenModels, hiddenFields) {
models.forEach((model) => {
model.fields.forEach((field) => {
if (hiddenModels.includes(field.type)) {
hiddenFields.push(field.name);
if (field.relationFromFields) field.relationFromFields.forEach((item) => hiddenFields.push(item));
}
});
});
}
function hideEnums(enumTypes, hiddenModels) {
enumTypes.prisma = enumTypes.prisma.filter((item) => !hiddenModels.find((model) => item.name.startsWith(model)));
}
function hideModelOperations(models, modelOperations) {
let i = modelOperations.length;
while (i >= 0) {
--i;
const modelOperation = modelOperations[i];
if (modelOperation && !models.find((model) => {
return model.name === modelOperation.model;
})) modelOperations.splice(i, 1);
}
}
function hideZodInputObjectTypesAndRelatedFields(inputObjectTypes, hiddenModels, hiddenFields) {
let j = inputObjectTypes.length;
while (j >= 0) {
--j;
const inputType = inputObjectTypes[j];
if (inputType && (hiddenModels.includes(inputType?.meta?.source) || hiddenModels.find((model) => inputType.name.startsWith(model)))) inputObjectTypes.splice(j, 1);
else {
let k = inputType?.fields?.length ?? 0;
while (k >= 0) {
--k;
const field = inputType?.fields?.[k];
if (field && hiddenFields.includes(field.name)) inputObjectTypes[j].fields.slice(k, 1);
}
}
}
}
//#endregion
export { hideZodInputObjectTypesAndRelatedFields, resolveZodModelsComments };
//# sourceMappingURL=comments-helpers.mjs.map