@nuxt/kit 3.5.3 → 3.6.0

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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ModuleOptions, ModuleDefinition, NuxtModule, Nuxt, NuxtConfig, NuxtOptions, SchemaDefinition, ImportPresetWithDeprecation, NuxtCompatibility, NuxtCompatibilityIssues, ComponentsDir, Component, NuxtTemplate, NuxtHooks, NuxtMiddleware, NuxtPlugin, NuxtPluginTemplate, ResolvedNuxtTemplate } from '@nuxt/schema';
1
+ import { ModuleOptions, ModuleDefinition, NuxtModule, Nuxt, ModuleMeta, NuxtConfig, NuxtOptions, SchemaDefinition, ImportPresetWithDeprecation, NuxtCompatibility, NuxtCompatibilityIssues, ComponentsDir, Component, NuxtTemplate, NuxtHooks, NuxtMiddleware, NuxtPlugin, NuxtPluginTemplate, ResolvedNuxtTemplate } from '@nuxt/schema';
2
2
  import { LoadConfigOptions } from 'c12';
3
3
  import { Import } from 'unimport';
4
4
  import { Configuration, WebpackPluginInstance } from 'webpack';
@@ -12,11 +12,33 @@ import { genSafeVariableName } from 'knitwork';
12
12
  * Define a Nuxt module, automatically merging defaults with user provided options, installing
13
13
  * any hooks that are provided, and calling an optional setup function for full control.
14
14
  */
15
- declare function defineNuxtModule<OptionsT extends ModuleOptions>(definition: ModuleDefinition<OptionsT>): NuxtModule<OptionsT>;
15
+ declare function defineNuxtModule<OptionsT extends ModuleOptions>(definition: ModuleDefinition<OptionsT> | NuxtModule<OptionsT>): NuxtModule<OptionsT>;
16
16
 
17
17
  /** Installs a module on a Nuxt instance. */
18
- declare function installModule(moduleToInstall: string | NuxtModule, _inlineOptions?: any, _nuxt?: Nuxt): Promise<void>;
18
+ declare function installModule(moduleToInstall: string | NuxtModule, inlineOptions?: any, nuxt?: Nuxt): Promise<void>;
19
19
  declare const normalizeModuleTranspilePath: (p: string) => string;
20
+ declare function loadNuxtModuleInstance(nuxtModule: string | NuxtModule, nuxt?: Nuxt): Promise<{
21
+ nuxtModule: NuxtModule<any>;
22
+ buildTimeModuleMeta: ModuleMeta;
23
+ }>;
24
+
25
+ /**
26
+ * Check if a Nuxt module is installed by name.
27
+ *
28
+ * This will check both the installed modules and the modules to be installed. Note
29
+ * that it cannot detect if a module is _going to be_ installed programmatically by another module.
30
+ */
31
+ declare function hasNuxtModule(moduleName: string, nuxt?: Nuxt): boolean;
32
+ /**
33
+ * Checks if a Nuxt Module is compatible with a given semver version.
34
+ */
35
+ declare function hasNuxtModuleCompatibility(module: string | NuxtModule, semverVersion: string, nuxt?: Nuxt): Promise<boolean>;
36
+ /**
37
+ * Get the version of a Nuxt module.
38
+ *
39
+ * Scans installed modules for the version, if it's not found it will attempt to load the module instance and get the version from there.
40
+ */
41
+ declare function getNuxtModuleVersion(module: string | NuxtModule, nuxt?: Nuxt | any): Promise<string | false>;
20
42
 
21
43
  interface LoadNuxtConfigOptions extends LoadConfigOptions<NuxtConfig> {
22
44
  }
@@ -102,6 +124,7 @@ interface AddBuildPluginFactory {
102
124
  }
103
125
  declare function addBuildPlugin(pluginFactory: AddBuildPluginFactory, options?: ExtendConfigOptions): void;
104
126
 
127
+ declare function normalizeSemanticVersion(version: string): string;
105
128
  /**
106
129
  * Check version constraints and return incompatibility issues as an array
107
130
  */
@@ -301,6 +324,11 @@ declare function useNitro(): Nitro;
301
324
  * Renders given template using lodash template during build into the project buildDir
302
325
  */
303
326
  declare function addTemplate(_template: NuxtTemplate<any> | string): ResolvedNuxtTemplate<any>;
327
+ /**
328
+ * Renders given types using lodash template during build into the project buildDir
329
+ * and register them as types.
330
+ */
331
+ declare function addTypeTemplate(_template: NuxtTemplate<any>): ResolvedNuxtTemplate<any>;
304
332
  /**
305
333
  * Normalize a nuxt template object
306
334
  */
@@ -345,7 +373,7 @@ declare function tryRequireModule(id: string, opts?: RequireModuleOptions): any;
345
373
  *
346
374
  * @internal
347
375
  */
348
- declare function tryResolveModule(id: string, url?: string | string[]): Promise<any>;
376
+ declare function tryResolveModule(id: string, url?: string | string[]): Promise<string | undefined>;
349
377
 
350
378
  /** @deprecated */
351
379
  declare function compileTemplate(template: NuxtTemplate, ctx: any): Promise<string>;
@@ -358,4 +386,4 @@ declare const templateUtils: {
358
386
  }) => string;
359
387
  };
360
388
 
361
- export { AddComponentOptions, AddPluginOptions, AddRouteMiddlewareOptions, ExtendConfigOptions, ExtendRouteRulesOptions, ExtendViteConfigOptions, ExtendWebpackConfigOptions, LoadNuxtConfigOptions, LoadNuxtOptions, RequireModuleOptions, ResolveModuleOptions, ResolvePathOptions, Resolver, addBuildPlugin, addComponent, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addServerHandler, addServerPlugin, addTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildNuxt, checkNuxtCompatibility, compileTemplate, createResolver, defineNuxtModule, extendNuxtSchema, extendPages, extendRouteRules, extendViteConfig, extendWebpackConfig, findPath, getNuxtVersion, hasNuxtCompatibility, importModule, installModule, isIgnored, isNuxt2, isNuxt3, loadNuxt, loadNuxtConfig, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeTemplate, nuxtCtx, requireModule, resolveAlias, resolveFiles, resolveModule, resolvePath, templateUtils, tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateTemplates, useLogger, useNitro, useNuxt };
389
+ export { AddComponentOptions, AddPluginOptions, AddRouteMiddlewareOptions, ExtendConfigOptions, ExtendRouteRulesOptions, ExtendViteConfigOptions, ExtendWebpackConfigOptions, LoadNuxtConfigOptions, LoadNuxtOptions, RequireModuleOptions, ResolveModuleOptions, ResolvePathOptions, Resolver, addBuildPlugin, addComponent, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addServerHandler, addServerPlugin, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildNuxt, checkNuxtCompatibility, compileTemplate, createResolver, defineNuxtModule, extendNuxtSchema, extendPages, extendRouteRules, extendViteConfig, extendWebpackConfig, findPath, getNuxtModuleVersion, getNuxtVersion, hasNuxtCompatibility, hasNuxtModule, hasNuxtModuleCompatibility, importModule, installModule, isIgnored, isNuxt2, isNuxt3, loadNuxt, loadNuxtConfig, loadNuxtModuleInstance, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeSemanticVersion, normalizeTemplate, nuxtCtx, requireModule, resolveAlias, resolveFiles, resolveModule, resolvePath, templateUtils, tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateTemplates, useLogger, useNitro, useNuxt };
package/dist/index.mjs CHANGED
@@ -36,12 +36,14 @@ function tryUseNuxt() {
36
36
  return nuxtCtx.tryUse();
37
37
  }
38
38
 
39
+ function normalizeSemanticVersion(version) {
40
+ return version.replace(/-[0-9]+\.[0-9a-f]+/, "");
41
+ }
39
42
  async function checkNuxtCompatibility(constraints, nuxt = useNuxt()) {
40
43
  const issues = [];
41
44
  if (constraints.nuxt) {
42
45
  const nuxtVersion = getNuxtVersion(nuxt);
43
- const nuxtSemanticVersion = nuxtVersion.replace(/-[0-9]+\.[0-9a-f]+/, "");
44
- if (!satisfies(nuxtSemanticVersion, constraints.nuxt, { includePrerelease: true })) {
46
+ if (!satisfies(normalizeSemanticVersion(nuxtVersion), constraints.nuxt, { includePrerelease: true })) {
45
47
  issues.push({
46
48
  name: "nuxt",
47
49
  message: `Nuxt version \`${constraints.nuxt}\` is required but currently using \`${nuxtVersion}\``
@@ -2092,18 +2094,19 @@ const importName = genSafeVariableName;
2092
2094
  const templateUtils = { serialize, importName, importSources };
2093
2095
 
2094
2096
  function defineNuxtModule(definition) {
2095
- if (!definition.meta) {
2096
- definition.meta = {};
2097
+ if (typeof definition === "function") {
2098
+ return defineNuxtModule({ setup: definition });
2097
2099
  }
2098
- if (definition.meta.configKey === void 0) {
2099
- definition.meta.configKey = definition.meta.name;
2100
+ const module = defu(definition, { meta: {} });
2101
+ if (module.meta.configKey === void 0) {
2102
+ module.meta.configKey = module.meta.name;
2100
2103
  }
2101
2104
  async function getOptions(inlineOptions, nuxt = useNuxt()) {
2102
- const configKey = definition.meta.configKey || definition.meta.name;
2103
- const _defaults = definition.defaults instanceof Function ? definition.defaults(nuxt) : definition.defaults;
2105
+ const configKey = module.meta.configKey || module.meta.name;
2106
+ const _defaults = module.defaults instanceof Function ? module.defaults(nuxt) : module.defaults;
2104
2107
  let _options = defu(inlineOptions, nuxt.options[configKey], _defaults);
2105
- if (definition.schema) {
2106
- _options = await applyDefaults(definition.schema, _options);
2108
+ if (module.schema) {
2109
+ _options = await applyDefaults(module.schema, _options);
2107
2110
  }
2108
2111
  return Promise.resolve(_options);
2109
2112
  }
@@ -2111,7 +2114,7 @@ function defineNuxtModule(definition) {
2111
2114
  if (!nuxt) {
2112
2115
  nuxt = tryUseNuxt() || this.nuxt;
2113
2116
  }
2114
- const uniqueKey = definition.meta.name || definition.meta.configKey;
2117
+ const uniqueKey = module.meta.name || module.meta.configKey;
2115
2118
  if (uniqueKey) {
2116
2119
  nuxt.options._requiredModules = nuxt.options._requiredModules || {};
2117
2120
  if (nuxt.options._requiredModules[uniqueKey]) {
@@ -2119,22 +2122,22 @@ function defineNuxtModule(definition) {
2119
2122
  }
2120
2123
  nuxt.options._requiredModules[uniqueKey] = true;
2121
2124
  }
2122
- if (definition.meta.compatibility) {
2123
- const issues = await checkNuxtCompatibility(definition.meta.compatibility, nuxt);
2125
+ if (module.meta.compatibility) {
2126
+ const issues = await checkNuxtCompatibility(module.meta.compatibility, nuxt);
2124
2127
  if (issues.length) {
2125
- logger.warn(`Module \`${definition.meta.name}\` is disabled due to incompatibility issues:
2128
+ logger.warn(`Module \`${module.meta.name}\` is disabled due to incompatibility issues:
2126
2129
  ${issues.toString()}`);
2127
2130
  return;
2128
2131
  }
2129
2132
  }
2130
2133
  nuxt2Shims(nuxt);
2131
2134
  const _options = await getOptions(inlineOptions, nuxt);
2132
- if (definition.hooks) {
2133
- nuxt.hooks.addHooks(definition.hooks);
2135
+ if (module.hooks) {
2136
+ nuxt.hooks.addHooks(module.hooks);
2134
2137
  }
2135
2138
  const key = `nuxt:module:${uniqueKey || Math.round(Math.random() * 1e4)}`;
2136
2139
  const mark = performance.mark(key);
2137
- const res = await definition.setup?.call(null, _options, nuxt) ?? {};
2140
+ const res = await module.setup?.call(null, _options, nuxt) ?? {};
2138
2141
  const perf = performance.measure(key, mark?.name);
2139
2142
  const setupTime = perf ? Math.round(perf.duration * 100) / 100 : 0;
2140
2143
  if (setupTime > 5e3) {
@@ -2151,7 +2154,7 @@ ${issues.toString()}`);
2151
2154
  }
2152
2155
  });
2153
2156
  }
2154
- normalizedModule.getMeta = () => Promise.resolve(definition.meta);
2157
+ normalizedModule.getMeta = () => Promise.resolve(module.meta);
2155
2158
  normalizedModule.getOptions = getOptions;
2156
2159
  return normalizedModule;
2157
2160
  }
@@ -2401,9 +2404,8 @@ async function resolveFiles(path, pattern, opts = {}) {
2401
2404
  return files.map((p) => resolve(path, p)).filter((p) => !isIgnored(p)).sort();
2402
2405
  }
2403
2406
 
2404
- async function installModule(moduleToInstall, _inlineOptions, _nuxt) {
2405
- const nuxt = useNuxt();
2406
- const { nuxtModule, inlineOptions } = await normalizeModule(moduleToInstall, _inlineOptions);
2407
+ async function installModule(moduleToInstall, inlineOptions, nuxt = useNuxt()) {
2408
+ const { nuxtModule, buildTimeModuleMeta } = await loadNuxtModuleInstance(moduleToInstall, nuxt);
2407
2409
  const res = (isNuxt2() ? await nuxtModule.call(nuxt.moduleContainer, inlineOptions, nuxt) : await nuxtModule(inlineOptions, nuxt)) ?? {};
2408
2410
  if (res === false) {
2409
2411
  return;
@@ -2413,7 +2415,7 @@ async function installModule(moduleToInstall, _inlineOptions, _nuxt) {
2413
2415
  }
2414
2416
  nuxt.options._installedModules = nuxt.options._installedModules || [];
2415
2417
  nuxt.options._installedModules.push({
2416
- meta: await nuxtModule.getMeta?.(),
2418
+ meta: defu(await nuxtModule.getMeta?.(), buildTimeModuleMeta),
2417
2419
  timings: res.timings,
2418
2420
  entryPath: typeof moduleToInstall === "string" ? resolveAlias(moduleToInstall) : void 0
2419
2421
  });
@@ -2425,8 +2427,8 @@ const normalizeModuleTranspilePath = (p) => {
2425
2427
  }
2426
2428
  return p.split("node_modules/").pop();
2427
2429
  };
2428
- async function normalizeModule(nuxtModule, inlineOptions) {
2429
- const nuxt = useNuxt();
2430
+ async function loadNuxtModuleInstance(nuxtModule, nuxt = useNuxt()) {
2431
+ let buildTimeModuleMeta = {};
2430
2432
  if (typeof nuxtModule === "string") {
2431
2433
  const src = await resolvePath(nuxtModule);
2432
2434
  try {
@@ -2435,11 +2437,45 @@ async function normalizeModule(nuxtModule, inlineOptions) {
2435
2437
  console.error(`Error while requiring module \`${nuxtModule}\`: ${error}`);
2436
2438
  throw error;
2437
2439
  }
2440
+ if (existsSync(join(dirname(src), "module.json"))) {
2441
+ buildTimeModuleMeta = JSON.parse(await promises.readFile(join(dirname(src), "module.json"), "utf-8"));
2442
+ }
2438
2443
  }
2439
2444
  if (typeof nuxtModule !== "function") {
2440
2445
  throw new TypeError("Nuxt module should be a function: " + nuxtModule);
2441
2446
  }
2442
- return { nuxtModule, inlineOptions };
2447
+ return { nuxtModule, buildTimeModuleMeta };
2448
+ }
2449
+
2450
+ function hasNuxtModule(moduleName, nuxt = useNuxt()) {
2451
+ return nuxt.options._installedModules.some(({ meta }) => meta.name === moduleName) || nuxt.options.modules.includes(moduleName);
2452
+ }
2453
+ async function hasNuxtModuleCompatibility(module, semverVersion, nuxt = useNuxt()) {
2454
+ const version = await getNuxtModuleVersion(module, nuxt);
2455
+ if (!version) {
2456
+ return false;
2457
+ }
2458
+ return satisfies(normalizeSemanticVersion(version), semverVersion, {
2459
+ includePrerelease: true
2460
+ });
2461
+ }
2462
+ async function getNuxtModuleVersion(module, nuxt = useNuxt()) {
2463
+ const moduleMeta = (typeof module === "string" ? { name: module } : await module.getMeta?.()) || {};
2464
+ if (moduleMeta.version) {
2465
+ return moduleMeta.version;
2466
+ }
2467
+ if (!moduleMeta.name) {
2468
+ return false;
2469
+ }
2470
+ const version = nuxt.options._installedModules.filter((m) => m.meta.name === moduleMeta.name).map((m) => m.meta.version)?.[0];
2471
+ if (version) {
2472
+ return version;
2473
+ }
2474
+ if (typeof module !== "string" && nuxt.options.modules.includes(moduleMeta.name)) {
2475
+ const { buildTimeModuleMeta } = await loadNuxtModuleInstance(moduleMeta.name, nuxt);
2476
+ return buildTimeModuleMeta.version || false;
2477
+ }
2478
+ return false;
2443
2479
  }
2444
2480
 
2445
2481
  async function loadNuxtConfig(opts) {
@@ -2672,6 +2708,17 @@ function addTemplate(_template) {
2672
2708
  nuxt.options.build.templates.push(template);
2673
2709
  return template;
2674
2710
  }
2711
+ function addTypeTemplate(_template) {
2712
+ const nuxt = useNuxt();
2713
+ const template = addTemplate(_template);
2714
+ if (!template.filename.endsWith(".d.ts")) {
2715
+ throw new Error(`Invalid type template. Filename must end with .d.ts : "${template.filename}"`);
2716
+ }
2717
+ nuxt.hook("prepare:types", ({ references }) => {
2718
+ references.push({ path: template.dst });
2719
+ });
2720
+ return template;
2721
+ }
2675
2722
  function normalizeTemplate(template) {
2676
2723
  if (!template) {
2677
2724
  throw new Error("Invalid template: " + JSON.stringify(template));
@@ -2853,4 +2900,4 @@ function useNitro() {
2853
2900
  return nuxt._nitro;
2854
2901
  }
2855
2902
 
2856
- export { addBuildPlugin, addComponent, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addServerHandler, addServerPlugin, addTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildNuxt, checkNuxtCompatibility, compileTemplate, createResolver, defineNuxtModule, extendNuxtSchema, extendPages, extendRouteRules, extendViteConfig, extendWebpackConfig, findPath, getNuxtVersion, hasNuxtCompatibility, importModule$1 as importModule, installModule, isIgnored, isNuxt2, isNuxt3, loadNuxt, loadNuxtConfig, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeTemplate, nuxtCtx, requireModule, resolveAlias, resolveFiles, resolveModule, resolvePath, templateUtils, tryImportModule$1 as tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateTemplates, useLogger, useNitro, useNuxt };
2903
+ export { addBuildPlugin, addComponent, addComponentsDir, addDevServerHandler, addImports, addImportsDir, addImportsSources, addLayout, addPlugin, addPluginTemplate, addPrerenderRoutes, addRouteMiddleware, addServerHandler, addServerPlugin, addTemplate, addTypeTemplate, addVitePlugin, addWebpackPlugin, assertNuxtCompatibility, buildNuxt, checkNuxtCompatibility, compileTemplate, createResolver, defineNuxtModule, extendNuxtSchema, extendPages, extendRouteRules, extendViteConfig, extendWebpackConfig, findPath, getNuxtModuleVersion, getNuxtVersion, hasNuxtCompatibility, hasNuxtModule, hasNuxtModuleCompatibility, importModule$1 as importModule, installModule, isIgnored, isNuxt2, isNuxt3, loadNuxt, loadNuxtConfig, loadNuxtModuleInstance, logger, normalizeModuleTranspilePath, normalizePlugin, normalizeSemanticVersion, normalizeTemplate, nuxtCtx, requireModule, resolveAlias, resolveFiles, resolveModule, resolvePath, templateUtils, tryImportModule$1 as tryImportModule, tryRequireModule, tryResolveModule, tryUseNuxt, updateTemplates, useLogger, useNitro, useNuxt };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuxt/kit",
3
- "version": "3.5.3",
3
+ "version": "3.6.0",
4
4
  "repository": "nuxt/nuxt",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,34 +17,34 @@
17
17
  "dist"
18
18
  ],
19
19
  "dependencies": {
20
- "c12": "^1.4.1",
20
+ "c12": "^1.4.2",
21
21
  "consola": "^3.1.0",
22
22
  "defu": "^6.1.2",
23
- "globby": "^13.1.4",
23
+ "globby": "^13.2.0",
24
24
  "hash-sum": "^2.0.0",
25
25
  "ignore": "^5.2.4",
26
26
  "jiti": "^1.18.2",
27
27
  "knitwork": "^1.0.0",
28
- "mlly": "^1.3.0",
28
+ "mlly": "^1.4.0",
29
29
  "pathe": "^1.1.1",
30
30
  "pkg-types": "^1.0.3",
31
31
  "scule": "^1.0.0",
32
- "semver": "^7.5.1",
32
+ "semver": "^7.5.3",
33
33
  "unctx": "^2.3.1",
34
- "unimport": "^3.0.7",
34
+ "unimport": "^3.0.8",
35
35
  "untyped": "^1.3.2",
36
- "@nuxt/schema": "3.5.3"
36
+ "@nuxt/schema": "3.6.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/hash-sum": "1.0.0",
40
40
  "@types/lodash-es": "4.17.7",
41
41
  "@types/semver": "7.5.0",
42
42
  "lodash-es": "4.17.21",
43
- "nitropack": "2.4.1",
43
+ "nitropack": "2.5.1",
44
44
  "unbuild": "latest",
45
45
  "vite": "4.3.9",
46
- "vitest": "0.31.4",
47
- "webpack": "5.85.1"
46
+ "vitest": "0.32.2",
47
+ "webpack": "5.88.0"
48
48
  },
49
49
  "engines": {
50
50
  "node": "^14.18.0 || >=16.10.0"