UNPKG

@premieroctet/next-admin-generator-prisma

Version:
98 lines (97 loc) 4.3 kB
"use strict"; 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;