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,wBAAwB,CACtCC,QAAgB,EAChBC,gBAAwB,EACxBC,QAAuB,EACL;EAClB,MAAMC,MAAM,GAAGD,QAAQ,KAAK,MAAM;EAClC,IAAIE,KAAK,GAAGD,MAAM,GACdH,QAAQ,CAACK,OAAO,CAAE,QAAOJ,gBAAiB,GAAE,CAAC,GAC7CD,QAAQ,CAACM,MAAM,CAAC,IAAIC,MAAM,CAAE,sBAAqBN,gBAAiB,KAAI,CAAC,CAAC;EAC5E,IAAIG,KAAK,GAAG,CAAC,EAAE;IACb,OAAO,IAAI;EACb;EACA;EACAA,KAAK,IAAI,CAAC;EACV,IAAII,GAAG,GAAG,IAAAC,4CAA2B,EAACT,QAAQ,EAAE,GAAG,EAAEI,KAAK,CAAC;;EAE3D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAMM,SAAS,GAAGV,QAAQ,CAACK,OAAO,CAAC,GAAG,EAAEG,GAAG,GAAG,CAAC,CAAC;EAChD,MAAMG,gBAAgB,GACpBD,SAAS,IAAIF,GAAG,IAAI,CAAC,CAACR,QAAQ,CAACY,SAAS,CAACJ,GAAG,GAAG,CAAC,EAAEE,SAAS,CAAC,CAACG,KAAK,CAAC,OAAO,CAAC;EAC7E,IAAIF,gBAAgB,EAAE;IACpBH,GAAG,GAAG,IAAAC,4CAA2B,EAACT,QAAQ,EAAE,GAAG,EAAEQ,GAAG,CAAC;EACvD;EAEA,OAAO;IACLJ,KAAK;IACLI,GAAG;IACHM,IAAI,EAAEd,QAAQ,CAACY,SAAS,CAACR,KAAK,EAAEI,GAAG,GAAG,CAAC;EACzC,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASO,oCAAoC,CAClDC,WAAmB,EACnBC,WAAmB,EACnBC,SAAiB,EACT;EACR,MAAMd,KAAK,GAAGY,WAAW,CAACV,MAAM,CAAC,IAAIC,MAAM,CAAE,OAAMU,WAAY,aAAY,CAAC,CAAC;EAC7E,IAAIb,KAAK,GAAG,CAAC,EAAE;IACb,MAAM,IAAIe,KAAK,CAAE,2CAA0CF,WAAY,GAAE,CAAC;EAC5E;EACA,MAAMT,GAAG,GAAG,IAAAC,4CAA2B,EAACO,WAAW,EAAE,GAAG,EAAEZ,KAAK,CAAC;EAChE,OAAO,IAAAgB,uCAAsB,EAACJ,WAAW,EAAEE,SAAS,EAAEV,GAAG,CAAC;AAC5D;AAEO,SAASa,UAAU,CAACC,MAAc,EAAEC,OAAiB,EAAEpB,MAAe,EAAU;EACrF,MAAMqB,KAAK,GAAGF,MAAM,CAACG,KAAK,CAAC,IAAI,CAAC;EAChC,MAAMC,+BAA+B,GAAGF,KAAK,CAACG,SAAS,CAAEC,IAAI,IAAKA,IAAI,CAACf,KAAK,CAAC,gBAAgB,CAAC,CAAC;EAC/F,KAAK,MAAMgB,UAAU,IAAIN,OAAO,EAAE;IAChC,IAAI,CAACD,MAAM,CAACQ,QAAQ,CAACD,UAAU,CAAC,EAAE;MAChC,MAAME,eAAe,GAAI,UAASF,UAAW,GAAE1B,MAAM,GAAG,GAAG,GAAG,EAAG,EAAC;MAClEqB,KAAK,CAACQ,MAAM,CAACN,+BAA+B,GAAG,CAAC,EAAE,CAAC,EAAEK,eAAe,CAAC;IACvE;EACF;EACA,OAAOP,KAAK,CAACS,IAAI,CAAC,IAAI,CAAC;AACzB"}