@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
@@ -1,131 +0,0 @@
1
- import { existsSync, promises } from 'node:fs';
2
- import { dirname, relative } from 'node:path';
3
- import process from 'node:process';
4
- import { setupDotenv } from 'c12';
5
- import { defineCommand } from 'citty';
6
- import { box, colors } from 'consola/utils';
7
- import { getArgs } from 'listhen/cli';
8
- import { resolve } from 'pathe';
9
- import { x } from 'tinyexec';
10
- import { l as loadKit } from '../shared/cli-nightly.qKvs7FJ2.mjs';
11
- import { l as logger } from '../shared/cli-nightly.B9AmABr3.mjs';
12
- import { d as dotEnvArgs, l as legacyRootDirArgs, e as extendsArgs, b as envNameArgs, a as logLevelArgs, c as cwdArgs } from '../shared/cli-nightly.BRlCc6aT.mjs';
13
- import 'node:url';
14
- import 'exsolve';
15
- import 'consola';
16
- import 'std-env';
17
-
18
- const command = defineCommand({
19
- meta: {
20
- name: "preview",
21
- description: "Launches Nitro server for local testing after `nuxi build`."
22
- },
23
- args: {
24
- ...cwdArgs,
25
- ...logLevelArgs,
26
- ...envNameArgs,
27
- ...extendsArgs,
28
- ...legacyRootDirArgs,
29
- port: { ...getArgs().port, alias: ["p"] },
30
- ...dotEnvArgs
31
- },
32
- async run(ctx) {
33
- process.env.NODE_ENV = process.env.NODE_ENV || "production";
34
- const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
35
- const { loadNuxt } = await loadKit(cwd);
36
- const resolvedOutputDir = await new Promise((res) => {
37
- loadNuxt({
38
- cwd,
39
- envName: ctx.args.envName,
40
- // c12 will fall back to NODE_ENV
41
- ready: true,
42
- overrides: {
43
- ...ctx.args.extends && { extends: ctx.args.extends },
44
- modules: [
45
- function(_, nuxt) {
46
- nuxt.hook("nitro:init", (nitro) => {
47
- res(resolve(nuxt.options.srcDir || cwd, nitro.options.output.dir || ".output", "nitro.json"));
48
- });
49
- }
50
- ]
51
- }
52
- }).then((nuxt) => nuxt.close()).catch(() => "");
53
- });
54
- const defaultOutput = resolve(cwd, ".output", "nitro.json");
55
- const nitroJSONPaths = [resolvedOutputDir, defaultOutput].filter(Boolean);
56
- const nitroJSONPath = nitroJSONPaths.find((p) => existsSync(p));
57
- if (!nitroJSONPath) {
58
- logger.error(
59
- "Cannot find `nitro.json`. Did you run `nuxi build` first? Search path:\n",
60
- nitroJSONPaths
61
- );
62
- process.exit(1);
63
- }
64
- const outputPath = dirname(nitroJSONPath);
65
- const nitroJSON = JSON.parse(await promises.readFile(nitroJSONPath, "utf-8"));
66
- if (!nitroJSON.commands.preview) {
67
- logger.error("Preview is not supported for this build.");
68
- process.exit(1);
69
- }
70
- const info = [
71
- ["Node.js:", `v${process.versions.node}`],
72
- ["Nitro Preset:", nitroJSON.preset],
73
- ["Working directory:", relative(process.cwd(), outputPath)]
74
- ];
75
- const _infoKeyLen = Math.max(...info.map(([label]) => label.length));
76
- logger.log(
77
- box(
78
- [
79
- "You are running Nuxt production build in preview mode.",
80
- `For production deployments, please directly use ${colors.cyan(
81
- nitroJSON.commands.preview
82
- )} command.`,
83
- "",
84
- ...info.map(
85
- ([label, value]) => `${label.padEnd(_infoKeyLen, " ")} ${colors.cyan(value)}`
86
- )
87
- ].join("\n"),
88
- {
89
- title: colors.yellow("Preview Mode"),
90
- style: {
91
- borderColor: "yellow"
92
- }
93
- }
94
- )
95
- );
96
- const envFileName = ctx.args.dotenv || ".env";
97
- const envExists = existsSync(resolve(cwd, envFileName));
98
- if (envExists) {
99
- logger.info(
100
- `Loading \`${envFileName}\`. This will not be loaded when running the server in production.`
101
- );
102
- await setupDotenv({ cwd, fileName: envFileName });
103
- } else if (ctx.args.dotenv) {
104
- logger.error(`Cannot find \`${envFileName}\`.`);
105
- }
106
- const { port } = _resolveListenOptions(ctx.args);
107
- logger.info(`Starting preview command: \`${nitroJSON.commands.preview}\``);
108
- const [command2, ...commandArgs] = nitroJSON.commands.preview.split(" ");
109
- logger.log("");
110
- await x(command2, commandArgs, {
111
- throwOnError: true,
112
- nodeOptions: {
113
- stdio: "inherit",
114
- cwd: outputPath,
115
- env: {
116
- ...process.env,
117
- NUXT_PORT: port,
118
- NITRO_PORT: port
119
- }
120
- }
121
- });
122
- }
123
- });
124
- function _resolveListenOptions(args) {
125
- const _port = args.port ?? process.env.NUXT_PORT ?? process.env.NITRO_PORT ?? process.env.PORT;
126
- return {
127
- port: _port
128
- };
129
- }
130
-
131
- export { command as default };
@@ -1,114 +0,0 @@
1
- import { defineCommand } from 'citty';
2
- import { colors } from 'consola/utils';
3
- import Fuse from 'fuse.js';
4
- import { upperFirst, kebabCase } from 'scule';
5
- import { l as logger } from '../shared/cli-nightly.B9AmABr3.mjs';
6
- import { g as getNuxtVersion } from '../shared/cli-nightly.DHenkA1C.mjs';
7
- import { c as cwdArgs } from '../shared/cli-nightly.BRlCc6aT.mjs';
8
- import { f as fetchModules, c as checkNuxtCompatibility } from '../shared/cli-nightly.Cr-OCgdO.mjs';
9
- import 'consola';
10
- import 'pkg-types';
11
- import 'semver';
12
- import 'node:path';
13
- import 'node:process';
14
- import 'std-env';
15
- import 'node:url';
16
- import 'confbox';
17
- import 'ofetch';
18
-
19
- const { format: formatNumber } = Intl.NumberFormat("en-GB", {
20
- notation: "compact",
21
- maximumFractionDigits: 1
22
- });
23
- const search = defineCommand({
24
- meta: {
25
- name: "search",
26
- description: "Search in Nuxt modules"
27
- },
28
- args: {
29
- ...cwdArgs,
30
- query: {
31
- type: "positional",
32
- description: "keywords to search for",
33
- required: true
34
- },
35
- nuxtVersion: {
36
- type: "string",
37
- description: "Filter by Nuxt version and list compatible modules only (auto detected by default)",
38
- required: false,
39
- valueHint: "2|3"
40
- }
41
- },
42
- async setup(ctx) {
43
- const nuxtVersion = await getNuxtVersion(ctx.args.cwd);
44
- return findModuleByKeywords(ctx.args._.join(" "), nuxtVersion);
45
- }
46
- });
47
- async function findModuleByKeywords(query, nuxtVersion) {
48
- const allModules = await fetchModules();
49
- const compatibleModules = allModules.filter(
50
- (m) => checkNuxtCompatibility(m, nuxtVersion)
51
- );
52
- const fuse = new Fuse(compatibleModules, {
53
- threshold: 0.1,
54
- keys: [
55
- { name: "name", weight: 1 },
56
- { name: "npm", weight: 1 },
57
- { name: "repo", weight: 1 },
58
- { name: "tags", weight: 1 },
59
- { name: "category", weight: 1 },
60
- { name: "description", weight: 0.5 },
61
- { name: "maintainers.name", weight: 0.5 },
62
- { name: "maintainers.github", weight: 0.5 }
63
- ]
64
- });
65
- const { bold, green, magenta, cyan, gray, yellow } = colors;
66
- const results = fuse.search(query).map((result) => {
67
- const res = {
68
- name: bold(result.item.name),
69
- homepage: cyan(result.item.website),
70
- compatibility: `nuxt: ${result.item.compatibility?.nuxt || "*"}`,
71
- repository: gray(result.item.github),
72
- description: gray(result.item.description),
73
- package: gray(result.item.npm),
74
- install: cyan(`npx nuxi module add ${result.item.name}`),
75
- stars: yellow(formatNumber(result.item.stats.stars)),
76
- monthlyDownloads: yellow(formatNumber(result.item.stats.downloads))
77
- };
78
- if (result.item.github === result.item.website) {
79
- delete res.homepage;
80
- }
81
- if (result.item.name === result.item.npm) {
82
- delete res.packageName;
83
- }
84
- return res;
85
- });
86
- if (!results.length) {
87
- logger.info(
88
- `No Nuxt modules found matching query ${magenta(query)} for Nuxt ${cyan(nuxtVersion)}`
89
- );
90
- return;
91
- }
92
- logger.success(
93
- `Found ${results.length} Nuxt ${results.length > 1 ? "modules" : "module"} matching ${cyan(query)} ${nuxtVersion ? `for Nuxt ${cyan(nuxtVersion)}` : ""}:
94
- `
95
- );
96
- for (const foundModule of results) {
97
- let maxLength = 0;
98
- const entries = Object.entries(foundModule).map(([key, val]) => {
99
- const label = upperFirst(kebabCase(key)).replace(/-/g, " ");
100
- if (label.length > maxLength) {
101
- maxLength = label.length;
102
- }
103
- return [label, val || "-"];
104
- });
105
- let infoStr = "";
106
- for (const [label, value] of entries) {
107
- infoStr += `${bold(label === "Install" ? "\u2192 " : "- ") + green(label.padEnd(maxLength + 2)) + value}
108
- `;
109
- }
110
- logger.log(infoStr);
111
- }
112
- }
113
-
114
- export { search as default };
@@ -1,62 +0,0 @@
1
- import process from 'node:process';
2
- import { defineCommand } from 'citty';
3
- import { resolve } from 'pathe';
4
- import { l as logger } from '../shared/cli-nightly.B9AmABr3.mjs';
5
- import { l as legacyRootDirArgs, a as logLevelArgs, c as cwdArgs } from '../shared/cli-nightly.BRlCc6aT.mjs';
6
- import 'consola';
7
- import 'node:path';
8
- import 'std-env';
9
- import 'node:url';
10
-
11
- const test = defineCommand({
12
- meta: {
13
- name: "test",
14
- description: "Run tests"
15
- },
16
- args: {
17
- ...cwdArgs,
18
- ...logLevelArgs,
19
- ...legacyRootDirArgs,
20
- dev: {
21
- type: "boolean",
22
- description: "Run in dev mode"
23
- },
24
- watch: {
25
- type: "boolean",
26
- description: "Watch mode"
27
- }
28
- },
29
- async run(ctx) {
30
- process.env.NODE_ENV = process.env.NODE_ENV || "test";
31
- const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
32
- const { runTests } = await importTestUtils();
33
- await runTests({
34
- rootDir: cwd,
35
- dev: ctx.args.dev,
36
- watch: ctx.args.watch,
37
- ...{}
38
- });
39
- }
40
- });
41
- async function importTestUtils() {
42
- let err;
43
- for (const pkg of [
44
- "@nuxt/test-utils-nightly",
45
- "@nuxt/test-utils-edge",
46
- "@nuxt/test-utils"
47
- ]) {
48
- try {
49
- const exports = await import(pkg);
50
- if (!exports.runTests) {
51
- throw new Error("Invalid version of `@nuxt/test-utils` is installed!");
52
- }
53
- return exports;
54
- } catch (_err) {
55
- err = _err;
56
- }
57
- }
58
- logger.error(err);
59
- throw new Error("`@nuxt/test-utils` seems missing. Run `npm i -D @nuxt/test-utils` or `yarn add -D @nuxt/test-utils` to install.");
60
- }
61
-
62
- export { test as default };
@@ -1,85 +0,0 @@
1
- import process from 'node:process';
2
- import { defineCommand } from 'citty';
3
- import { resolveModulePath } from 'exsolve';
4
- import { resolve } from 'pathe';
5
- import { readTSConfig } from 'pkg-types';
6
- import { isBun } from 'std-env';
7
- import { x } from 'tinyexec';
8
- import { l as loadKit } from '../shared/cli-nightly.qKvs7FJ2.mjs';
9
- import { l as legacyRootDirArgs, e as extendsArgs, d as dotEnvArgs, a as logLevelArgs, c as cwdArgs } from '../shared/cli-nightly.BRlCc6aT.mjs';
10
- import 'node:url';
11
- import 'node:path';
12
- import 'consola';
13
- import '../shared/cli-nightly.B9AmABr3.mjs';
14
-
15
- const typecheck = defineCommand({
16
- meta: {
17
- name: "typecheck",
18
- description: "Runs `vue-tsc` to check types throughout your app."
19
- },
20
- args: {
21
- ...cwdArgs,
22
- ...logLevelArgs,
23
- ...dotEnvArgs,
24
- ...extendsArgs,
25
- ...legacyRootDirArgs
26
- },
27
- async run(ctx) {
28
- process.env.NODE_ENV = process.env.NODE_ENV || "production";
29
- const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
30
- const [supportsProjects, resolvedTypeScript, resolvedVueTsc] = await Promise.all([
31
- readTSConfig(cwd).then((r) => !!r.references?.length),
32
- // Prefer local install if possible
33
- resolveModulePath("typescript", { try: true }),
34
- resolveModulePath("vue-tsc/bin/vue-tsc.js", { try: true }),
35
- writeTypes(cwd, ctx.args.dotenv, ctx.args.logLevel, {
36
- ...ctx.data?.overrides,
37
- ...ctx.args.extends && { extends: ctx.args.extends }
38
- })
39
- ]);
40
- const typeCheckArgs = supportsProjects ? ["-b", "--noEmit"] : ["--noEmit"];
41
- if (resolvedTypeScript && resolvedVueTsc) {
42
- return await x(resolvedVueTsc, typeCheckArgs, {
43
- throwOnError: true,
44
- nodeOptions: {
45
- stdio: "inherit",
46
- cwd
47
- }
48
- });
49
- }
50
- if (isBun) {
51
- await x("bun", ["install", "typescript", "vue-tsc", "--global", "--silent"], {
52
- throwOnError: true,
53
- nodeOptions: { stdio: "inherit", cwd }
54
- });
55
- return await x("bunx", ["vue-tsc", ...typeCheckArgs], {
56
- throwOnError: true,
57
- nodeOptions: {
58
- stdio: "inherit",
59
- cwd
60
- }
61
- });
62
- }
63
- await x("npx", ["-p", "vue-tsc", "-p", "typescript", "vue-tsc", ...typeCheckArgs], {
64
- throwOnError: true,
65
- nodeOptions: { stdio: "inherit", cwd }
66
- });
67
- }
68
- });
69
- async function writeTypes(cwd, dotenv, logLevel, overrides) {
70
- const { loadNuxt, buildNuxt, writeTypes: writeTypes2 } = await loadKit(cwd);
71
- const nuxt = await loadNuxt({
72
- cwd,
73
- dotenv: { cwd, fileName: dotenv },
74
- overrides: {
75
- _prepare: true,
76
- logLevel,
77
- ...overrides
78
- }
79
- });
80
- await writeTypes2(nuxt);
81
- await buildNuxt(nuxt);
82
- await nuxt.close();
83
- }
84
-
85
- export { typecheck as default };
@@ -1,214 +0,0 @@
1
- import { existsSync } from 'node:fs';
2
- import process from 'node:process';
3
- import { defineCommand } from 'citty';
4
- import { colors } from 'consola/utils';
5
- import { detectPackageManager, addDependency, dedupeDependencies } from 'nypm';
6
- import { resolve } from 'pathe';
7
- import { readPackageJSON } from 'pkg-types';
8
- import { l as loadKit } from '../shared/cli-nightly.qKvs7FJ2.mjs';
9
- import { l as logger } from '../shared/cli-nightly.B9AmABr3.mjs';
10
- import { c as cleanupNuxtDirs, n as nuxtVersionToGitIdentifier } from '../shared/cli-nightly.Bu_9IHj2.mjs';
11
- import { g as getPackageManagerVersion } from '../shared/cli-nightly.BSm0_9Hr.mjs';
12
- import { g as getNuxtVersion } from '../shared/cli-nightly.DHenkA1C.mjs';
13
- import { l as legacyRootDirArgs, a as logLevelArgs, c as cwdArgs } from '../shared/cli-nightly.BRlCc6aT.mjs';
14
- import 'node:url';
15
- import 'exsolve';
16
- import 'consola';
17
- import 'ohash';
18
- import '../shared/cli-nightly.DPmMxQ6h.mjs';
19
- import 'node:child_process';
20
- import 'semver';
21
- import 'node:path';
22
- import 'std-env';
23
-
24
- function checkNuxtDependencyType(pkg) {
25
- if (pkg.dependencies?.nuxt) {
26
- return "dependencies";
27
- }
28
- if (pkg.devDependencies?.nuxt) {
29
- return "devDependencies";
30
- }
31
- return "dependencies";
32
- }
33
- const nuxtVersionTags = {
34
- "3.x": "3x",
35
- "4.x": "latest"
36
- };
37
- function getNightlyDependency(dep, nuxtVersion) {
38
- return `${dep}@npm:${dep}-nightly@${nuxtVersionTags[nuxtVersion]}`;
39
- }
40
- async function getNightlyVersion(packageNames) {
41
- const nuxtVersion = await logger.prompt(
42
- "Which nightly Nuxt release channel do you want to install? (3.x or 4.x)",
43
- {
44
- type: "select",
45
- options: ["3.x", "4.x"],
46
- default: "4.x",
47
- cancel: "reject"
48
- }
49
- ).catch(() => process.exit(1));
50
- const npmPackages = packageNames.map((p) => getNightlyDependency(p, nuxtVersion));
51
- return { npmPackages, nuxtVersion };
52
- }
53
- async function getRequiredNewVersion(packageNames, channel) {
54
- switch (channel) {
55
- case "nightly":
56
- return getNightlyVersion(packageNames);
57
- case "v3":
58
- return { npmPackages: packageNames.map((p) => `${p}@3`), nuxtVersion: "3.x" };
59
- case "v3-nightly":
60
- return { npmPackages: packageNames.map((p) => getNightlyDependency(p, "3.x")), nuxtVersion: "3.x" };
61
- case "v4":
62
- return { npmPackages: packageNames.map((p) => `${p}@4`), nuxtVersion: "4.x" };
63
- case "v4-nightly":
64
- return { npmPackages: packageNames.map((p) => getNightlyDependency(p, "4.x")), nuxtVersion: "4.x" };
65
- case "stable":
66
- default:
67
- return { npmPackages: packageNames.map((p) => `${p}@latest`), nuxtVersion: "4.x" };
68
- }
69
- }
70
- const upgrade = defineCommand({
71
- meta: {
72
- name: "upgrade",
73
- description: "Upgrade Nuxt"
74
- },
75
- args: {
76
- ...cwdArgs,
77
- ...logLevelArgs,
78
- ...legacyRootDirArgs,
79
- dedupe: {
80
- type: "boolean",
81
- description: "Dedupe dependencies after upgrading"
82
- },
83
- force: {
84
- type: "boolean",
85
- alias: "f",
86
- description: "Force upgrade to recreate lockfile and node_modules"
87
- },
88
- channel: {
89
- type: "string",
90
- alias: "ch",
91
- default: "stable",
92
- description: "Specify a channel to install from (default: stable)",
93
- valueHint: "stable|nightly|v3|v4|v4-nightly|v3-nightly"
94
- }
95
- },
96
- async run(ctx) {
97
- const cwd = resolve(ctx.args.cwd || ctx.args.rootDir);
98
- const packageManager = await detectPackageManager(cwd);
99
- if (!packageManager) {
100
- logger.error(
101
- `Unable to determine the package manager used by this project.
102
-
103
- No lock files found in \`${cwd}\`, and no \`packageManager\` field specified in \`package.json\`.
104
-
105
- Please 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.`
106
- );
107
- process.exit(1);
108
- }
109
- const { name: packageManagerName, lockFile: lockFileCandidates } = packageManager;
110
- const packageManagerVersion = getPackageManagerVersion(packageManagerName);
111
- logger.info("Package manager:", packageManagerName, packageManagerVersion);
112
- const currentVersion = await getNuxtVersion(cwd, false) || "[unknown]";
113
- logger.info("Current Nuxt version:", currentVersion);
114
- const pkg = await readPackageJSON(cwd).catch(() => null);
115
- const nuxtDependencyType = pkg ? checkNuxtDependencyType(pkg) : "dependencies";
116
- const corePackages = ["@nuxt/kit", "@nuxt/schema", "@nuxt/vite-builder", "@nuxt/webpack-builder", "@nuxt/rspack-builder"];
117
- const packagesToUpdate = pkg ? corePackages.filter((p) => pkg.dependencies?.[p] || pkg.devDependencies?.[p]) : [];
118
- const { npmPackages, nuxtVersion } = await getRequiredNewVersion(["nuxt", ...packagesToUpdate], ctx.args.channel);
119
- const toRemove = ["node_modules"];
120
- const lockFile = normaliseLockFile(cwd, lockFileCandidates);
121
- if (lockFile) {
122
- toRemove.push(lockFile);
123
- }
124
- const forceRemovals = toRemove.map((p) => colors.cyan(p)).join(" and ");
125
- let method = ctx.args.force ? "force" : ctx.args.dedupe ? "dedupe" : void 0;
126
- method ||= await logger.prompt(
127
- `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.`,
128
- {
129
- type: "select",
130
- initial: "dedupe",
131
- cancel: "reject",
132
- options: [
133
- {
134
- label: "dedupe lockfile",
135
- value: "dedupe",
136
- hint: "recommended"
137
- },
138
- {
139
- label: `recreate ${forceRemovals}`,
140
- value: "force"
141
- },
142
- {
143
- label: "skip",
144
- value: "skip"
145
- }
146
- ]
147
- }
148
- ).catch(() => process.exit(1));
149
- const versionType = ctx.args.channel === "nightly" ? "nightly" : `latest ${ctx.args.channel}`;
150
- logger.info(`Installing ${versionType} Nuxt ${nuxtVersion} release...`);
151
- await addDependency(npmPackages, {
152
- cwd,
153
- packageManager,
154
- dev: nuxtDependencyType === "devDependencies"
155
- });
156
- if (method === "force") {
157
- logger.info(
158
- `Recreating ${forceRemovals}. If you encounter any issues, revert the changes and try with \`--no-force\``
159
- );
160
- await dedupeDependencies({ recreateLockfile: true });
161
- }
162
- if (method === "dedupe") {
163
- logger.info("Try deduping dependencies...");
164
- await dedupeDependencies();
165
- }
166
- let buildDir = ".nuxt";
167
- try {
168
- const { loadNuxtConfig } = await loadKit(cwd);
169
- const nuxtOptions = await loadNuxtConfig({ cwd });
170
- buildDir = nuxtOptions.buildDir;
171
- } catch {
172
- }
173
- await cleanupNuxtDirs(cwd, buildDir);
174
- const upgradedVersion = await getNuxtVersion(cwd, false) || "[unknown]";
175
- logger.info("Upgraded Nuxt version:", upgradedVersion);
176
- if (upgradedVersion === "[unknown]") {
177
- return;
178
- }
179
- if (upgradedVersion === currentVersion) {
180
- logger.success("You're using the latest version of Nuxt.");
181
- } else {
182
- logger.success(
183
- "Successfully upgraded Nuxt from",
184
- currentVersion,
185
- "to",
186
- upgradedVersion
187
- );
188
- if (currentVersion === "[unknown]") {
189
- return;
190
- }
191
- const commitA = nuxtVersionToGitIdentifier(currentVersion);
192
- const commitB = nuxtVersionToGitIdentifier(upgradedVersion);
193
- if (commitA && commitB) {
194
- logger.info(
195
- "Changelog:",
196
- `https://github.com/nuxt/nuxt/compare/${commitA}...${commitB}`
197
- );
198
- }
199
- }
200
- }
201
- });
202
- function normaliseLockFile(cwd, lockFiles) {
203
- if (typeof lockFiles === "string") {
204
- lockFiles = [lockFiles];
205
- }
206
- const lockFile = lockFiles?.find((file) => existsSync(resolve(cwd, file)));
207
- if (lockFile === void 0) {
208
- logger.error(`Unable to find any lock files in ${cwd}`);
209
- return void 0;
210
- }
211
- return lockFile;
212
- }
213
-
214
- export { upgrade as default };
@@ -1,94 +0,0 @@
1
- import * as net from 'net';
2
- import * as listhen from 'listhen';
3
- import { ListenURL, HTTPSOptions, Listener, ListenOptions } from 'listhen';
4
- import { NuxtConfig } from '@nuxt/schema';
5
- import { DotenvOptions } from 'c12';
6
- import { RequestListener, IncomingMessage, ServerResponse } from 'node:http';
7
- import { AddressInfo } from 'node:net';
8
- import EventEmitter from 'node:events';
9
-
10
- interface NuxtDevContext {
11
- cwd: string;
12
- public?: boolean;
13
- hostname?: string;
14
- publicURLs?: string[];
15
- args: {
16
- clear: boolean;
17
- logLevel: string;
18
- dotenv: string;
19
- envName: string;
20
- extends?: string;
21
- };
22
- proxy?: {
23
- url?: string;
24
- urls?: ListenURL[];
25
- https?: boolean | HTTPSOptions;
26
- addr?: AddressInfo;
27
- };
28
- }
29
- interface NuxtDevServerOptions {
30
- cwd: string;
31
- logLevel?: 'silent' | 'info' | 'verbose';
32
- dotenv: DotenvOptions;
33
- envName?: string;
34
- clear?: boolean;
35
- defaults: NuxtConfig;
36
- overrides: NuxtConfig;
37
- loadingTemplate?: ({ loading }: {
38
- loading: string;
39
- }) => string;
40
- devContext: Pick<NuxtDevContext, 'proxy'>;
41
- }
42
- interface DevServerEventMap {
43
- 'loading:error': [error: Error];
44
- 'loading': [loadingMessage: string];
45
- 'ready': [address: string];
46
- 'restart': [];
47
- }
48
- declare class NuxtDevServer extends EventEmitter<DevServerEventMap> {
49
- private options;
50
- private _handler?;
51
- private _distWatcher?;
52
- private _configWatcher?;
53
- private _currentNuxt?;
54
- private _loadingMessage?;
55
- private _loadingError?;
56
- private _fileChangeTracker;
57
- private cwd;
58
- loadDebounced: (reload?: boolean, reason?: string) => void;
59
- handler: RequestListener;
60
- listener: Pick<Listener, 'server' | 'getURLs' | 'https' | 'url' | 'close'> & {
61
- _url?: string;
62
- address: Omit<AddressInfo, 'family'> & {
63
- socketPath: string;
64
- } | AddressInfo;
65
- };
66
- constructor(options: NuxtDevServerOptions);
67
- _renderError(req: IncomingMessage, res: ServerResponse): void;
68
- _renderLoadingScreen(req: IncomingMessage, res: ServerResponse): Promise<void>;
69
- init(): Promise<void>;
70
- closeWatchers(): void;
71
- load(reload?: boolean, reason?: string): Promise<void>;
72
- close(): Promise<void>;
73
- _load(reload?: boolean, reason?: string): Promise<void>;
74
- _watchConfig(): void;
75
- }
76
-
77
- interface InitializeOptions {
78
- data?: {
79
- overrides?: NuxtConfig;
80
- };
81
- }
82
- declare function initialize(devContext: NuxtDevContext, ctx?: InitializeOptions, _listenOptions?: true | Partial<ListenOptions>): Promise<{
83
- listener: Pick<listhen.Listener, "https" | "server" | "url" | "getURLs" | "close"> & {
84
- _url?: string;
85
- address: (Omit<net.AddressInfo, "family"> & {
86
- socketPath: string;
87
- }) | net.AddressInfo;
88
- };
89
- close: () => Promise<void>;
90
- onReady: (callback: (address: string) => void) => void;
91
- onRestart: (callback: (devServer: NuxtDevServer) => void) => void;
92
- }>;
93
-
94
- export { initialize };