1{"version":3,"file":"commonCodeMod.js","names":["insertContentsAtOffset","srcContents","insertion","offset","srcContentsLength","length","Error","prefix","substring","suffix","replaceContentsWithOffset","contents","replacement","startOffset","endOffset","contentsLength","searchFromOffset","source","regexp","target","matchedIndex","search"],"sources":["../../src/utils/commonCodeMod.ts"],"sourcesContent":["export interface CodeBlock {\n  start: number;\n  end: number;\n  code: string;\n}\n\n/**\n * Insert contents at given offset\n * @param srcContents source contents\n * @param insertion content to insert\n * @param offset `srcContents` offset to insert `insertion`\n * @returns updated contents\n */\nexport function insertContentsAtOffset(\n  srcContents: string,\n  insertion: string,\n  offset: number\n): string {\n  const srcContentsLength = srcContents.length;\n  if (offset < 0 || offset > srcContentsLength) {\n    throw new Error('Invalid parameters.');\n  }\n  if (offset === 0) {\n    return `${insertion}${srcContents}`;\n  } else if (offset === srcContentsLength) {\n    return `${srcContents}${insertion}`;\n  }\n\n  const prefix = srcContents.substring(0, offset);\n  const suffix = srcContents.substring(offset);\n  return `${prefix}${insertion}${suffix}`;\n}\n\n/**\n * Replace contents at given start and end offset\n *\n * @param contents source contents\n * @param replacement new contents to place in [startOffset:endOffset]\n * @param startOffset `contents` start offset for replacement\n * @param endOffset `contents` end offset for replacement\n * @returns updated contents\n */\nexport function replaceContentsWithOffset(\n  contents: string,\n  replacement: string,\n  startOffset: number,\n  endOffset: number\n): string {\n  const contentsLength = contents.length;\n  if (\n    startOffset < 0 ||\n    endOffset < 0 ||\n    startOffset >= contentsLength ||\n    endOffset >= contentsLength ||\n    startOffset > endOffset\n  ) {\n    throw new Error('Invalid parameters.');\n  }\n  const prefix = contents.substring(0, startOffset);\n  const suffix = contents.substring(endOffset + 1);\n  return `${prefix}${replacement}${suffix}`;\n}\n\n/**\n * String.prototype.search() with offset support\n *\n * @param source source string to search\n * @param regexp RegExp pattern to search\n * @param offset start offset of `source` to search `regexp` pattern\n * @returns The index of the first match between the regular expression and the given string, or -1 if no match was found.\n */\nexport function searchFromOffset(source: string, regexp: RegExp, offset: number): number {\n  const target = source.substring(offset);\n  const matchedIndex = target.search(regexp);\n  return matchedIndex < 0 ? matchedIndex : matchedIndex + offset;\n}\n"],"mappings":";;;;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,sBAAT,CACLC,WADK,EAELC,SAFK,EAGLC,MAHK,EAIG;EACR,MAAMC,iBAAiB,GAAGH,WAAW,CAACI,MAAtC;;EACA,IAAIF,MAAM,GAAG,CAAT,IAAcA,MAAM,GAAGC,iBAA3B,EAA8C;IAC5C,MAAM,IAAIE,KAAJ,CAAU,qBAAV,CAAN;EACD;;EACD,IAAIH,MAAM,KAAK,CAAf,EAAkB;IAChB,OAAQ,GAAED,SAAU,GAAED,WAAY,EAAlC;EACD,CAFD,MAEO,IAAIE,MAAM,KAAKC,iBAAf,EAAkC;IACvC,OAAQ,GAAEH,WAAY,GAAEC,SAAU,EAAlC;EACD;;EAED,MAAMK,MAAM,GAAGN,WAAW,CAACO,SAAZ,CAAsB,CAAtB,EAAyBL,MAAzB,CAAf;EACA,MAAMM,MAAM,GAAGR,WAAW,CAACO,SAAZ,CAAsBL,MAAtB,CAAf;EACA,OAAQ,GAAEI,MAAO,GAAEL,SAAU,GAAEO,MAAO,EAAtC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASC,yBAAT,CACLC,QADK,EAELC,WAFK,EAGLC,WAHK,EAILC,SAJK,EAKG;EACR,MAAMC,cAAc,GAAGJ,QAAQ,CAACN,MAAhC;;EACA,IACEQ,WAAW,GAAG,CAAd,IACAC,SAAS,GAAG,CADZ,IAEAD,WAAW,IAAIE,cAFf,IAGAD,SAAS,IAAIC,cAHb,IAIAF,WAAW,GAAGC,SALhB,EAME;IACA,MAAM,IAAIR,KAAJ,CAAU,qBAAV,CAAN;EACD;;EACD,MAAMC,MAAM,GAAGI,QAAQ,CAACH,SAAT,CAAmB,CAAnB,EAAsBK,WAAtB,CAAf;EACA,MAAMJ,MAAM,GAAGE,QAAQ,CAACH,SAAT,CAAmBM,SAAS,GAAG,CAA/B,CAAf;EACA,OAAQ,GAAEP,MAAO,GAAEK,WAAY,GAAEH,MAAO,EAAxC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASO,gBAAT,CAA0BC,MAA1B,EAA0CC,MAA1C,EAA0Df,MAA1D,EAAkF;EACvF,MAAMgB,MAAM,GAAGF,MAAM,CAACT,SAAP,CAAiBL,MAAjB,CAAf;EACA,MAAMiB,YAAY,GAAGD,MAAM,CAACE,MAAP,CAAcH,MAAd,CAArB;EACA,OAAOE,YAAY,GAAG,CAAf,GAAmBA,YAAnB,GAAkCA,YAAY,GAAGjB,MAAxD;AACD"}