1{"version":3,"file":"codeMod.js","names":["findNewInstanceCodeBlock","contents","classDeclaration","language","isJava","start","indexOf","search","RegExp","end","findMatchingBracketPosition","nextBrace","isAnonymousClass","substring","match","code","appendContentsInsideDeclarationBlock","srcContents","declaration","insertion","Error","insertContentsAtOffset","addImports","source","imports","lines","split","lineIndexWithPackageDeclaration","findIndex","line","javaImport","includes","importStatement","splice","join"],"sources":["../../src/android/codeMod.ts"],"sourcesContent":["import { CodeBlock, insertContentsAtOffset } from '../utils/commonCodeMod';\nimport { findMatchingBracketPosition } from '../utils/matchBrackets';\n\n/**\n * Find java or kotlin new class instance code block\n *\n * @param contents source contents\n * @param classDeclaration class declaration or just a class name\n * @param language 'java' | 'kt'\n * @returns `CodeBlock` for start/end offset and code block contents\n */\nexport function findNewInstanceCodeBlock(\n contents: string,\n classDeclaration: string,\n language: 'java' | 'kt'\n): CodeBlock | null {\n const isJava = language === 'java';\n let start = isJava\n ? contents.indexOf(` new ${classDeclaration}(`)\n : contents.search(new RegExp(` (object\\\\s*:\\\\s*)?${classDeclaration}\\\\(`));\n if (start < 0) {\n return null;\n }\n // `+ 1` for the prefix space\n start += 1;\n let end = findMatchingBracketPosition(contents, '(', start);\n\n // For anonymous class, should search further to the {} block.\n // ```java\n // new Foo() {\n // @Override\n // protected void interfaceMethod {}\n // };\n // ```\n //\n // ```kotlin\n // object : Foo() {\n // override fun interfaceMethod {}\n // }\n // ```\n const nextBrace = contents.indexOf('{', end + 1);\n const isAnonymousClass =\n nextBrace >= end && !!contents.substring(end + 1, nextBrace).match(/^\\s*$/);\n if (isAnonymousClass) {\n end = findMatchingBracketPosition(contents, '{', end);\n }\n\n return {\n start,\n end,\n code: contents.substring(start, end + 1),\n };\n}\n\n/**\n * Append contents to the end of code declaration block, support class or method declarations.\n *\n * @param srcContents source contents\n * @param declaration class declaration or method declaration\n * @param insertion code to append\n * @returns updated contents\n */\nexport function appendContentsInsideDeclarationBlock(\n srcContents: string,\n declaration: string,\n insertion: string\n): string {\n const start = srcContents.search(new RegExp(`\\\\s*${declaration}.*?[\\\\(\\\\{]`));\n if (start < 0) {\n throw new Error(`Unable to find code block - declaration[${declaration}]`);\n }\n const end = findMatchingBracketPosition(srcContents, '{', start);\n return insertContentsAtOffset(srcContents, insertion, end);\n}\n\nexport function addImports(source: string, imports: string[], isJava: boolean): string {\n const lines = source.split('\\n');\n const lineIndexWithPackageDeclaration = lines.findIndex((line) => line.match(/^package .*;?$/));\n for (const javaImport of imports) {\n if (!source.includes(javaImport)) {\n const importStatement = `import ${javaImport}${isJava ? ';' : ''}`;\n lines.splice(lineIndexWithPackageDeclaration + 1, 0, importStatement);\n }\n }\n return lines.join('\\n');\n}\n"],"mappings":";;;;;;;;;AAAA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AACA;EAAA;;EAAA;IAAA;EAAA;;EAAA;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,wBAAT,CACLC,QADK,EAELC,gBAFK,EAGLC,QAHK,EAIa;EAClB,MAAMC,MAAM,GAAGD,QAAQ,KAAK,MAA5B;EACA,IAAIE,KAAK,GAAGD,MAAM,GACdH,QAAQ,CAACK,OAAT,CAAkB,QAAOJ,gBAAiB,GAA1C,CADc,GAEdD,QAAQ,CAACM,MAAT,CAAgB,IAAIC,MAAJ,CAAY,sBAAqBN,gBAAiB,KAAlD,CAAhB,CAFJ;;EAGA,IAAIG,KAAK,GAAG,CAAZ,EAAe;IACb,OAAO,IAAP;EACD,CAPiB,CAQlB;;;EACAA,KAAK,IAAI,CAAT;EACA,IAAII,GAAG,GAAG,IAAAC,4CAAA,EAA4BT,QAA5B,EAAsC,GAAtC,EAA2CI,KAA3C,CAAV,CAVkB,CAYlB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA,MAAMM,SAAS,GAAGV,QAAQ,CAACK,OAAT,CAAiB,GAAjB,EAAsBG,GAAG,GAAG,CAA5B,CAAlB;EACA,MAAMG,gBAAgB,GACpBD,SAAS,IAAIF,GAAb,IAAoB,CAAC,CAACR,QAAQ,CAACY,SAAT,CAAmBJ,GAAG,GAAG,CAAzB,EAA4BE,SAA5B,EAAuCG,KAAvC,CAA6C,OAA7C,CADxB;;EAEA,IAAIF,gBAAJ,EAAsB;IACpBH,GAAG,GAAG,IAAAC,4CAAA,EAA4BT,QAA5B,EAAsC,GAAtC,EAA2CQ,GAA3C,CAAN;EACD;;EAED,OAAO;IACLJ,KADK;IAELI,GAFK;IAGLM,IAAI,EAAEd,QAAQ,CAACY,SAAT,CAAmBR,KAAnB,EAA0BI,GAAG,GAAG,CAAhC;EAHD,CAAP;AAKD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACO,SAASO,oCAAT,CACLC,WADK,EAELC,WAFK,EAGLC,SAHK,EAIG;EACR,MAAMd,KAAK,GAAGY,WAAW,CAACV,MAAZ,CAAmB,IAAIC,MAAJ,CAAY,OAAMU,WAAY,aAA9B,CAAnB,CAAd;;EACA,IAAIb,KAAK,GAAG,CAAZ,EAAe;IACb,MAAM,IAAIe,KAAJ,CAAW,2CAA0CF,WAAY,GAAjE,CAAN;EACD;;EACD,MAAMT,GAAG,GAAG,IAAAC,4CAAA,EAA4BO,WAA5B,EAAyC,GAAzC,EAA8CZ,KAA9C,CAAZ;EACA,OAAO,IAAAgB,uCAAA,EAAuBJ,WAAvB,EAAoCE,SAApC,EAA+CV,GAA/C,CAAP;AACD;;AAEM,SAASa,UAAT,CAAoBC,MAApB,EAAoCC,OAApC,EAAuDpB,MAAvD,EAAgF;EACrF,MAAMqB,KAAK,GAAGF,MAAM,CAACG,KAAP,CAAa,IAAb,CAAd;EACA,MAAMC,+BAA+B,GAAGF,KAAK,CAACG,SAAN,CAAiBC,IAAD,IAAUA,IAAI,CAACf,KAAL,CAAW,gBAAX,CAA1B,CAAxC;;EACA,KAAK,MAAMgB,UAAX,IAAyBN,OAAzB,EAAkC;IAChC,IAAI,CAACD,MAAM,CAACQ,QAAP,CAAgBD,UAAhB,CAAL,EAAkC;MAChC,MAAME,eAAe,GAAI,UAASF,UAAW,GAAE1B,MAAM,GAAG,GAAH,GAAS,EAAG,EAAjE;MACAqB,KAAK,CAACQ,MAAN,CAAaN,+BAA+B,GAAG,CAA/C,EAAkD,CAAlD,EAAqDK,eAArD;IACD;EACF;;EACD,OAAOP,KAAK,CAACS,IAAN,CAAW,IAAX,CAAP;AACD"}