{"version":3,"sources":["../../../src/dictionaryManipulator/editDictionaryByKeyPath.ts"],"sourcesContent":["import { type KeyPath, NodeType } from '../types';\nimport type { ContentNode } from '../types/dictionary';\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  for (let i = 0; i < keyPath.length; i++) {\n    const keyObj = keyPath[i];\n    parentValue = currentValue;\n\n    if (keyObj.type === NodeType.Object || keyObj.type === NodeType.Array) {\n      lastKeys = [keyObj.key];\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 === NodeType.Translation ||\n      keyObj.type === NodeType.Enumeration\n    ) {\n      lastKeys = [keyObj.type, keyObj.key];\n      if (\n        !currentValue[keyObj.type] ||\n        typeof currentValue[keyObj.type] !== 'object'\n      ) {\n        currentValue[keyObj.type] = {};\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 === NodeType.Enumeration ||\n      keyObj.type === NodeType.Condition\n    ) {\n      lastKeys = [keyObj.type, keyObj.key];\n      if (\n        !currentValue[keyObj.type] ||\n        typeof currentValue[keyObj.type] !== 'object'\n      ) {\n        currentValue[keyObj.type] = {};\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 === NodeType.Markdown ||\n      keyObj.type === NodeType.Insertion\n    ) {\n      lastKeys = [keyObj.type];\n      if (\n        !currentValue[keyObj.type] ||\n        typeof currentValue[keyObj.type] !== 'object'\n      ) {\n        currentValue[keyObj.type] = '';\n      }\n      currentValue = currentValue[keyObj.type];\n    }\n\n    if (keyObj.type === NodeType.File) {\n      lastKeys = ['content'];\n\n      currentValue = currentValue['content'];\n    }\n\n    if (keyObj.type) {\n      // No treated TypedNode\n\n      currentValue = currentValue;\n    }\n\n    // Only update the value when processing the last key in the keyPath.\n    if (i === keyPath.length - 1 && parentValue && lastKeys.length > 0) {\n      let target = parentValue;\n      // Drill down if lastKeys contains more than one key.\n      for (const key of lastKeys.slice(0, -1)) {\n        target = target[key];\n      }\n      if (typeof newValue === 'undefined') {\n        delete target[lastKeys[lastKeys.length - 1]];\n      } else {\n        target[lastKeys[lastKeys.length - 1]] = newValue;\n      }\n    }\n  }\n\n  return dictionaryContent;\n};\n"],"mappings":"AAAA,SAAuB,gBAAgB;AAKhC,MAAM,0BAA0B,CACrC,mBACA,SACA,aACgB;AAChB,MAAI,eAAoB;AACxB,MAAI,cAAmB;AACvB,MAAI,WAA0B,CAAC;AAE/B,MAAI,QAAQ,WAAW,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,SAAS,QAAQ,CAAC;AACxB,kBAAc;AAEd,QAAI,OAAO,SAAS,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO;AACrE,iBAAW,CAAC,OAAO,GAAG;AACtB,UACE,CAAC,aAAa,OAAO,GAAG,KACxB,OAAO,aAAa,OAAO,GAAG,MAAM,UACpC;AACA,qBAAa,OAAO,GAAG,IAAI,CAAC;AAAA,MAC9B;AACA,qBAAe,aAAa,OAAO,GAAG;AAAA,IACxC;AAEA,QACE,OAAO,SAAS,SAAS,eACzB,OAAO,SAAS,SAAS,aACzB;AACA,iBAAW,CAAC,OAAO,MAAM,OAAO,GAAG;AACnC,UACE,CAAC,aAAa,OAAO,IAAI,KACzB,OAAO,aAAa,OAAO,IAAI,MAAM,UACrC;AACA,qBAAa,OAAO,IAAI,IAAI,CAAC;AAAA,MAC/B;AACA,UACE,CAAC,aAAa,OAAO,IAAI,EAAE,OAAO,GAAG,KACrC,OAAO,aAAa,OAAO,IAAI,EAAE,OAAO,GAAG,MAAM,UACjD;AACA,qBAAa,OAAO,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;AAAA,MAC3C;AACA,qBAAe,aAAa,OAAO,IAAI,EAAE,OAAO,GAAG;AAAA,IACrD;AAEA,QACE,OAAO,SAAS,SAAS,eACzB,OAAO,SAAS,SAAS,WACzB;AACA,iBAAW,CAAC,OAAO,MAAM,OAAO,GAAG;AACnC,UACE,CAAC,aAAa,OAAO,IAAI,KACzB,OAAO,aAAa,OAAO,IAAI,MAAM,UACrC;AACA,qBAAa,OAAO,IAAI,IAAI,CAAC;AAAA,MAC/B;AACA,UACE,CAAC,aAAa,OAAO,IAAI,EAAE,OAAO,GAAG,KACrC,OAAO,aAAa,OAAO,IAAI,EAAE,OAAO,GAAG,MAAM,UACjD;AACA,qBAAa,OAAO,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;AAAA,MAC3C;AACA,qBAAe,aAAa,OAAO,IAAI,EAAE,OAAO,GAAG;AAAA,IACrD;AAEA,QACE,OAAO,SAAS,SAAS,YACzB,OAAO,SAAS,SAAS,WACzB;AACA,iBAAW,CAAC,OAAO,IAAI;AACvB,UACE,CAAC,aAAa,OAAO,IAAI,KACzB,OAAO,aAAa,OAAO,IAAI,MAAM,UACrC;AACA,qBAAa,OAAO,IAAI,IAAI;AAAA,MAC9B;AACA,qBAAe,aAAa,OAAO,IAAI;AAAA,IACzC;AAEA,QAAI,OAAO,SAAS,SAAS,MAAM;AACjC,iBAAW,CAAC,SAAS;AAErB,qBAAe,aAAa,SAAS;AAAA,IACvC;AAEA,QAAI,OAAO,MAAM;AAGf,qBAAe;AAAA,IACjB;AAGA,QAAI,MAAM,QAAQ,SAAS,KAAK,eAAe,SAAS,SAAS,GAAG;AAClE,UAAI,SAAS;AAEb,iBAAW,OAAO,SAAS,MAAM,GAAG,EAAE,GAAG;AACvC,iBAAS,OAAO,GAAG;AAAA,MACrB;AACA,UAAI,OAAO,aAAa,aAAa;AACnC,eAAO,OAAO,SAAS,SAAS,SAAS,CAAC,CAAC;AAAA,MAC7C,OAAO;AACL,eAAO,SAAS,SAAS,SAAS,CAAC,CAAC,IAAI;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}