UNPKG

@intlayer/core

Version:

Includes core Intlayer functions like translation, dictionary, and utility functions shared across multiple packages.

63 lines (61 loc) 2.72 kB
import * as NodeTypes from "@intlayer/types/nodeType"; //#region src/dictionaryManipulator/editDictionaryByKeyPath.ts const editDictionaryByKeyPath = (dictionaryContent, keyPath, newValue) => { let currentValue = dictionaryContent; let parentValue = null; let lastKeys = []; if (keyPath.length === 0) return newValue; try { for (let i = 0; i < keyPath.length; i++) { const keyObj = keyPath[i]; parentValue = currentValue; if (keyObj.type === NodeTypes.OBJECT || keyObj.type === NodeTypes.ARRAY) { lastKeys = [keyObj.key]; if (!currentValue[keyObj.key] || typeof currentValue[keyObj.key] !== "object") currentValue[keyObj.key] = {}; currentValue = currentValue[keyObj.key]; } if (keyObj.type === NodeTypes.TRANSLATION || keyObj.type === NodeTypes.ENUMERATION || keyObj.type === NodeTypes.PLURAL) { lastKeys = [keyObj.type, keyObj.key]; if (!currentValue[keyObj.type] || typeof currentValue[keyObj.type] !== "object") currentValue[keyObj.type] = {}; if (!currentValue[keyObj.type][keyObj.key] || typeof currentValue[keyObj.type][keyObj.key] !== "object") currentValue[keyObj.type][keyObj.key] = {}; currentValue = currentValue[keyObj.type][keyObj.key]; } if (keyObj.type === NodeTypes.ENUMERATION || keyObj.type === NodeTypes.PLURAL || keyObj.type === NodeTypes.CONDITION) { if (keyObj.type !== NodeTypes.ENUMERATION && keyObj.type !== NodeTypes.PLURAL) { lastKeys = [keyObj.type, keyObj.key]; currentValue = currentValue[keyObj.type][keyObj.key]; } } if (keyObj.type === NodeTypes.MARKDOWN || keyObj.type === NodeTypes.HTML || keyObj.type === NodeTypes.INSERTION) { lastKeys = [keyObj.type]; if (currentValue[keyObj.type] == null) currentValue[keyObj.type] = ""; currentValue = currentValue[keyObj.type]; } if (keyObj.type === NodeTypes.FILE) { lastKeys = ["content"]; currentValue = currentValue.content; } if (i === keyPath.length - 1 && parentValue && lastKeys.length > 0) { let target = parentValue; for (const key of lastKeys.slice(0, -1)) target = target[key]; const finalKey = lastKeys[lastKeys.length - 1]; if (typeof newValue === "undefined") if (Array.isArray(target)) { const index = Number(finalKey); if (!Number.isNaN(index) && index >= 0 && index < target.length) target.splice(index, 1); } else delete target[finalKey]; else target[finalKey] = newValue; } } return dictionaryContent; } catch (error) { console.error("Cannot edit dictionary by key path", { dictionaryContent, keyPath, newValue }, error); return dictionaryContent; } }; //#endregion export { editDictionaryByKeyPath }; //# sourceMappingURL=editDictionaryByKeyPath.mjs.map