UNPKG

dynamodb-toolbox

Version:

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

130 lines (129 loc) 6.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseListExtension = void 0; const index_js_1 = require("../../../../../entity/actions/update/symbols/index.js"); const reference_js_1 = require("../../../../../entity/actions/update/updateItemParams/extension/reference.js"); const index_js_2 = require("../../../../../schema/actions/parse/index.js"); const isArray_js_1 = require("../../../../../utils/validation/isArray.js"); const isObject_js_1 = require("../../../../../utils/validation/isObject.js"); const parseListExtension = (schema, input, options) => { const { transform = true, valuePath } = options; if ((0, isObject_js_1.isObject)(input)) { if ((0, index_js_1.isAppending)(input) && input[index_js_1.$APPEND] !== undefined) { const appendedValue = input[index_js_1.$APPEND]; const appendedValuePath = [...(valuePath !== null && valuePath !== void 0 ? valuePath : []), '$APPEND']; if ((0, isArray_js_1.isArray)(appendedValue)) { return { isExtension: true, *extensionParser() { const parsers = appendedValue.map((element, index) => // Should be a simple list of valid elements (not extended) new index_js_2.Parser(schema.elements).start(element, { fill: false, transform, valuePath: [...appendedValuePath, index] })); const parsedValue = { [index_js_1.$APPEND]: parsers.map(parser => parser.next().value) }; if (transform) { yield parsedValue; } else { return parsedValue; } const transformedValue = { [index_js_1.$APPEND]: parsers.map(parser => parser.next().value) }; return transformedValue; } }; } return { isExtension: true, *extensionParser() { const parser = new index_js_2.Parser(schema).start(appendedValue, { fill: false, transform, parseExtension: reference_js_1.parseReferenceExtension, valuePath: appendedValuePath }); const parsedValue = { [index_js_1.$APPEND]: parser.next().value }; if (transform) { yield parsedValue; } else { return parsedValue; } const transformedValue = { [index_js_1.$APPEND]: parser.next().value }; return transformedValue; } }; } if ((0, index_js_1.isPrepending)(input) && input[index_js_1.$PREPEND] !== undefined) { const prependedValue = input[index_js_1.$PREPEND]; const prependedValuePath = [...(valuePath !== null && valuePath !== void 0 ? valuePath : []), '$PREPEND']; if ((0, isArray_js_1.isArray)(prependedValue)) { return { isExtension: true, *extensionParser() { const parsers = prependedValue.map((element, index) => // Should be a simple list of valid elements (not extended) new index_js_2.Parser(schema.elements).start(element, { fill: false, transform, valuePath: [...prependedValuePath, index] })); const parsedValue = { [index_js_1.$PREPEND]: parsers.map(parser => parser.next().value) }; if (transform) { yield parsedValue; } else { return parsedValue; } const transformedValue = { [index_js_1.$PREPEND]: parsers.map(parser => parser.next().value) }; return transformedValue; } }; } return { isExtension: true, *extensionParser() { const parser = new index_js_2.Parser(schema).start(prependedValue, { fill: false, transform, parseExtension: reference_js_1.parseReferenceExtension, valuePath: prependedValuePath }); const parsedValue = { [index_js_1.$PREPEND]: parser.next().value }; if (transform) { yield parsedValue; } else { return parsedValue; } const transformedValue = { [index_js_1.$PREPEND]: parser.next().value }; return transformedValue; } }; } } if ((0, isArray_js_1.isArray)(input)) { return { isExtension: true, *extensionParser() { const parser = new index_js_2.Parser(schema).start(input, { fill: false, transform, valuePath }); const parsedValue = { [index_js_1.$SET]: parser.next().value }; if (transform) { yield parsedValue; } else { return parsedValue; } const transformedValue = { [index_js_1.$SET]: parser.next().value }; return transformedValue; } }; } return { isExtension: false, unextendedInput: input }; }; exports.parseListExtension = parseListExtension;