UNPKG

dynamodb-toolbox

Version:

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

26 lines (25 loc) 1.52 kB
import { DynamoDBToolboxError } from '../errors/dynamoDBToolboxError.js'; import { isBoolean } from '../utils/validation/isBoolean.js'; export const parseEntityAttrFilterOption = (entityAttrFilter, entities, filters) => { if (!isBoolean(entityAttrFilter)) { throw new DynamoDBToolboxError('options.invalidEntityAttrFilterOption', { message: `Invalid 'entityAttrFilter' option: '${String(entityAttrFilter)}'. 'entityAttrFilter' must be a boolean.`, payload: { entityAttrFilter } }); } const entityWithoutEntityAttr = entities.find(entity => !entity.entityAttribute); if (entityAttrFilter && entityWithoutEntityAttr !== undefined) { throw new DynamoDBToolboxError('options.invalidEntityAttrFilterOption', { message: `Invalid 'entityAttrFilter' option: '${String(entityAttrFilter)}'. 'entityAttrFilter' cannot be true as ${entityWithoutEntityAttr.entityName} entity has no entity attribute.`, payload: { entityAttrFilter } }); } const entitiesWithFilter = entities.filter(entity => filters[entity.entityName] !== undefined); if (!entityAttrFilter && entitiesWithFilter.length > 1) { throw new DynamoDBToolboxError('options.invalidEntityAttrFilterOption', { message: `Invalid 'entityAttrFilter' option: '${String(entityAttrFilter)}'. 'entityAttrFilter' must be true when applying multiple filters.`, payload: { entityAttrFilter } }); } return entityAttrFilter; };