attranslate
Version:
Text Translator for Websites and Apps
41 lines (40 loc) • 1.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.unflatten = exports.NESTED_JSON_SEPARATOR = void 0;
const tslib_1 = require("tslib");
const lodash_1 = (0, tslib_1.__importDefault)(require("lodash"));
exports.NESTED_JSON_SEPARATOR = ".";
function replaceAll(string, search, replace) {
return string.split(search).join(replace);
}
const escapeRules = {
".": "\\\\|",
"[": "\\\\(",
"]": "\\\\)",
};
function unescapeKey(str) {
let targetStr = str;
for (const replace of Object.keys(escapeRules)) {
const search = escapeRules[replace];
targetStr = replaceAll(targetStr, search, replace);
}
return targetStr;
}
function unescapeObject(obj) {
const targetObj = {};
for (const key of Object.keys(obj)) {
let value = obj[key];
if (typeof value === "object" && value !== null) {
value = unescapeObject(value);
}
targetObj[unescapeKey(key)] = value;
}
return targetObj;
}
function unflatten(params) {
const rawUnflattened = lodash_1.default.reduce(params, function (result, value, key) {
return lodash_1.default.set(result, key, value);
}, {});
return unescapeObject(rawUnflattened);
}
exports.unflatten = unflatten;