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"}