{"version":3,"sources":["jsdelivr-header.js","/npm/android-build-tools@2.0.3/src/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,GAAK,QAAQ,MACb,KAAO,QAAQ,QACf,GAAK,QAAQ,MACb,SAAW,QAAQ,aACnB,WAAa,QAAQ,2BACrB,MAAC,OAAS,QAAQ,iBAClB,YAAc,QAAQ,gBACtB,SAAW,QAAQ,YAGnB,cAAgB,WAGtB,SAAS,QAAQ,GACb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACpC,MAAM,EAAK,EAAO,WAAW,GAG7B,KAFc,GAAM,IAAM,EAAK,KAG3B,OAAO,CACf,CAEA,OAAO,CACX,CAGA,SAAS,cAAc,GACnB,OAAQ,IAAW,EAAO,MAC9B,CAGA,IAAI,SACA,OACA,WAAY,EAEhB,OAAQ,QAAQ,UACZ,IAAK,SACD,SAAW,oFACX,OAAS,GAAG,QAAQ,IAAI,2BACxB,MAEJ,IAAK,QACD,SAAW,sFACX,OAAS,GAAG,QAAQ,IAAI,mBACxB,MAEJ,IAAK,QACD,SAAW,oFACX,OAAS,GAAG,QAAQ,IAAI,6BACxB,WAAY,EAGP,QAAQ,UACT,QAAQ,MAAM,+CAA+C,wEAExD,cAAc,QAAQ,IAAI,aAEnB,cAAc,QAAQ,IAAI,cAKlC,QAAQ,MAAM,kDACd,QAAQ,KAAK,IAHb,OAAS,GAAG,QAAQ,IAAI,yCAJxB,OAAS,GAAG,QAAQ,IAAI,4BAU5B,QAAQ,IAAI,4BAA4B,WAG5C,MAEJ,QACI,QAAQ,MAAM,+BAA+B,QAAQ,YACrD,QAAQ,KAAK,GAIrB,eAAe,cACX,MAAM,QAAiB,SAAS,aAAa,CAAC,YAAY,EAAM,aAAa,EAAM,UAAU,IAGvF,EAAS,EAAe,EAAS,QAAO,GAAM,EAAG,UAAY,EAAG,SAAW,EAAG,QAAQ,OAAS,IAAM,EAAG,QAAQ,OAAS,MAE/H,GAAI,EACA,OAAO,EAAO,QAIlB,MAAM,EAAU,EAAe,EAAS,QAAO,GAAM,EAAG,UAAY,EAAG,SAAW,EAAG,QAAQ,OAAS,IAAM,EAAG,QAAQ,OAAS,MAEhI,GAAI,EAEA,OADA,QAAQ,MAAM,0GACP,EAAQ,QAGnB,SAAS,EAAe,GACpB,MAAM,EAAgB,EAAS,QAAO,GAAM,EAAG,gBAG/C,GAA6B,IAAzB,EAAc,OACd,OAAO,EAAc,GAGzB,MAAM,EAAc,EAAS,QAAO,GAAM,EAAG,cAG7C,GAA2B,IAAvB,EAAY,OACZ,OAAO,EAAY,GAGvB,MAAM,EAAkB,EAAS,QAAO,GAAM,EAAG,QAAQ,SAAS,oBAGlE,OAA+B,IAA3B,EAAgB,OACT,EAAgB,GAGH,IAApB,EAAS,QAET,EAAS,MAAK,CAAC,EAAG,IAAM,EAAE,QAAQ,MAAQ,EAAE,QAAQ,QAC7C,EAAS,SAHpB,CAKJ,CACJ,CAEA,eAAe,oBACX,SAAS,aAAa,CAAC,YAAY,EAAM,aAAa,EAAM,UAAU,IAAO,KAAK,QAAQ,IAC9F,CAEA,eAAe,SAAS,EAAK,GACzB,QAAQ,IAAI,eAAe,KAE3B,MAAM,EAAa,IAAI,WAAW,CAC9B,MACA,UAAW,KAAK,QAAQ,GACxB,aAAe,GAAS,KAAK,SAAS,GACtC,WAAY,CAAC,EAAY,EAAO,KAC5B,SAAS,SAAS,QAAQ,OAAQ,EAAG,MACrC,QAAQ,OAAO,MAAM,GAAG,SAAkB,YAAY,kBAA6B,EAEvF,YAAa,EACb,QAAU,IACN,QAAQ,MAAM,EAAK,UAIrB,EAAW,WACjB,QAAQ,OAAO,MAAM,KACzB,CAEA,eAAe,WAAW,GACtB,OAAO,IAAI,SAAQ,CAAC,EAAS,KACzB,MAAM,EAAU,MACZ,KAAK,KACD,OACA,gBACA,SACA,MACA,UACM,iBACA,cACV,GAGJ,EAAQ,MAAM,MAAM,OACpB,EAAQ,MAAM,MAAM,OACpB,EAAQ,MAAM,MAAM,OACpB,EAAQ,MAAM,MAAM,OACpB,EAAQ,MAAM,MAEd,MAAM,EAAQ,GAEd,EAAQ,OAAO,GAAG,QAAQ,IACtB,EAAM,KAAK,EAAO,WAAU,IAGhC,EAAQ,GAAG,QAAQ,IACf,MAAM,EAAS,EAAM,KAAK,MAAM,OAG5B,EAAO,SAAS,qCAChB,QAAQ,MAAM,8CACd,QAAQ,KAAK,IAGJ,IAAT,EACA,KAEA,QAAQ,IAAI,GACZ,EAAO,oBAAoB,KAC/B,GACH,GAET,CAEA,eAAe,QAAQ,EAAS,GAC5B,QAAQ,IAAI,cAAc,KAAW,WAC/B,WAAW,CAAC,GAAG,KAAW,KACpC,CAEA,SAAS,gBAAgB,EAAU,GAC/B,MAAM,EAAQ,GAAG,WAAW,GACtB,GAAG,aAAa,EAAU,QAAQ,OAAO,MAAM,WAC/C,GAEN,IAAK,OAAO,EAAK,CAEb,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAC1B,EAAM,IAAM,EAAM,GAAG,WAAW,IAAM,MACtC,EAAM,OAAO,IAAK,GAGtB,EAAI,MAAQ,EAAI,KAAK,UACU,GAA3B,EAAI,KAAK,QAAQ,MACjB,EAAM,KAAK,GAAG,UAAU,EAAI,WACG,GAA1B,EAAI,KAAK,QAAQ,OACQ,GAA1B,EAAI,KAAK,QAAQ,KACrB,EAAM,KAAK,GAAG,SAAS,EAAI,SAE3B,EAAM,KAAK,GAAG,QAAQ,EAAI,QACtC,CAEA,GAAG,cAAc,EAAU,EAAM,KAAK,GAAG,KAAK,OAAS,GAAG,IAC9D,CAEA,OAAO,QAAU,CACb,4BACA,kBACA,cACA,oBACA,wBACA,oCACA,kBACA,sBACA,gBACA","file":"/npm/android-build-tools@2.0.3/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/android-build-tools@2.0.3/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const fs = require(\"fs\")\nconst path = require(\"path\")\nconst os = require(\"os\")\nconst jdkUtils = require(\"jdk-utils\")\nconst Downloader = require(\"nodejs-file-downloader\")\nconst {spawn} = require(\"child_process\")\nconst prettyBytes = require(\"pretty-bytes\")\nconst readline = require(\"readline\")\n\n// Config\nconst TOOLS_VERSION = \"10406996\"\n\n/** Returns false if the string contains non-ASCII characters */\nfunction isAscii(string) {\n    for (let i = 0; i < string.length; i++) {\n        const ch = string.charCodeAt(i)\n        const ascii = ch >= 32 && ch < 127\n\n        if (!ascii)\n            return false\n    }\n\n    return true\n}\n\n/** Returns true if the string is falsy or empty */\nfunction isNullOrEmpty(string) {\n    return !string || !string.length\n}\n\n// Detected config\nlet toolsUrl = undefined\nlet sdkDir = undefined\nlet isWindows = false\n\nswitch (process.platform) {\n    case \"darwin\": {\n        toolsUrl = `https://dl.google.com/android/repository/commandlinetools-mac-${TOOLS_VERSION}_latest.zip`\n        sdkDir = `${process.env.HOME}/Library/Android/sdk`\n        break\n    }\n    case \"linux\": {\n        toolsUrl = `https://dl.google.com/android/repository/commandlinetools-linux-${TOOLS_VERSION}_latest.zip`\n        sdkDir = `${process.env.HOME}/Android/Sdk`\n        break\n    }\n    case \"win32\": {\n        toolsUrl = `https://dl.google.com/android/repository/commandlinetools-win-${TOOLS_VERSION}_latest.zip`\n        sdkDir = `${process.env.LOCALAPPDATA}\\\\Android\\\\sdk`\n        isWindows = true\n\n        // We need a workaround for non-ASCII user names\n        if (!isAscii(sdkDir)) {\n            console.error(`WARNING: Android SDK cannot be installed in ${sdkDir}, because the SDK location cannot contain non-ASCII characters`)\n\n            if (!isNullOrEmpty(process.env.PROGRAMDATA)) {\n                sdkDir = `${process.env.PROGRAMDATA}\\\\Android\\\\sdk`\n            } else if (!isNullOrEmpty(process.env.SYSTEMDRIVE)) {\n                // We've seen $PROGRAMDATA being empty on some systems,\n                // so we need another fallback\n                sdkDir = `${process.env.SYSTEMDRIVE}\\\\ProgramData\\\\Android\\\\sdk`\n            } else {\n                console.error(\"ERROR: Not able to detect Android SDK location\")\n                process.exit(1)\n            }\n\n            console.log(`Changing SDK location to ${sdkDir}`)\n        }\n\n        break\n    }\n    default: {\n        console.error(`ERROR: Unsupported platform ${process.platform}`)\n        process.exit(1)\n    }\n}\n\nasync function findJdkHome() {\n    const runtimes = await jdkUtils.findRuntimes({checkJavac: true, withVersion: true, withTags: true})\n\n    // Prefer JDK 17 or better (Gradle 8.x)\n    const result = getBestRuntime(runtimes.filter(rt => rt.hasJavac && rt.version && rt.version.major >= 17 && rt.version.major <= 19))\n\n    if (result) {\n        return result.homedir\n    }\n\n    // Fallback to JDK 11 or better (Gradle 7.x)\n    const result2 = getBestRuntime(runtimes.filter(rt => rt.hasJavac && rt.version && rt.version.major >= 11 && rt.version.major <= 19))\n\n    if (result2) {\n        console.error(\"WARNING: JDK 17 is recommended for Android development, but was not found. Some features will not work\")\n        return result2.homedir\n    }\n\n    function getBestRuntime(runtimes) {\n        const isJavaHomeEnv = runtimes.filter(rt => rt.isJavaHomeEnv)\n\n        // Prefer JDK that is JAVA_HOME\n        if (isJavaHomeEnv.length !== 0) {\n            return isJavaHomeEnv[0]\n        }\n\n        const isInPathEnv = runtimes.filter(rt => rt.isInPathEnv)\n\n        // Prefer JDK that is in PATH\n        if (isInPathEnv.length !== 0) {\n            return isInPathEnv[0]\n        }\n\n        const isAndroidStudio = runtimes.filter(rt => rt.homedir.includes(\"Android Studio\"))\n\n        // Prefer JDK that is included with Android Studio\n        if (isAndroidStudio.length !== 0) {\n            return isAndroidStudio[0]\n        }\n\n        if (runtimes.length !== 0) {\n            // Prefer biggest major version\n            runtimes.sort((a, b) => b.version.major - a.version.major)\n            return runtimes[0]\n        }\n    }\n}\n\nasync function printJdkLocations() {\n    jdkUtils.findRuntimes({checkJavac: true, withVersion: true, withTags: true}).then(console.log)\n}\n\nasync function download(url, destination) {\n    console.log(`Downloading ${url}`)\n\n    const downloader = new Downloader({\n        url,\n        directory: path.dirname(destination),\n        onBeforeSave: (name) => path.basename(destination),\n        onProgress: (percentage, chunk, remainingSize) => {\n            readline.cursorTo(process.stdout, 0, null)\n            process.stdout.write(`${percentage} % - ${prettyBytes(remainingSize)} remaining   `)\n        },\n        maxAttempts: 3,\n        onError: (error) => {\n            console.error(error)\n        },\n    })\n\n    await downloader.download()\n    process.stdout.write(\"\\n\")\n}\n\nasync function sdkmanager(args) {\n    return new Promise((resolve, reject) => {\n        const command = spawn(\n            path.join(\n                sdkDir,\n                \"cmdline-tools\",\n                \"latest\",\n                \"bin\",\n                isWindows\n                    ? \"sdkmanager.bat\"\n                    : \"sdkmanager\"),\n            args)\n\n        // Type 'y' to accept licenses\n        command.stdin.write(\"y\\n\")\n        command.stdin.write(\"y\\n\")\n        command.stdin.write(\"y\\n\")\n        command.stdin.write(\"y\\n\")\n        command.stdin.end()\n\n        const lines = []\n\n        command.stdout.on(\"data\", output => {\n            lines.push(output.toString())\n        })\n\n        command.on(\"exit\", code => {\n            const output = lines.join(\"\\n\").trim()\n\n            // Verify that sdkmanager works (#9)\n            if (output.includes(\"java.lang.NoClassDefFoundErrors\")) {\n                console.error(\"\\nERROR: Incompatible JDK version detected\")\n                process.exit(1)\n            }\n\n            if (code === 0) {\n                resolve()\n            } else {\n                console.log(output)\n                reject(`Exited with code ${code}`)\n            }\n        })\n    })\n}\n\nasync function install(package, version) {\n    console.log(`Installing ${package}@${version}`)\n    await sdkmanager([`${package};${version}`])\n}\n\nfunction updateUnoconfig(filename, obj) {\n    const lines = fs.existsSync(filename)\n        ? fs.readFileSync(filename, \"utf8\").trim().split(/\\n|\\r\\n/)\n        : []\n\n    for (key in obj) {\n        // Remove old instances of ${key}\n        for (let i = 0; i < lines.length; i++)\n            if (lines[i] && lines[i].startsWith(key + \":\"))\n                lines.splice(i--, 1)\n\n        // Add new ${key}\n        if (obj[key] && obj[key].length)\n            if (obj[key].indexOf(\"\\\\\") != -1)\n                lines.push(`${key}: \\`${obj[key]}\\``)\n            else if (obj[key].indexOf(\" \") != -1 ||\n                    obj[key].indexOf(\":\") != -1)\n                lines.push(`${key}: \"${obj[key]}\"`)\n            else\n                lines.push(`${key}: ${obj[key]}`)\n    }\n\n    fs.writeFileSync(filename, lines.join(os.EOL).trim() + os.EOL)\n}\n\nmodule.exports = {\n    isNullOrEmpty,\n    toolsUrl,\n    sdkDir,\n    isWindows,\n    findJdkHome,\n    printJdkLocations,\n    download,\n    sdkmanager,\n    install,\n    updateUnoconfig,\n}\n"]}