dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
52 lines (51 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ListSchema = void 0;
const index_js_1 = require("../../errors/index.js");
const checkSchemaProps_js_1 = require("../utils/checkSchemaProps.js");
const hasDefinedDefault_js_1 = require("../utils/hasDefinedDefault.js");
class ListSchema {
constructor(elements, props) {
this.type = 'list';
this.elements = elements;
this.props = props;
}
get checked() {
return Object.isFrozen(this.props);
}
check(path) {
if (this.checked) {
return;
}
(0, checkSchemaProps_js_1.checkSchemaProps)(this.props, path);
const { required, hidden, savedAs } = this.elements.props;
if (required !== undefined && required !== 'atLeastOnce' && required !== 'always') {
throw new index_js_1.DynamoDBToolboxError('schema.list.optionalElements', {
message: `Invalid list elements${path !== undefined ? ` at path '${path}'` : ''}: List elements must be required.`,
path
});
}
if (hidden !== undefined && hidden !== false) {
throw new index_js_1.DynamoDBToolboxError('schema.list.hiddenElements', {
message: `Invalid list elements${path !== undefined ? ` at path '${path}'` : ''}: List elements cannot be hidden.`,
path
});
}
if (savedAs !== undefined) {
throw new index_js_1.DynamoDBToolboxError('schema.list.savedAsElements', {
message: `Invalid list elements at path ${path !== undefined ? ` at path '${path}'` : ''}: List elements cannot be renamed (have savedAs prop).`,
path
});
}
if ((0, hasDefinedDefault_js_1.hasDefinedDefault)(this.elements)) {
throw new index_js_1.DynamoDBToolboxError('schema.list.defaultedElements', {
message: `Invalid list elements${path !== undefined ? ` at path '${path}'` : ''}: List elements cannot have default or linked values.`,
path
});
}
this.elements.check(`${path !== null && path !== void 0 ? path : ''}[n]`);
Object.freeze(this.props);
Object.freeze(this.elements);
}
}
exports.ListSchema = ListSchema;