UNPKG

@forestadmin/datasource-toolkit

Version:
75 lines 7.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const errors_1 = require("../errors"); class SchemaUtils { static throwIfAlreadyDefinedField(schema, fieldName, collectionName) { SchemaUtils.throwIfAccessingFieldFromRelation(fieldName, collectionName); if (schema.fields[fieldName]) { throw new errors_1.AlreadyDefinedFieldError({ fieldName, collectionName }); } } static throwIfMissingField(schema, fieldName, collectionName) { SchemaUtils.throwIfAccessingFieldFromRelation(fieldName, collectionName); if (!schema.fields[fieldName]) { throw new errors_1.MissingFieldError({ fieldName, availableFields: Object.keys(schema.fields), collectionName, }); } } static getField(schema, fieldName, collectionName) { SchemaUtils.throwIfMissingField(schema, fieldName, collectionName); return schema.fields[fieldName]; } static getColumn(schema, fieldName, collectionName) { SchemaUtils.throwIfAccessingFieldFromRelation(fieldName, collectionName); const columns = SchemaUtils.getColumnNames(schema); if (!columns.find(name => name === fieldName)) { throw new errors_1.MissingColumnError({ fieldName, availableFields: columns, collectionName }); } return schema.fields[fieldName]; } static getRelation(schema, relationName, collectionName) { SchemaUtils.throwIfAccessingFieldFromRelation(relationName, collectionName); const relations = Object.keys(schema.fields).filter(name => schema.fields[name].type !== 'Column'); if (!relations.find(name => name === relationName)) { throw new errors_1.MissingRelationError({ fieldName: relationName, availableFields: relations, collectionName, }); } return schema.fields[relationName]; } static getPrimaryKeys(schema) { return Object.keys(schema.fields).filter(name => this.isPrimaryKey(schema, name)); } static isPrimaryKey(schema, fieldName) { const field = this.getField(schema, fieldName); return field.type === 'Column' && field.isPrimaryKey; } static isForeignKey(schema, name) { const field = this.getField(schema, name); return (field.type === 'Column' && Object.values(schema.fields).some(relation => relation.type === 'ManyToOne' && relation.foreignKey === name)); } static getToManyRelation(schema, relationName) { const relationFieldSchema = this.getRelation(schema, relationName); if (relationFieldSchema.type !== 'OneToMany' && relationFieldSchema.type !== 'ManyToMany') { throw new Error(`Relation ${relationName} has invalid type should be one of ` + `${'OneToMany'} or ${'ManyToMany'}.`); } return relationFieldSchema; } static getColumnNames(schema) { return Object.keys(schema.fields).filter(name => SchemaUtils.getField(schema, name).type === 'Column'); } static throwIfAccessingFieldFromRelation(fieldName, collectionName) { if (fieldName.includes(':')) { throw new errors_1.RelationFieldAccessDeniedError({ fieldName, collectionName }); } } } exports.default = SchemaUtils; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQU1tQjtBQVVuQixNQUFxQixXQUFXO0lBQzlCLE1BQU0sQ0FBQywwQkFBMEIsQ0FDL0IsTUFBd0IsRUFDeEIsU0FBaUIsRUFDakIsY0FBdUI7UUFFdkIsV0FBVyxDQUFDLGlDQUFpQyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV6RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLGlDQUF3QixDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLG1CQUFtQixDQUN4QixNQUF3QixFQUN4QixTQUFpQixFQUNqQixjQUF1QjtRQUV2QixXQUFXLENBQUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSwwQkFBaUIsQ0FBQztnQkFDMUIsU0FBUztnQkFDVCxlQUFlLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMzQyxjQUFjO2FBQ2YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FDYixNQUF3QixFQUN4QixTQUFpQixFQUNqQixjQUF1QjtRQUV2QixXQUFXLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVuRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQ2QsTUFBd0IsRUFDeEIsU0FBaUIs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