@orbit/records
Version:
A flexible data access and synchronization layer.
75 lines • 7.27 kB
JavaScript
import { Exception } from '@orbit/core';
import { formatValidationDescription } from '@orbit/validators';
/**
* An error occured related to the schema.
*/
export class SchemaError extends Exception {
constructor(description) {
super(`Schema: ${description}`);
}
}
/**
* A validation failed.
*/
export class ValidationError extends Exception {
constructor(description, issues) {
super(formatValidationDescription(description, issues));
this.issues = issues;
}
}
/**
* A model is not defined in the schema.
*/
export class ModelNotDefined extends SchemaError {
constructor(type) {
super(`Model '${type}' not defined.`);
}
}
/**
* An attribute definition could not be found in the model definition.
*/
export class AttributeNotDefined extends SchemaError {
constructor(type, attribute) {
super(`Attribute '${attribute}' not defined for model '${type}'.`);
}
}
/**
* A key definition could not be found in the model definition.
*/
export class KeyNotDefined extends SchemaError {
constructor(type, key) {
super(`Key '${key}' not defined for model '${type}'.`);
}
}
/**
* A relationship definition could not be found in the model definition.
*/
export class RelationshipNotDefined extends SchemaError {
constructor(type, relationship) {
super(`Relationship '${relationship}' not defined for model '${type}'.`);
}
}
/**
* An error occurred related to a particular record.
*/
export class RecordException extends Exception {
constructor(description, type, id, field) {
let specifier = `${type}:${id}`;
if (field) {
specifier = `${specifier}/${field}`;
}
super(`${description}: ${specifier}`);
this.type = type;
this.id = id;
this.field = field;
}
}
/**
* A record could not be found.
*/
export class RecordNotFoundException extends RecordException {
constructor(type, id) {
super('Record not found', type, id);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLWV4Y2VwdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVjb3JkLWV4Y2VwdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsMkJBQTJCLEVBRTVCLE1BQU0sbUJBQW1CLENBQUM7QUFFM0I7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLFNBQVM7SUFDeEMsWUFBWSxXQUFtQjtRQUM3QixLQUFLLENBQUMsV0FBVyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsU0FBUztJQUc1QyxZQUFZLFdBQW1CLEVBQUUsTUFBMEI7UUFDekQsS0FBSyxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQUM5QyxZQUFZLElBQVk7UUFDdEIsS0FBSyxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQVc7SUFDbEQsWUFBWSxJQUFZLEVBQUUsU0FBaUI7UUFDekMsS0FBSyxDQUFDLGNBQWMsU0FBUyw0QkFBNEIsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsV0FBVztJQUM1QyxZQUFZLElBQVksRUFBRSxHQUFXO1FBQ25DLEtBQUssQ0FBQyxRQUFRLEdBQUcsNEJBQTRCLElBQUksSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsV0FBVztJQUNyRCxZQUFZLElBQVksRUFBRSxZQUFvQjtRQUM1QyxLQUFLLENBQUMsaUJBQWlCLFlBQVksNEJBQTRCLElBQUksSUFBSSxDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGVBQWdCLFNBQVEsU0FBUztJQUtyRCxZQUFZLFdBQW1CLEVBQUUsSUFBWSxFQUFFLEVBQVUsRUFBRSxLQUFjO1FBQ3ZFLElBQUksU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBRWhDLElBQUksS0FBSyxFQUFFO1lBQ1QsU0FBUyxHQUFHLEdBQUcsU0FBUyxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ3JDO1FBRUQsS0FBSyxDQUFDLEdBQUcsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxlQUFlO0lBQzFELFlBQVksSUFBWSxFQUFFLEVBQVU7UUFDbEMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFeGNlcHRpb24gfSBmcm9tICdAb3JiaXQvY29yZSc7XG5pbXBvcnQge1xuICBmb3JtYXRWYWxpZGF0aW9uRGVzY3JpcHRpb24sXG4gIFZhbGlkYXRpb25Jc3N1ZVxufSBmcm9tICdAb3JiaXQvdmFsaWRhdG9ycyc7XG5cbi8qKlxuICogQW4gZXJyb3Igb2NjdXJlZCByZWxhdGVkIHRvIHRoZSBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFFcnJvciBleHRlbmRzIEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgICBzdXBlcihgU2NoZW1hOiAke2Rlc2NyaXB0aW9ufWApO1xuICB9XG59XG5cbi8qKlxuICogQSB2YWxpZGF0aW9uIGZhaWxlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEV4Y2VwdGlvbiB7XG4gIHB1YmxpYyBpc3N1ZXM/OiBWYWxpZGF0aW9uSXNzdWVbXTtcblxuICBjb25zdHJ1Y3RvcihkZXNjcmlwdGlvbjogc3RyaW5nLCBpc3N1ZXM/OiBWYWxpZGF0aW9uSXNzdWVbXSkge1xuICAgIHN1cGVyKGZvcm1hdFZhbGlkYXRpb25EZXNjcmlwdGlvbihkZXNjcmlwdGlvbiwgaXNzdWVzKSk7XG4gICAgdGhpcy5pc3N1ZXMgPSBpc3N1ZXM7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG1vZGVsIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RlbE5vdERlZmluZWQgZXh0ZW5kcyBTY2hlbWFFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZykge1xuICAgIHN1cGVyKGBNb2RlbCAnJHt0eXBlfScgbm90IGRlZmluZWQuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIG1vZGVsIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVOb3REZWZpbmVkIGV4dGVuZHMgU2NoZW1hRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIGF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYEF0dHJpYnV0ZSAnJHthdHRyaWJ1dGV9JyBub3QgZGVmaW5lZCBmb3IgbW9kZWwgJyR7dHlwZX0nLmApO1xuICB9XG59XG5cbi8qKlxuICogQSBrZXkgZGVmaW5pdGlvbiBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIG1vZGVsIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBLZXlOb3REZWZpbmVkIGV4dGVuZHMgU2NoZW1hRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYEtleSAnJHtrZXl9JyBub3QgZGVmaW5lZCBmb3IgbW9kZWwgJyR7dHlwZX0nLmApO1xuICB9XG59XG5cbi8qKlxuICogQSByZWxhdGlvbnNoaXAgZGVmaW5pdGlvbiBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIG1vZGVsIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWxhdGlvbnNoaXBOb3REZWZpbmVkIGV4dGVuZHMgU2NoZW1hRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcsIHJlbGF0aW9uc2hpcDogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFJlbGF0aW9uc2hpcCAnJHtyZWxhdGlvbnNoaXB9JyBub3QgZGVmaW5lZCBmb3IgbW9kZWwgJyR7dHlwZX0nLmApO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3Igb2NjdXJyZWQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgcmVjb3JkLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVjb3JkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHtcbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWVsZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihkZXNjcmlwdGlvbjogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgbGV0IHNwZWNpZmllciA9IGAke3R5cGV9OiR7aWR9YDtcblxuICAgIGlmIChmaWVsZCkge1xuICAgICAgc3BlY2lmaWVyID0gYCR7c3BlY2lmaWVyfS8ke2ZpZWxkfWA7XG4gICAgfVxuXG4gICAgc3VwZXIoYCR7ZGVzY3JpcHRpb259OiAke3NwZWNpZmllcn1gKTtcblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuZmllbGQgPSBmaWVsZDtcbiAgfVxufVxuXG4vKipcbiAqIEEgcmVjb3JkIGNvdWxkIG5vdCBiZSBmb3VuZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZE5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgUmVjb3JkRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ1JlY29yZCBub3QgZm91bmQnLCB0eXBlLCBpZCk7XG4gIH1cbn1cbiJdfQ==