create-pylon 1.1.2-canary-20250205110829.7bd424c79929a88148e864535a0b04bd9d344d45 → 1.1.2-canary-20250205112941.f25b5eb354aed2fceb39bcc739d912365da8077b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +7 -0
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -13,4 +13,4 @@ import{Option as k,program as J}from"commander";import u from"consola";import{in
|
|
|
13
13
|
\u{1F4AC} ${m.cyan.bold("Join our Community")}
|
|
14
14
|
${m.underline.blue("https://discord.gg/cbJjkVrnHe")}
|
|
15
15
|
`;await L.sendCreateEvent({name:d,pylonCreateVersion:U,runtime:s,template:g,clientPath:C||void 0,clientPort:parseInt(O)||void 0}),u.box(H)}catch(i){u.error(i)}}J.parse();
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy9kZXRlY3QtcG0udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHtPcHRpb24sIHByb2dyYW0sIHR5cGUgQ29tbWFuZH0gZnJvbSAnY29tbWFuZGVyJ1xuaW1wb3J0IGNvbnNvbGEgZnJvbSAnY29uc29sYSdcbmltcG9ydCB7aW5wdXQsIHNlbGVjdCwgY29uZmlybX0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5cbmltcG9ydCAqIGFzIHRlbGVtZXRyeSBmcm9tICdAZ2V0Y3Jvbml0L3B5bG9uLXRlbGVtZXRyeSdcblxuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tICd1cmwnXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gJ3BhdGgnXG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoX19maWxlbmFtZSlcblxuY29uc3QgdmVyc2lvbiA9ICgoKSA9PiB7XG4gIHJldHVybiBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpXG4gICkudmVyc2lvbiBhcyBzdHJpbmdcbn0pKClcblxuZnVuY3Rpb24gbWtkaXJwKGRpcjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKGRpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoJ2NvZGUnIGluIGUgJiYgZS5jb2RlID09PSAnRUVYSVNUJykgcmV0dXJuXG4gICAgfVxuICAgIHRocm93IGVcbiAgfVxufVxuXG5jb25zdCBydW50aW1lczoge1xuICBrZXk6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgd2Vic2l0ZTogc3RyaW5nXG4gIHRlbXBsYXRlcz86IHN0cmluZ1tdXG59W10gPSBbXG4gIHtcbiAgICBrZXk6ICdidW4nLFxuICAgIG5hbWU6ICdCdW4uanMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL2J1bmpzLmRldicsXG4gICAgdGVtcGxhdGVzOiBbJ2RlZmF1bHQnXVxuICB9LFxuICB7XG4gICAga2V5OiAnbm9kZScsXG4gICAgbmFtZTogJ05vZGUuanMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL25vZGVqcy5vcmcnLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfSxcbiAge1xuICAgIGtleTogJ2NmLXdvcmtlcnMnLFxuICAgIG5hbWU6ICdDbG91ZGZsYXJlIFdvcmtlcnMnLFxuICAgIHdlYnNpdGU6ICdodHRwczovL3dvcmtlcnMuY2xvdWRmbGFyZS5jb20nLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfSxcbiAge1xuICAgIGtleTogJ2Rlbm8nLFxuICAgIG5hbWU6ICdEZW5vJyxcbiAgICB3ZWJzaXRlOiAnaHR0cHM6Ly9kZW5vLmxhbmQnLFxuICAgIHRlbXBsYXRlczogWydkZWZhdWx0J11cbiAgfVxuXVxuXG5jb25zdCB0ZW1wbGF0ZXM6IHtcbiAga2V5OiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbn1bXSA9IFtcbiAge1xuICAgIGtleTogJ2RlZmF1bHQnLFxuICAgIG5hbWU6ICdEZWZhdWx0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0RlZmF1bHQgdGVtcGxhdGUnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkYXRhYmFzZScsXG4gICAgbmFtZTogJ0RhdGFiYXNlIChQcmlzbWEpJyxcbiAgICBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIHdpdGggUHJpc21hIE9STSdcbiAgfVxuXVxuXG5jb25zdCBpbmplY3RWYXJpYWJsZXNJbkNvbnRlbnQgPSAoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pID0+IHtcbiAgbGV0IHJlc3VsdCA9IGNvbnRlbnRcblxuICBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKGtleSwgdmFsdWUpXG4gIH0pXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuY29uc3QgcmVhZGRpckZpbGVzU3luY1JlY3Vyc2l2ZSA9IChkaXI6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcnVuID0gKGRpcjogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXVxuXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIpXG5cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBmaWxlKVxuXG4gICAgICBpZiAoZnMuc3RhdFN5bmMoZmlsZVBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucnVuKGZpbGVQYXRoKSlcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBhZGQgZmlsZXNcbiAgICAgIGlmIChmcy5zdGF0U3luYyhmaWxlUGF0aCkuaXNGaWxlKCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZmlsZVBhdGgpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIHJldHVybiBydW4oZGlyKS5tYXAoZmlsZSA9PiB7XG4gICAgcmV0dXJuIGZpbGUucmVwbGFjZShkaXIsICcuJylcbiAgfSlcbn1cblxuY29uc3QgY3JlYXRlVGVtcGxhdGUgPSBhc3luYyAob3B0aW9uczoge1xuICBuYW1lOiBzdHJpbmdcbiAgcnVudGltZTogc3RyaW5nXG4gIHRlbXBsYXRlOiBzdHJpbmdcbiAgdGFyZ2V0OiBzdHJpbmdcbn0pID0+IHtcbiAgY29uc3Qge3J1bnRpbWUsIHRlbXBsYXRlLCB0YXJnZXR9ID0gb3B0aW9uc1xuXG4gIGNvbnN0IHJ1bnRpbWVOYW1lID0gcnVudGltZXMuZmluZCgoe2tleX0pID0+IGtleSA9PT0gcnVudGltZSk/Lm5hbWVcbiAgY29uc3QgdGVtcGxhdGVOYW1lID0gdGVtcGxhdGVzLmZpbmQoKHtrZXl9KSA9PiBrZXkgPT09IHRlbXBsYXRlKT8ubmFtZVxuXG4gIGlmICghcnVudGltZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcnVudGltZTogJHtydW50aW1lfWApXG4gIH1cblxuICBpZiAoIXRlbXBsYXRlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZTogJHt0ZW1wbGF0ZX1gKVxuICB9XG5cbiAgLy8gVGhlIHRlbXBsYXRlcyBhcmUgc3RvcmVkIGluIHRoZSBgdGVtcGxhdGVzYCBkaXJlY3RvcnlcbiAgY29uc3Qgc2hhcmVkVGVtcGxhdGVEaXIgPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAndGVtcGxhdGVzJywgJ3NoYXJlZCcpXG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKHNoYXJlZFRlbXBsYXRlRGlyKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2hhcmVkIHRlbXBsYXRlcyBub3QgZm91bmQ6ICR7c2hhcmVkVGVtcGxhdGVEaXJ9YClcbiAgfVxuXG4gIGNvbnN0IHRlbXBsYXRlRGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3RlbXBsYXRlcycsIHJ1bnRpbWUsIHRlbXBsYXRlKVxuXG4gIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wbGF0ZURpcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRlbXBsYXRlIG5vdCBmb3VuZDogJHt0ZW1wbGF0ZURpcn1gKVxuICB9XG5cbiAgLy8gVGhlIHRhcmdldCBkaXJlY3RvcnkgaXMgYWxyZWFkeSBjcmVhdGVkXG4gIGNvbnN0IHRhcmdldERpcmVjdG9yeVBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgdGFyZ2V0KVxuXG4gIGNvbnNvbGEuc3RhcnQoYENyZWF0aW5nIHB5bG9uIGluICR7dGFyZ2V0RGlyZWN0b3J5UGF0aH1gKVxuXG4gIGNvbnN0IGluamVjdCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gaW5qZWN0VmFyaWFibGVzSW5Db250ZW50KGNvbnRlbnQsIHtcbiAgICAgIF9fUFlMT05fTkFNRV9fOiBvcHRpb25zLm5hbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gQ29weSB0aGUgc2hhcmVkIHRlbXBsYXRlIGZpbGVzXG4gIHJlYWRkaXJGaWxlc1N5bmNSZWN1cnNpdmUoc2hhcmVkVGVtcGxhdGVEaXIpLmZvckVhY2goZmlsZSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKHNoYXJlZFRlbXBsYXRlRGlyLCBmaWxlKVxuICAgIGxldCB0YXJnZXQgPSBwYXRoLmpvaW4odGFyZ2V0RGlyZWN0b3J5UGF0aCwgZmlsZSlcblxuICAgIC8vIENyZWF0ZSBmb2xkZXIgcmVjdXJzaXZlbHkgYW5kIGNvcHkgZmlsZVxuXG4gICAgY29uc3QgdGFyZ2V0RGlyID0gcGF0aC5kaXJuYW1lKHRhcmdldClcblxuICAgIC8vIFNraXAgdGhlIC5naXRodWIvd29ya2Zsb3dzIGRpcmVjdG9yeSBmb3IgY2Ytd29ya2VycyBydW50aW1lXG4gICAgaWYgKFxuICAgICAgcnVudGltZSA9PT0gJ2NmLXdvcmtlcnMnICYmXG4gICAgICBzb3VyY2UuaW5jbHVkZXMoJy5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gueWFtbCcpXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkge1xuICAgICAgZnMubWtkaXJTeW5jKHRhcmdldERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRhcmdldCBlbmRzIHdpdGggYC5leGFtcGxlYCwgcmVtb3ZlIHRoZSBzdWZmaXguXG4gICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIGAuZ2l0aWdub3JlLmV4YW1wbGVgIGZpbGVzIGJlY2F1c2UgdGhleSBhcmUgbm90IHB1Ymxpc2hlZCBpblxuICAgIC8vIHRoZSBgY3JlYXRlLXB5bG9uYCBwYWNrYWdlIHdoZW4gbmFtZWQgYC5naXRpZ25vcmVgLlxuICAgIGlmICh0YXJnZXQuZW5kc1dpdGgoJy5leGFtcGxlJykpIHtcbiAgICAgIHRhcmdldCA9IHRhcmdldC5yZXBsYWNlKCcuZXhhbXBsZScsICcnKVxuICAgIH1cblxuICAgIGNvbnN0IGluamVjdGVkQ29udGVudCA9IGluamVjdChmcy5yZWFkRmlsZVN5bmMoc291cmNlLCAndXRmLTgnKSlcblxuICAgIGZzLndyaXRlRmlsZVN5bmModGFyZ2V0LCBpbmplY3RlZENvbnRlbnQpXG4gIH0pXG5cbiAgLy8gQ29weSB0aGUgcnVudGltZSBzcGVjaWZpYyB0ZW1wbGF0ZSBmaWxlc1xuICByZWFkZGlyRmlsZXNTeW5jUmVjdXJzaXZlKHRlbXBsYXRlRGlyKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHBhdGguam9pbih0ZW1wbGF0ZURpciwgZmlsZSlcbiAgICBsZXQgdGFyZ2V0ID0gcGF0aC5qb2luKHRhcmdldERpcmVjdG9yeVBhdGgsIGZpbGUpXG5cbiAgICAvLyBDcmVhdGUgZm9sZGVyIHJlY3Vyc2l2ZWx5IGFuZCBjb3B5IGZpbGVcbiAgICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmRpcm5hbWUodGFyZ2V0KVxuXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHRhcmdldERpcikpIHtcbiAgICAgIGZzLm1rZGlyU3luYyh0YXJnZXREaXIsIHtyZWN1cnNpdmU6IHRydWV9KVxuICAgIH1cblxuICAgIC8vIElmIHRoZSB0YXJnZXQgZW5kcyB3aXRoIGAuZXhhbXBsZWAsIHJlbW92ZSB0aGUgc3VmZml4LlxuICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciBgLmdpdGlnbm9yZS5leGFtcGxlYCBmaWxlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBwdWJsaXNoZWQgaW5cbiAgICAvLyB0aGUgYGNyZWF0ZS1weWxvbmAgcGFja2FnZSB3aGVuIG5hbWVkIGAuZ2l0aWdub3JlYC5cbiAgICBpZiAodGFyZ2V0LmVuZHNXaXRoKCcuZXhhbXBsZScpKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXQucmVwbGFjZSgnLmV4YW1wbGUnLCAnJylcbiAgICB9XG5cbiAgICBjb25zdCBpbmplY3RlZENvbnRlbnQgPSBpbmplY3QoZnMucmVhZEZpbGVTeW5jKHNvdXJjZSwgJ3V0Zi04JykpXG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKHRhcmdldCwgaW5qZWN0ZWRDb250ZW50KVxuICB9KVxuXG4gIGNvbnNvbGEuc3VjY2VzcyhgUHlsb24gY3JlYXRlZGApXG59XG5cbmltcG9ydCB7c3Bhd25TeW5jfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHtkZXRlY3RQYWNrYWdlTWFuYWdlciwgZ2V0UnVuU2NyaXB0LCBQYWNrYWdlTWFuYWdlcn0gZnJvbSAnLi9kZXRlY3QtcG0nXG5cbmNvbnN0IGluc3RhbGxEZXBlbmRlbmNpZXMgPSBhc3luYyAoYXJnczoge1xuICB0YXJnZXQ6IHN0cmluZ1xuICBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXJcbn0pID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gcGF0aC5yZXNvbHZlKGFyZ3MudGFyZ2V0KVxuICBjb25zdCBwYWNrYWdlTWFuYWdlciA9IGFyZ3MucGFja2FnZU1hbmFnZXJcblxuICBsZXQgY29tbWFuZCA9ICcnXG5cbiAgc3dpdGNoIChwYWNrYWdlTWFuYWdlcikge1xuICAgIGNhc2UgJ3lhcm4nOlxuICAgICAgY29tbWFuZCA9ICd5YXJuJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICducG0nOlxuICAgICAgY29tbWFuZCA9ICducG0gaW5zdGFsbCdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAncG5wbSc6XG4gICAgICBjb21tYW5kID0gJ3BucG0gaW5zdGFsbCdcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnYnVuJzpcbiAgICAgIGNvbW1hbmQgPSAnYnVuIGluc3RhbGwnXG4gICAgICBicmVha1xuICAgIGNhc2UgJ2Rlbm8nOlxuICAgICAgY29tbWFuZCA9ICdkZW5vIGluc3RhbGwnXG4gICAgICBicmVha1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFja2FnZSBtYW5hZ2VyOiAke3BhY2thZ2VNYW5hZ2VyfWApXG4gIH1cblxuICBjb25zb2xhLnN0YXJ0KGBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcyB1c2luZyAke3BhY2thZ2VNYW5hZ2VyfWApXG5cbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjb21tYW5kLCB7XG4gICAgY3dkOiB0YXJnZXQsXG4gICAgc2hlbGw6IHRydWUsXG4gICAgc3RkaW86ICdpbmhlcml0J1xuICB9KVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzYClcbiAgfVxuXG4gIGNvbnNvbGEuc3VjY2VzcyhgRGVwZW5kZW5jaWVzIGluc3RhbGxlZGApXG59XG5cbnByb2dyYW1cbiAgLm5hbWUoJ2NyZWF0ZS1weWxvbicpXG4gIC52ZXJzaW9uKHZlcnNpb24pXG4gIC5hcmd1bWVudHMoJ1t0YXJnZXRdJylcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctaSwgLS1pbnN0YWxsJywgJ0luc3RhbGwgZGVwZW5kZW5jaWVzJykpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLXIsIC0tcnVudGltZSA8cnVudGltZT4nLCAnUnVudGltZScpLmNob2ljZXMoXG4gICAgICBydW50aW1lcy5tYXAoKHtrZXl9KSA9PiBrZXkpXG4gICAgKVxuICApXG4gIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXQsIC0tdGVtcGxhdGUgPHRlbXBsYXRlPicsICdUZW1wbGF0ZScpKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy1wbSwgLS1wYWNrYWdlLW1hbmFnZXIgPHBhY2thZ2VNYW5hZ2VyPicsICdQYWNrYWdlIG1hbmFnZXInKVxuICApXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbihcbiAgICAgICctLWNsaWVudCcsXG4gICAgICAnRW5hYmxlIGNsaWVudCBnZW5lcmF0aW9uIChodHRwczovL3B5bG9uLmNyb25pdC5pby9kb2NzL2ludGVncmF0aW9ucy9ncXR5KSdcbiAgICApXG4gIClcbiAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWNsaWVudC1wYXRoIDxjbGllbnRQYXRoPicsICdDbGllbnQgcGF0aCcpKVxuICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY2xpZW50LXBvcnQgPGNsaWVudFBvcnQ+JywgJ0NsaWVudCBwb3J0JykpXG4gIC5hY3Rpb24obWFpbilcblxudHlwZSBBcmdPcHRpb25zID0ge1xuICBpbnN0YWxsOiBib29sZWFuXG4gIHJ1bnRpbWU6IHN0cmluZ1xuICB0ZW1wbGF0ZTogc3RyaW5nXG4gIHBhY2thZ2VNYW5hZ2VyPzogUGFja2FnZU1hbmFnZXJcbiAgY2xpZW50PzogYm9vbGVhblxuICBjbGllbnRQYXRoPzogc3RyaW5nXG4gIGNsaWVudFBvcnQ/OiBzdHJpbmdcbn1cblxuY29uc3QgZ2V0UHJlZmVycmVkUG1CeVJ1bnRpbWUgPSAoXG4gIHJ1bnRpbWU6IHN0cmluZ1xuKTogUGFja2FnZU1hbmFnZXIgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAocnVudGltZSA9PT0gJ2J1bicpIHtcbiAgICByZXR1cm4gJ2J1bidcbiAgfSBlbHNlIGlmIChydW50aW1lID09PSAnZGVubycpIHtcbiAgICByZXR1cm4gJ2Rlbm8nXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbihcbiAgdGFyZ2V0RGlyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IEFyZ09wdGlvbnMsXG4gIGNvbW1hbmQ6IENvbW1hbmRcbikge1xuICB0cnkge1xuICAgIGNvbnNvbGEubG9nKGAke2NvbW1hbmQubmFtZSgpfSB2ZXJzaW9uICR7Y29tbWFuZC52ZXJzaW9uKCl9YClcblxuICAgIGNvbnN0IHtcbiAgICAgIGluc3RhbGw6IGluc3RhbGxBcmcsXG4gICAgICBydW50aW1lOiBydW50aW1lQXJnLFxuICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlQXJnLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IHBhY2thZ2VNYW5hZ2VyQXJnLFxuICAgICAgY2xpZW50OiBjbGllbnRBcmcsXG4gICAgICBjbGllbnRQYXRoOiBjbGllbnRQYXRoQXJnLFxuICAgICAgY2xpZW50UG9ydDogY2xpZW50UG9ydEFyZ1xuICAgIH0gPSBvcHRpb25zXG5cbiAgICBsZXQgdGFyZ2V0ID0gJydcblxuICAgIGlmICh0YXJnZXREaXIpIHtcbiAgICAgIHRhcmdldCA9IHRhcmdldERpclxuXG4gICAgICBjb25zb2xhLnN1Y2Nlc3MoYFVzaW5nIHRhcmdldCBkaXJlY3RvcnkgXHUyMDI2ICR7dGFyZ2V0fWApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RhcmdldCBkaXJlY3RvcnknLFxuICAgICAgICBkZWZhdWx0OiAnbXktcHlsb24nXG4gICAgICB9KVxuICAgICAgdGFyZ2V0ID0gYW5zd2VyXG4gICAgfVxuXG4gICAgbGV0IHByb2plY3ROYW1lID0gJydcblxuICAgIGlmICh0YXJnZXQgPT09ICcuJykge1xuICAgICAgcHJvamVjdE5hbWUgPSBwYXRoLmJhc2VuYW1lKHByb2Nlc3MuY3dkKCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZSh0YXJnZXQpXG4gICAgfVxuXG4gICAgY29uc3QgcnVudGltZU5hbWUgPVxuICAgICAgcnVudGltZUFyZyB8fFxuICAgICAgKGF3YWl0IHNlbGVjdCh7XG4gICAgICAgIG1lc3NhZ2U6ICdXaGljaCBydW50aW1lIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8nLFxuICAgICAgICBjaG9pY2VzOiBydW50aW1lcy5tYXAocnVudGltZSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGAke3J1bnRpbWUubmFtZX0gKCR7cnVudGltZS53ZWJzaXRlfSlgLFxuICAgICAgICAgIHZhbHVlOiBydW50aW1lLmtleVxuICAgICAgICB9KSksXG4gICAgICAgIGRlZmF1bHQ6IDBcbiAgICAgIH0pKVxuXG4gICAgaWYgKCFydW50aW1lTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBydW50aW1lIHNlbGVjdGVkJylcbiAgICB9XG5cbiAgICBjb25zdCBydW50aW1lID0gcnVudGltZXMuZmluZCgoe2tleX0pID0+IGtleSA9PT0gcnVudGltZU5hbWUpXG5cbiAgICBpZiAoIXJ1bnRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBydW50aW1lIHNlbGVjdGVkOiAke3J1bnRpbWVOYW1lfWApXG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGVOYW1lID1cbiAgICAgIHRlbXBsYXRlQXJnIHx8XG4gICAgICAoYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgbWVzc2FnZTogJ1doaWNoIHRlbXBsYXRlIHdvdWxkIHlvdSBsaWtlIHRvIHVzZT8nLFxuICAgICAgICBjaG9pY2VzOiB0ZW1wbGF0ZXNcbiAgICAgICAgICAuZmlsdGVyKHRlbXBsYXRlID0+IHJ1bnRpbWUudGVtcGxhdGVzPy5pbmNsdWRlcyh0ZW1wbGF0ZS5rZXkpKVxuICAgICAgICAgIC5tYXAodGVtcGxhdGUgPT4gKHtcbiAgICAgICAgICAgIG5hbWU6IHRlbXBsYXRlLm5hbWUsXG4gICAgICAgICAgICB2YWx1ZTogdGVtcGxhdGUua2V5XG4gICAgICAgICAgfSkpLFxuICAgICAgICBkZWZhdWx0OiAwXG4gICAgICB9KSlcblxuICAgIGlmICghdGVtcGxhdGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHRlbXBsYXRlIHNlbGVjdGVkJylcbiAgICB9XG5cbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgICBpZiAoZnMucmVhZGRpclN5bmModGFyZ2V0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgbWVzc2FnZTogJ0RpcmVjdG9yeSBub3QgZW1wdHkuIENvbnRpbnVlPycsXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1rZGlycCh0YXJnZXQpXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFsbCA9XG4gICAgICBpbnN0YWxsQXJnIHx8XG4gICAgICAoYXdhaXQgY29uZmlybSh7bWVzc2FnZTogJ1dvdWxkIHlvdSBsaWtlIHRvIGluc3RhbGwgZGVwZW5kZW5jaWVzPyd9KSlcblxuICAgIGF3YWl0IGNyZWF0ZVRlbXBsYXRlKHtcbiAgICAgIG5hbWU6IHByb2plY3ROYW1lLFxuICAgICAgcnVudGltZTogcnVudGltZU5hbWUsXG4gICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVOYW1lLFxuICAgICAgdGFyZ2V0XG4gICAgfSlcblxuICAgIGNvbnN0IHBhY2thZ2VNYW5hZ2VyID0gZGV0ZWN0UGFja2FnZU1hbmFnZXIoe1xuICAgICAgcHJlZmVycmVkUG06IGdldFByZWZlcnJlZFBtQnlSdW50aW1lKHJ1bnRpbWUua2V5KSxcbiAgICAgIGN3ZDogdGFyZ2V0XG4gICAgfSlcblxuICAgIGlmIChpbnN0YWxsKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKHt0YXJnZXQsIHBhY2thZ2VNYW5hZ2VyfSlcbiAgICB9XG5cbiAgICBjb25zdCBjbGllbnQgPVxuICAgICAgY2xpZW50QXJnIHx8XG4gICAgICAoYXdhaXQgY29uZmlybSh7XG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ1dvdWxkIHlvdSBsaWtlIHRvIGVuYWJsZSBjbGllbnQgZ2VuZXJhdGlvbj8gKGh0dHBzOi8vcHlsb24uY3Jvbml0LmlvL2RvY3MvaW50ZWdyYXRpb25zL2dxdHkpJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pKVxuXG4gICAgbGV0IGNsaWVudFJvb3Q6IHN0cmluZyA9ICcnXG4gICAgbGV0IGNsaWVudFBhdGg6IHN0cmluZyA9ICcnXG4gICAgbGV0IGNsaWVudFBvcnQ6IHN0cmluZyA9ICcnXG5cbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICBpZiAoIWNsaWVudFBhdGhBcmcpIHtcbiAgICAgICAgY2xpZW50Um9vdCA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICBtZXNzYWdlOiAnUGF0aCB0byB0aGUgcm9vdCB3aGVyZSB0aGUgY2xpZW50IHNob3VsZCBiZSBnZW5lcmF0ZWQnLFxuICAgICAgICAgIGRlZmF1bHQ6ICcuJ1xuICAgICAgICB9KVxuXG4gICAgICAgIGNsaWVudFBhdGggPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZ2VuZXJhdGUgdGhlIGNsaWVudCB0bycsXG4gICAgICAgICAgZGVmYXVsdDogcGF0aC5qb2luKGNsaWVudFJvb3QsICdncXR5L2luZGV4LnRzJyksXG4gICAgICAgICAgdmFsaWRhdGU6IHZhbHVlID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXRoIHN0YXJ0cyB3aXRoIHRoZSBjbGllbnQgcm9vdCAodGFrZSBjYXJlIG9mIC4pXG4gICAgICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoY2xpZW50Um9vdCA9PT0gJy4nID8gJycgOiBjbGllbnRSb290KSkge1xuICAgICAgICAgICAgICByZXR1cm4gJ1BhdGggbXVzdCBzdGFydCB3aXRoIHRoZSBjbGllbnQgcm9vdCdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFBvcnQgPVxuICAgICAgICBjbGllbnRQb3J0QXJnIHx8XG4gICAgICAgIChhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgbWVzc2FnZTogJ1BvcnQgb2YgdGhlIHB5bG9uIHNlcnZlciB0byBnZW5lcmF0ZSB0aGUgY2xpZW50IGZyb20nLFxuICAgICAgICAgIGRlZmF1bHQ6ICczMDAwJ1xuICAgICAgICB9KSlcblxuICAgICAgY29uc29sYS5zdGFydChgVXBkYXRpbmcgcHlsb24gZGV2IHNjcmlwdCB0byBnZW5lcmF0ZSBjbGllbnRgKVxuXG4gICAgICBsZXQgcGFja2FnZVBhdGg6IHN0cmluZ1xuICAgICAgbGV0IHNjcmlwdEtleTogc3RyaW5nXG4gICAgICBpZiAocnVudGltZS5rZXkgPT09ICdkZW5vJykge1xuICAgICAgICBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0YXJnZXQsICdkZW5vLmpzb24nKVxuICAgICAgICBzY3JpcHRLZXkgPSAndGFza3MnXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0YXJnZXQsICdwYWNrYWdlLmpzb24nKVxuICAgICAgICBzY3JpcHRLZXkgPSAnc2NyaXB0cydcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGV2U2NyaXB0ID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZVBhdGgsICd1dGYtOCcpKVxuXG4gICAgICBkZXZTY3JpcHRbc2NyaXB0S2V5XSA9IHtcbiAgICAgICAgLi4uZGV2U2NyaXB0W3NjcmlwdEtleV0sXG4gICAgICAgIGRldjpcbiAgICAgICAgICBkZXZTY3JpcHRbc2NyaXB0S2V5XS5kZXYgK1xuICAgICAgICAgIGAgLS1jbGllbnQgLS1jbGllbnQtcG9ydCAke2NsaWVudFBvcnR9IC0tY2xpZW50LXBhdGggJHtjbGllbnRQYXRofWBcbiAgICAgIH1cblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkoZGV2U2NyaXB0LCBudWxsLCAyKSlcblxuICAgICAgY29uc29sYS5zdWNjZXNzKGBQeWxvbiBkZXYgc2NyaXB0IHVwZGF0ZWRgKVxuICAgIH1cblxuICAgIGNvbnN0IHJ1blNjcmlwdCA9IGdldFJ1blNjcmlwdChwYWNrYWdlTWFuYWdlcilcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgXG5cdUQ4M0NcdURGODkgJHtjaGFsay5ncmVlbi5ib2xkKCdQeWxvbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4nKX1cblxuXHVEODNEXHVEQ0JCICR7Y2hhbGsuY3lhbi5ib2xkKCdDb250aW51ZSBEZXZlbG9waW5nJyl9XG4gICAgJHtjaGFsay55ZWxsb3coJ0NoYW5nZSBkaXJlY3RvcmllczonKX0gY2QgJHtjaGFsay5ibHVlKHRhcmdldCl9XG4gICAgJHtjaGFsay55ZWxsb3coJ1N0YXJ0IGRldiBzZXJ2ZXI6Jyl9ICR7cnVuU2NyaXB0fSBkZXZcbiAgICAke2NoYWxrLnllbGxvdygnRGVwbG95OicpfSAke3J1blNjcmlwdH0gZGVwbG95XG5cblx1RDgzRFx1RENENiAke2NoYWxrLmN5YW4uYm9sZCgnRXhwbG9yZSBEb2N1bWVudGF0aW9uJyl9XG4gICAgJHtjaGFsay51bmRlcmxpbmUuYmx1ZSgnaHR0cHM6Ly9weWxvbi5jcm9uaXQuaW8vZG9jcycpfVxuXG5cdUQ4M0RcdURDQUMgJHtjaGFsay5jeWFuLmJvbGQoJ0pvaW4gb3VyIENvbW11bml0eScpfVxuICAgICR7Y2hhbGsudW5kZXJsaW5lLmJsdWUoJ2h0dHBzOi8vZGlzY29yZC5nZy9jYkpqa1ZybkhlJyl9XG5gXG5cbiAgICBhd2FpdCB0ZWxlbWV0cnkuc2VuZENyZWF0ZUV2ZW50KHtcbiAgICAgIG5hbWU6IHByb2plY3ROYW1lLFxuICAgICAgcHlsb25DcmVhdGVWZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgcnVudGltZTogcnVudGltZU5hbWUsXG4gICAgICB0ZW1wbGF0ZTogdGVtcGxhdGVOYW1lLFxuICAgICAgY2xpZW50UGF0aDogY2xpZW50UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgICBjbGllbnRQb3J0OiBwYXJzZUludChjbGllbnRQb3J0KSB8fCB1bmRlZmluZWRcbiAgICB9KVxuXG4gICAgY29uc29sYS5ib3gobWVzc2FnZSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGEuZXJyb3IoZSlcbiAgfVxufVxuXG5wcm9ncmFtLnBhcnNlKClcbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnXG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnXG5pbXBvcnQge2V4ZWNTeW5jfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgY29uc29sYSBmcm9tICdjb25zb2xhJ1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBjb21tYW5kIGV4aXN0c1xuZnVuY3Rpb24gaXNDb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGV4ZWNTeW5jKGAke2NvbW1hbmR9IC0tdmVyc2lvbmAsIHtzdGRpbzogJ2lnbm9yZSd9KVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLy8gRGV0ZWN0IEJ1blxuZnVuY3Rpb24gaXNCdW4oKTogYm9vbGVhbiB7XG4gIC8vIEB0cy1pZ25vcmU6IEJ1biBtYXkgbm90IGJlIGRlZmluZWRcbiAgcmV0dXJuIHR5cGVvZiBCdW4gIT09ICd1bmRlZmluZWQnICYmIGlzQ29tbWFuZEF2YWlsYWJsZSgnYnVuJylcbn1cblxuLy8gRGV0ZWN0IG5wbVxuZnVuY3Rpb24gaXNOcG0oKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5ucG1fZXhlY3BhdGg/LmluY2x1ZGVzKCducG0nKSA/PyBmYWxzZVxufVxuXG4vLyBEZXRlY3QgWWFyblxuZnVuY3Rpb24gaXNZYXJuKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYubnBtX2V4ZWNwYXRoPy5pbmNsdWRlcygneWFybicpID8/IGZhbHNlXG59XG5cbi8vIERldGVjdCBEZW5vXG5mdW5jdGlvbiBpc0Rlbm8oKTogYm9vbGVhbiB7XG4gIC8vIEB0cy1pZ25vcmU6IERlbm8gbWF5IG5vdCBiZSBkZWZpbmVkXG4gIHJldHVybiB0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNDb21tYW5kQXZhaWxhYmxlKCdkZW5vJylcbn1cblxuLy8gRGV0ZWN0IHBucG1cbmZ1bmN0aW9uIGlzUG5wbSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52Lm5wbV9leGVjcGF0aD8uaW5jbHVkZXMoJ3BucG0nKSA/PyBmYWxzZVxufVxuXG4vLyBEZXRlY3QgYmFzZWQgb24gbG9jayBmaWxlc1xuZnVuY3Rpb24gZGV0ZWN0QnlMb2NrRmlsZXMoY3dkOiBzdHJpbmcpOiBQYWNrYWdlTWFuYWdlciB8IG51bGwge1xuICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCAnYnVuLmxvY2tiJykpKSB7XG4gICAgcmV0dXJuICdidW4nXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgJ3BhY2thZ2UtbG9jay5qc29uJykpKSB7XG4gICAgcmV0dXJuICducG0nXG4gIH1cbiAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGN3ZCwgJ3lhcm4ubG9jaycpKSkge1xuICAgIHJldHVybiAneWFybidcbiAgfVxuICBpZiAoXG4gICAgZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCAnZGVuby5qc29uJykpIHx8XG4gICAgZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCAnZGVuby5sb2NrJykpXG4gICkge1xuICAgIHJldHVybiAnZGVubydcbiAgfVxuICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY3dkLCAncG5wbS1sb2NrLnlhbWwnKSkpIHtcbiAgICByZXR1cm4gJ3BucG0nXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IHR5cGUgUGFja2FnZU1hbmFnZXIgPVxuICB8ICdidW4nXG4gIHwgJ25wbSdcbiAgfCAneWFybidcbiAgfCAncG5wbSdcbiAgfCAnZGVubydcbiAgfCAndW5rbm93bidcblxuLy8gTWFpbiBkZXRlY3Rpb24gZnVuY3Rpb25cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RQYWNrYWdlTWFuYWdlcih7XG4gIHByZWZlcnJlZFBtLFxuICBjd2QgPSBwcm9jZXNzLmN3ZCgpXG59OiB7XG4gIHByZWZlcnJlZFBtPzogUGFja2FnZU1hbmFnZXJcbiAgY3dkPzogc3RyaW5nXG59KTogUGFja2FnZU1hbmFnZXIge1xuICAvLyBDaGVjayB0aGUgcHJlZmVycmVkIHBhY2thZ2UgbWFuYWdlciBmaXJzdFxuICBpZiAocHJlZmVycmVkUG0gJiYgaXNDb21tYW5kQXZhaWxhYmxlKHByZWZlcnJlZFBtKSkge1xuICAgIHJldHVybiBwcmVmZXJyZWRQbVxuICB9XG5cbiAgLy8gUHJvY2VlZCB3aXRoIGRldGVjdGlvbiBsb2dpY1xuICBpZiAoaXNCdW4oKSkge1xuICAgIHJldHVybiAnYnVuJ1xuICB9XG4gIGlmIChpc05wbSgpKSB7XG4gICAgcmV0dXJuICducG0nXG4gIH1cbiAgaWYgKGlzUG5wbSgpKSB7XG4gICAgcmV0dXJuICdwbnBtJ1xuICB9XG4gIGlmIChpc0Rlbm8oKSkge1xuICAgIHJldHVybiAnZGVubydcbiAgfVxuICBpZiAoaXNZYXJuKCkpIHtcbiAgICByZXR1cm4gJ3lhcm4nXG4gIH1cblxuICAvLyBGYWxsYmFjayB0byBsb2NrIGZpbGUgZGV0ZWN0aW9uXG4gIGNvbnN0IGxvY2tGaWxlRGV0ZWN0aW9uID0gZGV0ZWN0QnlMb2NrRmlsZXMoY3dkKVxuICBpZiAobG9ja0ZpbGVEZXRlY3Rpb24pIHtcbiAgICBjb25zb2xhLmluZm8oYERldGVjdGVkIHBhY2thZ2UgbWFuYWdlciBieSBsb2NrIGZpbGU6ICR7bG9ja0ZpbGVEZXRlY3Rpb259YClcbiAgICBpZiAoaXNDb21tYW5kQXZhaWxhYmxlKGxvY2tGaWxlRGV0ZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGxvY2tGaWxlRGV0ZWN0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGEud2FybihcbiAgICAgICAgYExvY2sgZmlsZSBkZXRlY3RlZCwgYnV0ICR7bG9ja0ZpbGVEZXRlY3Rpb259IGlzIG5vdCBpbnN0YWxsZWQuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAndW5rbm93bidcbn1cblxudHlwZSBQYWNrYWdlTWFuYWdlclNjcmlwdCA9XG4gIHwgJ2J1bidcbiAgfCAnbnBtIHJ1bidcbiAgfCAneWFybidcbiAgfCAncG5wbSBydW4nXG4gIHwgJ2Rlbm8gdGFzaydcblxuLy8gUnVuIHNjcmlwdCBkZXRlY3Rpb25cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW5TY3JpcHQocG06IFBhY2thZ2VNYW5hZ2VyKTogUGFja2FnZU1hbmFnZXJTY3JpcHQge1xuICBzd2l0Y2ggKHBtKSB7XG4gICAgY2FzZSAnYnVuJzpcbiAgICAgIHJldHVybiAnYnVuJ1xuICAgIGNhc2UgJ25wbSc6XG4gICAgICByZXR1cm4gJ25wbSBydW4nXG4gICAgY2FzZSAneWFybic6XG4gICAgICByZXR1cm4gJ3lhcm4nXG4gICAgY2FzZSAncG5wbSc6XG4gICAgICByZXR1cm4gJ3BucG0gcnVuJ1xuICAgIGNhc2UgJ2Rlbm8nOlxuICAgICAgcmV0dXJuICdkZW5vIHRhc2snXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBwYWNrYWdlIG1hbmFnZXInKVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBRUEsT0FBUSxVQUFBQSxFQUFRLFdBQUFDLE1BQTRCLFlBQzVDLE9BQU9DLE1BQWEsVUFDcEIsT0FBUSxTQUFBQyxFQUFPLFVB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QyxFQUFVRCxDQUFTLEVBQUUsSUFDckIsMkJBQTJCRixDQUFVLGtCQUFrQkQsQ0FBVSxFQUNyRSxFQUVHLGdCQUFjRSxFQUFhLEtBQUssVUFBVUUsRUFBVyxLQUFNLENBQUMsQ0FBQyxFQUVoRWpDLEVBQVEsUUFBUSwwQkFBMEIsQ0FDNUMsQ0FFQSxJQUFNa0MsRUFBWUMsRUFBYTVCLENBQWMsRUFFdkM2QixFQUFVO0FBQUEsWUFDZkMsRUFBTSxNQUFNLEtBQUssNkJBQTZCLENBQUM7QUFBQTtBQUFBLFlBRS9DQSxFQUFNLEtBQUssS0FBSyxxQkFBcUIsQ0FBQztBQUFBLE1BQ3JDQSxFQUFNLE9BQU8scUJBQXFCLENBQUMsT0FBT0EsRUFBTSxLQUFLM0MsQ0FBTSxDQUFDO0FBQUEsTUFDNUQyQyxFQUFNLE9BQU8sbUJBQW1CLENBQUMsSUFBSUgsQ0FBUztBQUFBLE1BQzlDRyxFQUFNLE9BQU8sU0FBUyxDQUFDLElBQUlILENBQVM7QUFBQTtBQUFBLFlBRXJDRyxFQUFNLEtBQUssS0FBSyx1QkFBdUIsQ0FBQztBQUFBLE1BQ3ZDQSxFQUFNLFVBQVUsS0FBSyw4QkFBOEIsQ0FBQztBQUFBO0FBQUEsWUFFckRBLEVBQU0sS0FBSyxLQUFLLG9CQUFvQixDQUFDO0FBQUEsTUFDcENBLEVBQU0sVUFBVSxLQUFLLCtCQUErQixDQUFDO0FBQUEsRUFHdkQsTUFBZ0Isa0JBQWdCLENBQzlCLEtBQU1mLEVBQ04sbUJBQW9CakQsRUFDcEIsUUFBU3NCLEVBQ1QsU0FBVUMsRUFDVixXQUFZaUMsR0FBYyxPQUMxQixXQUFZLFNBQVNDLENBQVUsR0FBSyxNQUN0QyxDQUFDLEVBRUQ5QixFQUFRLElBQUlvQyxDQUFPLENBQ3JCLE9BQVMzRCxFQUFHLENBQ1Z1QixFQUFRLE1BQU12QixDQUFDLENBQ2pCLENBQ0YsQ0FFQWlDLEVBQVEsTUFBTSIsCiAgIm5hbWVzIjogWyJPcHRpb24iLCAicHJvZ3JhbSIsICJjb25zb2xhIiwgImlucHV0IiwgInNlbGVjdCIsICJjb25maXJtIiwgInBhdGgiLCAiY2hhbGsiLCAiZnMiLCAidGVsZW1ldHJ5IiwgImZpbGVVUkxUb1BhdGgiLCAiZGlybmFtZSIsICJzcGF3blN5bmMiLCAiZnMiLCAicGF0aCIsICJwcm9jZXNzIiwgImV4ZWNTeW5jIiwgImNvbnNvbGEiLCAiaXNDb21tYW5kQXZhaWxhYmxlIiwgImNvbW1hbmQiLCAiZSIsICJpc0J1biIsICJpc05wbSIsICJpc1lhcm4iLCAiaXNEZW5vIiwgImlzUG5wbSIsICJkZXRlY3RCeUxvY2tGaWxlcyIsICJjd2QiLCAiZGV0ZWN0UGFja2FnZU1hbmFnZXIiLCAicHJlZmVycmVkUG0iLCAibG9ja0ZpbGVEZXRlY3Rpb24iLCAiZ2V0UnVuU2NyaXB0IiwgInBtIiwgIl9fZmlsZW5hbWUiLCAiZmlsZVVSTFRvUGF0aCIsICJfX2Rpcm5hbWUiLCAiZGlybmFtZSIsICJ2ZXJzaW9uIiwgInBhdGgiLCAibWtkaXJwIiwgImRpciIsICJlIiwgInJ1bnRpbWVzIiwgInRlbXBsYXRlcyIsICJpbmplY3RWYXJpYWJsZXNJbkNvbnRlbnQiLCAiY29udGVudCIsICJ2YXJpYWJsZXMiLCAicmVzdWx0IiwgImtleSIsICJ2YWx1ZSIsICJyZWFkZGlyRmlsZXNTeW5jUmVjdXJzaXZlIiwgInJ1biIsICJmaWxlIiwgImZpbGVQYXRoIiwgImNyZWF0ZVRlbXBsYXRlIiwgIm9wdGlvbnMiLCAicnVudGltZSIsICJ0ZW1wbGF0ZSIsICJ0YXJnZXQiLCAicnVudGltZU5hbWUiLCAidGVtcGxhdGVOYW1lIiwgInNoYXJlZFRlbXBsYXRlRGlyIiwgInRlbXBsYXRlRGlyIiwgInRhcmdldERpcmVjdG9yeVBhdGgiLCAiY29uc29sYSIsICJpbmplY3QiLCAic291cmNlIiwgInRhcmdldERpciIsICJpbmplY3RlZENvbnRlbnQiLCAiaW5zdGFsbERlcGVuZGVuY2llcyIsICJhcmdzIiwgInBhY2thZ2VNYW5hZ2VyIiwgImNvbW1hbmQiLCAic3Bhd25TeW5jIiwgInByb2dyYW0iLCAiT3B0aW9uIiwgIm1haW4iLCAiZ2V0UHJlZmVycmVkUG1CeVJ1bnRpbWUiLCAiaW5zdGFsbEFyZyIsICJydW50aW1lQXJnIiwgInRlbXBsYXRlQXJnIiwgInBhY2thZ2VNYW5hZ2VyQXJnIiwgImNsaWVudEFyZyIsICJjbGllbnRQYXRoQXJnIiwgImNsaWVudFBvcnRBcmciLCAiaW5wdXQiLCAicHJvamVjdE5hbWUiLCAic2VsZWN0IiwgImNvbmZpcm0iLCAiaW5zdGFsbCIsICJkZXRlY3RQYWNrYWdlTWFuYWdlciIsICJjbGllbnQiLCAiY2xpZW50Um9vdCIsICJjbGllbnRQYXRoIiwgImNsaWVudFBvcnQiLCAicGFja2FnZVBhdGgiLCAic2NyaXB0S2V5IiwgImRldlNjcmlwdCIsICJydW5TY3JpcHQiLCAiZ2V0UnVuU2NyaXB0IiwgIm1lc3NhZ2UiLCAiY2hhbGsiXQp9Cg==
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/detect-pm.ts"],
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\n\nimport {Option, program, type Command} from 'commander'\nimport consola from 'consola'\nimport {input, select, confirm} from '@inquirer/prompts'\nimport path from 'path'\nimport chalk from 'chalk'\nimport * as fs from 'fs'\n\nimport * as telemetry from '@getcronit/pylon-telemetry'\n\nimport {fileURLToPath} from 'url'\nimport {dirname} from 'path'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = dirname(__filename)\n\nconst version = (() => {\n return JSON.parse(\n fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf-8')\n ).version as string\n})()\n\nfunction mkdirp(dir: string) {\n try {\n fs.mkdirSync(dir, {recursive: true})\n } catch (e) {\n if (e instanceof Error) {\n if ('code' in e && e.code === 'EEXIST') return\n }\n throw e\n }\n}\n\nconst runtimes: {\n key: string\n name: string\n website: string\n templates?: string[]\n}[] = [\n {\n key: 'bun',\n name: 'Bun.js',\n website: 'https://bunjs.dev',\n templates: ['default']\n },\n {\n key: 'node',\n name: 'Node.js',\n website: 'https://nodejs.org',\n templates: ['default']\n },\n {\n key: 'cf-workers',\n name: 'Cloudflare Workers',\n website: 'https://workers.cloudflare.com',\n templates: ['default']\n },\n {\n key: 'deno',\n name: 'Deno',\n website: 'https://deno.land',\n templates: ['default']\n }\n]\n\nconst templates: {\n key: string\n name: string\n description: string\n}[] = [\n {\n key: 'default',\n name: 'Default',\n description: 'Default template'\n },\n {\n key: 'database',\n name: 'Database (Prisma)',\n description: 'Template with Prisma ORM'\n }\n]\n\nconst injectVariablesInContent = (\n content: string,\n variables: Record<string, string>\n) => {\n let result = content\n\n Object.entries(variables).forEach(([key, value]) => {\n result = result.replaceAll(key, value)\n })\n\n return result\n}\nconst readdirFilesSyncRecursive = (dir: string): string[] => {\n const run = (dir: string): string[] => {\n const result: string[] = []\n\n const files = fs.readdirSync(dir)\n\n files.forEach(file => {\n const filePath = path.join(dir, file)\n\n if (fs.statSync(filePath).isDirectory()) {\n result.push(...run(filePath))\n }\n\n // Only add files\n if (fs.statSync(filePath).isFile()) {\n result.push(filePath)\n }\n })\n\n return result\n }\n\n return run(dir).map(file => {\n return file.replace(dir, '.')\n })\n}\n\nconst createTemplate = async (options: {\n name: string\n runtime: string\n template: string\n target: string\n}) => {\n const {runtime, template, target} = options\n\n const runtimeName = runtimes.find(({key}) => key === runtime)?.name\n const templateName = templates.find(({key}) => key === template)?.name\n\n if (!runtimeName) {\n throw new Error(`Invalid runtime: ${runtime}`)\n }\n\n if (!templateName) {\n throw new Error(`Invalid template: ${template}`)\n }\n\n // The templates are stored in the `templates` directory\n const sharedTemplateDir = path.join(__dirname, '..', 'templates', 'shared')\n\n if (!fs.existsSync(sharedTemplateDir)) {\n throw new Error(`Shared templates not found: ${sharedTemplateDir}`)\n }\n\n const templateDir = path.join(__dirname, '..', 'templates', runtime, template)\n\n if (!fs.existsSync(templateDir)) {\n throw new Error(`Template not found: ${templateDir}`)\n }\n\n // The target directory is already created\n const targetDirectoryPath = path.join(process.cwd(), target)\n\n consola.start(`Creating pylon in ${targetDirectoryPath}`)\n\n const inject = (content: string) => {\n return injectVariablesInContent(content, {\n __PYLON_NAME__: options.name\n })\n }\n\n // Copy the shared template files\n readdirFilesSyncRecursive(sharedTemplateDir).forEach(file => {\n const source = path.join(sharedTemplateDir, file)\n let target = path.join(targetDirectoryPath, file)\n\n // Create folder recursively and copy file\n\n const targetDir = path.dirname(target)\n\n // Skip the .github/workflows directory for cf-workers runtime\n if (\n runtime === 'cf-workers' &&\n source.includes('.github/workflows/publish.yaml')\n ) {\n return\n }\n\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, {recursive: true})\n }\n\n // If the target ends with `.example`, remove the suffix.\n // This is useful for `.gitignore.example` files because they are not published in\n // the `create-pylon` package when named `.gitignore`.\n if (target.endsWith('.example')) {\n target = target.replace('.example', '')\n }\n\n const injectedContent = inject(fs.readFileSync(source, 'utf-8'))\n\n fs.writeFileSync(target, injectedContent)\n })\n\n // Copy the runtime specific template files\n readdirFilesSyncRecursive(templateDir).forEach(file => {\n const source = path.join(templateDir, file)\n let target = path.join(targetDirectoryPath, file)\n\n // Create folder recursively and copy file\n const targetDir = path.dirname(target)\n\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, {recursive: true})\n }\n\n // If the target ends with `.example`, remove the suffix.\n // This is useful for `.gitignore.example` files because they are not published in\n // the `create-pylon` package when named `.gitignore`.\n if (target.endsWith('.example')) {\n target = target.replace('.example', '')\n }\n\n const injectedContent = inject(fs.readFileSync(source, 'utf-8'))\n\n fs.writeFileSync(target, injectedContent)\n })\n\n consola.success(`Pylon created`)\n}\n\nimport {spawnSync} from 'child_process'\nimport {detectPackageManager, getRunScript, PackageManager} from './detect-pm'\n\nconst installDependencies = async (args: {\n target: string\n packageManager: PackageManager\n}) => {\n const target = path.resolve(args.target)\n const packageManager = args.packageManager\n\n let command = ''\n\n switch (packageManager) {\n case 'yarn':\n command = 'yarn'\n break\n case 'npm':\n command = 'npm install'\n break\n case 'pnpm':\n command = 'pnpm install'\n break\n case 'bun':\n command = 'bun install'\n break\n case 'deno':\n command = 'deno install'\n break\n default:\n throw new Error(`Invalid package manager: ${packageManager}`)\n }\n\n consola.start(`Installing dependencies using ${packageManager}`)\n\n const proc = spawnSync(command, {\n cwd: target,\n shell: true,\n stdio: 'inherit'\n })\n\n if (proc.status !== 0) {\n throw new Error(`Failed to install dependencies`)\n }\n\n consola.success(`Dependencies installed`)\n}\n\nprogram\n .name('create-pylon')\n .version(version)\n .arguments('[target]')\n .addOption(new Option('-i, --install', 'Install dependencies'))\n .addOption(\n new Option('-r, --runtime <runtime>', 'Runtime').choices(\n runtimes.map(({key}) => key)\n )\n )\n .addOption(new Option('-t, --template <template>', 'Template'))\n .addOption(\n new Option('-pm, --package-manager <packageManager>', 'Package manager')\n )\n .addOption(\n new Option(\n '--client',\n 'Enable client generation (https://pylon.cronit.io/docs/integrations/gqty)'\n )\n )\n .addOption(new Option('--client-path <clientPath>', 'Client path'))\n .addOption(new Option('--client-port <clientPort>', 'Client port'))\n .action(main)\n\ntype ArgOptions = {\n install: boolean\n runtime: string\n template: string\n packageManager?: PackageManager\n client?: boolean\n clientPath?: string\n clientPort?: string\n}\n\nconst getPreferredPmByRuntime = (\n runtime: string\n): PackageManager | undefined => {\n if (runtime === 'bun') {\n return 'bun'\n } else if (runtime === 'deno') {\n return 'deno'\n }\n}\n\nasync function main(\n targetDir: string | undefined,\n options: ArgOptions,\n command: Command\n) {\n try {\n consola.log(`${command.name()} version ${command.version()}`)\n\n const {\n install: installArg,\n runtime: runtimeArg,\n template: templateArg,\n packageManager: packageManagerArg,\n client: clientArg,\n clientPath: clientPathArg,\n clientPort: clientPortArg\n } = options\n\n let target = ''\n\n if (targetDir) {\n target = targetDir\n\n consola.success(`Using target directory \u2026 ${target}`)\n } else {\n const answer = await input({\n message: 'Target directory',\n default: 'my-pylon'\n })\n target = answer\n }\n\n let projectName = ''\n\n if (target === '.') {\n projectName = path.basename(process.cwd())\n } else {\n projectName = path.basename(target)\n }\n\n const runtimeName =\n runtimeArg ||\n (await select({\n message: 'Which runtime would you like to use?',\n choices: runtimes.map(runtime => ({\n name: `${runtime.name} (${runtime.website})`,\n value: runtime.key\n })),\n default: 0\n }))\n\n if (!runtimeName) {\n throw new Error('No runtime selected')\n }\n\n const runtime = runtimes.find(({key}) => key === runtimeName)\n\n if (!runtime) {\n throw new Error(`Invalid runtime selected: ${runtimeName}`)\n }\n\n const templateName =\n templateArg ||\n (await select({\n message: 'Which template would you like to use?',\n choices: templates\n .filter(template => runtime.templates?.includes(template.key))\n .map(template => ({\n name: template.name,\n value: template.key\n })),\n default: 0\n }))\n\n if (!templateName) {\n throw new Error('No template selected')\n }\n\n if (fs.existsSync(target)) {\n if (fs.readdirSync(target).length > 0) {\n const response = await confirm({\n message: 'Directory not empty. Continue?',\n default: false\n })\n if (!response) {\n process.exit(1)\n }\n }\n } else {\n mkdirp(target)\n }\n\n const install =\n installArg ||\n (await confirm({message: 'Would you like to install dependencies?'}))\n\n await createTemplate({\n name: projectName,\n runtime: runtimeName,\n template: templateName,\n target\n })\n\n const packageManager = detectPackageManager({\n preferredPm: getPreferredPmByRuntime(runtime.key),\n cwd: target\n })\n\n if (install) {\n await installDependencies({target, packageManager})\n }\n\n const client =\n clientArg ||\n (await confirm({\n message:\n 'Would you like to enable client generation? (https://pylon.cronit.io/docs/integrations/gqty)',\n default: false\n }))\n\n let clientRoot: string = ''\n let clientPath: string = ''\n let clientPort: string = ''\n\n if (client) {\n if (!clientPathArg) {\n clientRoot = await input({\n message: 'Path to the root where the client should be generated',\n default: '.'\n })\n\n clientPath = await input({\n message: 'Path to generate the client to',\n default: path.join(clientRoot, 'gqty/index.ts'),\n validate: value => {\n // Check if the path starts with the client root (take care of .)\n if (!value.startsWith(clientRoot === '.' ? '' : clientRoot)) {\n return 'Path must start with the client root'\n }\n\n return true\n }\n })\n }\n\n clientPort =\n clientPortArg ||\n (await input({\n message: 'Port of the pylon server to generate the client from',\n default: '3000'\n }))\n\n consola.start(`Updating pylon dev script to generate client`)\n\n let packagePath: string\n let scriptKey: string\n if (runtime.key === 'deno') {\n packagePath = path.join(target, 'deno.json')\n scriptKey = 'tasks'\n } else {\n packagePath = path.join(target, 'package.json')\n scriptKey = 'scripts'\n }\n\n const devScript = JSON.parse(fs.readFileSync(packagePath, 'utf-8'))\n\n devScript[scriptKey] = {\n ...devScript[scriptKey],\n dev:\n devScript[scriptKey].dev +\n ` --client --client-port ${clientPort} --client-path ${clientPath}`\n }\n\n fs.writeFileSync(packagePath, JSON.stringify(devScript, null, 2))\n\n consola.success(`Pylon dev script updated`)\n }\n\n const runScript = getRunScript(packageManager)\n\n const message = `\n\uD83C\uDF89 ${chalk.green.bold('Pylon created successfully.')}\n\n\uD83D\uDCBB ${chalk.cyan.bold('Continue Developing')}\n ${chalk.yellow('Change directories:')} cd ${chalk.blue(target)}\n ${chalk.yellow('Start dev server:')} ${runScript} dev\n ${chalk.yellow('Deploy:')} ${runScript} deploy\n\n\uD83D\uDCD6 ${chalk.cyan.bold('Explore Documentation')}\n ${chalk.underline.blue('https://pylon.cronit.io/docs')}\n\n\uD83D\uDCAC ${chalk.cyan.bold('Join our Community')}\n ${chalk.underline.blue('https://discord.gg/cbJjkVrnHe')}\n`\n\n await telemetry.sendCreateEvent({\n name: projectName,\n pylonCreateVersion: version,\n runtime: runtimeName,\n template: templateName,\n clientPath: clientPath || undefined,\n clientPort: parseInt(clientPort) || undefined\n })\n\n consola.box(message)\n } catch (e) {\n consola.error(e)\n }\n}\n\nprogram.parse()\n", "import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport process from 'node:process'\nimport {execSync} from 'node:child_process'\nimport consola from 'consola'\n\n// Helper function to check if a command exists\nfunction isCommandAvailable(command: string): boolean {\n try {\n execSync(`${command} --version`, {stdio: 'ignore'})\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\n// Detect Bun\nfunction isBun(): boolean {\n // @ts-ignore: Bun may not be defined\n return typeof Bun !== 'undefined' && isCommandAvailable('bun')\n}\n\n// Detect npm\nfunction isNpm(): boolean {\n return process.env.npm_execpath?.includes('npm') ?? false\n}\n\n// Detect Yarn\nfunction isYarn(): boolean {\n return process.env.npm_execpath?.includes('yarn') ?? false\n}\n\n// Detect Deno\nfunction isDeno(): boolean {\n // @ts-ignore: Deno may not be defined\n return typeof Deno !== 'undefined' && isCommandAvailable('deno')\n}\n\n// Detect pnpm\nfunction isPnpm(): boolean {\n return process.env.npm_execpath?.includes('pnpm') ?? false\n}\n\n// Detect based on lock files\nfunction detectByLockFiles(cwd: string): PackageManager | null {\n if (fs.existsSync(path.join(cwd, 'bun.lockb'))) {\n return 'bun'\n }\n if (fs.existsSync(path.join(cwd, 'package-lock.json'))) {\n return 'npm'\n }\n if (fs.existsSync(path.join(cwd, 'yarn.lock'))) {\n return 'yarn'\n }\n if (\n fs.existsSync(path.join(cwd, 'deno.json')) ||\n fs.existsSync(path.join(cwd, 'deno.lock'))\n ) {\n return 'deno'\n }\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm'\n }\n return null\n}\n\nexport type PackageManager =\n | 'bun'\n | 'npm'\n | 'yarn'\n | 'pnpm'\n | 'deno'\n | 'unknown'\n\n// Main detection function\nexport function detectPackageManager({\n preferredPm,\n cwd = process.cwd()\n}: {\n preferredPm?: PackageManager\n cwd?: string\n}): PackageManager {\n // Check the preferred package manager first\n if (preferredPm && isCommandAvailable(preferredPm)) {\n return preferredPm\n }\n\n // Proceed with detection logic\n if (isBun()) {\n return 'bun'\n }\n if (isNpm()) {\n return 'npm'\n }\n if (isPnpm()) {\n return 'pnpm'\n }\n if (isDeno()) {\n return 'deno'\n }\n if (isYarn()) {\n return 'yarn'\n }\n\n // Fallback to lock file detection\n const lockFileDetection = detectByLockFiles(cwd)\n if (lockFileDetection) {\n consola.info(`Detected package manager by lock file: ${lockFileDetection}`)\n if (isCommandAvailable(lockFileDetection)) {\n return lockFileDetection\n } else {\n consola.warn(\n `Lock file detected, but ${lockFileDetection} is not installed.`\n )\n }\n }\n\n return 'unknown'\n}\n\ntype PackageManagerScript =\n | 'bun'\n | 'npm run'\n | 'yarn'\n | 'pnpm run'\n | 'deno task'\n\n// Run script detection\nexport function getRunScript(pm: PackageManager): PackageManagerScript {\n switch (pm) {\n case 'bun':\n return 'bun'\n case 'npm':\n return 'npm run'\n case 'yarn':\n return 'yarn'\n case 'pnpm':\n return 'pnpm run'\n case 'deno':\n return 'deno task'\n default:\n throw new Error('Unknown package manager')\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAEA,OAAQ,UAAAA,EAAQ,WAAAC,MAA4B,YAC5C,OAAOC,MAAa,UACpB,OAAQ,SAAAC,EAAO,UAAAC,EAAQ,WAAAC,MAAc,oBACrC,OAAOC,MAAU,OACjB,OAAOC,MAAW,QAClB,UAAYC,MAAQ,KAEpB,UAAYC,MAAe,6BAE3B,OAAQ,iBAAAC,OAAoB,MAC5B,OAAQ,WAAAC,OAAc,OAqNtB,OAAQ,aAAAC,OAAgB,gBCjOxB,UAAYC,MAAQ,UACpB,UAAYC,MAAU,YACtB,OAAOC,MAAa,eACpB,OAAQ,YAAAC,MAAe,qBACvB,OAAOC,MAAa,UAGpB,SAASC,EAAmBC,EAA0B,CACpD,GAAI,CACF,OAAAH,EAAS,GAAGG,CAAO,aAAc,CAAC,MAAO,QAAQ,CAAC,EAC3C,EACT,OAASC,EAAG,CACV,eAAQ,MAAMA,CAAC,EACR,EACT,CACF,CAGA,SAASC,GAAiB,CAExB,OAAO,OAAO,IAAQ,KAAeH,EAAmB,KAAK,CAC/D,CAGA,SAASI,GAAiB,CACxB,OAAOP,EAAQ,IAAI,cAAc,SAAS,KAAK,GAAK,EACtD,CAGA,SAASQ,GAAkB,CACzB,OAAOR,EAAQ,IAAI,cAAc,SAAS,MAAM,GAAK,EACvD,CAGA,SAASS,GAAkB,CAEzB,OAAO,OAAO,KAAS,KAAeN,EAAmB,MAAM,CACjE,CAGA,SAASO,IAAkB,CACzB,OAAOV,EAAQ,IAAI,cAAc,SAAS,MAAM,GAAK,EACvD,CAGA,SAASW,GAAkBC,EAAoC,CAC7D,OAAO,aAAgB,OAAKA,EAAK,WAAW,CAAC,EACpC,MAEF,aAAgB,OAAKA,EAAK,mBAAmB,CAAC,EAC5C,MAEF,aAAgB,OAAKA,EAAK,WAAW,CAAC,EACpC,OAGJ,aAAgB,OAAKA,EAAK,WAAW,CAAC,GACtC,aAAgB,OAAKA,EAAK,WAAW,CAAC,EAElC,OAEF,aAAgB,OAAKA,EAAK,gBAAgB,CAAC,EACzC,OAEF,IACT,CAWO,SAASC,EAAqB,CACnC,YAAAC,EACA,IAAAF,EAAMZ,EAAQ,IAAI,CACpB,EAGmB,CAEjB,GAAIc,GAAeX,EAAmBW,CAAW,EAC/C,OAAOA,EAIT,GAAIR,EAAM,EACR,MAAO,MAET,GAAIC,EAAM,EACR,MAAO,MAET,GAAIG,GAAO,EACT,MAAO,OAET,GAAID,EAAO,EACT,MAAO,OAET,GAAID,EAAO,EACT,MAAO,OAIT,IAAMO,EAAoBJ,GAAkBC,CAAG,EAC/C,GAAIG,EAAmB,CAErB,GADAb,EAAQ,KAAK,0CAA0Ca,CAAiB,EAAE,EACtEZ,EAAmBY,CAAiB,EACtC,OAAOA,EAEPb,EAAQ,KACN,2BAA2Ba,CAAiB,oBAC9C,CAEJ,CAEA,MAAO,SACT,CAUO,SAASC,EAAaC,EAA0C,CACrE,OAAQA,EAAI,CACV,IAAK,MACH,MAAO,MACT,IAAK,MACH,MAAO,UACT,IAAK,OACH,MAAO,OACT,IAAK,OACH,MAAO,WACT,IAAK,OACH,MAAO,YACT,QACE,MAAM,IAAI,MAAM,yBAAyB,CAC7C,CACF,CDlIA,IAAMC,GAAaC,GAAc,YAAY,GAAG,EAC1CC,EAAYC,GAAQH,EAAU,EAE9BI,EACG,KAAK,MACP,eAAaC,EAAK,KAAKH,EAAW,KAAM,cAAc,EAAG,OAAO,CACrE,EAAE,QAGJ,SAASI,GAAOC,EAAa,CAC3B,GAAI,CACC,YAAUA,EAAK,CAAC,UAAW,EAAI,CAAC,CACrC,OAASC,EAAG,CACV,GAAIA,aAAa,OACX,SAAUA,GAAKA,EAAE,OAAS,SAAU,OAE1C,MAAMA,CACR,CACF,CAEA,IAAMC,EAKA,CACJ,CACE,IAAK,MACL,KAAM,SACN,QAAS,oBACT,UAAW,CAAC,SAAS,CACvB,EACA,CACE,IAAK,OACL,KAAM,UACN,QAAS,qBACT,UAAW,CAAC,SAAS,CACvB,EACA,CACE,IAAK,aACL,KAAM,qBACN,QAAS,iCACT,UAAW,CAAC,SAAS,CACvB,EACA,CACE,IAAK,OACL,KAAM,OACN,QAAS,oBACT,UAAW,CAAC,SAAS,CACvB,CACF,EAEMC,EAIA,CACJ,CACE,IAAK,UACL,KAAM,UACN,YAAa,kBACf,EACA,CACE,IAAK,WACL,KAAM,oBACN,YAAa,0BACf,CACF,EAEMC,GAA2B,CAC/BC,EACAC,IACG,CACH,IAAIC,EAASF,EAEb,cAAO,QAAQC,CAAS,EAAE,QAAQ,CAAC,CAACE,EAAKC,CAAK,IAAM,CAClDF,EAASA,EAAO,WAAWC,EAAKC,CAAK,CACvC,CAAC,EAEMF,CACT,EACMG,EAA6BV,GAA0B,CAC3D,IAAMW,EAAOX,GAA0B,CACrC,IAAMO,EAAmB,CAAC,EAI1B,OAFiB,cAAYP,CAAG,EAE1B,QAAQY,GAAQ,CACpB,IAAMC,EAAWf,EAAK,KAAKE,EAAKY,CAAI,EAE7B,WAASC,CAAQ,EAAE,YAAY,GACpCN,EAAO,KAAK,GAAGI,EAAIE,CAAQ,CAAC,EAIvB,WAASA,CAAQ,EAAE,OAAO,GAC/BN,EAAO,KAAKM,CAAQ,CAExB,CAAC,EAEMN,CACT,EAEA,OAAOI,EAAIX,CAAG,EAAE,IAAIY,GACXA,EAAK,QAAQZ,EAAK,GAAG,CAC7B,CACH,EAEMc,GAAiB,MAAOC,GAKxB,CACJ,GAAM,CAAC,QAAAC,EAAS,SAAAC,EAAU,OAAAC,CAAM,EAAIH,EAE9BI,EAAcjB,EAAS,KAAK,CAAC,CAAC,IAAAM,CAAG,IAAMA,IAAQQ,CAAO,GAAG,KACzDI,EAAejB,EAAU,KAAK,CAAC,CAAC,IAAAK,CAAG,IAAMA,IAAQS,CAAQ,GAAG,KAElE,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,oBAAoBH,CAAO,EAAE,EAG/C,GAAI,CAACI,EACH,MAAM,IAAI,MAAM,qBAAqBH,CAAQ,EAAE,EAIjD,IAAMI,EAAoBvB,EAAK,KAAKH,EAAW,KAAM,YAAa,QAAQ,EAE1E,GAAI,CAAI,aAAW0B,CAAiB,EAClC,MAAM,IAAI,MAAM,+BAA+BA,CAAiB,EAAE,EAGpE,IAAMC,EAAcxB,EAAK,KAAKH,EAAW,KAAM,YAAaqB,EAASC,CAAQ,EAE7E,GAAI,CAAI,aAAWK,CAAW,EAC5B,MAAM,IAAI,MAAM,uBAAuBA,CAAW,EAAE,EAItD,IAAMC,EAAsBzB,EAAK,KAAK,QAAQ,IAAI,EAAGoB,CAAM,EAE3DM,EAAQ,MAAM,qBAAqBD,CAAmB,EAAE,EAExD,IAAME,EAAUpB,GACPD,GAAyBC,EAAS,CACvC,eAAgBU,EAAQ,IAC1B,CAAC,EAIHL,EAA0BW,CAAiB,EAAE,QAAQT,GAAQ,CAC3D,IAAMc,EAAS5B,EAAK,KAAKuB,EAAmBT,CAAI,EAC5CM,EAASpB,EAAK,KAAKyB,EAAqBX,CAAI,EAI1Ce,EAAY7B,EAAK,QAAQoB,CAAM,EAGrC,GACEF,IAAY,cACZU,EAAO,SAAS,gCAAgC,EAEhD,OAGM,aAAWC,CAAS,GACvB,YAAUA,EAAW,CAAC,UAAW,EAAI,CAAC,EAMvCT,EAAO,SAAS,UAAU,IAC5BA,EAASA,EAAO,QAAQ,WAAY,EAAE,GAGxC,IAAMU,EAAkBH,EAAU,eAAaC,EAAQ,OAAO,CAAC,EAE5D,gBAAcR,EAAQU,CAAe,CAC1C,CAAC,EAGDlB,EAA0BY,CAAW,EAAE,QAAQV,GAAQ,CACrD,IAAMc,EAAS5B,EAAK,KAAKwB,EAAaV,CAAI,EACtCM,EAASpB,EAAK,KAAKyB,EAAqBX,CAAI,EAG1Ce,EAAY7B,EAAK,QAAQoB,CAAM,EAE7B,aAAWS,CAAS,GACvB,YAAUA,EAAW,CAAC,UAAW,EAAI,CAAC,EAMvCT,EAAO,SAAS,UAAU,IAC5BA,EAASA,EAAO,QAAQ,WAAY,EAAE,GAGxC,IAAMU,EAAkBH,EAAU,eAAaC,EAAQ,OAAO,CAAC,EAE5D,gBAAcR,EAAQU,CAAe,CAC1C,CAAC,EAEDJ,EAAQ,QAAQ,eAAe,CACjC,EAKMK,GAAsB,MAAOC,GAG7B,CACJ,IAAMZ,EAASpB,EAAK,QAAQgC,EAAK,MAAM,EACjCC,EAAiBD,EAAK,eAExBE,EAAU,GAEd,OAAQD,EAAgB,CACtB,IAAK,OACHC,EAAU,OACV,MACF,IAAK,MACHA,EAAU,cACV,MACF,IAAK,OACHA,EAAU,eACV,MACF,IAAK,MACHA,EAAU,cACV,MACF,IAAK,OACHA,EAAU,eACV,MACF,QACE,MAAM,IAAI,MAAM,4BAA4BD,CAAc,EAAE,CAChE,CAUA,GARAP,EAAQ,MAAM,iCAAiCO,CAAc,EAAE,EAElDE,GAAUD,EAAS,CAC9B,IAAKd,EACL,MAAO,GACP,MAAO,SACT,CAAC,EAEQ,SAAW,EAClB,MAAM,IAAI,MAAM,gCAAgC,EAGlDM,EAAQ,QAAQ,wBAAwB,CAC1C,EAEAU,EACG,KAAK,cAAc,EACnB,QAAQrC,CAAO,EACf,UAAU,UAAU,EACpB,UAAU,IAAIsC,EAAO,gBAAiB,sBAAsB,CAAC,EAC7D,UACC,IAAIA,EAAO,0BAA2B,SAAS,EAAE,QAC/CjC,EAAS,IAAI,CAAC,CAAC,IAAAM,CAAG,IAAMA,CAAG,CAC7B,CACF,EACC,UAAU,IAAI2B,EAAO,4BAA6B,UAAU,CAAC,EAC7D,UACC,IAAIA,EAAO,0CAA2C,iBAAiB,CACzE,EACC,UACC,IAAIA,EACF,WACA,2EACF,CACF,EACC,UAAU,IAAIA,EAAO,6BAA8B,aAAa,CAAC,EACjE,UAAU,IAAIA,EAAO,6BAA8B,aAAa,CAAC,EACjE,OAAOC,EAAI,EAYd,IAAMC,GACJrB,GAC+B,CAC/B,GAAIA,IAAY,MACd,MAAO,MACF,GAAIA,IAAY,OACrB,MAAO,MAEX,EAEA,eAAeoB,GACbT,EACAZ,EACAiB,EACA,CACA,GAAI,CACFR,EAAQ,IAAI,GAAGQ,EAAQ,KAAK,CAAC,YAAYA,EAAQ,QAAQ,CAAC,EAAE,EAE5D,GAAM,CACJ,QAASM,EACT,QAASC,EACT,SAAUC,EACV,eAAgBC,EAChB,OAAQC,EACR,WAAYC,EACZ,WAAYC,CACd,EAAI7B,EAEAG,EAAS,GAETS,GACFT,EAASS,EAETH,EAAQ,QAAQ,iCAA4BN,CAAM,EAAE,GAMpDA,EAJe,MAAM2B,EAAM,CACzB,QAAS,mBACT,QAAS,UACX,CAAC,EAIH,IAAIC,EAAc,GAEd5B,IAAW,IACb4B,EAAchD,EAAK,SAAS,QAAQ,IAAI,CAAC,EAEzCgD,EAAchD,EAAK,SAASoB,CAAM,EAGpC,IAAMC,EACJoB,GACC,MAAMQ,EAAO,CACZ,QAAS,uCACT,QAAS7C,EAAS,IAAIc,IAAY,CAChC,KAAM,GAAGA,EAAQ,IAAI,KAAKA,EAAQ,OAAO,IACzC,MAAOA,EAAQ,GACjB,EAAE,EACF,QAAS,CACX,CAAC,EAEH,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,qBAAqB,EAGvC,IAAMH,EAAUd,EAAS,KAAK,CAAC,CAAC,IAAAM,CAAG,IAAMA,IAAQW,CAAW,EAE5D,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,6BAA6BG,CAAW,EAAE,EAG5D,IAAMC,EACJoB,GACC,MAAMO,EAAO,CACZ,QAAS,wCACT,QAAS5C,EACN,OAAOc,GAAYD,EAAQ,WAAW,SAASC,EAAS,GAAG,CAAC,EAC5D,IAAIA,IAAa,CAChB,KAAMA,EAAS,KACf,MAAOA,EAAS,GAClB,EAAE,EACJ,QAAS,CACX,CAAC,EAEH,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,sBAAsB,EAGjC,aAAWF,CAAM,EACf,cAAYA,CAAM,EAAE,OAAS,IACjB,MAAM8B,EAAQ,CAC7B,QAAS,iCACT,QAAS,EACX,CAAC,GAEC,QAAQ,KAAK,CAAC,GAIlBjD,GAAOmB,CAAM,EAGf,IAAM+B,EACJX,GACC,MAAMU,EAAQ,CAAC,QAAS,yCAAyC,CAAC,EAErE,MAAMlC,GAAe,CACnB,KAAMgC,EACN,QAAS3B,EACT,SAAUC,EACV,OAAAF,CACF,CAAC,EAED,IAAMa,EAAiBmB,EAAqB,CAC1C,YAAab,GAAwBrB,EAAQ,GAAG,EAChD,IAAKE,CACP,CAAC,EAEG+B,GACF,MAAMpB,GAAoB,CAAC,OAAAX,EAAQ,eAAAa,CAAc,CAAC,EAGpD,IAAMoB,EACJT,GACC,MAAMM,EAAQ,CACb,QACE,+FACF,QAAS,EACX,CAAC,EAECI,EAAqB,GACrBC,EAAqB,GACrBC,EAAqB,GAEzB,GAAIH,EAAQ,CACLR,IACHS,EAAa,MAAMP,EAAM,CACvB,QAAS,wDACT,QAAS,GACX,CAAC,EAEDQ,EAAa,MAAMR,EAAM,CACvB,QAAS,iCACT,QAAS/C,EAAK,KAAKsD,EAAY,eAAe,EAC9C,SAAU3C,GAEHA,EAAM,WAAW2C,IAAe,IAAM,GAAKA,CAAU,EAInD,GAHE,sCAKb,CAAC,GAGHE,EACEV,GACC,MAAMC,EAAM,CACX,QAAS,uDACT,QAAS,MACX,CAAC,EAEHrB,EAAQ,MAAM,8CAA8C,EAE5D,IAAI+B,EACAC,EACAxC,EAAQ,MAAQ,QAClBuC,EAAczD,EAAK,KAAKoB,EAAQ,WAAW,EAC3CsC,EAAY,UAEZD,EAAczD,EAAK,KAAKoB,EAAQ,cAAc,EAC9CsC,EAAY,WAGd,IAAMC,EAAY,KAAK,MAAS,eAAaF,EAAa,OAAO,CAAC,EAElEE,EAAUD,CAAS,EAAI,CACrB,GAAGC,EAAUD,CAAS,EACtB,IACEC,EAAUD,CAAS,EAAE,IACrB,2BAA2BF,CAAU,kBAAkBD,CAAU,EACrE,EAEG,gBAAcE,EAAa,KAAK,UAAUE,EAAW,KAAM,CAAC,CAAC,EAEhEjC,EAAQ,QAAQ,0BAA0B,CAC5C,CAEA,IAAMkC,EAAYC,EAAa5B,CAAc,EAEvC6B,EAAU;AAAA,YACfC,EAAM,MAAM,KAAK,6BAA6B,CAAC;AAAA;AAAA,YAE/CA,EAAM,KAAK,KAAK,qBAAqB,CAAC;AAAA,MACrCA,EAAM,OAAO,qBAAqB,CAAC,OAAOA,EAAM,KAAK3C,CAAM,CAAC;AAAA,MAC5D2C,EAAM,OAAO,mBAAmB,CAAC,IAAIH,CAAS;AAAA,MAC9CG,EAAM,OAAO,SAAS,CAAC,IAAIH,CAAS;AAAA;AAAA,YAErCG,EAAM,KAAK,KAAK,uBAAuB,CAAC;AAAA,MACvCA,EAAM,UAAU,KAAK,8BAA8B,CAAC;AAAA;AAAA,YAErDA,EAAM,KAAK,KAAK,oBAAoB,CAAC;AAAA,MACpCA,EAAM,UAAU,KAAK,+BAA+B,CAAC;AAAA,EAGvD,MAAgB,kBAAgB,CAC9B,KAAMf,EACN,mBAAoBjD,EACpB,QAASsB,EACT,SAAUC,EACV,WAAYiC,GAAc,OAC1B,WAAY,SAASC,CAAU,GAAK,MACtC,CAAC,EAED9B,EAAQ,IAAIoC,CAAO,CACrB,OAAS3D,EAAG,CACVuB,EAAQ,MAAMvB,CAAC,CACjB,CACF,CAEAiC,EAAQ,MAAM",
|
|
6
|
+
"names": ["Option", "program", "consola", "input", "select", "confirm", "path", "chalk", "fs", "telemetry", "fileURLToPath", "dirname", "spawnSync", "fs", "path", "process", "execSync", "consola", "isCommandAvailable", "command", "e", "isBun", "isNpm", "isYarn", "isDeno", "isPnpm", "detectByLockFiles", "cwd", "detectPackageManager", "preferredPm", "lockFileDetection", "getRunScript", "pm", "__filename", "fileURLToPath", "__dirname", "dirname", "version", "path", "mkdirp", "dir", "e", "runtimes", "templates", "injectVariablesInContent", "content", "variables", "result", "key", "value", "readdirFilesSyncRecursive", "run", "file", "filePath", "createTemplate", "options", "runtime", "template", "target", "runtimeName", "templateName", "sharedTemplateDir", "templateDir", "targetDirectoryPath", "consola", "inject", "source", "targetDir", "injectedContent", "installDependencies", "args", "packageManager", "command", "spawnSync", "program", "Option", "main", "getPreferredPmByRuntime", "installArg", "runtimeArg", "templateArg", "packageManagerArg", "clientArg", "clientPathArg", "clientPortArg", "input", "projectName", "select", "confirm", "install", "detectPackageManager", "client", "clientRoot", "clientPath", "clientPort", "packagePath", "scriptKey", "devScript", "runScript", "getRunScript", "message", "chalk"]
|
|
7
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-pylon",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.1.2-canary-
|
|
4
|
+
"version": "1.1.2-canary-20250205112941.f25b5eb354aed2fceb39bcc739d912365da8077b",
|
|
5
5
|
"description": "CLI for creating a Pylon",
|
|
6
6
|
"bin": "./dist/index.js",
|
|
7
7
|
"files": [
|
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"commander": "^12.1.0",
|
|
23
23
|
"consola": "^3.2.3",
|
|
24
24
|
"hono": "^4",
|
|
25
|
-
"@getcronit/pylon-telemetry": "^1.0.2-canary-
|
|
25
|
+
"@getcronit/pylon-telemetry": "^1.0.2-canary-20250205112941.f25b5eb354aed2fceb39bcc739d912365da8077b"
|
|
26
26
|
},
|
|
27
27
|
"engines": {
|
|
28
28
|
"node": ">=18.0.0"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
|
-
"build": "rimraf ./dist && esbuild ./src/index.ts --bundle --platform=node --target=node18 --format=esm --minify --outdir=./dist --sourcemap=
|
|
31
|
+
"build": "rimraf ./dist && esbuild ./src/index.ts --bundle --platform=node --target=node18 --format=esm --minify --outdir=./dist --sourcemap=linked --packages=external"
|
|
32
32
|
}
|
|
33
33
|
}
|