dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
130 lines (129 loc) • 6.07 kB
JavaScript
"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;