@forestadmin/datasource-toolkit
Version:
75 lines • 7.62 kB
JavaScript
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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
;