@vigilkids/cms-nuxt 0.5.1 → 0.5.2
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.d.mts +6 -0
- package/dist/module.d.ts.map +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +14 -0
- package/dist/runtime/composables/useCmsRoutes.d.ts.map +1 -1
- package/dist/runtime/composables/useCmsRoutes.js +15 -1
- package/dist/runtime/composables/useCmsSiteConfig.d.ts +3 -0
- package/dist/runtime/composables/useCmsSiteConfig.d.ts.map +1 -0
- package/dist/runtime/composables/useCmsSiteConfig.js +4 -0
- package/dist/runtime/plugins/site-config.d.ts +3 -0
- package/dist/runtime/plugins/site-config.d.ts.map +1 -0
- package/dist/runtime/plugins/site-config.js +14 -0
- package/dist/runtime/server/api/_revalidate.post.d.ts.map +1 -1
- package/dist/runtime/server/api/_revalidate.post.js +3 -3
- package/dist/runtime/server/api/preview.get.d.ts.map +1 -1
- package/dist/runtime/server/api/preview.get.js +3 -6
- package/dist/runtime/server/api/site-config.get.d.ts +3 -0
- package/dist/runtime/server/api/site-config.get.d.ts.map +1 -0
- package/dist/runtime/server/api/site-config.get.js +6 -0
- package/dist/runtime/server/api/sitemap-urls.get.d.ts.map +1 -1
- package/dist/runtime/server/api/sitemap-urls.get.js +2 -5
- package/dist/runtime/server/utils/site-config.d.ts +33 -0
- package/dist/runtime/server/utils/site-config.d.ts.map +1 -0
- package/dist/runtime/server/utils/site-config.js +72 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/module.d.mts
CHANGED
|
@@ -22,6 +22,12 @@ interface CmsNuxtModuleOptions {
|
|
|
22
22
|
};
|
|
23
23
|
/** CMS 资源路由策略 */
|
|
24
24
|
routes?: CmsRoutePolicy;
|
|
25
|
+
/** 站点运行时配置 */
|
|
26
|
+
site?: {
|
|
27
|
+
url?: string;
|
|
28
|
+
runtime?: boolean;
|
|
29
|
+
cacheTtl?: number;
|
|
30
|
+
};
|
|
25
31
|
/** 内容 API 集成 */
|
|
26
32
|
content?: {
|
|
27
33
|
articleCollectionPath?: string;
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,UAAU,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAiEnD,QAAA,MAAM,MAAM,EAAE,UAAU,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,UAAU,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAiEnD,QAAA,MAAM,MAAM,EAAE,UAAU,CAAC,oBAAoB,CAkK3C,CAAA;AAEF,eAAe,MAAM,CAAA;AAGrB,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA"}
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -50,6 +50,7 @@ const module = defineNuxtModule({
|
|
|
50
50
|
defaultLocale: "en",
|
|
51
51
|
webhookSecret: "",
|
|
52
52
|
preview: { cookieName: "__preview_token", cookieMaxAge: 1800 },
|
|
53
|
+
site: { runtime: false, cacheTtl: 3e5 },
|
|
53
54
|
content: { articleCollectionPath: "/api/cms/articles", cmsProxyPath: "/cms-proxy" },
|
|
54
55
|
categories: { preload: false },
|
|
55
56
|
revalidate: { enabled: true, path: "/api/_revalidate" },
|
|
@@ -67,10 +68,12 @@ const module = defineNuxtModule({
|
|
|
67
68
|
const previewPath = options.preview?.path ?? "/api/preview";
|
|
68
69
|
const revalidatePath = options.revalidate?.path ?? "/api/_revalidate";
|
|
69
70
|
const sitemapSourcePath = options.sitemap?.sourcePath ?? "/api/cms/sitemap-urls";
|
|
71
|
+
const siteConfigPath = "/api/cms/site-config";
|
|
70
72
|
applyNoCacheRouteRules(nuxt, [
|
|
71
73
|
articleCollectionPath,
|
|
72
74
|
cmsProxyRoute,
|
|
73
75
|
sitemapSourcePath,
|
|
76
|
+
siteConfigPath,
|
|
74
77
|
previewPath,
|
|
75
78
|
revalidatePath
|
|
76
79
|
]);
|
|
@@ -89,6 +92,11 @@ const module = defineNuxtModule({
|
|
|
89
92
|
cookieName: options.preview?.cookieName ?? "__preview_token",
|
|
90
93
|
cookieMaxAge: options.preview?.cookieMaxAge ?? 1800
|
|
91
94
|
},
|
|
95
|
+
site: {
|
|
96
|
+
url: options.site?.url ?? "",
|
|
97
|
+
runtime: options.site?.runtime ?? false,
|
|
98
|
+
cacheTtl: options.site?.cacheTtl ?? 3e5
|
|
99
|
+
},
|
|
92
100
|
routes: {
|
|
93
101
|
...options.routes ?? {},
|
|
94
102
|
locale: {
|
|
@@ -130,6 +138,11 @@ const module = defineNuxtModule({
|
|
|
130
138
|
method: "get",
|
|
131
139
|
handler: resolve("./runtime/server/api/sitemap-urls.get")
|
|
132
140
|
});
|
|
141
|
+
addServerHandler({
|
|
142
|
+
route: siteConfigPath,
|
|
143
|
+
method: "get",
|
|
144
|
+
handler: resolve("./runtime/server/api/site-config.get")
|
|
145
|
+
});
|
|
133
146
|
addServerHandler({
|
|
134
147
|
route: cmsProxyRoute,
|
|
135
148
|
handler: resolve("./runtime/server/routes/cms-proxy")
|
|
@@ -155,6 +168,7 @@ const module = defineNuxtModule({
|
|
|
155
168
|
src: resolve("./runtime/plugins/preview-init.client"),
|
|
156
169
|
mode: "client"
|
|
157
170
|
});
|
|
171
|
+
addPlugin(resolve("./runtime/plugins/site-config"));
|
|
158
172
|
if (options.sitemap?.enabled) {
|
|
159
173
|
nuxt.hook("sitemap:resolve", async (ctx) => {
|
|
160
174
|
const { sitemapProvider } = await import('../dist/runtime/sitemap/provider.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCmsRoutes.d.ts","sourceRoot":"","sources":["../../../src/runtime/composables/useCmsRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"useCmsRoutes.d.ts","sourceRoot":"","sources":["../../../src/runtime/composables/useCmsRoutes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAKjD,kBAAkB;AAClB,wBAAgB,YAAY;;sBAmBD,MAAM,WAAU,cAAc;EAKxD"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { useRuntimeConfig } from "#imports";
|
|
2
2
|
import { buildCmsPath, resolveCmsRoutePolicy } from "../utils/routes.js";
|
|
3
|
+
import { useCmsSiteConfig } from "./useCmsSiteConfig.js";
|
|
3
4
|
export function useCmsRoutes() {
|
|
4
5
|
const config = useRuntimeConfig();
|
|
5
|
-
const
|
|
6
|
+
const cmsConfig = config.public.cms;
|
|
7
|
+
const siteConfig = useCmsSiteConfig();
|
|
8
|
+
const policy = (() => {
|
|
9
|
+
if (cmsConfig.site?.runtime === false) {
|
|
10
|
+
return resolveCmsRoutePolicy(cmsConfig);
|
|
11
|
+
}
|
|
12
|
+
if (!siteConfig.value) {
|
|
13
|
+
throw new Error("CMS site config is not loaded");
|
|
14
|
+
}
|
|
15
|
+
return resolveCmsRoutePolicy({
|
|
16
|
+
...cmsConfig,
|
|
17
|
+
routes: siteConfig.value.route_policy
|
|
18
|
+
});
|
|
19
|
+
})();
|
|
6
20
|
function build(resource, params = {}, includeLocale = false) {
|
|
7
21
|
return buildCmsPath(policy, resource, params, { includeLocale });
|
|
8
22
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCmsSiteConfig.d.ts","sourceRoot":"","sources":["../../../src/runtime/composables/useCmsSiteConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAG7D,wBAAgB,gBAAgB,iEAE/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-config.d.ts","sourceRoot":"","sources":["../../../src/runtime/plugins/site-config.ts"],"names":[],"mappings":";AAIA,wBAeE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { $fetch, defineNuxtPlugin, useRequestFetch, useRuntimeConfig } from "#imports";
|
|
2
|
+
import { useCmsSiteConfig } from "../composables/useCmsSiteConfig.js";
|
|
3
|
+
export default defineNuxtPlugin(async () => {
|
|
4
|
+
const config = useRuntimeConfig();
|
|
5
|
+
const cmsConfig = config.public.cms;
|
|
6
|
+
if (cmsConfig.site?.runtime === false) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const siteConfig = useCmsSiteConfig();
|
|
10
|
+
if (!siteConfig.value) {
|
|
11
|
+
const requestFetch = import.meta.server ? useRequestFetch() : $fetch;
|
|
12
|
+
siteConfig.value = await requestFetch("/api/cms/site-config");
|
|
13
|
+
}
|
|
14
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_revalidate.post.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/_revalidate.post.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_revalidate.post.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/_revalidate.post.ts"],"names":[],"mappings":"AAkCA,iBAAiB;;;;;;;AACjB,wBAuDE"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useRuntimeConfig, useStorage } from "#imports";
|
|
2
2
|
import { verifyWebhookSignature } from "@vigilkids/cms-client/webhook";
|
|
3
3
|
import { createError, defineEventHandler, getHeader, readRawBody } from "h3";
|
|
4
|
-
import { buildCmsPath
|
|
4
|
+
import { buildCmsPath } from "../../utils/routes.js";
|
|
5
|
+
import { resolveServerCmsRoutePolicy } from "../utils/site-config.js";
|
|
5
6
|
function addPath(paths, resource, routePolicy, params) {
|
|
6
7
|
try {
|
|
7
8
|
paths.add(buildCmsPath(routePolicy, resource, params, { includeLocale: true }));
|
|
@@ -32,8 +33,7 @@ export default defineEventHandler(async (event) => {
|
|
|
32
33
|
throw createError({ statusCode: 401, message: "Invalid webhook signature" });
|
|
33
34
|
}
|
|
34
35
|
const payload = JSON.parse(rawBody);
|
|
35
|
-
const cmsConfig =
|
|
36
|
-
const routePolicy = resolveCmsRoutePolicy(cmsConfig);
|
|
36
|
+
const { cmsConfig, routePolicy } = await resolveServerCmsRoutePolicy(event);
|
|
37
37
|
const routeParams = {
|
|
38
38
|
...payload.route_params ?? {},
|
|
39
39
|
locale: publicLocale(payload.locale, cmsConfig.localeMap),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.get.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/preview.get.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.get.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/preview.get.ts"],"names":[],"mappings":"AA0BA,+CAA+C;;AAC/C,wBAgEE"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { env } from "node:process";
|
|
2
|
-
import { useRuntimeConfig } from "#imports";
|
|
3
2
|
import { createError, defineEventHandler, getQuery, sendRedirect, setCookie } from "h3";
|
|
4
3
|
import {
|
|
5
4
|
buildCmsPath,
|
|
6
5
|
extractCmsSourceRouteParams,
|
|
7
|
-
mergeCmsRouteParams
|
|
8
|
-
resolveCmsRoutePolicy
|
|
6
|
+
mergeCmsRouteParams
|
|
9
7
|
} from "../../utils/routes.js";
|
|
10
8
|
import { createServerCmsClient } from "../utils/cms-client.js";
|
|
9
|
+
import { resolveServerCmsRoutePolicy } from "../utils/site-config.js";
|
|
11
10
|
function stringValue(value) {
|
|
12
11
|
return typeof value === "string" ? value.trim() : "";
|
|
13
12
|
}
|
|
@@ -28,9 +27,7 @@ export default defineEventHandler(async (event) => {
|
|
|
28
27
|
if (!token || resource === "article" && !rawSlug) {
|
|
29
28
|
throw createError({ statusCode: 400, message: "Missing token or slug parameter" });
|
|
30
29
|
}
|
|
31
|
-
const
|
|
32
|
-
const cmsConfig = config.public.cms;
|
|
33
|
-
const routePolicy = resolveCmsRoutePolicy(cmsConfig);
|
|
30
|
+
const { cmsConfig, routePolicy } = await resolveServerCmsRoutePolicy(event);
|
|
34
31
|
const publicLocale = stringValue(query.locale) || routePolicy.locale.defaultLocale || "en";
|
|
35
32
|
const apiLocale = cmsConfig.localeMap?.[publicLocale] ?? publicLocale;
|
|
36
33
|
const cookieName = cmsConfig.preview?.cookieName ?? "__preview_token";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-config.get.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/site-config.get.ts"],"names":[],"mappings":";AAGA,wBAGE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { defineEventHandler, setResponseHeader } from "h3";
|
|
2
|
+
import { fetchCmsSiteConfig } from "../utils/site-config.js";
|
|
3
|
+
export default defineEventHandler(async (event) => {
|
|
4
|
+
setResponseHeader(event, "Cache-Control", "private, no-cache, no-store");
|
|
5
|
+
return await fetchCmsSiteConfig(event);
|
|
6
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-urls.get.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/sitemap-urls.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sitemap-urls.get.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/api/sitemap-urls.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAOA,wBAcE"}
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import { useRuntimeConfig } from "#imports";
|
|
2
1
|
import { defineEventHandler, getQuery, setResponseHeader } from "h3";
|
|
3
2
|
import { toArray } from "../../utils/list.js";
|
|
4
|
-
import { resolveCmsRoutePolicy } from "../../utils/routes.js";
|
|
5
3
|
import { cmsLocale, toNuxtSitemapEntry } from "../../utils/sitemap.js";
|
|
6
4
|
import { useServerCmsClient } from "../utils/cms-client.js";
|
|
5
|
+
import { resolveServerCmsRoutePolicy } from "../utils/site-config.js";
|
|
7
6
|
export default defineEventHandler(async (event) => {
|
|
8
7
|
setResponseHeader(event, "Cache-Control", "private, no-cache, no-store");
|
|
9
8
|
const { locale } = getQuery(event);
|
|
10
9
|
if (!locale || typeof locale !== "string")
|
|
11
10
|
return [];
|
|
12
|
-
const
|
|
13
|
-
const cmsConfig = config.public.cms;
|
|
14
|
-
const routePolicy = resolveCmsRoutePolicy(cmsConfig);
|
|
11
|
+
const { cmsConfig, routePolicy } = await resolveServerCmsRoutePolicy(event);
|
|
15
12
|
const client = useServerCmsClient();
|
|
16
13
|
const entries = await client.getSitemap(cmsLocale(cmsConfig.localeMap, locale));
|
|
17
14
|
return toArray(entries).map(
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { SiteConfig } from '@vigilkids/cms-client/types';
|
|
2
|
+
import type { H3Event } from 'h3';
|
|
3
|
+
import type { CmsRoutePolicy } from '../../../types';
|
|
4
|
+
interface ServerCmsSiteOptions {
|
|
5
|
+
url?: string;
|
|
6
|
+
runtime?: boolean;
|
|
7
|
+
cacheTtl?: number;
|
|
8
|
+
}
|
|
9
|
+
interface ServerCmsPublicConfig {
|
|
10
|
+
apiUrl: string;
|
|
11
|
+
productCode?: string;
|
|
12
|
+
defaultLocale?: string;
|
|
13
|
+
localeMap?: Record<string, string>;
|
|
14
|
+
localePrefixes?: Record<string, string>;
|
|
15
|
+
routes?: CmsRoutePolicy;
|
|
16
|
+
preview?: {
|
|
17
|
+
cookieName?: string;
|
|
18
|
+
cookieMaxAge?: number;
|
|
19
|
+
};
|
|
20
|
+
site?: ServerCmsSiteOptions;
|
|
21
|
+
}
|
|
22
|
+
export declare function fetchCmsSiteConfig(event: H3Event): Promise<SiteConfig>;
|
|
23
|
+
export declare function resolveServerCmsRoutePolicy(event: H3Event): Promise<{
|
|
24
|
+
cmsConfig: ServerCmsPublicConfig;
|
|
25
|
+
routePolicy: import("@vigilkids/cms-client").ResolvedRoutePolicy;
|
|
26
|
+
siteConfig: null;
|
|
27
|
+
} | {
|
|
28
|
+
cmsConfig: ServerCmsPublicConfig;
|
|
29
|
+
routePolicy: import("@vigilkids/cms-client").ResolvedRoutePolicy;
|
|
30
|
+
siteConfig: SiteConfig;
|
|
31
|
+
}>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=site-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"site-config.d.ts","sourceRoot":"","sources":["../../../../src/runtime/server/utils/site-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,6BAA6B,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAMpD,UAAU,oBAAoB;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxD,IAAI,CAAC,EAAE,oBAAoB,CAAA;CAC5B;AA6CD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAsB5E;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,OAAO;;;;;;;;GAoB/D"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { useRuntimeConfig } from "#imports";
|
|
2
|
+
import { createError, getRequestHeader } from "h3";
|
|
3
|
+
import { resolveCmsRoutePolicy } from "../../utils/routes.js";
|
|
4
|
+
import { useServerCmsClient } from "./cms-client.js";
|
|
5
|
+
const siteConfigCache = /* @__PURE__ */ new Map();
|
|
6
|
+
function normalizeHost(value) {
|
|
7
|
+
return value?.split(",")[0]?.trim().toLowerCase() ?? "";
|
|
8
|
+
}
|
|
9
|
+
function requestHost(event) {
|
|
10
|
+
return normalizeHost(getRequestHeader(event, "x-forwarded-host")) || normalizeHost(getRequestHeader(event, "host"));
|
|
11
|
+
}
|
|
12
|
+
function siteConfigQuery(event, cmsConfig) {
|
|
13
|
+
const siteUrl = cmsConfig.site?.url?.trim();
|
|
14
|
+
if (siteUrl) {
|
|
15
|
+
return { site_url: siteUrl };
|
|
16
|
+
}
|
|
17
|
+
const host = requestHost(event);
|
|
18
|
+
if (!host) {
|
|
19
|
+
throw createError({ statusCode: 400, message: "CMS site host is required" });
|
|
20
|
+
}
|
|
21
|
+
return { host };
|
|
22
|
+
}
|
|
23
|
+
function cacheKey(cmsConfig, query) {
|
|
24
|
+
return JSON.stringify([
|
|
25
|
+
cmsConfig.apiUrl,
|
|
26
|
+
cmsConfig.productCode ?? "",
|
|
27
|
+
query.site_url ?? "",
|
|
28
|
+
query.host ?? ""
|
|
29
|
+
]);
|
|
30
|
+
}
|
|
31
|
+
function publicCmsConfig() {
|
|
32
|
+
const config = useRuntimeConfig();
|
|
33
|
+
return config.public.cms;
|
|
34
|
+
}
|
|
35
|
+
export async function fetchCmsSiteConfig(event) {
|
|
36
|
+
const cmsConfig = publicCmsConfig();
|
|
37
|
+
const query = siteConfigQuery(event, cmsConfig);
|
|
38
|
+
const ttl = cmsConfig.site?.cacheTtl ?? 3e5;
|
|
39
|
+
const key = cacheKey(cmsConfig, query);
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
const cached = siteConfigCache.get(key);
|
|
42
|
+
if (ttl > 0 && cached && cached.expiresAt > now) {
|
|
43
|
+
return cached.value;
|
|
44
|
+
}
|
|
45
|
+
const siteConfig = await useServerCmsClient().getSiteConfig(query);
|
|
46
|
+
if (!siteConfig.route_policy) {
|
|
47
|
+
throw createError({ statusCode: 502, message: "CMS site route_policy is missing" });
|
|
48
|
+
}
|
|
49
|
+
if (ttl > 0) {
|
|
50
|
+
siteConfigCache.set(key, { value: siteConfig, expiresAt: now + ttl });
|
|
51
|
+
}
|
|
52
|
+
return siteConfig;
|
|
53
|
+
}
|
|
54
|
+
export async function resolveServerCmsRoutePolicy(event) {
|
|
55
|
+
const cmsConfig = publicCmsConfig();
|
|
56
|
+
if (cmsConfig.site?.runtime === false) {
|
|
57
|
+
return {
|
|
58
|
+
cmsConfig,
|
|
59
|
+
routePolicy: resolveCmsRoutePolicy(cmsConfig),
|
|
60
|
+
siteConfig: null
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const siteConfig = await fetchCmsSiteConfig(event);
|
|
64
|
+
return {
|
|
65
|
+
cmsConfig,
|
|
66
|
+
routePolicy: resolveCmsRoutePolicy({
|
|
67
|
+
...cmsConfig,
|
|
68
|
+
routes: siteConfig.route_policy
|
|
69
|
+
}),
|
|
70
|
+
siteConfig
|
|
71
|
+
};
|
|
72
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -26,6 +26,12 @@ export interface CmsNuxtModuleOptions {
|
|
|
26
26
|
};
|
|
27
27
|
/** CMS 资源路由策略 */
|
|
28
28
|
routes?: CmsRoutePolicy;
|
|
29
|
+
/** 站点运行时配置 */
|
|
30
|
+
site?: {
|
|
31
|
+
url?: string;
|
|
32
|
+
runtime?: boolean;
|
|
33
|
+
cacheTtl?: number;
|
|
34
|
+
};
|
|
29
35
|
/** 内容 API 集成 */
|
|
30
36
|
content?: {
|
|
31
37
|
articleCollectionPath?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,8BAA8B,CAAA;AAErC,iBAAiB;AACjB,MAAM,MAAM,cAAc,GAAG,WAAW,CAAA;AAExC,iBAAiB;AACjB,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAE9C,iBAAiB;AACjB,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAA;AAEpD,iBAAiB;AACjB,MAAM,MAAM,cAAc,GAAG,WAAW,CAAA;AAExC,yBAAyB;AACzB,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa;IACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,iBAAiB;IACjB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,gBAAgB;IAChB,OAAO,CAAC,EAAE;QACR,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,cAAc;IACd,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;IACD,gBAAgB;IAChB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe;IACf,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,iBAAiB;IACjB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,8BAA8B,CAAA;AAErC,iBAAiB;AACjB,MAAM,MAAM,cAAc,GAAG,WAAW,CAAA;AAExC,iBAAiB;AACjB,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAE9C,iBAAiB;AACjB,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAA;AAEpD,iBAAiB;AACjB,MAAM,MAAM,cAAc,GAAG,WAAW,CAAA;AAExC,yBAAyB;AACzB,MAAM,WAAW,oBAAoB;IACnC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW;IACX,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa;IACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,iBAAiB;IACjB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,cAAc;IACd,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,gBAAgB;IAChB,OAAO,CAAC,EAAE;QACR,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,cAAc;IACd,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KACnB,CAAA;IACD,gBAAgB;IAChB,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,eAAe;IACf,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,iBAAiB;IACjB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vigilkids/cms-nuxt",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "Nuxt 3 module for OnEx CMS — composables, server routes, middleware, sitemap",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/module.mjs",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"vue": "^3.4.0"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@vigilkids/cms-client": "^0.3.
|
|
47
|
+
"@vigilkids/cms-client": "^0.3.2",
|
|
48
48
|
"nuxt": ">=3.15.0"
|
|
49
49
|
},
|
|
50
50
|
"peerDependenciesMeta": {
|