From e0c5907f0a51beadd83f5803e3b52f7a4fb120df Mon Sep 17 00:00:00 2001 From: pooya parsa Date: Thu, 8 Sep 2022 17:43:04 +0200 Subject: [PATCH] feat(nuxi): switch to `unjs/giget` for `nuxi init` (#7361) --- docs/content/3.api/5.commands/init.md | 5 +- packages/nuxi/package.json | 2 +- packages/nuxi/src/commands/init.ts | 33 +++---- yarn.lock | 127 ++++---------------------- 4 files changed, 37 insertions(+), 130 deletions(-) diff --git a/docs/content/3.api/5.commands/init.md b/docs/content/3.api/5.commands/init.md index 99feebb6ef..d228887fdc 100644 --- a/docs/content/3.api/5.commands/init.md +++ b/docs/content/3.api/5.commands/init.md @@ -8,6 +8,9 @@ The `init` command initializes a fresh Nuxt project. Option | Default | Description -------------------------|-----------------|------------------ -`--verbose, -v` | `false` | Log information about the installation process. `--template, -t` | `nuxt/starter#v3` | Specify a Git repository to use as a template. +`--force` | `false` | Force clone to any existing directory. +`--offline` | `false` | Do not attempt to download from github and only use local cache. +`--prefer-offline` | `false` | Try local cache first. (might be outdated) +`--shell` | `false` | (experimental) Open shell in cloned directory. `dir` | `nuxt-app` | Name of the install directory. diff --git a/packages/nuxi/package.json b/packages/nuxi/package.json index bc76c8dfac..2e87b4712c 100644 --- a/packages/nuxi/package.json +++ b/packages/nuxi/package.json @@ -34,6 +34,7 @@ "destr": "^1.1.1", "execa": "^6.1.0", "flat": "^5.0.2", + "giget": "^0.0.4", "jiti": "^1.15.0", "listhen": "^0.2.15", "mlly": "^0.5.14", @@ -44,7 +45,6 @@ "scule": "^0.3.2", "semver": "^7.3.7", "superb": "^4.0.0", - "tiged": "^2.12.0", "unbuild": "latest" }, "optionalDependencies": { diff --git a/packages/nuxi/src/commands/init.ts b/packages/nuxi/src/commands/init.ts index 6022aeaa34..4006180e57 100644 --- a/packages/nuxi/src/commands/init.ts +++ b/packages/nuxi/src/commands/init.ts @@ -1,6 +1,4 @@ -import { existsSync, readdirSync } from 'node:fs' -// @ts-expect-error missing types -import createTiged from 'tiged' +import { downloadRepo, startShell } from 'giget' import { relative, resolve } from 'pathe' import superb from 'superb' import consola from 'consola' @@ -28,30 +26,21 @@ const resolveTemplate = (template: string | boolean) => { export default defineNuxtCommand({ meta: { name: 'init', - usage: 'npx nuxi init|create [--verbose|-v] [--template,-t] [dir]', + usage: 'npx nuxi init|create [--template,-t] [--force] [--offline] [--prefer-offline] [--shell] [dir]', description: 'Initialize a fresh project' }, async invoke (args) { // Clone template const src = resolveTemplate(args.template || args.t) const dstDir = resolve(process.cwd(), args._[0] || 'nuxt-app') - const tiged = createTiged(src, { cache: false /* TODO: buggy */, verbose: (args.verbose || args.v) }) - if (existsSync(dstDir) && readdirSync(dstDir).length) { - consola.error(`Directory ${dstDir} is not empty. Please pick another name or remove it first. Aborting.`) - process.exit(1) - } - const formatArgs = (msg: string) => msg.replace('options.', '--') - tiged.on('warn', (event: any) => consola.warn(formatArgs(event.message))) - tiged.on('info', (event: any) => consola.info(formatArgs(event.message))) - try { - await tiged.clone(dstDir) - } catch (e: any) { - if (e.toString().includes('could not find commit hash')) { - consola.error(`Failed to clone template from \`${src}\`. Please check the repo is valid and that you have installed \`git\` correctly.`) - process.exit(1) - } - throw e + if (args.verbose || args.v) { + process.env.DEBUG = process.env.DEBUG || 'true' } + await downloadRepo(src, dstDir, { + force: args.force, + offline: args.offline, + preferOffline: args['prefer-offline'] + }) // Show next steps const relativeDist = rpath(dstDir) @@ -65,5 +54,9 @@ export default defineNuxtCommand({ for (const step of nextSteps) { consola.log(` ${step}\n`) } + + if (args.shell) { + startShell(dstDir) + } } }) diff --git a/yarn.lock b/yarn.lock index a794bdb5df..01ce051562 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4704,13 +4704,6 @@ __metadata: languageName: node linkType: hard -"colorette@npm:1.2.1": - version: 1.2.1 - resolution: "colorette@npm:1.2.1" - checksum: 06e2fcdb9e2a2c527ac84509a56eadf481cde1768933eb612808f3bb3a9d9872c06b4a9f95e4d0f7befeef8b38307f79b88242d9ea52470d1125520b8116de08 - languageName: node - linkType: hard - "colorette@npm:^2.0.10, colorette@npm:^2.0.19": version: 2.0.19 resolution: "colorette@npm:2.0.19" @@ -5642,7 +5635,7 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:2.3.6, enquirer@npm:~2.3.6": +"enquirer@npm:~2.3.6": version: 2.3.6 resolution: "enquirer@npm:2.3.6" dependencies: @@ -7323,13 +7316,6 @@ __metadata: languageName: node linkType: hard -"fuzzysearch@npm:1.0.3": - version: 1.0.3 - resolution: "fuzzysearch@npm:1.0.3" - checksum: 6a6c04ec2e87ab77e9b5a310d979bd3555f836ef17d9a231d01292c9447af81dcfb3241f0e315efd750535b12c937691754e9a4fb08a8c45979f7f0007e3742d - languageName: node - linkType: hard - "gauge@npm:^3.0.0": version: 3.0.2 resolution: "gauge@npm:3.0.2" @@ -7456,6 +7442,21 @@ __metadata: languageName: node linkType: hard +"giget@npm:^0.0.4": + version: 0.0.4 + resolution: "giget@npm:0.0.4" + dependencies: + colorette: ^2.0.19 + mri: ^1.2.0 + node-fetch-native: ^0.1.4 + pathe: ^0.3.7 + tar: ^6.1.11 + bin: + giget: dist/cli.mjs + checksum: 6e6f86c125c477d47133ddc8768bcb5e4d91d9ada6f372174e2b56d1d854cefdc1e7b5e64884e618126dcc147cfc1448f661698cd6ddc6fce29703fa1a50dea9 + languageName: node + linkType: hard + "git-config-path@npm:^2.0.0": version: 2.0.0 resolution: "git-config-path@npm:2.0.0" @@ -7680,7 +7681,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -7818,13 +7819,6 @@ __metadata: languageName: node linkType: hard -"home-or-tmp@npm:3.0.0": - version: 3.0.0 - resolution: "home-or-tmp@npm:3.0.0" - checksum: 1800f305bf8a230b2dcec564955efd60dc7b173f11f64060a78bad2910f82d6349e47b7b7a95ad203440e3654ce0cd72b9f22efff1bf43b34b131135ee0494e5 - languageName: node - linkType: hard - "hookable@npm:^5.2.2, hookable@npm:^5.3.0": version: 5.3.0 resolution: "hookable@npm:5.3.0" @@ -7929,16 +7923,6 @@ __metadata: languageName: node linkType: hard -"https-proxy-agent@npm:5.0.0": - version: 5.0.0 - resolution: "https-proxy-agent@npm:5.0.0" - dependencies: - agent-base: 6 - debug: 4 - checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53 - languageName: node - linkType: hard - "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -9653,13 +9637,6 @@ __metadata: languageName: node linkType: hard -"mri@npm:1.1.6": - version: 1.1.6 - resolution: "mri@npm:1.1.6" - checksum: c568269a40e2e95d48f28b88ab8b24bdc7c586edbfbb3e5ce7a4e3cee0665aef673b86bc2b63c98289d29b573a39d0e054924e415286a8dafdabfc68785746c7 - languageName: node - linkType: hard - "mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" @@ -10174,6 +10151,7 @@ __metadata: execa: ^6.1.0 flat: ^5.0.2 fsevents: ~2.3.2 + giget: ^0.0.4 jiti: ^1.15.0 listhen: ^0.2.15 mlly: ^0.5.14 @@ -10184,7 +10162,6 @@ __metadata: scule: ^0.3.2 semver: ^7.3.7 superb: ^4.0.0 - tiged: ^2.12.0 unbuild: latest dependenciesMeta: fsevents: @@ -11860,7 +11837,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:3.0.2, rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": +"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: @@ -11871,17 +11848,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.5.2": - version: 2.7.1 - resolution: "rimraf@npm:2.7.1" - dependencies: - glob: ^7.1.3 - bin: - rimraf: ./bin.js - checksum: cdc7f6eacb17927f2a075117a823e1c5951792c6498ebcce81ca8203454a811d4cf8900314154d3259bb8f0b42ab17f67396a8694a54cae3283326e57ad250cd - languageName: node - linkType: hard - "rollup-plugin-dts@npm:^4.2.2": version: 4.2.2 resolution: "rollup-plugin-dts@npm:4.2.2" @@ -12053,17 +12019,6 @@ __metadata: languageName: node linkType: hard -"sander@npm:0.6.0": - version: 0.6.0 - resolution: "sander@npm:0.6.0" - dependencies: - graceful-fs: ^4.1.3 - mkdirp: ^0.5.1 - rimraf: ^2.5.2 - checksum: 6e4dcb50e42371858f43410aa2e8c3290baadafc864731f7dc0bcc2afed60d977bd0e3f16555b25ff4225a25fe4bfe0ef864288da3f0b02524610dc35fe2ef24 - languageName: node - linkType: hard - "schema-utils@npm:^2.7.0": version: 2.7.1 resolution: "schema-utils@npm:2.7.1" @@ -12777,20 +12732,6 @@ __metadata: languageName: node linkType: hard -"tar@npm:6.1.0": - version: 6.1.0 - resolution: "tar@npm:6.1.0" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^3.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: 0638a405b625263e0c47e97f0ea5e871b1a549da4593e31bf1792bcc83d97c28065ed172669f186744526637ea627a424d519ddd99f3fd52b17ac75f58f43519 - languageName: node - linkType: hard - "tar@npm:^4.4.1": version: 4.4.19 resolution: "tar@npm:4.4.19" @@ -12903,26 +12844,6 @@ __metadata: languageName: node linkType: hard -"tiged@npm:^2.12.0": - version: 2.12.0 - resolution: "tiged@npm:2.12.0" - dependencies: - colorette: 1.2.1 - enquirer: 2.3.6 - fuzzysearch: 1.0.3 - home-or-tmp: 3.0.0 - https-proxy-agent: 5.0.0 - mri: 1.1.6 - rimraf: 3.0.2 - sander: 0.6.0 - tar: 6.1.0 - tiny-glob: 0.2.8 - bin: - degit: bin.js - checksum: cd76e1bc8a6abe91046c1e46c116fec95d0ed19c1b6670bb92dd9424cdfc048bcbf41a88e44d4f37e902dca89ba44fed513abe40598417da78c7e16bd78a2177 - languageName: node - linkType: hard - "time-fix-plugin@npm:^2.0.7": version: 2.0.7 resolution: "time-fix-plugin@npm:2.0.7" @@ -12932,16 +12853,6 @@ __metadata: languageName: node linkType: hard -"tiny-glob@npm:0.2.8": - version: 0.2.8 - resolution: "tiny-glob@npm:0.2.8" - dependencies: - globalyzer: 0.1.0 - globrex: ^0.1.2 - checksum: 2d800da5731df66b6f84eaa2024ebf7cd0c6e13b8334d5ea4ab902f38eeffa03455f465109cf79a2d4fc324c4a569c3cb83809e3380dac82a7689f5d46ac7dfe - languageName: node - linkType: hard - "tiny-glob@npm:^0.2.9": version: 0.2.9 resolution: "tiny-glob@npm:0.2.9"