nuxt-site-config-kit 3.0.5 → 3.0.7

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/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024 Harlan Wilton
3
+ Copyright (c) 2023-Present - Harlan Wilton
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
6
 
package/dist/index.cjs CHANGED
@@ -1,49 +1,152 @@
1
1
  'use strict';
2
2
 
3
- const util = require('./shared/nuxt-site-config-kit.469a004d.cjs');
4
3
  const kit = require('@nuxt/kit');
5
- require('pkg-types');
6
- require('site-config-stack');
7
- require('ufo');
8
- require('std-env');
4
+ const pkgTypes = require('pkg-types');
5
+ const siteConfigStack = require('site-config-stack');
6
+ const urls = require('site-config-stack/urls');
7
+ const stdEnv = require('std-env');
8
+ const ufo = require('ufo');
9
9
 
10
- function requireSiteConfig() {
11
- }
12
- function assertSiteConfig(module, requirements, options) {
13
- const siteConfig = util.useSiteConfig();
14
- let valid = true;
15
- const messages = [];
16
- const logger = kit.useLogger("nuxt-site-config");
17
- Object.keys(requirements).forEach((k) => {
18
- const key = k;
19
- if (!siteConfig[key]) {
20
- const reason = (requirements[key] || "").split("\n");
21
- const msg = [
22
- `The \`${module}\` module requires a \`site.${key}\` to be set:`,
23
- ...reason.map((r) => ` - ${r}`),
24
- "",
25
- `You can fix this by adding a \`site.${key}\` to your \`nuxt.config\` or a \`NUXT_PUBLIC_SITE_${key.toUpperCase()}\` to your .env. Learn more at https://nuxtseo.com/site-config/getting-started/how-it-works`
26
- ];
27
- messages.push(msg.join("\n"));
28
- valid = false;
10
+ async function initSiteConfig(nuxt = kit.tryUseNuxt()) {
11
+ if (!nuxt)
12
+ return;
13
+ let siteConfig = nuxt._siteConfig;
14
+ if (siteConfig)
15
+ return siteConfig;
16
+ siteConfig = siteConfigStack.createSiteConfigStack();
17
+ const rootDir = nuxt?.options.rootDir || process.cwd?.() || false;
18
+ siteConfig.push({
19
+ _context: "system",
20
+ _priority: -15,
21
+ name: rootDir ? rootDir.split("/").pop() : void 0,
22
+ env: process.env.NODE_ENV
23
+ });
24
+ if (rootDir) {
25
+ const pkgJson = await pkgTypes.readPackageJSON(void 0, { startingFrom: rootDir });
26
+ if (pkgJson) {
27
+ siteConfig.push({
28
+ _context: "package.json",
29
+ _priority: -10,
30
+ name: pkgJson.name,
31
+ description: pkgJson.description
32
+ });
29
33
  }
34
+ }
35
+ siteConfig.push({
36
+ _context: "vendorEnv",
37
+ _priority: -5,
38
+ url: [
39
+ // vercel
40
+ process.env.VERCEL_URL,
41
+ process.env.NUXT_ENV_VERCEL_URL,
42
+ // netlify
43
+ process.env.URL,
44
+ // cloudflare pages
45
+ process.env.CF_PAGES_URL
46
+ ].find((k) => Boolean(k)),
47
+ name: [
48
+ // vercel
49
+ process.env.NUXT_ENV_VERCEL_GIT_REPO_SLUG,
50
+ // netlify
51
+ process.env.SITE_NAME
52
+ ].find((k) => Boolean(k))
53
+ });
54
+ const runtimeConfig = nuxt.options.runtimeConfig;
55
+ const runtimeConfigEnvKeys = [
56
+ ...Object.entries(runtimeConfig.site || {}).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v]),
57
+ ...Object.entries([...Object.entries(runtimeConfig), ...Object.entries(runtimeConfig.public)]).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v])
58
+ ];
59
+ siteConfig.push({
60
+ _priority: -2,
61
+ _context: "legacyRuntimeConfig",
62
+ ...Object.fromEntries(runtimeConfigEnvKeys)
63
+ });
64
+ siteConfig.push({
65
+ _context: "buildEnv",
66
+ _priority: -1,
67
+ ...siteConfigStack.envSiteConfig(process.env)
30
68
  });
31
- if (!valid) {
32
- logger.error(messages.join("\n"));
33
- if (options?.throwError)
34
- throw new Error();
69
+ nuxt._siteConfig = siteConfig;
70
+ return siteConfig;
71
+ }
72
+ async function installNuxtSiteConfig(nuxt = kit.tryUseNuxt()) {
73
+ await kit.installModule(await kit.resolvePath("nuxt-site-config"));
74
+ await initSiteConfig(nuxt);
75
+ }
76
+ function getSiteConfigStack(nuxt = kit.tryUseNuxt()) {
77
+ if (!nuxt)
78
+ throw new Error("Nuxt context is missing.");
79
+ if (!nuxt._siteConfig)
80
+ throw new Error("Site config is not initialized. Make sure you are running your module after nuxt-site-config.");
81
+ return nuxt._siteConfig;
82
+ }
83
+ function updateSiteConfig(input, nuxt = kit.tryUseNuxt()) {
84
+ const container = getSiteConfigStack(nuxt);
85
+ container.push(input);
86
+ }
87
+ function useSiteConfig(nuxt = kit.tryUseNuxt()) {
88
+ const container = getSiteConfigStack(nuxt);
89
+ return container.get();
90
+ }
91
+
92
+ function useNitroOrigin() {
93
+ const cert = stdEnv.env.NITRO_SSL_CERT;
94
+ const key = stdEnv.env.NITRO_SSL_KEY;
95
+ let host = stdEnv.env.NITRO_HOST || stdEnv.env.HOST || false;
96
+ let port = stdEnv.env.NITRO_PORT || stdEnv.env.PORT || (stdEnv.isDevelopment ? 3e3 : false);
97
+ let protocol = cert && key || !stdEnv.isDevelopment ? "https" : "http";
98
+ if ((stdEnv.isDevelopment || stdEnv.env.prerender) && stdEnv.env.NUXT_VITE_NODE_OPTIONS) {
99
+ const origin = JSON.parse(stdEnv.env.NUXT_VITE_NODE_OPTIONS).baseURL.replace("/__nuxt_vite_node__", "");
100
+ host = ufo.withoutProtocol(origin);
101
+ protocol = origin.includes("https") ? "https" : "http";
35
102
  }
36
- return {
37
- valid,
38
- messages
103
+ if (typeof host === "string" && host.includes(":")) {
104
+ port = host.split(":").pop();
105
+ host = host.split(":")[0];
106
+ }
107
+ port = port ? `:${port}` : "";
108
+ return `${protocol}://${host}${port}/`;
109
+ }
110
+
111
+ function withSiteTrailingSlash(path) {
112
+ const siteConfig = useSiteConfig();
113
+ return urls.fixSlashes(siteConfig.trailingSlash, path);
114
+ }
115
+ function createSitePathResolver(options = {}, nuxt = kit.useNuxt()) {
116
+ const siteConfig = useSiteConfig();
117
+ const nitroOrigin = useNitroOrigin();
118
+ const canUseSiteUrl = (options.canonical !== false || stdEnv.env.prerender) && siteConfig.url;
119
+ const nuxtBase = nuxt.options.app.baseURL || "/";
120
+ return (path) => {
121
+ return urls.resolveSitePath(path, {
122
+ ...options,
123
+ siteUrl: canUseSiteUrl ? siteConfig.url : nitroOrigin,
124
+ trailingSlash: siteConfig.trailingSlash,
125
+ base: nuxtBase
126
+ });
39
127
  };
40
128
  }
129
+ function withSiteUrl(path, options = {}) {
130
+ const siteConfig = useSiteConfig();
131
+ if (!siteConfig.url && options.throwErrorOnMissingSiteUrl)
132
+ throw new Error("Missing url in site config. Please add `{ site: { url: <url> } }` to nuxt.config.ts.");
133
+ const nuxt = kit.useNuxt();
134
+ const base = nuxt.options.app.baseURL || nuxt.options.nitro.baseURL || "/";
135
+ return urls.resolveSitePath(path, {
136
+ absolute: true,
137
+ siteUrl: siteConfig.url || "",
138
+ trailingSlash: siteConfig.trailingSlash,
139
+ base,
140
+ withBase: options.withBase
141
+ });
142
+ }
41
143
 
42
- exports.getSiteConfigStack = util.getSiteConfigStack;
43
- exports.initSiteConfig = util.initSiteConfig;
44
- exports.installNuxtSiteConfig = util.installNuxtSiteConfig;
45
- exports.updateSiteConfig = util.updateSiteConfig;
46
- exports.useNitroOrigin = util.useNitroOrigin;
47
- exports.useSiteConfig = util.useSiteConfig;
48
- exports.assertSiteConfig = assertSiteConfig;
49
- exports.requireSiteConfig = requireSiteConfig;
144
+ exports.createSitePathResolver = createSitePathResolver;
145
+ exports.getSiteConfigStack = getSiteConfigStack;
146
+ exports.initSiteConfig = initSiteConfig;
147
+ exports.installNuxtSiteConfig = installNuxtSiteConfig;
148
+ exports.updateSiteConfig = updateSiteConfig;
149
+ exports.useNitroOrigin = useNitroOrigin;
150
+ exports.useSiteConfig = useSiteConfig;
151
+ exports.withSiteTrailingSlash = withSiteTrailingSlash;
152
+ exports.withSiteUrl = withSiteUrl;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Nuxt } from '@nuxt/schema';
2
2
  import { SiteConfigStack, SiteConfigInput, SiteConfigResolved } from 'site-config-stack';
3
+ export { createSitePathResolver, withSiteTrailingSlash, withSiteUrl } from './urls.cjs';
3
4
 
4
5
  declare function initSiteConfig(nuxt?: Nuxt | null): Promise<SiteConfigStack | undefined>;
5
6
  declare function installNuxtSiteConfig(nuxt?: Nuxt | null): Promise<void>;
@@ -7,27 +8,12 @@ declare function getSiteConfigStack(nuxt?: Nuxt | null): SiteConfigStack;
7
8
  declare function updateSiteConfig(input: SiteConfigInput, nuxt?: Nuxt | null): void;
8
9
  declare function useSiteConfig(nuxt?: Nuxt | null): SiteConfigResolved;
9
10
 
10
- /**
11
- * @deprecated No longer used
12
- */
13
- declare function requireSiteConfig(): void;
14
- declare function assertSiteConfig(module: string, requirements: Partial<Record<keyof SiteConfigResolved, string>>, options?: {
15
- throwError?: boolean;
16
- }): {
17
- valid: boolean;
18
- messages: string[];
19
- };
20
-
21
11
  type AssertionModes = 'prerender' | 'generate' | 'build';
22
12
  interface ModuleAssertion {
23
13
  context: string;
24
14
  requirements: Partial<Record<keyof SiteConfigInput, string>>;
25
15
  }
26
16
  declare module '@nuxt/schema' {
27
- interface AppConfigInput {
28
- /** Theme configuration */
29
- site?: SiteConfigInput;
30
- }
31
17
  interface Nuxt {
32
18
  _siteConfig?: SiteConfigStack;
33
19
  _siteConfigAsserts?: Partial<Record<Partial<AssertionModes>, ModuleAssertion[]>>;
@@ -36,4 +22,4 @@ declare module '@nuxt/schema' {
36
22
 
37
23
  declare function useNitroOrigin(): string;
38
24
 
39
- export { type AssertionModes, type ModuleAssertion, assertSiteConfig, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, requireSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig };
25
+ export { type AssertionModes, type ModuleAssertion, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig };
package/dist/index.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Nuxt } from '@nuxt/schema';
2
2
  import { SiteConfigStack, SiteConfigInput, SiteConfigResolved } from 'site-config-stack';
3
+ export { createSitePathResolver, withSiteTrailingSlash, withSiteUrl } from './urls.mjs';
3
4
 
4
5
  declare function initSiteConfig(nuxt?: Nuxt | null): Promise<SiteConfigStack | undefined>;
5
6
  declare function installNuxtSiteConfig(nuxt?: Nuxt | null): Promise<void>;
@@ -7,27 +8,12 @@ declare function getSiteConfigStack(nuxt?: Nuxt | null): SiteConfigStack;
7
8
  declare function updateSiteConfig(input: SiteConfigInput, nuxt?: Nuxt | null): void;
8
9
  declare function useSiteConfig(nuxt?: Nuxt | null): SiteConfigResolved;
9
10
 
10
- /**
11
- * @deprecated No longer used
12
- */
13
- declare function requireSiteConfig(): void;
14
- declare function assertSiteConfig(module: string, requirements: Partial<Record<keyof SiteConfigResolved, string>>, options?: {
15
- throwError?: boolean;
16
- }): {
17
- valid: boolean;
18
- messages: string[];
19
- };
20
-
21
11
  type AssertionModes = 'prerender' | 'generate' | 'build';
22
12
  interface ModuleAssertion {
23
13
  context: string;
24
14
  requirements: Partial<Record<keyof SiteConfigInput, string>>;
25
15
  }
26
16
  declare module '@nuxt/schema' {
27
- interface AppConfigInput {
28
- /** Theme configuration */
29
- site?: SiteConfigInput;
30
- }
31
17
  interface Nuxt {
32
18
  _siteConfig?: SiteConfigStack;
33
19
  _siteConfigAsserts?: Partial<Record<Partial<AssertionModes>, ModuleAssertion[]>>;
@@ -36,4 +22,4 @@ declare module '@nuxt/schema' {
36
22
 
37
23
  declare function useNitroOrigin(): string;
38
24
 
39
- export { type AssertionModes, type ModuleAssertion, assertSiteConfig, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, requireSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig };
25
+ export { type AssertionModes, type ModuleAssertion, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Nuxt } from '@nuxt/schema';
2
2
  import { SiteConfigStack, SiteConfigInput, SiteConfigResolved } from 'site-config-stack';
3
+ export { createSitePathResolver, withSiteTrailingSlash, withSiteUrl } from './urls.js';
3
4
 
4
5
  declare function initSiteConfig(nuxt?: Nuxt | null): Promise<SiteConfigStack | undefined>;
5
6
  declare function installNuxtSiteConfig(nuxt?: Nuxt | null): Promise<void>;
@@ -7,27 +8,12 @@ declare function getSiteConfigStack(nuxt?: Nuxt | null): SiteConfigStack;
7
8
  declare function updateSiteConfig(input: SiteConfigInput, nuxt?: Nuxt | null): void;
8
9
  declare function useSiteConfig(nuxt?: Nuxt | null): SiteConfigResolved;
9
10
 
10
- /**
11
- * @deprecated No longer used
12
- */
13
- declare function requireSiteConfig(): void;
14
- declare function assertSiteConfig(module: string, requirements: Partial<Record<keyof SiteConfigResolved, string>>, options?: {
15
- throwError?: boolean;
16
- }): {
17
- valid: boolean;
18
- messages: string[];
19
- };
20
-
21
11
  type AssertionModes = 'prerender' | 'generate' | 'build';
22
12
  interface ModuleAssertion {
23
13
  context: string;
24
14
  requirements: Partial<Record<keyof SiteConfigInput, string>>;
25
15
  }
26
16
  declare module '@nuxt/schema' {
27
- interface AppConfigInput {
28
- /** Theme configuration */
29
- site?: SiteConfigInput;
30
- }
31
17
  interface Nuxt {
32
18
  _siteConfig?: SiteConfigStack;
33
19
  _siteConfigAsserts?: Partial<Record<Partial<AssertionModes>, ModuleAssertion[]>>;
@@ -36,4 +22,4 @@ declare module '@nuxt/schema' {
36
22
 
37
23
  declare function useNitroOrigin(): string;
38
24
 
39
- export { type AssertionModes, type ModuleAssertion, assertSiteConfig, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, requireSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig };
25
+ export { type AssertionModes, type ModuleAssertion, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig };
package/dist/index.mjs CHANGED
@@ -1,41 +1,142 @@
1
- import { u as useSiteConfig } from './shared/nuxt-site-config-kit.8664a57b.mjs';
2
- export { g as getSiteConfigStack, i as initSiteConfig, a as installNuxtSiteConfig, b as updateSiteConfig, c as useNitroOrigin } from './shared/nuxt-site-config-kit.8664a57b.mjs';
3
- import { useLogger } from '@nuxt/kit';
4
- import 'pkg-types';
5
- import 'site-config-stack';
6
- import 'ufo';
7
- import 'std-env';
1
+ import { tryUseNuxt, installModule, resolvePath, useNuxt } from '@nuxt/kit';
2
+ import { readPackageJSON } from 'pkg-types';
3
+ import { createSiteConfigStack, envSiteConfig } from 'site-config-stack';
4
+ import { fixSlashes, resolveSitePath } from 'site-config-stack/urls';
5
+ import { env, isDevelopment } from 'std-env';
6
+ import { withoutProtocol } from 'ufo';
8
7
 
9
- function requireSiteConfig() {
10
- }
11
- function assertSiteConfig(module, requirements, options) {
12
- const siteConfig = useSiteConfig();
13
- let valid = true;
14
- const messages = [];
15
- const logger = useLogger("nuxt-site-config");
16
- Object.keys(requirements).forEach((k) => {
17
- const key = k;
18
- if (!siteConfig[key]) {
19
- const reason = (requirements[key] || "").split("\n");
20
- const msg = [
21
- `The \`${module}\` module requires a \`site.${key}\` to be set:`,
22
- ...reason.map((r) => ` - ${r}`),
23
- "",
24
- `You can fix this by adding a \`site.${key}\` to your \`nuxt.config\` or a \`NUXT_PUBLIC_SITE_${key.toUpperCase()}\` to your .env. Learn more at https://nuxtseo.com/site-config/getting-started/how-it-works`
25
- ];
26
- messages.push(msg.join("\n"));
27
- valid = false;
8
+ async function initSiteConfig(nuxt = tryUseNuxt()) {
9
+ if (!nuxt)
10
+ return;
11
+ let siteConfig = nuxt._siteConfig;
12
+ if (siteConfig)
13
+ return siteConfig;
14
+ siteConfig = createSiteConfigStack();
15
+ const rootDir = nuxt?.options.rootDir || process.cwd?.() || false;
16
+ siteConfig.push({
17
+ _context: "system",
18
+ _priority: -15,
19
+ name: rootDir ? rootDir.split("/").pop() : void 0,
20
+ env: process.env.NODE_ENV
21
+ });
22
+ if (rootDir) {
23
+ const pkgJson = await readPackageJSON(void 0, { startingFrom: rootDir });
24
+ if (pkgJson) {
25
+ siteConfig.push({
26
+ _context: "package.json",
27
+ _priority: -10,
28
+ name: pkgJson.name,
29
+ description: pkgJson.description
30
+ });
28
31
  }
32
+ }
33
+ siteConfig.push({
34
+ _context: "vendorEnv",
35
+ _priority: -5,
36
+ url: [
37
+ // vercel
38
+ process.env.VERCEL_URL,
39
+ process.env.NUXT_ENV_VERCEL_URL,
40
+ // netlify
41
+ process.env.URL,
42
+ // cloudflare pages
43
+ process.env.CF_PAGES_URL
44
+ ].find((k) => Boolean(k)),
45
+ name: [
46
+ // vercel
47
+ process.env.NUXT_ENV_VERCEL_GIT_REPO_SLUG,
48
+ // netlify
49
+ process.env.SITE_NAME
50
+ ].find((k) => Boolean(k))
51
+ });
52
+ const runtimeConfig = nuxt.options.runtimeConfig;
53
+ const runtimeConfigEnvKeys = [
54
+ ...Object.entries(runtimeConfig.site || {}).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v]),
55
+ ...Object.entries([...Object.entries(runtimeConfig), ...Object.entries(runtimeConfig.public)]).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v])
56
+ ];
57
+ siteConfig.push({
58
+ _priority: -2,
59
+ _context: "legacyRuntimeConfig",
60
+ ...Object.fromEntries(runtimeConfigEnvKeys)
61
+ });
62
+ siteConfig.push({
63
+ _context: "buildEnv",
64
+ _priority: -1,
65
+ ...envSiteConfig(process.env)
29
66
  });
30
- if (!valid) {
31
- logger.error(messages.join("\n"));
32
- if (options?.throwError)
33
- throw new Error();
67
+ nuxt._siteConfig = siteConfig;
68
+ return siteConfig;
69
+ }
70
+ async function installNuxtSiteConfig(nuxt = tryUseNuxt()) {
71
+ await installModule(await resolvePath("nuxt-site-config"));
72
+ await initSiteConfig(nuxt);
73
+ }
74
+ function getSiteConfigStack(nuxt = tryUseNuxt()) {
75
+ if (!nuxt)
76
+ throw new Error("Nuxt context is missing.");
77
+ if (!nuxt._siteConfig)
78
+ throw new Error("Site config is not initialized. Make sure you are running your module after nuxt-site-config.");
79
+ return nuxt._siteConfig;
80
+ }
81
+ function updateSiteConfig(input, nuxt = tryUseNuxt()) {
82
+ const container = getSiteConfigStack(nuxt);
83
+ container.push(input);
84
+ }
85
+ function useSiteConfig(nuxt = tryUseNuxt()) {
86
+ const container = getSiteConfigStack(nuxt);
87
+ return container.get();
88
+ }
89
+
90
+ function useNitroOrigin() {
91
+ const cert = env.NITRO_SSL_CERT;
92
+ const key = env.NITRO_SSL_KEY;
93
+ let host = env.NITRO_HOST || env.HOST || false;
94
+ let port = env.NITRO_PORT || env.PORT || (isDevelopment ? 3e3 : false);
95
+ let protocol = cert && key || !isDevelopment ? "https" : "http";
96
+ if ((isDevelopment || env.prerender) && env.NUXT_VITE_NODE_OPTIONS) {
97
+ const origin = JSON.parse(env.NUXT_VITE_NODE_OPTIONS).baseURL.replace("/__nuxt_vite_node__", "");
98
+ host = withoutProtocol(origin);
99
+ protocol = origin.includes("https") ? "https" : "http";
100
+ }
101
+ if (typeof host === "string" && host.includes(":")) {
102
+ port = host.split(":").pop();
103
+ host = host.split(":")[0];
34
104
  }
35
- return {
36
- valid,
37
- messages
105
+ port = port ? `:${port}` : "";
106
+ return `${protocol}://${host}${port}/`;
107
+ }
108
+
109
+ function withSiteTrailingSlash(path) {
110
+ const siteConfig = useSiteConfig();
111
+ return fixSlashes(siteConfig.trailingSlash, path);
112
+ }
113
+ function createSitePathResolver(options = {}, nuxt = useNuxt()) {
114
+ const siteConfig = useSiteConfig();
115
+ const nitroOrigin = useNitroOrigin();
116
+ const canUseSiteUrl = (options.canonical !== false || env.prerender) && siteConfig.url;
117
+ const nuxtBase = nuxt.options.app.baseURL || "/";
118
+ return (path) => {
119
+ return resolveSitePath(path, {
120
+ ...options,
121
+ siteUrl: canUseSiteUrl ? siteConfig.url : nitroOrigin,
122
+ trailingSlash: siteConfig.trailingSlash,
123
+ base: nuxtBase
124
+ });
38
125
  };
39
126
  }
127
+ function withSiteUrl(path, options = {}) {
128
+ const siteConfig = useSiteConfig();
129
+ if (!siteConfig.url && options.throwErrorOnMissingSiteUrl)
130
+ throw new Error("Missing url in site config. Please add `{ site: { url: <url> } }` to nuxt.config.ts.");
131
+ const nuxt = useNuxt();
132
+ const base = nuxt.options.app.baseURL || nuxt.options.nitro.baseURL || "/";
133
+ return resolveSitePath(path, {
134
+ absolute: true,
135
+ siteUrl: siteConfig.url || "",
136
+ trailingSlash: siteConfig.trailingSlash,
137
+ base,
138
+ withBase: options.withBase
139
+ });
140
+ }
40
141
 
41
- export { assertSiteConfig, requireSiteConfig, useSiteConfig };
142
+ export { createSitePathResolver, getSiteConfigStack, initSiteConfig, installNuxtSiteConfig, updateSiteConfig, useNitroOrigin, useSiteConfig, withSiteTrailingSlash, withSiteUrl };
package/dist/urls.cjs CHANGED
@@ -1,46 +1,15 @@
1
1
  'use strict';
2
2
 
3
- const urls = require('site-config-stack/urls');
4
- const kit = require('@nuxt/kit');
5
- const stdEnv = require('std-env');
6
- const util = require('./shared/nuxt-site-config-kit.469a004d.cjs');
3
+ require('@nuxt/kit');
4
+ require('site-config-stack/urls');
5
+ require('std-env');
6
+ const urls = require('./index.cjs');
7
7
  require('pkg-types');
8
8
  require('site-config-stack');
9
9
  require('ufo');
10
10
 
11
- function withSiteTrailingSlash(path) {
12
- const siteConfig = util.useSiteConfig();
13
- return urls.fixSlashes(siteConfig.trailingSlash, path);
14
- }
15
- function createSitePathResolver(options = {}, nuxt = kit.useNuxt()) {
16
- const siteConfig = util.useSiteConfig();
17
- const nitroOrigin = util.useNitroOrigin();
18
- const canUseSiteUrl = (options.canonical !== false || stdEnv.env.prerender) && siteConfig.url;
19
- const nuxtBase = nuxt.options.app.baseURL || "/";
20
- return (path) => {
21
- return urls.resolveSitePath(path, {
22
- ...options,
23
- siteUrl: canUseSiteUrl ? siteConfig.url : nitroOrigin,
24
- trailingSlash: siteConfig.trailingSlash,
25
- base: nuxtBase
26
- });
27
- };
28
- }
29
- function withSiteUrl(path, options = {}) {
30
- const siteConfig = util.useSiteConfig();
31
- if (!siteConfig.url && options.throwErrorOnMissingSiteUrl)
32
- throw new Error("Missing url in site config. Please add `{ site: { url: <url> } }` to nuxt.config.ts.");
33
- const nuxt = kit.useNuxt();
34
- const base = nuxt.options.app.baseURL || nuxt.options.nitro.baseURL || "/";
35
- return urls.resolveSitePath(path, {
36
- absolute: true,
37
- siteUrl: siteConfig.url || "",
38
- trailingSlash: siteConfig.trailingSlash,
39
- base,
40
- withBase: options.withBase
41
- });
42
- }
43
11
 
44
- exports.createSitePathResolver = createSitePathResolver;
45
- exports.withSiteTrailingSlash = withSiteTrailingSlash;
46
- exports.withSiteUrl = withSiteUrl;
12
+
13
+ exports.createSitePathResolver = urls.createSitePathResolver;
14
+ exports.withSiteTrailingSlash = urls.withSiteTrailingSlash;
15
+ exports.withSiteUrl = urls.withSiteUrl;
package/dist/urls.mjs CHANGED
@@ -1,42 +1,7 @@
1
- import { fixSlashes, resolveSitePath } from 'site-config-stack/urls';
2
- import { useNuxt } from '@nuxt/kit';
3
- import { env } from 'std-env';
4
- import { u as useSiteConfig, c as useNitroOrigin } from './shared/nuxt-site-config-kit.8664a57b.mjs';
1
+ import '@nuxt/kit';
2
+ import 'site-config-stack/urls';
3
+ import 'std-env';
4
+ export { createSitePathResolver, withSiteTrailingSlash, withSiteUrl } from './index.mjs';
5
5
  import 'pkg-types';
6
6
  import 'site-config-stack';
7
7
  import 'ufo';
8
-
9
- function withSiteTrailingSlash(path) {
10
- const siteConfig = useSiteConfig();
11
- return fixSlashes(siteConfig.trailingSlash, path);
12
- }
13
- function createSitePathResolver(options = {}, nuxt = useNuxt()) {
14
- const siteConfig = useSiteConfig();
15
- const nitroOrigin = useNitroOrigin();
16
- const canUseSiteUrl = (options.canonical !== false || env.prerender) && siteConfig.url;
17
- const nuxtBase = nuxt.options.app.baseURL || "/";
18
- return (path) => {
19
- return resolveSitePath(path, {
20
- ...options,
21
- siteUrl: canUseSiteUrl ? siteConfig.url : nitroOrigin,
22
- trailingSlash: siteConfig.trailingSlash,
23
- base: nuxtBase
24
- });
25
- };
26
- }
27
- function withSiteUrl(path, options = {}) {
28
- const siteConfig = useSiteConfig();
29
- if (!siteConfig.url && options.throwErrorOnMissingSiteUrl)
30
- throw new Error("Missing url in site config. Please add `{ site: { url: <url> } }` to nuxt.config.ts.");
31
- const nuxt = useNuxt();
32
- const base = nuxt.options.app.baseURL || nuxt.options.nitro.baseURL || "/";
33
- return resolveSitePath(path, {
34
- absolute: true,
35
- siteUrl: siteConfig.url || "",
36
- trailingSlash: siteConfig.trailingSlash,
37
- base,
38
- withBase: options.withBase
39
- });
40
- }
41
-
42
- export { createSitePathResolver, withSiteTrailingSlash, withSiteUrl };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-site-config-kit",
3
3
  "type": "module",
4
- "version": "3.0.5",
4
+ "version": "3.0.7",
5
5
  "description": "Shared site configuration build-time utilities for Nuxt 3 modules.",
6
6
  "license": "MIT",
7
7
  "funding": "https://github.com/sponsors/harlan-zw",
@@ -38,12 +38,14 @@
38
38
  "dist"
39
39
  ],
40
40
  "dependencies": {
41
- "@nuxt/kit": "^3.13.2",
42
- "@nuxt/schema": "^3.13.2",
43
- "pkg-types": "^1.2.1",
44
- "std-env": "^3.7.0",
41
+ "@nuxt/kit": "^3.15.4",
42
+ "pkg-types": "^1.3.1",
43
+ "std-env": "^3.8.0",
45
44
  "ufo": "^1.5.4",
46
- "site-config-stack": "3.0.5"
45
+ "site-config-stack": "3.0.7"
46
+ },
47
+ "devDependencies": {
48
+ "@nuxt/schema": "^3.15.4"
47
49
  },
48
50
  "scripts": {
49
51
  "lint": "eslint . --fix",
@@ -1,115 +0,0 @@
1
- 'use strict';
2
-
3
- const kit = require('@nuxt/kit');
4
- const pkgTypes = require('pkg-types');
5
- const siteConfigStack = require('site-config-stack');
6
- const ufo = require('ufo');
7
- const stdEnv = require('std-env');
8
-
9
- async function initSiteConfig(nuxt = kit.tryUseNuxt()) {
10
- if (!nuxt)
11
- return;
12
- let siteConfig = nuxt._siteConfig;
13
- if (siteConfig)
14
- return siteConfig;
15
- siteConfig = siteConfigStack.createSiteConfigStack();
16
- const rootDir = nuxt?.options.rootDir || process.cwd?.() || false;
17
- siteConfig.push({
18
- _context: "system",
19
- _priority: -15,
20
- name: rootDir ? rootDir.split("/").pop() : void 0,
21
- env: process.env.NODE_ENV
22
- });
23
- if (rootDir) {
24
- const pkgJson = await pkgTypes.readPackageJSON(void 0, { startingFrom: rootDir });
25
- if (pkgJson) {
26
- siteConfig.push({
27
- _context: "package.json",
28
- _priority: -10,
29
- name: pkgJson.name,
30
- description: pkgJson.description
31
- });
32
- }
33
- }
34
- siteConfig.push({
35
- _context: "vendorEnv",
36
- _priority: -5,
37
- url: [
38
- // vercel
39
- process.env.VERCEL_URL,
40
- process.env.NUXT_ENV_VERCEL_URL,
41
- // netlify
42
- process.env.URL,
43
- // cloudflare pages
44
- process.env.CF_PAGES_URL
45
- ].find((k) => Boolean(k)),
46
- name: [
47
- // vercel
48
- process.env.NUXT_ENV_VERCEL_GIT_REPO_SLUG,
49
- // netlify
50
- process.env.SITE_NAME
51
- ].find((k) => Boolean(k))
52
- });
53
- const runtimeConfig = nuxt.options.runtimeConfig;
54
- const runtimeConfigEnvKeys = [
55
- ...Object.entries(runtimeConfig.site || {}).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v]),
56
- ...Object.entries([...Object.entries(runtimeConfig), ...Object.entries(runtimeConfig.public)]).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v])
57
- ];
58
- siteConfig.push({
59
- _priority: -2,
60
- _context: "legacyRuntimeConfig",
61
- ...Object.fromEntries(runtimeConfigEnvKeys)
62
- });
63
- siteConfig.push({
64
- _context: "buildEnv",
65
- _priority: -1,
66
- ...siteConfigStack.envSiteConfig(process.env)
67
- });
68
- nuxt._siteConfig = siteConfig;
69
- return siteConfig;
70
- }
71
- async function installNuxtSiteConfig(nuxt = kit.tryUseNuxt()) {
72
- await kit.installModule(await kit.resolvePath("nuxt-site-config"));
73
- await initSiteConfig(nuxt);
74
- }
75
- function getSiteConfigStack(nuxt = kit.tryUseNuxt()) {
76
- if (!nuxt)
77
- throw new Error("Nuxt context is missing.");
78
- if (!nuxt._siteConfig)
79
- throw new Error("Site config is not initialized. Make sure you are running your module after nuxt-site-config.");
80
- return nuxt._siteConfig;
81
- }
82
- function updateSiteConfig(input, nuxt = kit.tryUseNuxt()) {
83
- const container = getSiteConfigStack(nuxt);
84
- container.push(input);
85
- }
86
- function useSiteConfig(nuxt = kit.tryUseNuxt()) {
87
- const container = getSiteConfigStack(nuxt);
88
- return container.get();
89
- }
90
-
91
- function useNitroOrigin() {
92
- const cert = stdEnv.env.NITRO_SSL_CERT;
93
- const key = stdEnv.env.NITRO_SSL_KEY;
94
- let host = stdEnv.env.NITRO_HOST || stdEnv.env.HOST || false;
95
- let port = stdEnv.env.NITRO_PORT || stdEnv.env.PORT || (stdEnv.isDevelopment ? 3e3 : false);
96
- let protocol = cert && key || !stdEnv.isDevelopment ? "https" : "http";
97
- if ((stdEnv.isDevelopment || stdEnv.env.prerender) && stdEnv.env.NUXT_VITE_NODE_OPTIONS) {
98
- const origin = JSON.parse(stdEnv.env.NUXT_VITE_NODE_OPTIONS).baseURL.replace("/__nuxt_vite_node__", "");
99
- host = ufo.withoutProtocol(origin);
100
- protocol = origin.includes("https") ? "https" : "http";
101
- }
102
- if (typeof host === "string" && host.includes(":")) {
103
- port = host.split(":").pop();
104
- host = host.split(":")[0];
105
- }
106
- port = port ? `:${port}` : "";
107
- return `${protocol}://${host}${port}/`;
108
- }
109
-
110
- exports.getSiteConfigStack = getSiteConfigStack;
111
- exports.initSiteConfig = initSiteConfig;
112
- exports.installNuxtSiteConfig = installNuxtSiteConfig;
113
- exports.updateSiteConfig = updateSiteConfig;
114
- exports.useNitroOrigin = useNitroOrigin;
115
- exports.useSiteConfig = useSiteConfig;
@@ -1,108 +0,0 @@
1
- import { tryUseNuxt, installModule, resolvePath } from '@nuxt/kit';
2
- import { readPackageJSON } from 'pkg-types';
3
- import { createSiteConfigStack, envSiteConfig } from 'site-config-stack';
4
- import { withoutProtocol } from 'ufo';
5
- import { env, isDevelopment } from 'std-env';
6
-
7
- async function initSiteConfig(nuxt = tryUseNuxt()) {
8
- if (!nuxt)
9
- return;
10
- let siteConfig = nuxt._siteConfig;
11
- if (siteConfig)
12
- return siteConfig;
13
- siteConfig = createSiteConfigStack();
14
- const rootDir = nuxt?.options.rootDir || process.cwd?.() || false;
15
- siteConfig.push({
16
- _context: "system",
17
- _priority: -15,
18
- name: rootDir ? rootDir.split("/").pop() : void 0,
19
- env: process.env.NODE_ENV
20
- });
21
- if (rootDir) {
22
- const pkgJson = await readPackageJSON(void 0, { startingFrom: rootDir });
23
- if (pkgJson) {
24
- siteConfig.push({
25
- _context: "package.json",
26
- _priority: -10,
27
- name: pkgJson.name,
28
- description: pkgJson.description
29
- });
30
- }
31
- }
32
- siteConfig.push({
33
- _context: "vendorEnv",
34
- _priority: -5,
35
- url: [
36
- // vercel
37
- process.env.VERCEL_URL,
38
- process.env.NUXT_ENV_VERCEL_URL,
39
- // netlify
40
- process.env.URL,
41
- // cloudflare pages
42
- process.env.CF_PAGES_URL
43
- ].find((k) => Boolean(k)),
44
- name: [
45
- // vercel
46
- process.env.NUXT_ENV_VERCEL_GIT_REPO_SLUG,
47
- // netlify
48
- process.env.SITE_NAME
49
- ].find((k) => Boolean(k))
50
- });
51
- const runtimeConfig = nuxt.options.runtimeConfig;
52
- const runtimeConfigEnvKeys = [
53
- ...Object.entries(runtimeConfig.site || {}).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v]),
54
- ...Object.entries([...Object.entries(runtimeConfig), ...Object.entries(runtimeConfig.public)]).filter(([k]) => k.startsWith("site")).map(([k, v]) => [k.replace(/^site/, ""), v])
55
- ];
56
- siteConfig.push({
57
- _priority: -2,
58
- _context: "legacyRuntimeConfig",
59
- ...Object.fromEntries(runtimeConfigEnvKeys)
60
- });
61
- siteConfig.push({
62
- _context: "buildEnv",
63
- _priority: -1,
64
- ...envSiteConfig(process.env)
65
- });
66
- nuxt._siteConfig = siteConfig;
67
- return siteConfig;
68
- }
69
- async function installNuxtSiteConfig(nuxt = tryUseNuxt()) {
70
- await installModule(await resolvePath("nuxt-site-config"));
71
- await initSiteConfig(nuxt);
72
- }
73
- function getSiteConfigStack(nuxt = tryUseNuxt()) {
74
- if (!nuxt)
75
- throw new Error("Nuxt context is missing.");
76
- if (!nuxt._siteConfig)
77
- throw new Error("Site config is not initialized. Make sure you are running your module after nuxt-site-config.");
78
- return nuxt._siteConfig;
79
- }
80
- function updateSiteConfig(input, nuxt = tryUseNuxt()) {
81
- const container = getSiteConfigStack(nuxt);
82
- container.push(input);
83
- }
84
- function useSiteConfig(nuxt = tryUseNuxt()) {
85
- const container = getSiteConfigStack(nuxt);
86
- return container.get();
87
- }
88
-
89
- function useNitroOrigin() {
90
- const cert = env.NITRO_SSL_CERT;
91
- const key = env.NITRO_SSL_KEY;
92
- let host = env.NITRO_HOST || env.HOST || false;
93
- let port = env.NITRO_PORT || env.PORT || (isDevelopment ? 3e3 : false);
94
- let protocol = cert && key || !isDevelopment ? "https" : "http";
95
- if ((isDevelopment || env.prerender) && env.NUXT_VITE_NODE_OPTIONS) {
96
- const origin = JSON.parse(env.NUXT_VITE_NODE_OPTIONS).baseURL.replace("/__nuxt_vite_node__", "");
97
- host = withoutProtocol(origin);
98
- protocol = origin.includes("https") ? "https" : "http";
99
- }
100
- if (typeof host === "string" && host.includes(":")) {
101
- port = host.split(":").pop();
102
- host = host.split(":")[0];
103
- }
104
- port = port ? `:${port}` : "";
105
- return `${protocol}://${host}${port}/`;
106
- }
107
-
108
- export { installNuxtSiteConfig as a, updateSiteConfig as b, useNitroOrigin as c, getSiteConfigStack as g, initSiteConfig as i, useSiteConfig as u };