{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-xray/src/babylonian-programming-editor/utils/utils.js"],"names":["maybeUnpackString","value","guid","s4","Math","floor","random","toString","substring","abstract","Error","compareKeyLocations","a","b","keyLocationsAreEqual","stringInsert","baseString","insertString","index","slice","stringRemove","startIndex","endIndex","normalizePath","path","split","reduce","acc","part","pop","push","join","deepCopy","obj","HTMLElement","cloneNode","JSON","parse","stringify","e","console","warn","Object","assign"],"mappings":"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","file":"utils.js","sourcesContent":["export const maybeUnpackString = (value) => {\n  if(!value) {\n    return value;\n  }\n  \n  if(typeof(value) === \"string\") {\n    return value;\n  } else if (typeof(value.value) === \"string\") {\n    return value.value;\n  }\n  \n  return null;\n}\n\nexport const guid = () => {\n  // from https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000)\n      .toString(16)\n      .substring(1);\n  }\n  return  s4() + '_' + s4() + '_' + s4();\n}\n\nexport const abstract = () => {\n  throw Error(\"This function is abstract\");\n}\n\nexport const compareKeyLocations = (a, b) => {\n  return a[0] - b[0] ? a[0] - b[0] :\n         a[1] - b[1] ? a[1] - b[1] :\n         a[2] - b[2] ? a[2] - b[2] :\n         a[3] - b[3] ? a[3] - b[3] :\n         0;\n}\n\nexport const keyLocationsAreEqual = (a, b) => {\n  return compareKeyLocations(a, b) === 0;\n}\n\nexport const stringInsert = (baseString, insertString, index) => {\n  return baseString.slice(0, index) + insertString + baseString.slice(index);\n}\n\nexport const stringRemove = (baseString, startIndex, endIndex) => {\n  return baseString.slice(0, startIndex) + baseString.slice(endIndex);\n}\n\nexport const normalizePath = (path) => \n  path.split(\"/\")\n      .reduce((acc, part) => {\n        if(part === \"..\") {\n          acc.pop();\n        } else if(part !== \".\") {\n          acc.push(part);\n        }\n        return acc;\n      }, [])\n      .join(\"/\")\n\nexport const deepCopy = (obj) => {\n  try {\n    if(obj instanceof HTMLElement) {\n      /*probe:*/return/*{}*/ obj.cloneNode(true);\n    } else {\n      /*probe:*/return/*{}*/ JSON.parse(JSON.stringify(obj));\n    }\n  } catch(e) {\n    console.warn(\"Could not deeply clone object\", obj);\n    /*probe:*/return/*{}*/ Object.assign({}, obj);\n  }\n}"]}