@nuxt/cli-nightly 3.29.4-20251009-171833-0915ec9 → 3.29.4-20251021-190716-bbf70fc

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.
Files changed (69) hide show
  1. package/dist/_shared-C3vB2YLc.mjs +42 -0
  2. package/dist/_utils-DTrPahho.mjs +29 -0
  3. package/dist/add-BGMHIn5L.mjs +333 -0
  4. package/dist/add-CRBwIlDF.mjs +298 -0
  5. package/dist/add-hFFIzkcy.mjs +10 -0
  6. package/dist/analyze-CUKAi_IN.mjs +115 -0
  7. package/dist/banner-CqfM_0Qo.mjs +55 -0
  8. package/dist/build-BSxJLNs_.mjs +78 -0
  9. package/dist/build-KNIBU0AI.mjs +9 -0
  10. package/dist/cleanup-8GRakeLu.mjs +31 -0
  11. package/dist/dev/index.d.mts +87 -83
  12. package/dist/dev/index.mjs +7 -23
  13. package/dist/dev-Bs_0dzlh.mjs +591 -0
  14. package/dist/dev-CnQwDUaD.mjs +7 -0
  15. package/dist/dev-L7lhoThJ.mjs +438 -0
  16. package/dist/dev-child-CSiX6Uyv.mjs +37 -0
  17. package/dist/devtools-BLGzUSNU.mjs +44 -0
  18. package/dist/env-Dz4K_NkM.mjs +12 -0
  19. package/dist/fs-ewAp6tjM.mjs +40 -0
  20. package/dist/generate-CGy3-x2K.mjs +35 -0
  21. package/dist/index.d.mts +9 -18
  22. package/dist/index.mjs +129 -8
  23. package/dist/info-BDdsghj1.mjs +120 -0
  24. package/dist/init-_n9DXzzY.mjs +336 -0
  25. package/dist/kit-xFxVGu6d.mjs +37 -0
  26. package/dist/logger-Dk0gkCkX.mjs +7 -0
  27. package/dist/module-CqBrGD-s.mjs +17 -0
  28. package/dist/nuxt-Cc9ZTk7m.mjs +44 -0
  29. package/dist/packageManagers-DbVB5cXf.mjs +9 -0
  30. package/dist/prepare-B0KOhO-L.mjs +7 -0
  31. package/dist/prepare-xI978yFg.mjs +49 -0
  32. package/dist/preview-C5fNqrC6.mjs +109 -0
  33. package/dist/search-DCyXfxzn.mjs +113 -0
  34. package/dist/test-CBt1emEB.mjs +55 -0
  35. package/dist/typecheck-DCWe7Iej.mjs +102 -0
  36. package/dist/upgrade-BMSFcUWJ.mjs +184 -0
  37. package/dist/versions-CSy_3o_-.mjs +18 -0
  38. package/package.json +13 -13
  39. package/dist/chunks/add.mjs +0 -381
  40. package/dist/chunks/add2.mjs +0 -319
  41. package/dist/chunks/analyze.mjs +0 -139
  42. package/dist/chunks/build.mjs +0 -94
  43. package/dist/chunks/cleanup.mjs +0 -34
  44. package/dist/chunks/dev-child.mjs +0 -38
  45. package/dist/chunks/dev.mjs +0 -709
  46. package/dist/chunks/devtools.mjs +0 -46
  47. package/dist/chunks/generate.mjs +0 -45
  48. package/dist/chunks/index.mjs +0 -507
  49. package/dist/chunks/index2.mjs +0 -15
  50. package/dist/chunks/info.mjs +0 -150
  51. package/dist/chunks/init.mjs +0 -413
  52. package/dist/chunks/prepare.mjs +0 -57
  53. package/dist/chunks/preview.mjs +0 -131
  54. package/dist/chunks/search.mjs +0 -114
  55. package/dist/chunks/test.mjs +0 -62
  56. package/dist/chunks/typecheck.mjs +0 -85
  57. package/dist/chunks/upgrade.mjs +0 -214
  58. package/dist/dev/index.d.ts +0 -94
  59. package/dist/index.d.ts +0 -23
  60. package/dist/shared/cli-nightly.B9AmABr3.mjs +0 -5
  61. package/dist/shared/cli-nightly.BRlCc6aT.mjs +0 -204
  62. package/dist/shared/cli-nightly.BSm0_9Hr.mjs +0 -7
  63. package/dist/shared/cli-nightly.Bu_9IHj2.mjs +0 -51
  64. package/dist/shared/cli-nightly.Cr-OCgdO.mjs +0 -37
  65. package/dist/shared/cli-nightly.DHenkA1C.mjs +0 -14
  66. package/dist/shared/cli-nightly.DPmMxQ6h.mjs +0 -33
  67. package/dist/shared/cli-nightly.DS8guhZv.mjs +0 -52
  68. package/dist/shared/cli-nightly.DkO5RR_e.mjs +0 -14
  69. package/dist/shared/cli-nightly.qKvs7FJ2.mjs +0 -36
@@ -0,0 +1,44 @@
1
+ import { t as logger } from "./logger-Dk0gkCkX.mjs";
2
+ import { r as rmRecursive } from "./fs-ewAp6tjM.mjs";
3
+ import { promises } from "node:fs";
4
+ import { dirname, resolve } from "pathe";
5
+ import { hash } from "ohash";
6
+
7
+ //#region ../nuxi/src/utils/nuxt.ts
8
+ async function cleanupNuxtDirs(rootDir, buildDir) {
9
+ logger.info("Cleaning up generated Nuxt files and caches...");
10
+ await rmRecursive([
11
+ buildDir,
12
+ ".output",
13
+ "dist",
14
+ "node_modules/.vite",
15
+ "node_modules/.cache"
16
+ ].map((dir) => resolve(rootDir, dir)));
17
+ }
18
+ function nuxtVersionToGitIdentifier(version) {
19
+ const id = /\.([0-9a-f]{7,8})$/.exec(version);
20
+ if (id?.[1]) return id[1];
21
+ return `v${version}`;
22
+ }
23
+ function resolveNuxtManifest(nuxt) {
24
+ const manifest = {
25
+ _hash: null,
26
+ project: { rootDir: nuxt.options.rootDir },
27
+ versions: { nuxt: nuxt._version }
28
+ };
29
+ manifest._hash = hash(manifest);
30
+ return manifest;
31
+ }
32
+ async function writeNuxtManifest(nuxt, manifest = resolveNuxtManifest(nuxt)) {
33
+ const manifestPath = resolve(nuxt.options.buildDir, "nuxt.json");
34
+ await promises.mkdir(dirname(manifestPath), { recursive: true });
35
+ await promises.writeFile(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
36
+ return manifest;
37
+ }
38
+ async function loadNuxtManifest(buildDir) {
39
+ const manifestPath = resolve(buildDir, "nuxt.json");
40
+ return await promises.readFile(manifestPath, "utf-8").then((data) => JSON.parse(data)).catch(() => null);
41
+ }
42
+
43
+ //#endregion
44
+ export { writeNuxtManifest as a, resolveNuxtManifest as i, loadNuxtManifest as n, nuxtVersionToGitIdentifier as r, cleanupNuxtDirs as t };
@@ -0,0 +1,9 @@
1
+ import { execSync } from "node:child_process";
2
+
3
+ //#region ../nuxi/src/utils/packageManagers.ts
4
+ function getPackageManagerVersion(name) {
5
+ return execSync(`${name} --version`).toString("utf8").trim();
6
+ }
7
+
8
+ //#endregion
9
+ export { getPackageManagerVersion as t };
@@ -0,0 +1,7 @@
1
+ import "./_shared-C3vB2YLc.mjs";
2
+ import "./logger-Dk0gkCkX.mjs";
3
+ import "./fs-ewAp6tjM.mjs";
4
+ import "./kit-xFxVGu6d.mjs";
5
+ import { t as prepare_default } from "./prepare-xI978yFg.mjs";
6
+
7
+ export { prepare_default as default };
@@ -0,0 +1,49 @@
1
+ import { a as legacyRootDirArgs, i as extendsArgs, n as dotEnvArgs, o as logLevelArgs, r as envNameArgs, t as cwdArgs } from "./_shared-C3vB2YLc.mjs";
2
+ import { t as logger } from "./logger-Dk0gkCkX.mjs";
3
+ import { t as clearBuildDir } from "./fs-ewAp6tjM.mjs";
4
+ import { t as loadKit } from "./kit-xFxVGu6d.mjs";
5
+ import process from "node:process";
6
+ import { defineCommand } from "citty";
7
+ import { relative, resolve } from "pathe";
8
+
9
+ //#region ../nuxi/src/commands/prepare.ts
10
+ var prepare_default = defineCommand({
11
+ meta: {
12
+ name: "prepare",
13
+ description: "Prepare Nuxt for development/build"
14
+ },
15
+ args: {
16
+ ...dotEnvArgs,
17
+ ...cwdArgs,
18
+ ...logLevelArgs,
19
+ ...envNameArgs,
20
+ ...extendsArgs,
21
+ ...legacyRootDirArgs
22
+ },
23
+ async run(ctx) {
24
+ process.env.NODE_ENV = process.env.NODE_ENV || "production";
25
+ const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
26
+ const { loadNuxt, buildNuxt, writeTypes } = await loadKit(cwd);
27
+ const nuxt = await loadNuxt({
28
+ cwd,
29
+ dotenv: {
30
+ cwd,
31
+ fileName: ctx.args.dotenv
32
+ },
33
+ envName: ctx.args.envName,
34
+ overrides: {
35
+ _prepare: true,
36
+ logLevel: ctx.args.logLevel,
37
+ ...ctx.args.extends && { extends: ctx.args.extends },
38
+ ...ctx.data?.overrides
39
+ }
40
+ });
41
+ await clearBuildDir(nuxt.options.buildDir);
42
+ await buildNuxt(nuxt);
43
+ await writeTypes(nuxt);
44
+ logger.success("Types generated in", relative(process.cwd(), nuxt.options.buildDir));
45
+ }
46
+ });
47
+
48
+ //#endregion
49
+ export { prepare_default as t };
@@ -0,0 +1,109 @@
1
+ import { a as legacyRootDirArgs, i as extendsArgs, n as dotEnvArgs, o as logLevelArgs, r as envNameArgs, t as cwdArgs } from "./_shared-C3vB2YLc.mjs";
2
+ import { t as logger } from "./logger-Dk0gkCkX.mjs";
3
+ import { t as loadKit } from "./kit-xFxVGu6d.mjs";
4
+ import { dirname, relative } from "node:path";
5
+ import process from "node:process";
6
+ import { defineCommand } from "citty";
7
+ import { existsSync, promises } from "node:fs";
8
+ import { resolve as resolve$1 } from "pathe";
9
+ import { box, colors } from "consola/utils";
10
+ import { getArgs } from "listhen/cli";
11
+ import { x } from "tinyexec";
12
+ import { setupDotenv } from "c12";
13
+
14
+ //#region ../nuxi/src/commands/preview.ts
15
+ const command = defineCommand({
16
+ meta: {
17
+ name: "preview",
18
+ description: "Launches Nitro server for local testing after `nuxi build`."
19
+ },
20
+ args: {
21
+ ...cwdArgs,
22
+ ...logLevelArgs,
23
+ ...envNameArgs,
24
+ ...extendsArgs,
25
+ ...legacyRootDirArgs,
26
+ port: {
27
+ ...getArgs().port,
28
+ alias: ["p"]
29
+ },
30
+ ...dotEnvArgs
31
+ },
32
+ async run(ctx) {
33
+ process.env.NODE_ENV = process.env.NODE_ENV || "production";
34
+ const cwd = resolve$1(ctx.args.cwd || ctx.args.rootDir);
35
+ const { loadNuxt } = await loadKit(cwd);
36
+ const nitroJSONPaths = [await new Promise((res) => {
37
+ loadNuxt({
38
+ cwd,
39
+ envName: ctx.args.envName,
40
+ ready: true,
41
+ overrides: {
42
+ ...ctx.args.extends && { extends: ctx.args.extends },
43
+ modules: [function(_, nuxt) {
44
+ nuxt.hook("nitro:init", (nitro) => {
45
+ res(resolve$1(nuxt.options.srcDir || cwd, nitro.options.output.dir || ".output", "nitro.json"));
46
+ });
47
+ }]
48
+ }
49
+ }).then((nuxt) => nuxt.close()).catch(() => "");
50
+ }), resolve$1(cwd, ".output", "nitro.json")].filter(Boolean);
51
+ const nitroJSONPath = nitroJSONPaths.find((p) => existsSync(p));
52
+ if (!nitroJSONPath) {
53
+ logger.error("Cannot find `nitro.json`. Did you run `nuxi build` first? Search path:\n", nitroJSONPaths);
54
+ process.exit(1);
55
+ }
56
+ const outputPath = dirname(nitroJSONPath);
57
+ const nitroJSON = JSON.parse(await promises.readFile(nitroJSONPath, "utf-8"));
58
+ if (!nitroJSON.commands.preview) {
59
+ logger.error("Preview is not supported for this build.");
60
+ process.exit(1);
61
+ }
62
+ const info = [
63
+ ["Node.js:", `v${process.versions.node}`],
64
+ ["Nitro Preset:", nitroJSON.preset],
65
+ ["Working directory:", relative(process.cwd(), outputPath)]
66
+ ];
67
+ const _infoKeyLen = Math.max(...info.map(([label]) => label.length));
68
+ logger.log(box([
69
+ "You are running Nuxt production build in preview mode.",
70
+ `For production deployments, please directly use ${colors.cyan(nitroJSON.commands.preview)} command.`,
71
+ "",
72
+ ...info.map(([label, value]) => `${label.padEnd(_infoKeyLen, " ")} ${colors.cyan(value)}`)
73
+ ].join("\n"), {
74
+ title: colors.yellow("Preview Mode"),
75
+ style: { borderColor: "yellow" }
76
+ }));
77
+ const envFileName = ctx.args.dotenv || ".env";
78
+ if (existsSync(resolve$1(cwd, envFileName))) {
79
+ logger.info(`Loading \`${envFileName}\`. This will not be loaded when running the server in production.`);
80
+ await setupDotenv({
81
+ cwd,
82
+ fileName: envFileName
83
+ });
84
+ } else if (ctx.args.dotenv) logger.error(`Cannot find \`${envFileName}\`.`);
85
+ const { port } = _resolveListenOptions(ctx.args);
86
+ logger.info(`Starting preview command: \`${nitroJSON.commands.preview}\``);
87
+ const [command$1, ...commandArgs] = nitroJSON.commands.preview.split(" ");
88
+ logger.log("");
89
+ await x(command$1, commandArgs, {
90
+ throwOnError: true,
91
+ nodeOptions: {
92
+ stdio: "inherit",
93
+ cwd: outputPath,
94
+ env: {
95
+ ...process.env,
96
+ NUXT_PORT: port,
97
+ NITRO_PORT: port
98
+ }
99
+ }
100
+ });
101
+ }
102
+ });
103
+ var preview_default = command;
104
+ function _resolveListenOptions(args) {
105
+ return { port: args.port ?? process.env.NUXT_PORT ?? process.env.NITRO_PORT ?? process.env.PORT };
106
+ }
107
+
108
+ //#endregion
109
+ export { preview_default as default };
@@ -0,0 +1,113 @@
1
+ import { t as cwdArgs } from "./_shared-C3vB2YLc.mjs";
2
+ import { t as logger } from "./logger-Dk0gkCkX.mjs";
3
+ import { t as getNuxtVersion } from "./versions-CSy_3o_-.mjs";
4
+ import { n as fetchModules, t as checkNuxtCompatibility } from "./_utils-DTrPahho.mjs";
5
+ import { defineCommand } from "citty";
6
+ import { kebabCase, upperFirst } from "scule";
7
+ import { colors } from "consola/utils";
8
+ import Fuse from "fuse.js";
9
+
10
+ //#region ../nuxi/src/commands/module/search.ts
11
+ const { format: formatNumber } = Intl.NumberFormat("en-GB", {
12
+ notation: "compact",
13
+ maximumFractionDigits: 1
14
+ });
15
+ var search_default = defineCommand({
16
+ meta: {
17
+ name: "search",
18
+ description: "Search in Nuxt modules"
19
+ },
20
+ args: {
21
+ ...cwdArgs,
22
+ query: {
23
+ type: "positional",
24
+ description: "keywords to search for",
25
+ required: true
26
+ },
27
+ nuxtVersion: {
28
+ type: "string",
29
+ description: "Filter by Nuxt version and list compatible modules only (auto detected by default)",
30
+ required: false,
31
+ valueHint: "2|3"
32
+ }
33
+ },
34
+ async setup(ctx) {
35
+ const nuxtVersion = await getNuxtVersion(ctx.args.cwd);
36
+ return findModuleByKeywords(ctx.args._.join(" "), nuxtVersion);
37
+ }
38
+ });
39
+ async function findModuleByKeywords(query, nuxtVersion) {
40
+ const fuse = new Fuse((await fetchModules()).filter((m) => checkNuxtCompatibility(m, nuxtVersion)), {
41
+ threshold: .1,
42
+ keys: [
43
+ {
44
+ name: "name",
45
+ weight: 1
46
+ },
47
+ {
48
+ name: "npm",
49
+ weight: 1
50
+ },
51
+ {
52
+ name: "repo",
53
+ weight: 1
54
+ },
55
+ {
56
+ name: "tags",
57
+ weight: 1
58
+ },
59
+ {
60
+ name: "category",
61
+ weight: 1
62
+ },
63
+ {
64
+ name: "description",
65
+ weight: .5
66
+ },
67
+ {
68
+ name: "maintainers.name",
69
+ weight: .5
70
+ },
71
+ {
72
+ name: "maintainers.github",
73
+ weight: .5
74
+ }
75
+ ]
76
+ });
77
+ const { bold, green, magenta, cyan, gray, yellow } = colors;
78
+ const results = fuse.search(query).map((result) => {
79
+ const res = {
80
+ name: bold(result.item.name),
81
+ homepage: cyan(result.item.website),
82
+ compatibility: `nuxt: ${result.item.compatibility?.nuxt || "*"}`,
83
+ repository: gray(result.item.github),
84
+ description: gray(result.item.description),
85
+ package: gray(result.item.npm),
86
+ install: cyan(`npx nuxi module add ${result.item.name}`),
87
+ stars: yellow(formatNumber(result.item.stats.stars)),
88
+ monthlyDownloads: yellow(formatNumber(result.item.stats.downloads))
89
+ };
90
+ if (result.item.github === result.item.website) delete res.homepage;
91
+ if (result.item.name === result.item.npm) delete res.packageName;
92
+ return res;
93
+ });
94
+ if (!results.length) {
95
+ logger.info(`No Nuxt modules found matching query ${magenta(query)} for Nuxt ${cyan(nuxtVersion)}`);
96
+ return;
97
+ }
98
+ logger.success(`Found ${results.length} Nuxt ${results.length > 1 ? "modules" : "module"} matching ${cyan(query)} ${nuxtVersion ? `for Nuxt ${cyan(nuxtVersion)}` : ""}:\n`);
99
+ for (const foundModule of results) {
100
+ let maxLength = 0;
101
+ const entries = Object.entries(foundModule).map(([key, val]) => {
102
+ const label = upperFirst(kebabCase(key)).replace(/-/g, " ");
103
+ if (label.length > maxLength) maxLength = label.length;
104
+ return [label, val || "-"];
105
+ });
106
+ let infoStr = "";
107
+ for (const [label, value] of entries) infoStr += `${bold(label === "Install" ? "→ " : "- ") + green(label.padEnd(maxLength + 2)) + value}\n`;
108
+ logger.log(infoStr);
109
+ }
110
+ }
111
+
112
+ //#endregion
113
+ export { search_default as default };
@@ -0,0 +1,55 @@
1
+ import { a as legacyRootDirArgs, o as logLevelArgs, t as cwdArgs } from "./_shared-C3vB2YLc.mjs";
2
+ import { t as logger } from "./logger-Dk0gkCkX.mjs";
3
+ import process from "node:process";
4
+ import { defineCommand } from "citty";
5
+ import { resolve } from "pathe";
6
+
7
+ //#region ../nuxi/src/commands/test.ts
8
+ var test_default = defineCommand({
9
+ meta: {
10
+ name: "test",
11
+ description: "Run tests"
12
+ },
13
+ args: {
14
+ ...cwdArgs,
15
+ ...logLevelArgs,
16
+ ...legacyRootDirArgs,
17
+ dev: {
18
+ type: "boolean",
19
+ description: "Run in dev mode"
20
+ },
21
+ watch: {
22
+ type: "boolean",
23
+ description: "Watch mode"
24
+ }
25
+ },
26
+ async run(ctx) {
27
+ process.env.NODE_ENV = process.env.NODE_ENV || "test";
28
+ const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
29
+ const { runTests } = await importTestUtils();
30
+ await runTests({
31
+ rootDir: cwd,
32
+ dev: ctx.args.dev,
33
+ watch: ctx.args.watch
34
+ });
35
+ }
36
+ });
37
+ async function importTestUtils() {
38
+ let err;
39
+ for (const pkg of [
40
+ "@nuxt/test-utils-nightly",
41
+ "@nuxt/test-utils-edge",
42
+ "@nuxt/test-utils"
43
+ ]) try {
44
+ const exports = await import(pkg);
45
+ if (!exports.runTests) throw new Error("Invalid version of `@nuxt/test-utils` is installed!");
46
+ return exports;
47
+ } catch (_err) {
48
+ err = _err;
49
+ }
50
+ logger.error(err);
51
+ throw new Error("`@nuxt/test-utils` seems missing. Run `npm i -D @nuxt/test-utils` or `yarn add -D @nuxt/test-utils` to install.");
52
+ }
53
+
54
+ //#endregion
55
+ export { test_default as default };
@@ -0,0 +1,102 @@
1
+ import { a as legacyRootDirArgs, i as extendsArgs, n as dotEnvArgs, o as logLevelArgs, t as cwdArgs } from "./_shared-C3vB2YLc.mjs";
2
+ import { t as loadKit } from "./kit-xFxVGu6d.mjs";
3
+ import process from "node:process";
4
+ import { defineCommand } from "citty";
5
+ import { isBun } from "std-env";
6
+ import { resolveModulePath } from "exsolve";
7
+ import { resolve } from "pathe";
8
+ import { x } from "tinyexec";
9
+ import { readTSConfig } from "pkg-types";
10
+
11
+ //#region ../nuxi/src/commands/typecheck.ts
12
+ var typecheck_default = defineCommand({
13
+ meta: {
14
+ name: "typecheck",
15
+ description: "Runs `vue-tsc` to check types throughout your app."
16
+ },
17
+ args: {
18
+ ...cwdArgs,
19
+ ...logLevelArgs,
20
+ ...dotEnvArgs,
21
+ ...extendsArgs,
22
+ ...legacyRootDirArgs
23
+ },
24
+ async run(ctx) {
25
+ process.env.NODE_ENV = process.env.NODE_ENV || "production";
26
+ const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
27
+ const [supportsProjects, resolvedTypeScript, resolvedVueTsc] = await Promise.all([
28
+ readTSConfig(cwd).then((r) => !!r.references?.length),
29
+ resolveModulePath("typescript", { try: true }),
30
+ resolveModulePath("vue-tsc/bin/vue-tsc.js", { try: true }),
31
+ writeTypes(cwd, ctx.args.dotenv, ctx.args.logLevel, {
32
+ ...ctx.data?.overrides,
33
+ ...ctx.args.extends && { extends: ctx.args.extends }
34
+ })
35
+ ]);
36
+ const typeCheckArgs = supportsProjects ? ["-b", "--noEmit"] : ["--noEmit"];
37
+ if (resolvedTypeScript && resolvedVueTsc) return await x(resolvedVueTsc, typeCheckArgs, {
38
+ throwOnError: true,
39
+ nodeOptions: {
40
+ stdio: "inherit",
41
+ cwd
42
+ }
43
+ });
44
+ if (isBun) {
45
+ await x("bun", [
46
+ "install",
47
+ "typescript",
48
+ "vue-tsc",
49
+ "--global",
50
+ "--silent"
51
+ ], {
52
+ throwOnError: true,
53
+ nodeOptions: {
54
+ stdio: "inherit",
55
+ cwd
56
+ }
57
+ });
58
+ return await x("bunx", ["vue-tsc", ...typeCheckArgs], {
59
+ throwOnError: true,
60
+ nodeOptions: {
61
+ stdio: "inherit",
62
+ cwd
63
+ }
64
+ });
65
+ }
66
+ await x("npx", [
67
+ "-p",
68
+ "vue-tsc",
69
+ "-p",
70
+ "typescript",
71
+ "vue-tsc",
72
+ ...typeCheckArgs
73
+ ], {
74
+ throwOnError: true,
75
+ nodeOptions: {
76
+ stdio: "inherit",
77
+ cwd
78
+ }
79
+ });
80
+ }
81
+ });
82
+ async function writeTypes(cwd, dotenv, logLevel, overrides) {
83
+ const { loadNuxt, buildNuxt, writeTypes: writeTypes$1 } = await loadKit(cwd);
84
+ const nuxt = await loadNuxt({
85
+ cwd,
86
+ dotenv: {
87
+ cwd,
88
+ fileName: dotenv
89
+ },
90
+ overrides: {
91
+ _prepare: true,
92
+ logLevel,
93
+ ...overrides
94
+ }
95
+ });
96
+ await writeTypes$1(nuxt);
97
+ await buildNuxt(nuxt);
98
+ await nuxt.close();
99
+ }
100
+
101
+ //#endregion
102
+ export { typecheck_default as default };
@@ -0,0 +1,184 @@
1
+ import { a as legacyRootDirArgs, o as logLevelArgs, t as cwdArgs } from "./_shared-C3vB2YLc.mjs";
2
+ import { t as logger } from "./logger-Dk0gkCkX.mjs";
3
+ import "./fs-ewAp6tjM.mjs";
4
+ import { t as loadKit } from "./kit-xFxVGu6d.mjs";
5
+ import { r as nuxtVersionToGitIdentifier, t as cleanupNuxtDirs } from "./nuxt-Cc9ZTk7m.mjs";
6
+ import { t as getPackageManagerVersion } from "./packageManagers-DbVB5cXf.mjs";
7
+ import { t as getNuxtVersion } from "./versions-CSy_3o_-.mjs";
8
+ import process from "node:process";
9
+ import { defineCommand } from "citty";
10
+ import { existsSync } from "node:fs";
11
+ import { resolve } from "pathe";
12
+ import { colors } from "consola/utils";
13
+ import { addDependency, dedupeDependencies, detectPackageManager } from "nypm";
14
+ import { readPackageJSON } from "pkg-types";
15
+
16
+ //#region ../nuxi/src/commands/upgrade.ts
17
+ function checkNuxtDependencyType(pkg) {
18
+ if (pkg.dependencies?.nuxt) return "dependencies";
19
+ if (pkg.devDependencies?.nuxt) return "devDependencies";
20
+ return "dependencies";
21
+ }
22
+ const nuxtVersionTags = {
23
+ "3.x": "3x",
24
+ "4.x": "latest"
25
+ };
26
+ function getNightlyDependency(dep, nuxtVersion) {
27
+ return `${dep}@npm:${dep}-nightly@${nuxtVersionTags[nuxtVersion]}`;
28
+ }
29
+ async function getNightlyVersion(packageNames) {
30
+ const nuxtVersion = await logger.prompt("Which nightly Nuxt release channel do you want to install? (3.x or 4.x)", {
31
+ type: "select",
32
+ options: ["3.x", "4.x"],
33
+ default: "4.x",
34
+ cancel: "reject"
35
+ }).catch(() => process.exit(1));
36
+ return {
37
+ npmPackages: packageNames.map((p) => getNightlyDependency(p, nuxtVersion)),
38
+ nuxtVersion
39
+ };
40
+ }
41
+ async function getRequiredNewVersion(packageNames, channel) {
42
+ switch (channel) {
43
+ case "nightly": return getNightlyVersion(packageNames);
44
+ case "v3": return {
45
+ npmPackages: packageNames.map((p) => `${p}@3`),
46
+ nuxtVersion: "3.x"
47
+ };
48
+ case "v3-nightly": return {
49
+ npmPackages: packageNames.map((p) => getNightlyDependency(p, "3.x")),
50
+ nuxtVersion: "3.x"
51
+ };
52
+ case "v4": return {
53
+ npmPackages: packageNames.map((p) => `${p}@4`),
54
+ nuxtVersion: "4.x"
55
+ };
56
+ case "v4-nightly": return {
57
+ npmPackages: packageNames.map((p) => getNightlyDependency(p, "4.x")),
58
+ nuxtVersion: "4.x"
59
+ };
60
+ case "stable":
61
+ default: return {
62
+ npmPackages: packageNames.map((p) => `${p}@latest`),
63
+ nuxtVersion: "4.x"
64
+ };
65
+ }
66
+ }
67
+ var upgrade_default = defineCommand({
68
+ meta: {
69
+ name: "upgrade",
70
+ description: "Upgrade Nuxt"
71
+ },
72
+ args: {
73
+ ...cwdArgs,
74
+ ...logLevelArgs,
75
+ ...legacyRootDirArgs,
76
+ dedupe: {
77
+ type: "boolean",
78
+ description: "Dedupe dependencies after upgrading"
79
+ },
80
+ force: {
81
+ type: "boolean",
82
+ alias: "f",
83
+ description: "Force upgrade to recreate lockfile and node_modules"
84
+ },
85
+ channel: {
86
+ type: "string",
87
+ alias: "ch",
88
+ default: "stable",
89
+ description: "Specify a channel to install from (default: stable)",
90
+ valueHint: "stable|nightly|v3|v4|v4-nightly|v3-nightly"
91
+ }
92
+ },
93
+ async run(ctx) {
94
+ const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
95
+ const packageManager = await detectPackageManager(cwd);
96
+ if (!packageManager) {
97
+ logger.error(`Unable to determine the package manager used by this project.\n\nNo lock files found in \`${cwd}\`, and no \`packageManager\` field specified in \`package.json\`.\n\nPlease either add the \`packageManager\` field to \`package.json\` or execute the installation command for your package manager. For example, you can use \`pnpm i\`, \`npm i\`, \`bun i\`, or \`yarn i\`, and then try again.`);
98
+ process.exit(1);
99
+ }
100
+ const { name: packageManagerName, lockFile: lockFileCandidates } = packageManager;
101
+ const packageManagerVersion = getPackageManagerVersion(packageManagerName);
102
+ logger.info("Package manager:", packageManagerName, packageManagerVersion);
103
+ const currentVersion = await getNuxtVersion(cwd, false) || "[unknown]";
104
+ logger.info("Current Nuxt version:", currentVersion);
105
+ const pkg = await readPackageJSON(cwd).catch(() => null);
106
+ const nuxtDependencyType = pkg ? checkNuxtDependencyType(pkg) : "dependencies";
107
+ const { npmPackages, nuxtVersion } = await getRequiredNewVersion(["nuxt", ...pkg ? [
108
+ "@nuxt/kit",
109
+ "@nuxt/schema",
110
+ "@nuxt/vite-builder",
111
+ "@nuxt/webpack-builder",
112
+ "@nuxt/rspack-builder"
113
+ ].filter((p) => pkg.dependencies?.[p] || pkg.devDependencies?.[p]) : []], ctx.args.channel);
114
+ const toRemove = ["node_modules"];
115
+ const lockFile = normaliseLockFile(cwd, lockFileCandidates);
116
+ if (lockFile) toRemove.push(lockFile);
117
+ const forceRemovals = toRemove.map((p) => colors.cyan(p)).join(" and ");
118
+ let method = ctx.args.force ? "force" : ctx.args.dedupe ? "dedupe" : void 0;
119
+ method ||= await logger.prompt(`Would you like to dedupe your lockfile (recommended) or recreate ${forceRemovals}? This can fix problems with hoisted dependency versions and ensure you have the most up-to-date dependencies.`, {
120
+ type: "select",
121
+ initial: "dedupe",
122
+ cancel: "reject",
123
+ options: [
124
+ {
125
+ label: "dedupe lockfile",
126
+ value: "dedupe",
127
+ hint: "recommended"
128
+ },
129
+ {
130
+ label: `recreate ${forceRemovals}`,
131
+ value: "force"
132
+ },
133
+ {
134
+ label: "skip",
135
+ value: "skip"
136
+ }
137
+ ]
138
+ }).catch(() => process.exit(1));
139
+ const versionType = ctx.args.channel === "nightly" ? "nightly" : `latest ${ctx.args.channel}`;
140
+ logger.info(`Installing ${versionType} Nuxt ${nuxtVersion} release...`);
141
+ await addDependency(npmPackages, {
142
+ cwd,
143
+ packageManager,
144
+ dev: nuxtDependencyType === "devDependencies"
145
+ });
146
+ if (method === "force") {
147
+ logger.info(`Recreating ${forceRemovals}. If you encounter any issues, revert the changes and try with \`--no-force\``);
148
+ await dedupeDependencies({ recreateLockfile: true });
149
+ }
150
+ if (method === "dedupe") {
151
+ logger.info("Try deduping dependencies...");
152
+ await dedupeDependencies();
153
+ }
154
+ let buildDir = ".nuxt";
155
+ try {
156
+ const { loadNuxtConfig } = await loadKit(cwd);
157
+ buildDir = (await loadNuxtConfig({ cwd })).buildDir;
158
+ } catch {}
159
+ await cleanupNuxtDirs(cwd, buildDir);
160
+ const upgradedVersion = await getNuxtVersion(cwd, false) || "[unknown]";
161
+ logger.info("Upgraded Nuxt version:", upgradedVersion);
162
+ if (upgradedVersion === "[unknown]") return;
163
+ if (upgradedVersion === currentVersion) logger.success("You're using the latest version of Nuxt.");
164
+ else {
165
+ logger.success("Successfully upgraded Nuxt from", currentVersion, "to", upgradedVersion);
166
+ if (currentVersion === "[unknown]") return;
167
+ const commitA = nuxtVersionToGitIdentifier(currentVersion);
168
+ const commitB = nuxtVersionToGitIdentifier(upgradedVersion);
169
+ if (commitA && commitB) logger.info("Changelog:", `https://github.com/nuxt/nuxt/compare/${commitA}...${commitB}`);
170
+ }
171
+ }
172
+ });
173
+ function normaliseLockFile(cwd, lockFiles) {
174
+ if (typeof lockFiles === "string") lockFiles = [lockFiles];
175
+ const lockFile = lockFiles?.find((file) => existsSync(resolve(cwd, file)));
176
+ if (lockFile === void 0) {
177
+ logger.error(`Unable to find any lock files in ${cwd}`);
178
+ return;
179
+ }
180
+ return lockFile;
181
+ }
182
+
183
+ //#endregion
184
+ export { upgrade_default as default };
@@ -0,0 +1,18 @@
1
+ import { coerce } from "semver";
2
+ import { readPackageJSON } from "pkg-types";
3
+
4
+ //#region ../nuxi/src/utils/versions.ts
5
+ async function getNuxtVersion(cwd, cache = true) {
6
+ const nuxtPkg = await readPackageJSON("nuxt", {
7
+ url: cwd,
8
+ try: true,
9
+ cache
10
+ });
11
+ if (nuxtPkg) return nuxtPkg.version;
12
+ const pkg = await readPackageJSON(cwd);
13
+ const pkgDep = pkg?.dependencies?.nuxt || pkg?.devDependencies?.nuxt;
14
+ return pkgDep && coerce(pkgDep)?.version || "3.0.0";
15
+ }
16
+
17
+ //#endregion
18
+ export { getNuxtVersion as t };