@premieroctet/next-admin-generator-prisma
Version:
Prisma generator for Next-Admin
98 lines (97 loc) • 4.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.insertDmmfData = exports.getRelationData = exports.getModelByName = void 0;
var next_admin_json_schema_1 = require("@premieroctet/next-admin-json-schema");
var isFieldDisabled = function (field) {
var isDisabled = field.isReadOnly || field.isGenerated || field.isUpdatedAt || field.isId;
var isDateTime = field.type === "DateTime";
var isCreatedAt = isDateTime &&
field.hasDefaultValue &&
typeof field.default === "object" &&
"name" in field.default &&
field.default.name === "now";
return isDisabled || isCreatedAt;
};
var getModelByName = function (dmmf, modelName) {
return dmmf.datamodel.models.find(function (model) { return model.name === modelName; });
};
exports.getModelByName = getModelByName;
var getRelationData = function (dmmf, field, modelName) {
var _a, _b;
var hasRelation = !!field.relationName;
if (!hasRelation) {
return undefined;
}
var relationModel = (0, exports.getModelByName)(dmmf, field.type);
if (!relationModel) {
return undefined;
}
var oppositeModelRelation = relationModel.fields.find(function (f) { return f.relationName === field.relationName && f.type === modelName; });
var from = oppositeModelRelation === null || oppositeModelRelation === void 0 ? void 0 : oppositeModelRelation.name;
var to = field.name;
return {
$ref: "#/definitions/".concat(field.type),
fromField: from,
fromFieldDbName: (_a = field.relationFromFields) === null || _a === void 0 ? void 0 : _a[0],
toField: to,
toFieldDbName: (_b = field.relationToFields) === null || _b === void 0 ? void 0 : _b[0],
};
};
exports.getRelationData = getRelationData;
var insertDmmfData = function (dmmf, jsonSchema) {
var models = jsonSchema.definitions;
var enums = dmmf.datamodel.enums;
enums.forEach(function (enumType) {
var enumValues = enumType.values;
models[enumType.name] = {
type: "string",
enum: enumValues.map(function (value) { return value.name; }),
};
});
Object.entries(models).forEach(function (_a) {
var modelName = _a[0], model = _a[1];
var properties = model.properties;
var dmmfModel = dmmf.datamodel.models.find(function (m) { return m.name === modelName; });
if (!dmmfModel || !properties) {
return;
}
var fields = dmmfModel.fields;
if (dmmfModel.primaryKey) {
(0, next_admin_json_schema_1.injectIntoJsonSchemaDefinition)(model, {
primaryKeyField: {
name: dmmfModel.primaryKey.fields.join("_"),
fields: dmmfModel.primaryKey.fields,
},
});
}
Object.entries(properties).forEach(function (_a) {
var _b;
var propertyName = _a[0], property = _a[1];
var dmmfField = fields.find(function (f) { return f.name === propertyName; });
if (!dmmfField || typeof property !== "object") {
return;
}
var modelProperty = model.properties[propertyName];
if (typeof modelProperty !== "boolean") {
(0, next_admin_json_schema_1.injectIntoJsonSchemaDefinition)(model.properties[propertyName], {
primaryKey: dmmfField.isId,
kind: dmmfField.kind,
type: dmmfField.type,
disabled: isFieldDisabled(dmmfField),
required: dmmfField.isRequired,
isList: dmmfField.isList,
enum: dmmfField.kind === "enum"
? { $ref: "#/definitions/".concat(dmmfField.type) }
: undefined,
relation: (0, exports.getRelationData)(dmmf, dmmfField, dmmfModel.name),
});
if (dmmfField.kind === "object" &&
((_b = model.properties[propertyName]) === null || _b === void 0 ? void 0 : _b.anyOf)) {
delete model.properties[propertyName].anyOf;
}
}
});
});
return jsonSchema;
};
exports.insertDmmfData = insertDmmfData;