@vigilkids/cms-nuxt 0.1.0 → 0.2.1

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
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.15.0"
6
6
  },
7
- "version": "0.1.0",
7
+ "version": "0.2.1",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "0.8.4",
10
10
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -49,6 +49,10 @@ const module = defineNuxtModule({
49
49
  });
50
50
  }
51
51
  if (options.preview?.enabled !== false) {
52
+ addServerHandler({
53
+ middleware: true,
54
+ handler: resolve("./runtime/server/middleware/preview-context")
55
+ });
52
56
  addServerHandler({
53
57
  route: "/api/preview",
54
58
  method: "get",
@@ -1,10 +1,23 @@
1
- import { useRuntimeConfig, useState } from "#imports";
2
- import { computed } from "vue";
1
+ import { useCookie, useRequestEvent, useRoute, useRuntimeConfig } from "#imports";
2
+ import { computed, ref } from "vue";
3
+ export function useCmsPreviewToken() {
4
+ const config = useRuntimeConfig();
5
+ const cookieName = config.public.cms.preview?.cookieName ?? "__preview_token";
6
+ if (import.meta.server) {
7
+ const event = useRequestEvent();
8
+ const token = event?.context?.__cms_preview_token ?? null;
9
+ return ref(token);
10
+ }
11
+ const cookie = useCookie(cookieName);
12
+ return computed(
13
+ () => cookie.value ? decodeURIComponent(cookie.value) : null
14
+ );
15
+ }
3
16
  export function useCmsPreview() {
4
- const previewToken = useState("cmsPreviewToken", () => null);
5
- const isPreview = computed(() => !!previewToken.value);
17
+ const token = useCmsPreviewToken();
18
+ const route = useRoute();
19
+ const isPreview = computed(() => !!token.value || route.query._preview === "1");
6
20
  function exitPreview() {
7
- previewToken.value = null;
8
21
  if (import.meta.client) {
9
22
  const config = useRuntimeConfig();
10
23
  const cookieName = config.public.cms.preview?.cookieName ?? "__preview_token";
@@ -12,5 +25,5 @@ export function useCmsPreview() {
12
25
  window.location.reload();
13
26
  }
14
27
  }
15
- return { isPreview, previewToken, exitPreview };
28
+ return { isPreview, previewToken: token, exitPreview };
16
29
  }
@@ -29,11 +29,13 @@ export default defineEventHandler(async (event) => {
29
29
  paths.push(`${localePrefix}/blog/${payload.slug}`);
30
30
  paths.push(`${localePrefix}/blog`);
31
31
  const storage = useStorage("cache:nitro:routes");
32
+ const allKeys = await storage.getKeys("_:");
32
33
  let cleared = 0;
33
34
  for (const path of paths) {
34
- const cacheKey = path.replace(/\//g, ":");
35
- if (await storage.hasItem(cacheKey)) {
36
- await storage.removeItem(cacheKey);
35
+ const escapedPrefix = path.replace(/\W/g, "").slice(0, 16);
36
+ const matchingKeys = allKeys.filter((k) => k.startsWith(`_:${escapedPrefix}.`));
37
+ for (const key of matchingKeys) {
38
+ await storage.removeItem(key);
37
39
  cleared++;
38
40
  }
39
41
  }
@@ -27,5 +27,5 @@ export default defineEventHandler(async (event) => {
27
27
  }
28
28
  const articlePath = cmsConfig.preview?.articlePath ?? "/blog/{slug}";
29
29
  const path = articlePath.replace("{slug}", slug);
30
- return sendRedirect(event, `${prefix}${path}`, 302);
30
+ return sendRedirect(event, `${prefix}${path}?_preview=1`, 302);
31
31
  });
@@ -0,0 +1,20 @@
1
+ import { useRuntimeConfig } from "#imports";
2
+ import { defineEventHandler, getCookie } from "h3";
3
+ export default defineEventHandler((event) => {
4
+ const config = useRuntimeConfig();
5
+ const cookieName = config.public.cms.preview?.cookieName ?? "__preview_token";
6
+ const raw = getCookie(event, cookieName);
7
+ if (raw) {
8
+ event.context.__cms_preview_token = decodeURIComponent(raw);
9
+ const url = event.node.req.url || "/";
10
+ if (!url.startsWith("/api/") && !url.startsWith("/_") && !url.startsWith("/cms-proxy/")) {
11
+ const ts = Date.now();
12
+ const sep = url.includes("?") ? "&" : "?";
13
+ event.node.req.url = `${url}${sep}_pt=${ts}`;
14
+ if (event.node.req.originalUrl) {
15
+ const origSep = event.node.req.originalUrl.includes("?") ? "&" : "?";
16
+ event.node.req.originalUrl = `${event.node.req.originalUrl}${origSep}_pt=${ts}`;
17
+ }
18
+ }
19
+ }
20
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vigilkids/cms-nuxt",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "description": "Nuxt 3 module for OnEx CMS — composables, server routes, middleware, sitemap",
5
5
  "type": "module",
6
6
  "main": "./dist/module.mjs",