admina
Version:
Detect root/admin/sudo and execute commands as it if available
1 lines • 27.9 kB
Source Map (JSON)
{"mappings":"A,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,CEGO,SAAS,IACZ,OAAO,AAA0C,OAA1C,AAAA,EAAM,IAAI,CAAC,OAAQ,CAAE,QAAS,CAAA,CAAK,EAC9C,CAeO,SAAS,IAEZ,OAAO,QAAQ,MAAM,OAAS,GAAK,CAAA,CAAQ,QAAQ,GAAG,CAAC,EAAE,AAC7D,CAEO,SAAS,IACZ,OAAO,KAAY,GACvB,CAEO,SAAS,EAAY,CAAO,SAC/B,AAAI,IACO,CAAC,KAAK,EAAE,EAAQ,CAAC,CAErB,CACX,CAWO,SAAS,EAAa,CAAO,CAAE,EAAO,EAAE,CAAE,EAAc,CAAkB,SAC7E,AAAI,IAEO,AAAA,EADS,EAAe,EAAS,GACP,GAG1B,AAAA,EAAU,EAAS,EAAM,GAAO,EAE/C,CASO,SAAS,EAAS,CAAO,CAAE,EAAO,EAAE,CAAE,EAAc,CAAkB,SACzE,AAAI,IAEO,AAAA,EADS,EAAe,EAAS,GACX,GAGtB,AAAA,EAAM,EAAS,EAAM,GAAO,EAE3C,CACA,SAAS,EAAe,CAAO,CAAE,CAAI,EACjC,MAAO,CAAC,KAAK,EAAE,EAAM,CAAC,KAAY,EAAK,EAAE,IAAI,CAAC,KAAK,CAAC,AACxD,CACA,SAAS,EAAM,CAAO,EAClB,OAAO,EAAQ,GAAG,CAAC,AAAC,GAAQ,CAAC,CAAC,EAAE,EAAI,CAAC,CAAC,CAC1C,CEzEA,eAAe,IACX,GAAI,CAEA,OADA,MAAM,AAAA,EAAM,SACL,CAAA,CACX,CACA,KAAM,CACF,MAAO,CAAA,CACX,CACJ,CACe,eAAA,IACX,GAAI,AAAqB,UAArB,QAAQ,QAAQ,CAChB,MAAO,CAAA,EAEX,GAAI,CAGA,OADA,MAAM,AAAA,EAAM,SAAU,CAAC,QAAS,QAAS,QAAQ,GAAG,CAAC,WAAW,EAAI,GAAG,EAChE,CAAA,CACX,CACA,MAAO,EAAO,CACV,GAAI,AAAe,WAAf,EAAM,IAAI,CACV,OAAO,IAEX,MAAO,CAAA,CACX,CACJ,CDqBO,SAAS,UACZ,AAAI,AAAqB,UAArB,QAAQ,QAAQ,CACT,IAGA,AAAA,GAEf,CE/CO,eAAe,EAAqB,CAAI,EAC3C,GAAK,AAAA,CAAA,AAAqB,UAArB,QAAQ,QAAQ,EAAgB,AAAqB,WAArB,QAAQ,QAAQ,AAAK,GACtD,AAAA,KACA,AAA0B,KAAA,IAA1B,QAAQ,GAAG,CAAC,SAAS,CAAgB,CACrC,IAAM,EAAc,AAAA,EAAG,QAAQ,CAAC,GAAM,WAAW,EACjD,OAAM,AAAA,EAAS,QAAS,IAAK,EAAc,CAAC,KAAK,CAAG,EAAE,CAAG,QAAQ,GAAG,CAAC,SAAS,CAAE,EAAK,CAAE,EAC3F,CACJ,K,E,E,C,C,Q,M,O,A,Q,oB,C,C,a,C,C,gB,C,C,S,C,K,O,A,Q,M,I,C,E,E,U,I,G,E,E,S,I,G,E,E,S,I,G,E,E,c,I,G,E,E,qB,I,G,E,E,e,I,G,E,E,W,I,GHqBO,IAAM,EAAqB,CAAE,MAAO,UAAW,MAAO,CAAA,CAAK,E,E,E,C,E,iB,I,G,E,E,e,I,G,E,E,U,I,GCpB3D,IAAM,EAAiB,EAejB,EAAe,E,E,C,E,uB,I,U,K,O,C,K,M,C,K,M,C,K,W,C,K,kB,C,K,Y,C,K,Q,C,K,c,C,K,Y,C,K,O,C,K,oB","sources":["<anon>","src/index.mts","src/root.mts","src/admin.mts","src/is-admin.mts","src/user-access.mts"],"sourcesContent":["import $5eerk$which from \"which\";\nimport {execaCommandSync as $5eerk$execaCommandSync, execaSync as $5eerk$execaSync, execaCommand as $5eerk$execaCommand, execa as $5eerk$execa} from \"execa\";\nimport $5eerk$fs from \"fs\";\n\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $2e97c29b7add0805$exports = {};\n\n$parcel$export($2e97c29b7add0805$exports, \"hasSudo\", () => $2e97c29b7add0805$export$7683bf1311d8252);\n$parcel$export($2e97c29b7add0805$exports, \"isRoot\", () => $2e97c29b7add0805$export$e3140dc7d0c35e48);\n$parcel$export($2e97c29b7add0805$exports, \"isSudo\", () => $2e97c29b7add0805$export$316200228f28b8ce);\n$parcel$export($2e97c29b7add0805$exports, \"prependSudo\", () => $2e97c29b7add0805$export$d976d47922ae9667);\n$parcel$export($2e97c29b7add0805$exports, \"defaultExecOptions\", () => $2e97c29b7add0805$export$151aeb0ade3989e1);\n$parcel$export($2e97c29b7add0805$exports, \"execRootSync\", () => $2e97c29b7add0805$export$58f152936f209932);\n$parcel$export($2e97c29b7add0805$exports, \"execRoot\", () => $2e97c29b7add0805$export$351270479e2eef26);\n\n\nfunction $2e97c29b7add0805$export$7683bf1311d8252() {\n return (0, $5eerk$which).sync(\"sudo\", {\n nothrow: true\n }) !== null;\n}\nfunction $2e97c29b7add0805$export$e3140dc7d0c35e48() {\n // TODO not all CI systems are root\n return process.getuid?.() === 0 || Boolean(process.env.CI);\n}\nfunction $2e97c29b7add0805$export$316200228f28b8ce() {\n return $2e97c29b7add0805$export$e3140dc7d0c35e48() && $2e97c29b7add0805$export$7683bf1311d8252();\n}\nfunction $2e97c29b7add0805$export$d976d47922ae9667(command) {\n if ($2e97c29b7add0805$export$316200228f28b8ce()) return `sudo ${command}`;\n return command;\n}\nconst $2e97c29b7add0805$export$151aeb0ade3989e1 = {\n stdio: \"inherit\",\n shell: true\n};\nfunction $2e97c29b7add0805$export$58f152936f209932(program, args = [], execOptions = $2e97c29b7add0805$export$151aeb0ade3989e1) {\n if ($2e97c29b7add0805$export$316200228f28b8ce()) {\n const command = $2e97c29b7add0805$var$getSudoCommand(program, args);\n return (0, $5eerk$execaCommandSync)(command, execOptions);\n } else return (0, $5eerk$execaSync)(program, $2e97c29b7add0805$var$quote(args), execOptions);\n}\nfunction $2e97c29b7add0805$export$351270479e2eef26(program, args = [], execOptions = $2e97c29b7add0805$export$151aeb0ade3989e1) {\n if ($2e97c29b7add0805$export$316200228f28b8ce()) {\n const command = $2e97c29b7add0805$var$getSudoCommand(program, args);\n return (0, $5eerk$execaCommand)(command, execOptions);\n } else return (0, $5eerk$execa)(program, $2e97c29b7add0805$var$quote(args), execOptions);\n}\nfunction $2e97c29b7add0805$var$getSudoCommand(program, args) {\n return `sudo ${$2e97c29b7add0805$var$quote([\n program,\n ...args\n ]).join(\" \")}`;\n}\nfunction $2e97c29b7add0805$var$quote(strings) {\n return strings.map((str)=>`'${str}'`);\n} //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5tanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvcm9vdC5tdHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBQ3pCLE9BQU8sRUFDTCxLQUFLLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixTQUFTLEdBS1YsTUFBTSxPQUFPLENBQUE7QUFFZCxrQ0FBa0M7QUFDbEMsTUFBTSxVQUFVLE9BQU87SUFDckIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQTtBQUN2RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxNQUFNO0lBQ3BCLG1DQUFtQztJQUNuQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUM1RCxDQUFDO0FBRUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSxNQUFNO0lBQ3BCLE9BQU8sTUFBTSxFQUFFLElBQUksT0FBTyxFQUFFLENBQUE7QUFDOUIsQ0FBQztBQUVELHlEQUF5RDtBQUN6RCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQWU7SUFDekMsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2IsT0FBTyxRQUFRLE9BQU8sRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBRUQsK0RBQStEO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFxQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFBO0FBRXJGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixPQUFlLEVBQ2YsT0FBaUIsRUFBRSxFQUNuQixjQUFnQyxrQkFBa0I7SUFFbEQsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2IsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUM3QyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMvQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDckQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsT0FBZSxFQUNmLE9BQWlCLEVBQUUsRUFDbkIsY0FBNEIsa0JBQWtCO0lBRTlDLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNiLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDN0MsT0FBTyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzNDLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNqRCxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE9BQWUsRUFBRSxJQUFjO0lBQ3JELE9BQU8sUUFBUSxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO0FBQ3RELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxPQUFpQjtJQUM5QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQTtBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHdoaWNoIGZyb20gXCJ3aGljaFwiXG5pbXBvcnQge1xuICBleGVjYSxcbiAgZXhlY2FDb21tYW5kLFxuICBleGVjYUNvbW1hbmRTeW5jLFxuICBleGVjYVN5bmMsXG4gIFN5bmNPcHRpb25zIGFzIEV4ZWNhU3luY09wdGlvbnMsXG4gIEV4ZWNhU3luY1JldHVyblZhbHVlLFxuICBPcHRpb25zIGFzIEV4ZWNhT3B0aW9ucyxcbiAgRXhlY2FDaGlsZFByb2Nlc3MsXG59IGZyb20gXCJleGVjYVwiXG5cbi8qKiBEZXRlY3QgaWYgc3VkbyBpcyBhdmFpbGFibGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNTdWRvKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gd2hpY2guc3luYyhcInN1ZG9cIiwgeyBub3Rocm93OiB0cnVlIH0pICE9PSBudWxsXG59XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBwcm9jZXNzIGhhcyByb290IHByaXZpbGVnZSBvbiBQb3NpeC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBpc1Jvb3QgfSBmcm9tIFwiYWRtaW5hXCJcbiAqXG4gKiBjb25zb2xlLmxvZyhpc1Jvb3QoKSlcbiAqIC8vPT4gZmFsc2VcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBhcyByb290LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSb290KCk6IGJvb2xlYW4ge1xuICAvLyBUT0RPIG5vdCBhbGwgQ0kgc3lzdGVtcyBhcmUgcm9vdFxuICByZXR1cm4gcHJvY2Vzcy5nZXR1aWQ/LigpID09PSAwIHx8IEJvb2xlYW4ocHJvY2Vzcy5lbnYuQ0kpXG59XG5cbi8qKiBEZXRlY3QgaWYgc3VkbyBpcyBhdmFpbGFibGUgYW5kIHRoZSB1c2VyIGhhcyByb290IHByaXZpbGVnZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N1ZG8oKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1Jvb3QoKSAmJiBoYXNTdWRvKClcbn1cblxuLyoqIFByZXBlbmQgYHN1ZG9gIHRvIHRoZSBjb21tYW5kIGlmIHN1ZG8gaXMgYXZhaWxhYmxlICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGVuZFN1ZG8oY29tbWFuZDogc3RyaW5nKSB7XG4gIGlmIChpc1N1ZG8oKSkge1xuICAgIHJldHVybiBgc3VkbyAke2NvbW1hbmR9YFxuICB9XG4gIHJldHVybiBjb21tYW5kXG59XG5cbi8qKiBEZWZhdWx0IGV4ZWMgb3B0aW9ucyBgeyBzdGRpbzogXCJpbmhlcml0XCIsIHNoZWxsOiB0cnVlIH1gICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEV4ZWNPcHRpb25zOiBFeGVjYVN5bmNPcHRpb25zID0geyBzdGRpbzogXCJpbmhlcml0XCIsIHNoZWxsOiB0cnVlIH1cblxuLyoqXG4gKiBFeGVjdXRlIGEgY29tbWFuZCBhcyByb290IGlmIHN1ZG8gaXMgYXZhaWxhYmxlLiBPdGhlcndpc2UgZXhlY3V0ZXMgdGhlIGNvbW1hbmQgbm9ybWFsbHkgd2l0aG91dCBzdWRvLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIFRoZSBwcm9ncmFtIHRvIHNwYXduXG4gKiBAcGFyYW0gYXJncyBUaGUgY29tbWFuZCBhcmd1bWVudHNcbiAqIEBwYXJhbSBleGVjT3B0aW9ucyBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gYGV4ZWNhYC4gRGVmYXVsdHMgdG8gYHsgc3RkaW86IFwiaW5oZXJpdFwiLCBzaGVsbDogdHJ1ZSB9YFxuICogQHJldHVybnMgVGhlIGV4ZWN1dGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNSb290U3luYyhcbiAgcHJvZ3JhbTogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICBleGVjT3B0aW9uczogRXhlY2FTeW5jT3B0aW9ucyA9IGRlZmF1bHRFeGVjT3B0aW9ucyxcbik6IEV4ZWNhU3luY1JldHVyblZhbHVlPHN0cmluZz4ge1xuICBpZiAoaXNTdWRvKCkpIHtcbiAgICBjb25zdCBjb21tYW5kID0gZ2V0U3Vkb0NvbW1hbmQocHJvZ3JhbSwgYXJncylcbiAgICByZXR1cm4gZXhlY2FDb21tYW5kU3luYyhjb21tYW5kLCBleGVjT3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhlY2FTeW5jKHByb2dyYW0sIHF1b3RlKGFyZ3MpLCBleGVjT3B0aW9ucylcbiAgfVxufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IGV4ZWN1dGUgYSBjb21tYW5kIGFzIHJvb3QgaWYgc3VkbyBpcyBhdmFpbGFibGUuIE90aGVyd2lzZSBleGVjdXRlcyB0aGUgY29tbWFuZCBub3JtYWxseSB3aXRob3V0IHN1ZG8uXG4gKlxuICogQHBhcmFtIHByb2dyYW0gVGhlIHByb2dyYW0gdG8gc3Bhd25cbiAqIEBwYXJhbSBhcmdzIFRoZSBjb21tYW5kIGFyZ3VtZW50c1xuICogQHBhcmFtIGV4ZWNPcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCB0byBgZXhlY2FgLiBEZWZhdWx0cyB0byBgeyBzdGRpbzogXCJpbmhlcml0XCIsIHNoZWxsOiB0cnVlIH1gXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdG8gdGhlIGV4ZWN1dGlvbiByZXN1bHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNSb290KFxuICBwcm9ncmFtOiBzdHJpbmcsXG4gIGFyZ3M6IHN0cmluZ1tdID0gW10sXG4gIGV4ZWNPcHRpb25zOiBFeGVjYU9wdGlvbnMgPSBkZWZhdWx0RXhlY09wdGlvbnMsXG4pOiBFeGVjYUNoaWxkUHJvY2VzczxzdHJpbmc+IHtcbiAgaWYgKGlzU3VkbygpKSB7XG4gICAgY29uc3QgY29tbWFuZCA9IGdldFN1ZG9Db21tYW5kKHByb2dyYW0sIGFyZ3MpXG4gICAgcmV0dXJuIGV4ZWNhQ29tbWFuZChjb21tYW5kLCBleGVjT3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhlY2EocHJvZ3JhbSwgcXVvdGUoYXJncyksIGV4ZWNPcHRpb25zKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN1ZG9Db21tYW5kKHByb2dyYW06IHN0cmluZywgYXJnczogc3RyaW5nW10pIHtcbiAgcmV0dXJuIGBzdWRvICR7cXVvdGUoW3Byb2dyYW0sIC4uLmFyZ3NdKS5qb2luKFwiIFwiKX1gXG59XG5cbmZ1bmN0aW9uIHF1b3RlKHN0cmluZ3M6IHN0cmluZ1tdKSB7XG4gIHJldHVybiBzdHJpbmdzLm1hcCgoc3RyKSA9PiBgJyR7c3RyfSdgKVxufVxuIl19\n\n\nvar $e6e54fba4e25d332$exports = {};\n\n$parcel$export($e6e54fba4e25d332$exports, \"isAdminWindows\", () => $e6e54fba4e25d332$export$36ad181701cee597);\n$parcel$export($e6e54fba4e25d332$exports, \"isAdminPosix\", () => $e6e54fba4e25d332$export$2ebf12717e6b5bb8);\n$parcel$export($e6e54fba4e25d332$exports, \"isAdmin\", () => $e6e54fba4e25d332$export$fc970ed23da99565);\n// From `is-admin`: updated execa\n\n// https://stackoverflow.com/a/28268802\nasync function $515243e4fb3e8732$var$testFltmc() {\n try {\n await (0, $5eerk$execa)(\"fltmc\");\n return true;\n } catch {\n return false;\n }\n}\nasync function $515243e4fb3e8732$export$2e2bcd8739ae039() {\n if (process.platform !== \"win32\") return false;\n try {\n // https://stackoverflow.com/a/21295806/1641422\n await (0, $5eerk$execa)(\"fsutil\", [\n \"dirty\",\n \"query\",\n process.env.systemdrive ?? \"\"\n ]);\n return true;\n } catch (error) {\n if (error.code === \"ENOENT\") return $515243e4fb3e8732$var$testFltmc();\n return false;\n }\n} //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtYWRtaW4ubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2lzLWFkbWluLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpQ0FBaUM7QUFFakMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUU3Qix1Q0FBdUM7QUFDdkMsS0FBSyxVQUFVLFNBQVM7SUFDdEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxVQUFVLE9BQU87SUFDbkMsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILCtDQUErQztRQUMvQyxNQUFNLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDeEUsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUssS0FBMkIsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkQsT0FBTyxTQUFTLEVBQUUsQ0FBQTtRQUNwQixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEZyb20gYGlzLWFkbWluYDogdXBkYXRlZCBleGVjYVxuXG5pbXBvcnQgeyBleGVjYSB9IGZyb20gXCJleGVjYVwiXG5cbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODI2ODgwMlxuYXN5bmMgZnVuY3Rpb24gdGVzdEZsdG1jKCkge1xuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNhKFwiZmx0bWNcIilcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBpc0FkbWluKCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJ3aW4zMlwiKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB0cnkge1xuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMTI5NTgwNi8xNjQxNDIyXG4gICAgYXdhaXQgZXhlY2EoXCJmc3V0aWxcIiwgW1wiZGlydHlcIiwgXCJxdWVyeVwiLCBwcm9jZXNzLmVudi5zeXN0ZW1kcml2ZSA/PyBcIlwiXSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICgoZXJyb3IgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiB0ZXN0Rmx0bWMoKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=\n\n\n\nconst $e6e54fba4e25d332$export$36ad181701cee597 = (0, $515243e4fb3e8732$export$2e2bcd8739ae039);\nconst $e6e54fba4e25d332$export$2ebf12717e6b5bb8 = (0, $2e97c29b7add0805$export$e3140dc7d0c35e48);\nfunction $e6e54fba4e25d332$export$fc970ed23da99565() {\n if (process.platform === \"win32\") return $e6e54fba4e25d332$export$36ad181701cee597();\n else return (0, $2e97c29b7add0805$export$e3140dc7d0c35e48)();\n} //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4ubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2FkbWluLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxJQUFJLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVuQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFBO0FBRWhEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFBO0FBRWxDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxPQUFPO0lBQ3JCLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxPQUFPLGNBQWMsRUFBRSxDQUFBO0lBQ3pCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxNQUFNLEVBQUUsQ0FBQTtJQUNqQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlZmF1bHQgYXMgaXNBZG1pbldpbmRvd3NPcmlnIH0gZnJvbSBcIi4vaXMtYWRtaW4ubWpzXCJcbmltcG9ydCB7IGlzUm9vdCB9IGZyb20gXCIuL3Jvb3QubWpzXCJcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIGFzIGFkbWluaXN0cmF0b3Igb24gV2luZG93cy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBpc0FkbWluV2luZG93cyB9IGZyb20gXCJhZG1pbmFcIlxuICpcbiAqIGNvbnNvbGUubG9nKGF3YWl0IGlzQWRtaW5XaW5kb3dzKCkpXG4gKiAvLz0+IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcgYXMgYWRtaW5pc3RyYXRvci5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzQWRtaW5XaW5kb3dzID0gaXNBZG1pbldpbmRvd3NPcmlnXG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBwcm9jZXNzIGhhcyByb290IHByaXZpbGVnZSBvbiBQb3NpeC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBpc0FkbWluUG9zaXggfSBmcm9tIFwiYWRtaW5hXCJcbiAqXG4gKiBjb25zb2xlLmxvZyhpc0FkbWluUG9zaXgoKSlcbiAqIC8vPT4gZmFsc2VcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHByb2Nlc3MgaXMgcnVubmluZyBhcyByb290LlxuICovXG5leHBvcnQgY29uc3QgaXNBZG1pblBvc2l4ID0gaXNSb290XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBjb2RlIGlzIHJ1bm5pbmcgYXMgYWRtaW4vcm9vdFxuICpcbiAqIE9uIFdpbmRvd3MsIGl0IGNoZWNrcyBmb3IgYWRtaW4gYWNjZXNzLCBhbmQgb24gUG9zaXgsIGl0IGNoZWNrcyBmb3Igcm9vdCBhY2Nlc3NcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBpc0FkbWluIH0gZnJvbSBcImFkbWluYVwiXG4gKlxuICogY29uc29sZS5sb2coaXNBZG1pbigpKVxuICogLy89PiBmYWxzZVxuICogYGBgXG4gKlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcHJvY2VzcyBpcyBydW5uaW5nIGFzIHJvb3Qgb3IgYWRtaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FkbWluKCkge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgcmV0dXJuIGlzQWRtaW5XaW5kb3dzKClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gaXNSb290KClcbiAgfVxufVxuIl19\n\n\nvar $1d016c1eadc2c340$exports = {};\n\n$parcel$export($1d016c1eadc2c340$exports, \"grantUserWriteAccess\", () => $1d016c1eadc2c340$export$4718e061a205eab);\n\n\nasync function $1d016c1eadc2c340$export$4718e061a205eab(path) {\n if ((process.platform === \"linux\" || process.platform === \"darwin\") && (0, $2e97c29b7add0805$export$316200228f28b8ce)() && process.env.SUDO_USER !== undefined) {\n const isDirectory = (0, $5eerk$fs).statSync(path).isDirectory();\n await (0, $2e97c29b7add0805$export$351270479e2eef26)(\"chown\", [\n ...isDirectory ? [\n \"-R\"\n ] : [],\n process.env.SUDO_USER,\n path\n ], (0, $2e97c29b7add0805$export$151aeb0ade3989e1));\n }\n} //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1hY2Nlc3MubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL3VzZXItYWNjZXNzLm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNqRSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFFbkI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDckQsSUFDRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO1FBQy9ELE1BQU0sRUFBRTtRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFDbkMsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDbkQsTUFBTSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUM1RyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3VkbywgZXhlY1Jvb3QsIGRlZmF1bHRFeGVjT3B0aW9ucyB9IGZyb20gXCIuL3Jvb3QubWpzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuXG4vKipcbiAqIEdpdmUgdGhlIHVzZXIgYWNjZXNzIHRvIHRoZSBnaXZlbiBwYXRoIChhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBpZiBhIGRpcmVjdG9yeSkuIEl0IGNoYW5nZXMgdGhlIG93bmVyIHRvIHRoZVxuICogU1VET19VU0VSLiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byB1c2UgdGhlIGZvbGRlciB3aXRob3V0IHN1ZG9cbiAqXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBnaXZlIHRoZSB1c2VyIGFjY2VzcyB0b1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhbnRVc2VyV3JpdGVBY2Nlc3MocGF0aDogc3RyaW5nKSB7XG4gIGlmIChcbiAgICAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJsaW51eFwiIHx8IHByb2Nlc3MucGxhdGZvcm0gPT09IFwiZGFyd2luXCIpICYmXG4gICAgaXNTdWRvKCkgJiZcbiAgICBwcm9jZXNzLmVudi5TVURPX1VTRVIgIT09IHVuZGVmaW5lZFxuICApIHtcbiAgICBjb25zdCBpc0RpcmVjdG9yeSA9IGZzLnN0YXRTeW5jKHBhdGgpLmlzRGlyZWN0b3J5KClcbiAgICBhd2FpdCBleGVjUm9vdChcImNob3duXCIsIFsuLi4oaXNEaXJlY3RvcnkgPyBbXCItUlwiXSA6IFtdKSwgcHJvY2Vzcy5lbnYuU1VET19VU0VSLCBwYXRoXSwgZGVmYXVsdEV4ZWNPcHRpb25zKVxuICB9XG59XG4iXX0=\n\n\n //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2luZGV4Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLG1CQUFtQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcm9vdC5tanNcIlxuZXhwb3J0ICogZnJvbSBcIi4vYWRtaW4ubWpzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3VzZXItYWNjZXNzLm1qc1wiXG4iXX0=\n\n\nexport {$2e97c29b7add0805$export$7683bf1311d8252 as hasSudo, $2e97c29b7add0805$export$e3140dc7d0c35e48 as isRoot, $2e97c29b7add0805$export$316200228f28b8ce as isSudo, $2e97c29b7add0805$export$d976d47922ae9667 as prependSudo, $2e97c29b7add0805$export$151aeb0ade3989e1 as defaultExecOptions, $2e97c29b7add0805$export$58f152936f209932 as execRootSync, $2e97c29b7add0805$export$351270479e2eef26 as execRoot, $e6e54fba4e25d332$export$36ad181701cee597 as isAdminWindows, $e6e54fba4e25d332$export$2ebf12717e6b5bb8 as isAdminPosix, $e6e54fba4e25d332$export$fc970ed23da99565 as isAdmin, $1d016c1eadc2c340$export$4718e061a205eab as grantUserWriteAccess};\n//# sourceMappingURL=index.node.mjs.map\n","export * from \"./root.mjs\"\nexport * from \"./admin.mjs\"\nexport * from \"./user-access.mjs\"\n","import which from \"which\"\nimport {\n execa,\n execaCommand,\n execaCommandSync,\n execaSync,\n SyncOptions as ExecaSyncOptions,\n ExecaSyncReturnValue,\n Options as ExecaOptions,\n ExecaChildProcess,\n} from \"execa\"\n\n/** Detect if sudo is available */\nexport function hasSudo(): boolean {\n return which.sync(\"sudo\", { nothrow: true }) !== null\n}\n\n/**\n * Detect if the process has root privilege on Posix.\n *\n * @example\n *\n * ```js\n * import { isRoot } from \"admina\"\n *\n * console.log(isRoot())\n * //=> false\n * ```\n *\n * @returns Whether the process is running as root.\n */\nexport function isRoot(): boolean {\n // TODO not all CI systems are root\n return process.getuid?.() === 0 || Boolean(process.env.CI)\n}\n\n/** Detect if sudo is available and the user has root privileges */\nexport function isSudo(): boolean {\n return isRoot() && hasSudo()\n}\n\n/** Prepend `sudo` to the command if sudo is available */\nexport function prependSudo(command: string) {\n if (isSudo()) {\n return `sudo ${command}`\n }\n return command\n}\n\n/** Default exec options `{ stdio: \"inherit\", shell: true }` */\nexport const defaultExecOptions: ExecaSyncOptions = { stdio: \"inherit\", shell: true }\n\n/**\n * Execute a command as root if sudo is available. Otherwise executes the command normally without sudo.\n *\n * @param program The program to spawn\n * @param args The command arguments\n * @param execOptions The options passed to `execa`. Defaults to `{ stdio: \"inherit\", shell: true }`\n * @returns The execution result\n */\nexport function execRootSync(\n program: string,\n args: string[] = [],\n execOptions: ExecaSyncOptions = defaultExecOptions,\n): ExecaSyncReturnValue<string> {\n if (isSudo()) {\n const command = getSudoCommand(program, args)\n return execaCommandSync(command, execOptions)\n } else {\n return execaSync(program, quote(args), execOptions)\n }\n}\n\n/**\n * Asynchronously execute a command as root if sudo is available. Otherwise executes the command normally without sudo.\n *\n * @param program The program to spawn\n * @param args The command arguments\n * @param execOptions The options passed to `execa`. Defaults to `{ stdio: \"inherit\", shell: true }`\n * @returns A promise to the execution result\n */\nexport function execRoot(\n program: string,\n args: string[] = [],\n execOptions: ExecaOptions = defaultExecOptions,\n): ExecaChildProcess<string> {\n if (isSudo()) {\n const command = getSudoCommand(program, args)\n return execaCommand(command, execOptions)\n } else {\n return execa(program, quote(args), execOptions)\n }\n}\n\nfunction getSudoCommand(program: string, args: string[]) {\n return `sudo ${quote([program, ...args]).join(\" \")}`\n}\n\nfunction quote(strings: string[]) {\n return strings.map((str) => `'${str}'`)\n}\n","import { default as isAdminWindowsOrig } from \"./is-admin.mjs\"\nimport { isRoot } from \"./root.mjs\"\n\n/**\n * Check if the process is running as administrator on Windows.\n *\n * @example\n *\n * ```js\n * import { isAdminWindows } from \"admina\"\n *\n * console.log(await isAdminWindows())\n * //=> false\n * ```\n *\n * @returns Whether the process is running as administrator.\n */\nexport const isAdminWindows = isAdminWindowsOrig\n\n/**\n * Detect if the process has root privilege on Posix.\n *\n * @example\n *\n * ```js\n * import { isAdminPosix } from \"admina\"\n *\n * console.log(isAdminPosix())\n * //=> false\n * ```\n *\n * @returns Whether the process is running as root.\n */\nexport const isAdminPosix = isRoot\n\n/**\n * Detect if the code is running as admin/root\n *\n * On Windows, it checks for admin access, and on Posix, it checks for root access\n *\n * @example\n *\n * ```js\n * import { isAdmin } from \"admina\"\n *\n * console.log(isAdmin())\n * //=> false\n * ```\n *\n * @returns Whether the process is running as root or admin.\n */\nexport function isAdmin() {\n if (process.platform === \"win32\") {\n return isAdminWindows()\n } else {\n return isRoot()\n }\n}\n","// From `is-admin`: updated execa\n\nimport { execa } from \"execa\"\n\n// https://stackoverflow.com/a/28268802\nasync function testFltmc() {\n try {\n await execa(\"fltmc\")\n return true\n } catch {\n return false\n }\n}\n\nexport default async function isAdmin() {\n if (process.platform !== \"win32\") {\n return false\n }\n\n try {\n // https://stackoverflow.com/a/21295806/1641422\n await execa(\"fsutil\", [\"dirty\", \"query\", process.env.systemdrive ?? \"\"])\n return true\n } catch (error) {\n if ((error as { code?: string }).code === \"ENOENT\") {\n return testFltmc()\n }\n\n return false\n }\n}\n","import { isSudo, execRoot, defaultExecOptions } from \"./root.mjs\"\nimport fs from \"fs\"\n\n/**\n * Give the user access to the given path (and its sub-directories if a directory). It changes the owner to the\n * SUDO_USER. This allows the user to use the folder without sudo\n *\n * @param path The path to give the user access to\n */\nexport async function grantUserWriteAccess(path: string) {\n if (\n (process.platform === \"linux\" || process.platform === \"darwin\") &&\n isSudo() &&\n process.env.SUDO_USER !== undefined\n ) {\n const isDirectory = fs.statSync(path).isDirectory()\n await execRoot(\"chown\", [...(isDirectory ? [\"-R\"] : []), process.env.SUDO_USER, path], defaultExecOptions)\n }\n}\n"],"names":["$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$2e97c29b7add0805$export$7683bf1311d8252","$5eerk$which","sync","nothrow","$2e97c29b7add0805$export$e3140dc7d0c35e48","process","getuid","Boolean","env","CI","$2e97c29b7add0805$export$316200228f28b8ce","$2e97c29b7add0805$export$d976d47922ae9667","command","$2e97c29b7add0805$export$58f152936f209932","program","args","execOptions","$2e97c29b7add0805$export$151aeb0ade3989e1","$5eerk$execaCommandSync","$2e97c29b7add0805$var$getSudoCommand","$5eerk$execaSync","$2e97c29b7add0805$var$quote","$2e97c29b7add0805$export$351270479e2eef26","$5eerk$execaCommand","$5eerk$execa","join","strings","map","str","$515243e4fb3e8732$var$testFltmc","$515243e4fb3e8732$export$2e2bcd8739ae039","platform","systemdrive","error","code","$e6e54fba4e25d332$export$fc970ed23da99565","$e6e54fba4e25d332$export$36ad181701cee597","$1d016c1eadc2c340$export$4718e061a205eab","path","undefined","SUDO_USER","isDirectory","$5eerk$fs","statSync","$e6e54fba4e25d332$exports","$2e97c29b7add0805$exports","execaCommandSync","execaSync","execaCommand","execa","stdio","shell","$e6e54fba4e25d332$export$2ebf12717e6b5bb8","hasSudo","isRoot","isSudo","prependSudo","defaultExecOptions","execRootSync","execRoot","isAdminWindows","isAdminPosix","isAdmin","grantUserWriteAccess"],"version":3,"file":"index.node.mjs.map","sourceRoot":"../"}