{"version":3,"file":"editDictionaryByKeyPath.cjs","names":["NodeTypes"],"sources":["../../../src/dictionaryManipulator/editDictionaryByKeyPath.ts"],"sourcesContent":["import type { ContentNode } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\n\ntype LastKeyType = string | number;\n\nexport const editDictionaryByKeyPath = (\n  dictionaryContent: ContentNode,\n  keyPath: KeyPath[],\n  newValue: ContentNode\n): ContentNode => {\n  let currentValue: any = dictionaryContent;\n  let parentValue: any = null;\n  let lastKeys: LastKeyType[] = [];\n\n  if (keyPath.length === 0) {\n    return newValue;\n  }\n\n  try {\n    for (let i = 0; i < keyPath.length; i++) {\n      const keyObj = keyPath[i];\n      parentValue = currentValue;\n\n      if (keyObj.type === NodeTypes.OBJECT || keyObj.type === NodeTypes.ARRAY) {\n        lastKeys = [keyObj.key];\n\n        if (\n          !currentValue[keyObj.key] ||\n          typeof currentValue[keyObj.key] !== 'object'\n        ) {\n          currentValue[keyObj.key] = {};\n        }\n        currentValue = currentValue[keyObj.key];\n      }\n\n      if (\n        keyObj.type === NodeTypes.TRANSLATION ||\n        keyObj.type === NodeTypes.ENUMERATION ||\n        keyObj.type === NodeTypes.PLURAL\n      ) {\n        lastKeys = [keyObj.type, keyObj.key];\n\n        if (\n          !currentValue[keyObj.type] ||\n          typeof currentValue[keyObj.type] !== 'object'\n        ) {\n          currentValue[keyObj.type] = {};\n        }\n\n        if (\n          !currentValue[keyObj.type][keyObj.key] ||\n          typeof currentValue[keyObj.type][keyObj.key] !== 'object'\n        ) {\n          currentValue[keyObj.type][keyObj.key] = {};\n        }\n        currentValue = currentValue[keyObj.type][keyObj.key];\n      }\n\n      if (\n        keyObj.type === NodeTypes.ENUMERATION ||\n        keyObj.type === NodeTypes.PLURAL ||\n        keyObj.type === NodeTypes.CONDITION\n      ) {\n        // Note: Logic above already handles Enumeration/Plural, ensure no duplication in your actual file\n        // or keep the specific block if your logic differs.\n        // The important part is below in the final update block.\n\n        // Assuming this block runs for Condition/Gender/etc:\n\n        if (\n          keyObj.type !== NodeTypes.ENUMERATION &&\n          keyObj.type !== NodeTypes.PLURAL\n        ) {\n          lastKeys = [keyObj.type, keyObj.key];\n          currentValue = currentValue[keyObj.type][keyObj.key];\n        }\n      }\n\n      if (\n        keyObj.type === NodeTypes.MARKDOWN ||\n        keyObj.type === NodeTypes.HTML ||\n        keyObj.type === NodeTypes.INSERTION\n      ) {\n        lastKeys = [keyObj.type];\n\n        if (currentValue[keyObj.type] == null) {\n          currentValue[keyObj.type] = '';\n        }\n        currentValue = currentValue[keyObj.type];\n      }\n\n      if (keyObj.type === NodeTypes.FILE) {\n        lastKeys = ['content'];\n        currentValue = currentValue.content;\n      }\n\n      // Only update the value when processing the last key in the keyPath.\n\n      if (i === keyPath.length - 1 && parentValue && lastKeys.length > 0) {\n        let target = parentValue;\n\n        // Drill down to the container holding the value to be changed\n        for (const key of lastKeys.slice(0, -1)) {\n          target = target[key];\n        }\n\n        const finalKey = lastKeys[lastKeys.length - 1];\n\n        if (typeof newValue === 'undefined') {\n          // Use splice for arrays to re-index the list, use delete for objects\n\n          if (Array.isArray(target)) {\n            const index = Number(finalKey);\n\n            if (!Number.isNaN(index) && index >= 0 && index < target.length) {\n              target.splice(index, 1);\n            }\n          } else {\n            delete target[finalKey];\n          }\n        } else {\n          target[finalKey] = newValue;\n        }\n      }\n    }\n\n    return dictionaryContent;\n  } catch (error) {\n    console.error(\n      'Cannot edit dictionary by key path',\n      { dictionaryContent, keyPath, newValue },\n      error\n    );\n    return dictionaryContent;\n  }\n};\n"],"mappings":";;;;;;AAMA,MAAa,2BACX,mBACA,SACA,aACgB;CAChB,IAAI,eAAoB;CACxB,IAAI,cAAmB;CACvB,IAAI,WAA0B,EAAE;AAEhC,KAAI,QAAQ,WAAW,EACrB,QAAO;AAGT,KAAI;AACF,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,MAAM,SAAS,QAAQ;AACvB,iBAAc;AAEd,OAAI,OAAO,SAASA,yBAAU,UAAU,OAAO,SAASA,yBAAU,OAAO;AACvE,eAAW,CAAC,OAAO,IAAI;AAEvB,QACE,CAAC,aAAa,OAAO,QACrB,OAAO,aAAa,OAAO,SAAS,SAEpC,cAAa,OAAO,OAAO,EAAE;AAE/B,mBAAe,aAAa,OAAO;;AAGrC,OACE,OAAO,SAASA,yBAAU,eAC1B,OAAO,SAASA,yBAAU,eAC1B,OAAO,SAASA,yBAAU,QAC1B;AACA,eAAW,CAAC,OAAO,MAAM,OAAO,IAAI;AAEpC,QACE,CAAC,aAAa,OAAO,SACrB,OAAO,aAAa,OAAO,UAAU,SAErC,cAAa,OAAO,QAAQ,EAAE;AAGhC,QACE,CAAC,aAAa,OAAO,MAAM,OAAO,QAClC,OAAO,aAAa,OAAO,MAAM,OAAO,SAAS,SAEjD,cAAa,OAAO,MAAM,OAAO,OAAO,EAAE;AAE5C,mBAAe,aAAa,OAAO,MAAM,OAAO;;AAGlD,OACE,OAAO,SAASA,yBAAU,eAC1B,OAAO,SAASA,yBAAU,UAC1B,OAAO,SAASA,yBAAU,WAQ1B;QACE,OAAO,SAASA,yBAAU,eAC1B,OAAO,SAASA,yBAAU,QAC1B;AACA,gBAAW,CAAC,OAAO,MAAM,OAAO,IAAI;AACpC,oBAAe,aAAa,OAAO,MAAM,OAAO;;;AAIpD,OACE,OAAO,SAASA,yBAAU,YAC1B,OAAO,SAASA,yBAAU,QAC1B,OAAO,SAASA,yBAAU,WAC1B;AACA,eAAW,CAAC,OAAO,KAAK;AAExB,QAAI,aAAa,OAAO,SAAS,KAC/B,cAAa,OAAO,QAAQ;AAE9B,mBAAe,aAAa,OAAO;;AAGrC,OAAI,OAAO,SAASA,yBAAU,MAAM;AAClC,eAAW,CAAC,UAAU;AACtB,mBAAe,aAAa;;AAK9B,OAAI,MAAM,QAAQ,SAAS,KAAK,eAAe,SAAS,SAAS,GAAG;IAClE,IAAI,SAAS;AAGb,SAAK,MAAM,OAAO,SAAS,MAAM,GAAG,GAAG,CACrC,UAAS,OAAO;IAGlB,MAAM,WAAW,SAAS,SAAS,SAAS;AAE5C,QAAI,OAAO,aAAa,YAGtB,KAAI,MAAM,QAAQ,OAAO,EAAE;KACzB,MAAM,QAAQ,OAAO,SAAS;AAE9B,SAAI,CAAC,OAAO,MAAM,MAAM,IAAI,SAAS,KAAK,QAAQ,OAAO,OACvD,QAAO,OAAO,OAAO,EAAE;UAGzB,QAAO,OAAO;QAGhB,QAAO,YAAY;;;AAKzB,SAAO;UACA,OAAO;AACd,UAAQ,MACN,sCACA;GAAE;GAAmB;GAAS;GAAU,EACxC,MACD;AACD,SAAO"}