From 2ab1f40000652e04c6d731d09ee9da8342de2bfd Mon Sep 17 00:00:00 2001 From: Jacob Nguyen <76754747+jacoobes@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:40:48 -0600 Subject: [PATCH] Install cli option --- .gitignore | 1 + .yarn/install-state.gz | Bin 4088 -> 0 bytes package.json | 4 +++- src/index.ts | 42 +++++++++++++++++++++++++++++++++++------ yarn.lock | 36 +++++++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 7 deletions(-) delete mode 100644 .yarn/install-state.gz diff --git a/.gitignore b/.gitignore index 396b196..5633fd4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ dist/ .yarn/cache/ +.yarn/install-state.gz diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz deleted file mode 100644 index 0e36a3216e79c5811bfe89e19beba2675f8b173d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4088 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 diff --git a/package.json b/package.json index ea9c6fa..d62f805 100644 --- a/package.json +++ b/package.json @@ -20,11 +20,13 @@ "dependencies": { "colorette": "^2.0.20", "minimist": "^1.2.8", - "prompts": "^2.4.2" + "prompts": "^2.4.2", + "semver": "^7.5.4" }, "devDependencies": { "@types/minimist": "^1.2.2", "@types/prompts": "^2.4.4", + "@types/semver": "^7.5.6", "typescript": "^5.0.0" }, "engines": { diff --git a/src/index.ts b/src/index.ts index 1222fbd..913dae0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,8 +4,9 @@ import minimist from 'minimist'; import path from 'path'; import fs from 'fs'; import assert from 'node:assert'; -import { spawn, } from 'node:child_process'; +import { spawn, execSync } from 'node:child_process'; import { fileURLToPath } from 'node:url'; +import semver from 'semver'; const argv = minimist<{ template?: string; @@ -100,7 +101,7 @@ async function runInteractive() { selectedTemplate, argv.overwrite ); - + const installPkgs = await prompt([which_manager], { onCancel: () => { console.log('Canceled install '), process.exit(0); @@ -211,8 +212,9 @@ function createConfig(isTypescript: boolean) { async function init() { console.log(`Working in: ` + cwd); + if (!argv.template) { - await runInteractive(); + await runInteractive(); } else { assert(argv.name); assert.match( @@ -224,9 +226,37 @@ async function init() { const usebuild = argv['no-build'] ?? true; await runShort(argv.template, argv.name, usebuild, argv.install); } - console.log( - magentaBright('Done!') + const installCli = await prompt([{ + type: 'confirm', + name: 'installCli', + message: 'install cli? (If you installed a template with `cli`, This is required!!)\n', + initial: true + }]) + if(installCli) { + const jsonDeps = JSON.parse(String(execSync('npm ls -g --json'))); + const cliVersion = jsonDeps.dependencies['@sern/cli']?.version; + if(semver.satisfies(cliVersion, '1.x')) { + console.log('You already have a good enough sern cli.'); + } else { + console.log(`Installing ${magentaBright('@sern/cli')}:`) + await new Promise((resolve, reject) => { + spawn('npm', ['install', '-g', '@sern/cli@latest'], { stdio: 'inherit', cwd, shell: true }); + process.on('data', (s) => console.log(s.toString())); + process.on('error', (e) => { + console.error(e); + console.log(red('Something went wrong with installing. Please do it yourself.')); + reject(); + }); + process.on('exit', resolve) + }) + + + } + + } + console.log(magentaBright('Done!') + ' visit https://sern.dev for documentation and join https://sern.dev/discord! Happy hacking :)'); + } function emptyDir(dir: string) { @@ -245,7 +275,7 @@ async function copyFolderRecursiveAsync(source: string, target: string) { try { // Create target folder if it doesn't exist if (!fs.existsSync(target)) { - fs.mkdirSync(target); + fs.mkdirSync(target); } // Get all files and folders in the source folder diff --git a/yarn.lock b/yarn.lock index 5956f15..288c471 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11,9 +11,11 @@ __metadata: dependencies: "@types/minimist": ^1.2.2 "@types/prompts": ^2.4.4 + "@types/semver": ^7.5.6 colorette: ^2.0.20 minimist: ^1.2.8 prompts: ^2.4.2 + semver: ^7.5.4 typescript: ^5.0.0 bin: create-bot: index.js @@ -45,6 +47,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.5.6": + version: 7.5.6 + resolution: "@types/semver@npm:7.5.6" + checksum: 563a0120ec0efcc326567db2ed920d5d98346f3638b6324ea6b50222b96f02a8add3c51a916b6897b51523aad8ac227d21d3dcf8913559f1bfc6c15b14d23037 + languageName: node + linkType: hard + "colorette@npm:^2.0.20": version: 2.0.20 resolution: "colorette@npm:2.0.20" @@ -59,6 +68,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + "minimist@npm:^1.2.8": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -76,6 +94,17 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -102,3 +131,10 @@ __metadata: checksum: 6f0a9dca6bf4ce9dcaf4e282aade55ef4c56ecb5fb98d0a4a5c0113398815aea66d871b5611e83353e5953a19ed9ef103cf5a76ac0f276d550d1e7cd5344f61e languageName: node linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard