@cloudbase/js-sdk
Version:
cloudbase javascript sdk
143 lines (142 loc) • 5.58 kB
JavaScript
;
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;