nuxt-site-config 1.5.4 → 1.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/module.json CHANGED
@@ -5,5 +5,5 @@
5
5
  "bridge": false
6
6
  },
7
7
  "configKey": "site",
8
- "version": "1.5.4"
8
+ "version": "1.6.0"
9
9
  }
package/dist/module.mjs CHANGED
@@ -1,8 +1,9 @@
1
1
  import { useNuxt, createResolver, addTemplate, defineNuxtModule, useLogger, addImports, addComponent, addPlugin, hasNuxtModule, addServerHandler, addPrerenderRoutes, addServerPlugin } from '@nuxt/kit';
2
2
  import { initSiteConfig, updateSiteConfig, getSiteConfigStack } from 'nuxt-site-config-kit';
3
3
  import { relative } from 'pathe';
4
+ import { existsSync } from 'node:fs';
4
5
 
5
- const version = "1.5.4";
6
+ const version = "1.6.0";
6
7
 
7
8
  function extendTypes(module, template) {
8
9
  const nuxt = useNuxt();
@@ -23,6 +24,48 @@ export {}
23
24
  });
24
25
  }
25
26
 
27
+ const DEVTOOLS_UI_ROUTE = "/__nuxt-site-config";
28
+ const DEVTOOLS_UI_LOCAL_PORT = 3030;
29
+ function setupDevToolsUI(resolve, nuxt = useNuxt()) {
30
+ const clientPath = resolve("./client");
31
+ const isProductionBuild = existsSync(clientPath);
32
+ if (isProductionBuild) {
33
+ nuxt.hook("vite:serverCreated", async (server) => {
34
+ const sirv = await import('sirv').then((r) => r.default || r);
35
+ server.middlewares.use(
36
+ DEVTOOLS_UI_ROUTE,
37
+ sirv(clientPath, { dev: true, single: true })
38
+ );
39
+ });
40
+ } else {
41
+ nuxt.hook("vite:extendConfig", (config) => {
42
+ config.server = config.server || {};
43
+ config.server.proxy = config.server.proxy || {};
44
+ config.server.proxy[DEVTOOLS_UI_ROUTE] = {
45
+ target: `http://localhost:${DEVTOOLS_UI_LOCAL_PORT}${DEVTOOLS_UI_ROUTE}`,
46
+ changeOrigin: true,
47
+ followRedirects: true,
48
+ rewrite: (path) => path.replace(DEVTOOLS_UI_ROUTE, "")
49
+ };
50
+ });
51
+ }
52
+ nuxt.hook("devtools:customTabs", (tabs) => {
53
+ tabs.push({
54
+ // unique identifier
55
+ name: "nuxt-simple-sitemap",
56
+ // title to display in the tab
57
+ title: "Site Config",
58
+ // any icon from Iconify, or a URL to an image
59
+ icon: "carbon:settings-check",
60
+ // iframe view
61
+ view: {
62
+ type: "iframe",
63
+ src: DEVTOOLS_UI_ROUTE
64
+ }
65
+ });
66
+ });
67
+ }
68
+
26
69
  const module = defineNuxtModule({
27
70
  meta: {
28
71
  name: "nuxt-site-config",
@@ -175,11 +218,14 @@ declare module '@nuxt/schema' {
175
218
  });
176
219
  if (config.debug) {
177
220
  addServerHandler({
178
- route: "/api/__site-config__/debug",
179
- handler: resolve("./runtime/nitro/routes/debug")
221
+ route: "/__site-config__/debug.json",
222
+ handler: resolve("./runtime/nitro/routes/__site-config__/debug")
180
223
  });
181
- addPrerenderRoutes("/api/__site-config__/debug");
224
+ if (nuxt.options._generate)
225
+ addPrerenderRoutes("/__site-config__/debug.json");
182
226
  }
227
+ if (nuxt.options.dev)
228
+ setupDevToolsUI(resolve);
183
229
  addServerPlugin(resolve("./runtime/nitro/plugins/injectState"));
184
230
  }
185
231
  });
@@ -1,9 +1,18 @@
1
1
  import { createSiteConfigStack } from "site-config-stack";
2
2
  import { defineEventHandler, useAppConfig, useNitroOrigin, useRuntimeConfig } from "#imports";
3
+ function getEnv(config) {
4
+ const key = config.toUpperCase();
5
+ const env = import.meta.env || {};
6
+ const privateKey = `NUXT_SITE_${key}`;
7
+ const publicKey = `NUXT_PUBLIC_SITE_${key}`;
8
+ if (privateKey in env)
9
+ return env[privateKey];
10
+ if (publicKey in env)
11
+ return env[publicKey];
12
+ }
3
13
  export default defineEventHandler((e) => {
4
14
  const config = useRuntimeConfig()["nuxt-site-config"];
5
15
  const siteConfig = e.context.siteConfig || createSiteConfigStack({
6
- // @ts-expect-error untyped
7
16
  debug: config.debug
8
17
  });
9
18
  if (siteConfig) {
@@ -15,6 +24,17 @@ export default defineEventHandler((e) => {
15
24
  _priority: -4,
16
25
  url: nitroOrigin
17
26
  });
27
+ siteConfig.push({
28
+ _context: "runtimeEnv",
29
+ _priority: 0,
30
+ env: getEnv("Env"),
31
+ url: getEnv("Url"),
32
+ name: getEnv("Name"),
33
+ description: getEnv("Description"),
34
+ logo: getEnv("Image"),
35
+ defaultLocale: getEnv("Language"),
36
+ indexable: getEnv("Indexable")
37
+ });
18
38
  const buildStack = config.stack || [];
19
39
  buildStack.forEach((c) => siteConfig.push(c));
20
40
  if (appConfig.site) {
@@ -30,6 +50,15 @@ export default defineEventHandler((e) => {
30
50
  ...e.context._nitro.routeRules.site
31
51
  });
32
52
  }
53
+ const curStack = siteConfig.get();
54
+ if (typeof curStack.indexable === "undefined") {
55
+ siteConfig.push({
56
+ _context: "computed-env",
57
+ _priority: -4,
58
+ // allow overriding from the module
59
+ indexable: curStack.env === "production"
60
+ });
61
+ }
33
62
  }
34
63
  e.context.siteConfig = siteConfig;
35
64
  });
@@ -10,6 +10,6 @@ export default defineEventHandler(async (e) => {
10
10
  config: siteConfig,
11
11
  stack,
12
12
  nitroOrigin,
13
- version: publicRuntimeConfig["nuxt-site-config"]?.version
13
+ version: publicRuntimeConfig["nuxt-site-config"]
14
14
  };
15
15
  });
@@ -1,16 +1,30 @@
1
- import { computed, defineNuxtPlugin, updateSiteConfig } from "#imports";
1
+ import { parseURL } from "ufo";
2
+ import { computed, defineNuxtPlugin, updateSiteConfig, useSiteConfig } from "#imports";
2
3
  export default defineNuxtPlugin({
3
4
  name: "nuxt-site-config:i18n",
4
- // @ts-expect-error todo fix upstream
5
5
  enforce: 1,
6
6
  // needs to come after i18n
7
7
  setup(nuxtApp) {
8
8
  const i18n = nuxtApp.$i18n;
9
9
  if (!i18n)
10
10
  return;
11
+ const currentUrl = useSiteConfig().url;
12
+ let i18nBaseUrl = false;
13
+ try {
14
+ const url = parseURL(i18n.baseUrl.value);
15
+ if (import.meta.dev && url.host) {
16
+ if (url.host.includes("localhost"))
17
+ console.warn(`[Nuxt Site Config] You have set an i18n baseUrl to \`${url.host}\`. This will not work in production. Please set a proper baseUrl in your i18n config.`);
18
+ else if (!currentUrl.includes(url.host))
19
+ console.warn(`[Nuxt Site Config] Your i18n baseUrl \`${url}\` doesn't match your site url. This can lead to unexpected behavior. Please set a matching baseUrl in your i18n config.`);
20
+ else
21
+ i18nBaseUrl = url.host;
22
+ }
23
+ } catch {
24
+ }
11
25
  updateSiteConfig({
12
26
  _context: "@nuxtjs/i18n",
13
- url: i18n.baseUrl.value,
27
+ url: i18nBaseUrl || void 0,
14
28
  currentLocale: i18n.locale,
15
29
  description: computed(() => i18n.te("nuxtSiteConfig.description") ? i18n.t("nuxtSiteConfig.description") : void 0),
16
30
  name: computed(() => i18n.te("nuxtSiteConfig.name") ? i18n.t("nuxtSiteConfig.name") : void 0)
@@ -1,3 +1,8 @@
1
1
  import type { SiteConfig, SiteConfigInput, SiteConfigStack } from 'site-config-stack';
2
2
  export type NuxtSiteConfig = Omit<SiteConfig, 'url'> & Required<Pick<SiteConfig, 'url'>>;
3
- export { SiteConfig, SiteConfigStack, SiteConfigInput };
3
+ export type { SiteConfig, SiteConfigStack, SiteConfigInput };
4
+ export interface ModuleRuntimeConfig {
5
+ debug?: boolean;
6
+ stack?: Partial<SiteConfigInput>[];
7
+ version: string;
8
+ }
@@ -1 +0,0 @@
1
- export {};
package/dist/types.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
- import { ModuleOptions, ModuleHooks, ModuleRuntimeConfig } from './module'
2
+ import type { ModuleOptions, ModuleHooks, ModuleRuntimeConfig } from './module'
3
+
3
4
 
4
5
  declare module '@nuxt/schema' {
5
6
  interface NuxtConfig { ['site']?: Partial<ModuleOptions> }
@@ -16,4 +17,4 @@ declare module 'nuxt/schema' {
16
17
  }
17
18
 
18
19
 
19
- export { ModuleHooks, ModuleOptions, ModuleRuntimeConfig, default } from './module'
20
+ export type { ModuleHooks, ModuleOptions, ModuleRuntimeConfig, default } from './module'
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
- import { ModuleOptions, ModuleHooks, ModuleRuntimeConfig } from './module'
2
+ import type { ModuleOptions, ModuleHooks, ModuleRuntimeConfig } from './module'
3
+
3
4
 
4
5
  declare module '@nuxt/schema' {
5
6
  interface NuxtConfig { ['site']?: Partial<ModuleOptions> }
@@ -16,4 +17,4 @@ declare module 'nuxt/schema' {
16
17
  }
17
18
 
18
19
 
19
- export { ModuleHooks, ModuleOptions, ModuleRuntimeConfig, default } from './module'
20
+ export type { ModuleHooks, ModuleOptions, ModuleRuntimeConfig, default } from './module'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-site-config",
3
3
  "type": "module",
4
- "version": "1.5.4",
4
+ "version": "1.6.0",
5
5
  "description": "Shared site configuration for Nuxt 3 modules.",
6
6
  "license": "MIT",
7
7
  "funding": "https://github.com/sponsors/harlan-zw",
@@ -26,12 +26,16 @@
26
26
  "dist"
27
27
  ],
28
28
  "dependencies": {
29
- "@nuxt/kit": "^3.7.4",
30
- "@nuxt/schema": "^3.7.4",
29
+ "@nuxt/devtools-kit": "^1.0.2",
30
+ "@nuxt/devtools-ui-kit": "^1.0.2",
31
+ "@nuxt/kit": "^3.8.1",
32
+ "@nuxt/schema": "^3.8.1",
31
33
  "pathe": "^1.1.1",
32
- "ufo": "^1.3.1",
33
- "nuxt-site-config-kit": "1.5.4",
34
- "site-config-stack": "1.5.4"
34
+ "shiki-es": "^0.14.0",
35
+ "sirv": "^2.0.3",
36
+ "ufo": "^1.3.2",
37
+ "site-config-stack": "1.6.0",
38
+ "nuxt-site-config-kit": "1.6.0"
35
39
  },
36
40
  "build": {
37
41
  "externals": [