UNPKG

dynamodb-toolbox

Version:

Lightweight and type-safe query builder for DynamoDB and TypeScript.

58 lines (57 loc) 2.88 kB
"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;