dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
58 lines (57 loc) • 2.88 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessPattern = exports.IAccessPattern = void 0;
const index_js_1 = require("../../../entity/index.js");
const dynamoDBToolboxError_js_1 = require("../../../errors/dynamoDBToolboxError.js");
const parser_js_1 = require("../../../schema/actions/parse/parser.js");
const queryCommand_js_1 = require("../../../table/actions/query/queryCommand.js");
const constants_js_1 = require("./constants.js");
class IAccessPattern extends index_js_1.EntityAction {
constructor(entity, schema, pattern, options = {}, meta = {}) {
super(entity);
this[constants_js_1.$schema] = schema;
this[constants_js_1.$pattern] = pattern;
this[constants_js_1.$options] = options;
this[constants_js_1.$meta] = meta;
}
// IQueryCommand is needed for contravariance
query(input) {
const schema = this[constants_js_1.$schema];
const transformedInput = schema !== undefined
? new parser_js_1.Parser(schema).parse(input)
: undefined;
const pattern = this[constants_js_1.$pattern];
if (pattern === undefined) {
throw new dynamoDBToolboxError_js_1.DynamoDBToolboxError('actions.incompleteAction', {
message: 'AccessPattern incomplete: Missing "pattern" property'
});
}
const defaultOptions = this[constants_js_1.$options];
const { options: contextOptions, ...query } = pattern(transformedInput);
return new queryCommand_js_1.QueryCommand(this.entity.table, [this.entity], query, { ...defaultOptions, ...contextOptions });
}
}
exports.IAccessPattern = IAccessPattern;
IAccessPattern.actionName = 'access-pattern';
class AccessPattern extends IAccessPattern {
constructor(entity, schema, pattern, options = {}, meta = {}) {
super(entity, schema, pattern, options, meta);
}
schema(nextSchema) {
return new AccessPattern(this.entity, nextSchema, this[constants_js_1.$pattern], this[constants_js_1.$options], this[constants_js_1.$meta]);
}
pattern(nextPattern) {
return new AccessPattern(this.entity, this[constants_js_1.$schema],
/**
* @debt v3 "put query in a 'query' key so it's not polluted by the options"
*/
nextPattern, this[constants_js_1.$options], this[constants_js_1.$meta]);
}
options(nextOptions) {
return new AccessPattern(this.entity, this[constants_js_1.$schema], this[constants_js_1.$pattern], typeof nextOptions === 'function' ? nextOptions(this[constants_js_1.$options]) : nextOptions, this[constants_js_1.$meta]);
}
meta(nextMeta) {
return new AccessPattern(this.entity, this[constants_js_1.$schema], this[constants_js_1.$pattern], this[constants_js_1.$options], nextMeta);
}
}
exports.AccessPattern = AccessPattern;