UNPKG

@cloudbase/js-sdk

Version:
143 lines (142 loc) 5.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UpdateSerializer = void 0; var update_1 = require("../commands/update"); var symbol_1 = require("../helper/symbol"); var type_1 = require("../utils/type"); var operator_map_1 = require("../operator-map"); var common_1 = require("./common"); var UpdateSerializer = (function () { function UpdateSerializer() { } UpdateSerializer.encode = function (query) { var stringifier = new UpdateSerializer(); return stringifier.encodeUpdate(query); }; UpdateSerializer.prototype.encodeUpdate = function (query) { if ((0, update_1.isUpdateCommand)(query)) { return this.encodeUpdateCommand(query); } else if ((0, type_1.getType)(query) === 'object') { return this.encodeUpdateObject(query); } else { return query; } }; UpdateSerializer.prototype.encodeUpdateCommand = function (query) { if (query.fieldName === symbol_1.SYMBOL_UNSET_FIELD_NAME) { throw new Error('Cannot encode a comparison command with unset field name'); } switch (query.operator) { case update_1.UPDATE_COMMANDS_LITERAL.PUSH: case update_1.UPDATE_COMMANDS_LITERAL.PULL: case update_1.UPDATE_COMMANDS_LITERAL.PULL_ALL: case update_1.UPDATE_COMMANDS_LITERAL.POP: case update_1.UPDATE_COMMANDS_LITERAL.SHIFT: case update_1.UPDATE_COMMANDS_LITERAL.UNSHIFT: case update_1.UPDATE_COMMANDS_LITERAL.ADD_TO_SET: { return this.encodeArrayUpdateCommand(query); } default: { return this.encodeFieldUpdateCommand(query); } } }; UpdateSerializer.prototype.encodeFieldUpdateCommand = function (query) { var _a, _b, _c, _d; var $op = (0, operator_map_1.operatorToString)(query.operator); switch (query.operator) { case update_1.UPDATE_COMMANDS_LITERAL.REMOVE: { return _a = {}, _a[$op] = (_b = {}, _b[query.fieldName] = '', _b), _a; } default: { return _c = {}, _c[$op] = (_d = {}, _d[query.fieldName] = query.operands[0], _d), _c; } } }; UpdateSerializer.prototype.encodeArrayUpdateCommand = function (query) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; var $op = (0, operator_map_1.operatorToString)(query.operator); switch (query.operator) { case update_1.UPDATE_COMMANDS_LITERAL.PUSH: { var modifiers = void 0; if ((0, type_1.isArray)(query.operands)) { modifiers = { $each: query.operands.map(common_1.encodeInternalDataType) }; } else { modifiers = query.operands; } return _a = {}, _a[$op] = (_b = {}, _b[query.fieldName] = modifiers, _b), _a; } case update_1.UPDATE_COMMANDS_LITERAL.UNSHIFT: { var modifiers = { $each: query.operands.map(common_1.encodeInternalDataType), $position: 0 }; return _c = {}, _c[$op] = (_d = {}, _d[query.fieldName] = modifiers, _d), _c; } case update_1.UPDATE_COMMANDS_LITERAL.POP: { return _e = {}, _e[$op] = (_f = {}, _f[query.fieldName] = 1, _f), _e; } case update_1.UPDATE_COMMANDS_LITERAL.SHIFT: { return _g = {}, _g[$op] = (_h = {}, _h[query.fieldName] = -1, _h), _g; } default: { return _j = {}, _j[$op] = (_k = {}, _k[query.fieldName] = (0, common_1.encodeInternalDataType)(query.operands), _k), _j; } } }; UpdateSerializer.prototype.encodeUpdateObject = function (query) { var flattened = (0, common_1.flattenQueryObject)(query); for (var key in flattened) { if (/^\$/.test(key)) continue; var val = flattened[key]; if ((0, update_1.isUpdateCommand)(val)) { flattened[key] = val._setFieldName(key); var condition = this.encodeUpdateCommand(flattened[key]); (0, common_1.mergeConditionAfterEncode)(flattened, condition, key); } else { flattened[key] = val = (0, common_1.encodeInternalDataType)(val); var $setCommand = new update_1.UpdateCommand(update_1.UPDATE_COMMANDS_LITERAL.SET, [val], key); var condition = this.encodeUpdateCommand($setCommand); (0, common_1.mergeConditionAfterEncode)(flattened, condition, key); } } return flattened; }; return UpdateSerializer; }()); exports.UpdateSerializer = UpdateSerializer;