@monkeyplus/flow 6.0.17 → 6.0.18

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.
Files changed (101) hide show
  1. package/README.md +2 -0
  2. package/cms/server/database/schema.d.ts +648 -0
  3. package/cms/server/database/schema.mjs +43 -0
  4. package/cms/server/routes/api/auth/[...auth].d.ts +2 -0
  5. package/cms/server/routes/api/auth/[...auth].mjs +5 -0
  6. package/cms/server/routes/api/draft.d.ts +3 -0
  7. package/cms/server/routes/api/draft.mjs +26 -0
  8. package/cms/server/routes/api/repos/remote/[repo]/blobs/[file]/index.d.ts +2 -0
  9. package/cms/server/routes/api/repos/remote/[repo]/blobs/[file]/index.mjs +20 -0
  10. package/cms/server/routes/api/repos/remote/[repo]/blobs/index.post.d.ts +2 -0
  11. package/cms/server/routes/api/repos/remote/[repo]/blobs/index.post.mjs +8 -0
  12. package/cms/server/routes/api/repos/remote/[repo]/branches/[branch]/index.d.ts +2 -0
  13. package/cms/server/routes/api/repos/remote/[repo]/branches/[branch]/index.mjs +8 -0
  14. package/cms/server/routes/api/repos/remote/[repo]/commits/index.post.d.ts +2 -0
  15. package/cms/server/routes/api/repos/remote/[repo]/commits/index.post.mjs +8 -0
  16. package/cms/server/routes/api/repos/remote/[repo]/files/[branch]/index.d.ts +2 -0
  17. package/cms/server/routes/api/repos/remote/[repo]/files/[branch]/index.mjs +38 -0
  18. package/cms/server/routes/api/repos/remote/[repo]/files/index.post.d.ts +2 -0
  19. package/cms/server/routes/api/repos/remote/[repo]/files/index.post.mjs +8 -0
  20. package/cms/server/routes/api/repos/remote/[repo]/refs/heads/[branch]/index.patch.d.ts +2 -0
  21. package/cms/server/routes/api/repos/remote/[repo]/refs/heads/[branch]/index.patch.mjs +9 -0
  22. package/cms/server/utils/auth.d.ts +3 -0
  23. package/cms/server/utils/auth.mjs +16 -0
  24. package/cms/server/utils/db.d.ts +3 -0
  25. package/cms/server/utils/db.mjs +5 -0
  26. package/cms/server/utils/github.d.ts +15 -0
  27. package/cms/server/utils/github.mjs +160 -0
  28. package/cms/server/utils/github_token.d.ts +71 -0
  29. package/cms/server/utils/github_token.mjs +377 -0
  30. package/modules/cms/module.d.ts +11 -0
  31. package/modules/cms/module.mjs +163 -0
  32. package/modules/cms/server/api/admin.d.ts +2 -0
  33. package/modules/cms/server/api/admin.mjs +18 -0
  34. package/modules/cms/server/api/config.d.ts +2 -0
  35. package/modules/cms/server/api/config.mjs +88 -0
  36. package/modules/cms/server/api/localFs.d.ts +2 -0
  37. package/modules/cms/server/api/localFs.mjs +88 -0
  38. package/modules/cms/server/api/meta.d.ts +2 -0
  39. package/modules/cms/server/api/meta.mjs +12 -0
  40. package/modules/cms/server/lib/composables.d.ts +116 -0
  41. package/modules/cms/server/lib/composables.mjs +82 -0
  42. package/modules/cms/server/lib/fs.d.ts +1 -0
  43. package/modules/cms/server/lib/fs.mjs +18 -0
  44. package/modules/cms/server/lib/helpers.d.ts +14 -0
  45. package/modules/cms/server/lib/helpers.mjs +78 -0
  46. package/modules/cms/server/lib/types.d.ts +120 -0
  47. package/modules/cms/server/lib/types.mjs +0 -0
  48. package/modules/cms/server/lib/widgets.d.ts +82 -0
  49. package/modules/cms/server/lib/widgets.mjs +200 -0
  50. package/modules/cms/server/trial.d.ts +2 -0
  51. package/modules/cms/server/trial.mjs +8 -0
  52. package/modules/content/query.mjs +31 -3
  53. package/modules/images/ipx.mjs +4 -2
  54. package/modules/images/module.d.ts +0 -1
  55. package/modules/images/module.mjs +5 -3
  56. package/modules/images/runtime/build.mjs +12 -0
  57. package/modules/images/runtime/image.mjs +4 -3
  58. package/modules/images/runtime/renames.mjs +59 -8
  59. package/modules/images/runtime/types.d.ts +27 -4
  60. package/modules/images/watermark.d.ts +1 -0
  61. package/modules/images/watermark.mjs +113 -0
  62. package/modules/netlify-cms/handler.mjs +2 -1
  63. package/modules/netlify-cms/module.mjs +1 -1
  64. package/modules/netlify-cms/server/api/config.mjs +25 -1
  65. package/modules/netlify-cms/server/api/local-fs.d.ts +51 -0
  66. package/modules/netlify-cms/server/api/local-fs.mjs +81 -77
  67. package/modules/netlify-cms/server/lib/cms/handler.d.ts +1 -1
  68. package/modules/netlify-cms/server/lib/cms/handlerV1.d.ts +1 -1
  69. package/modules/netlify-cms/server/lib/composables.d.ts +8 -0
  70. package/modules/netlify-cms/server/lib/composables.mjs +2 -1
  71. package/package.json +2 -2
  72. package/server/lib/context.d.ts +3 -0
  73. package/server/lib/context.mjs +5 -0
  74. package/server/lib/handler.mjs +58 -23
  75. package/server/lib/pages.d.ts +2 -2
  76. package/server/lib/pages.mjs +8 -6
  77. package/server/lib/render.mjs +20 -4
  78. package/server/plugins/00.lifecycle.mjs +2 -1
  79. package/src/public/index.d.ts +1 -0
  80. package/src/public/index.mjs +1 -0
  81. package/src/public/nitro.mjs +2 -0
  82. package/src/public/query-content.mjs +9 -2
  83. package/src/public/shared.d.ts +1 -0
  84. package/src/public/shared.mjs +3 -0
  85. package/src/public/vite.mjs +63 -8
  86. package/src/runtime/components/FlowIsland.mjs +31 -4
  87. package/src/runtime/components/MkImage.d.ts +100 -22
  88. package/src/runtime/components/MkImage.mjs +20 -12
  89. package/src/runtime/components/MkLink.d.ts +8 -5
  90. package/src/runtime/components/MkLink.mjs +9 -3
  91. package/src/runtime/components/MkPicture.d.ts +92 -7
  92. package/src/runtime/components/MkPicture.mjs +8 -2
  93. package/src/runtime/components/image-shared.d.ts +0 -1
  94. package/src/runtime/components/image-shared.mjs +9 -18
  95. package/src/runtime/config.d.ts +6 -15
  96. package/src/runtime/head.d.ts +2 -1
  97. package/src/runtime/head.mjs +5 -2
  98. package/src/runtime/islands.mjs +20 -2
  99. package/src/runtime/page-discovery.mjs +9 -1
  100. package/src/runtime/pages.d.ts +14 -13
  101. package/src/runtime/virtual-pages.mjs +2 -2
@@ -1,3 +1,25 @@
1
+ import type { PropType } from 'vue';
2
+ import type { WatermarkOptions } from '../../../modules/images/runtime/types.ts';
3
+ /**
4
+ * MkPicture
5
+ *
6
+ * A modern picture element component that integrates with IPX for automatic
7
+ * format negotiation (e.g., providing WEBP and AVIF sources based on browser support)
8
+ * and responsive image sizes.
9
+ *
10
+ * Supports standard IPX modifiers for dynamic image processing:
11
+ * - width / height: resize the image
12
+ * - quality: set the JPEG/WEBP compression quality (0-100)
13
+ * - format: convert format (auto, webp, avif, png, jpeg, gif)
14
+ * - fit: contain, cover, fill, inside, outside
15
+ * - position: crop position (top, right top, center, etc.)
16
+ * - background: set background color (hex)
17
+ * - blur: apply gaussian blur
18
+ * - grayscale: convert to grayscale
19
+ * - rotate: rotate image in degrees
20
+ * - trim: trim borders
21
+ * - watermark: add watermark composite to the image
22
+ */
1
23
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
2
24
  src: {
3
25
  type: StringConstructor;
@@ -12,7 +34,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
12
34
  };
13
35
  classImg: StringConstructor;
14
36
  format: {
15
- type: StringConstructor;
37
+ type: PropType<"auto" | "webp" | "jpeg" | "png" | "avif" | "gif">;
16
38
  default: undefined;
17
39
  };
18
40
  quality: {
@@ -24,9 +46,37 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
24
46
  default: undefined;
25
47
  };
26
48
  fit: {
49
+ type: PropType<"contain" | "cover" | "fill" | "inside" | "outside">;
50
+ default: undefined;
51
+ };
52
+ blur: {
53
+ type: (StringConstructor | NumberConstructor)[];
54
+ default: undefined;
55
+ };
56
+ trim: {
57
+ type: (StringConstructor | NumberConstructor)[];
58
+ default: undefined;
59
+ };
60
+ position: {
61
+ type: PropType<"top" | "right top" | "right" | "right bottom" | "bottom" | "left bottom" | "left" | "left top" | "center">;
62
+ default: undefined;
63
+ };
64
+ grayscale: {
65
+ type: (StringConstructor | BooleanConstructor)[];
66
+ default: undefined;
67
+ };
68
+ rotate: {
69
+ type: (StringConstructor | NumberConstructor)[];
70
+ default: undefined;
71
+ };
72
+ size: {
27
73
  type: StringConstructor;
28
74
  default: undefined;
29
75
  };
76
+ watermark: {
77
+ type: PropType<boolean | string | WatermarkOptions>;
78
+ default: undefined;
79
+ };
30
80
  modifiers: {
31
81
  type: () => Record<string, any>;
32
82
  default: undefined;
@@ -102,7 +152,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
102
152
  };
103
153
  classImg: StringConstructor;
104
154
  format: {
105
- type: StringConstructor;
155
+ type: PropType<"auto" | "webp" | "jpeg" | "png" | "avif" | "gif">;
106
156
  default: undefined;
107
157
  };
108
158
  quality: {
@@ -114,9 +164,37 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
114
164
  default: undefined;
115
165
  };
116
166
  fit: {
167
+ type: PropType<"contain" | "cover" | "fill" | "inside" | "outside">;
168
+ default: undefined;
169
+ };
170
+ blur: {
171
+ type: (StringConstructor | NumberConstructor)[];
172
+ default: undefined;
173
+ };
174
+ trim: {
175
+ type: (StringConstructor | NumberConstructor)[];
176
+ default: undefined;
177
+ };
178
+ position: {
179
+ type: PropType<"top" | "right top" | "right" | "right bottom" | "bottom" | "left bottom" | "left" | "left top" | "center">;
180
+ default: undefined;
181
+ };
182
+ grayscale: {
183
+ type: (StringConstructor | BooleanConstructor)[];
184
+ default: undefined;
185
+ };
186
+ rotate: {
187
+ type: (StringConstructor | NumberConstructor)[];
188
+ default: undefined;
189
+ };
190
+ size: {
117
191
  type: StringConstructor;
118
192
  default: undefined;
119
193
  };
194
+ watermark: {
195
+ type: PropType<boolean | string | WatermarkOptions>;
196
+ default: undefined;
197
+ };
120
198
  modifiers: {
121
199
  type: () => Record<string, any>;
122
200
  default: undefined;
@@ -179,14 +257,21 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
179
257
  }>> & Readonly<{}>, {
180
258
  width: string | number;
181
259
  height: string | number;
182
- fit: string;
183
- format: string;
260
+ fit: "contain" | "cover" | "fill" | "inside" | "outside";
261
+ format: "auto" | "webp" | "jpeg" | "png" | "avif" | "gif";
262
+ quality: string | number;
263
+ background: string;
264
+ blur: string | number;
265
+ trim: string | number;
266
+ position: "top" | "right top" | "right" | "right bottom" | "bottom" | "left bottom" | "left" | "left top" | "center";
267
+ grayscale: string | boolean;
268
+ rotate: string | number;
269
+ size: string;
270
+ watermark: string | boolean | WatermarkOptions;
184
271
  provider: string;
185
272
  preset: string;
186
273
  modifiers: Record<string, any>;
187
274
  sizes: string | Record<string, any>;
188
- background: string;
189
- quality: string | number;
190
275
  strappi: boolean;
191
276
  alt: string;
192
277
  referrerpolicy: string;
@@ -194,9 +279,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
194
279
  longdesc: string;
195
280
  ismap: boolean;
196
281
  loading: string;
282
+ title: string;
197
283
  sync: boolean;
198
284
  thumbnail: string | boolean;
199
- title: string;
200
285
  legacyFormat: string;
201
286
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
202
287
  export default _default;
@@ -1,6 +1,6 @@
1
1
  import { computed, defineComponent, h } from "vue";
2
2
  import { getFileExtension, screens } from "../../../modules/images/runtime/helpers.mjs";
3
- import { useImage, useLazySizes } from "./image-shared.mjs";
3
+ import { useImage } from "./image-shared.mjs";
4
4
  function getLocalSource(src) {
5
5
  return src.startsWith("http") ? "" : src;
6
6
  }
@@ -28,6 +28,13 @@ export default defineComponent({
28
28
  quality: { type: [Number, String], default: void 0 },
29
29
  background: { type: String, default: void 0 },
30
30
  fit: { type: String, default: void 0 },
31
+ blur: { type: [Number, String], default: void 0 },
32
+ trim: { type: [Number, String], default: void 0 },
33
+ position: { type: String, default: void 0 },
34
+ grayscale: { type: [Boolean, String], default: void 0 },
35
+ rotate: { type: [Number, String], default: void 0 },
36
+ size: { type: String, default: void 0 },
37
+ watermark: { type: [Boolean, String, Object], default: void 0 },
31
38
  modifiers: {
32
39
  type: Object,
33
40
  default: void 0
@@ -119,7 +126,6 @@ export default defineComponent({
119
126
  }, nOption.value);
120
127
  return typeof thumbnail === "string" ? thumbnail : resolvedSrc.value;
121
128
  });
122
- useLazySizes(() => !isRuntimeLambda() && !!nThumbnail.value);
123
129
  return () => {
124
130
  if (isRuntimeLambda()) {
125
131
  return h("img", {
@@ -6,7 +6,6 @@ export interface InjectedImageUtils {
6
6
  getImageOptions?: () => FlowImageOptions | undefined;
7
7
  }
8
8
  export declare function useInjectedImageUtils(): InjectedImageUtils;
9
- export declare function useLazySizes(enabled: () => unknown): void;
10
9
  export declare function createBootImageUtils(boot?: FlowBootPayload): InjectedImageUtils;
11
10
  export declare function useImage(props: Record<string, any>): {
12
11
  imageUtils: InjectedImageUtils;
@@ -1,25 +1,9 @@
1
- import { computed, inject, watchEffect } from "vue";
1
+ import { computed, inject } from "vue";
2
2
  import { getNormalName, parseSize } from "../../../modules/images/runtime/helpers.mjs";
3
3
  import { createImageResolver } from "../../../modules/images/runtime/image.mjs";
4
- let lazySizesLoadPromise;
5
- function loadLazySizes() {
6
- if (lazySizesLoadPromise) {
7
- return lazySizesLoadPromise;
8
- }
9
- lazySizesLoadPromise = import("lazysizes");
10
- return lazySizesLoadPromise;
11
- }
12
4
  export function useInjectedImageUtils() {
13
5
  return inject("utils", {});
14
6
  }
15
- export function useLazySizes(enabled) {
16
- watchEffect(() => {
17
- if (typeof window === "undefined" || !enabled()) {
18
- return;
19
- }
20
- void loadLazySizes();
21
- });
22
- }
23
7
  function isAbsoluteImageUrl(value) {
24
8
  return /^https?:\/\//i.test(value) || value.startsWith("data:");
25
9
  }
@@ -75,7 +59,14 @@ export function useImage(props) {
75
59
  format: props.format,
76
60
  quality: props.quality,
77
61
  background: props.background,
78
- fit: props.fit
62
+ fit: props.fit,
63
+ blur: props.blur,
64
+ trim: props.trim,
65
+ position: props.position,
66
+ grayscale: props.grayscale,
67
+ rotate: props.rotate,
68
+ size: props.size,
69
+ watermark: typeof props.watermark === "object" && props.watermark !== null ? "b64" + (typeof btoa !== "undefined" ? btoa(unescape(encodeURIComponent(JSON.stringify(props.watermark)))) : "") : props.watermark
79
70
  }));
80
71
  const nOption = computed(() => ({
81
72
  provider: props.provider,
@@ -1,5 +1,7 @@
1
+ import type { NitroConfig } from 'nitro/types';
1
2
  import type { Options as AutoimportOptions } from 'unplugin-auto-import/types';
2
3
  import type { Options as ComponentOptions } from 'unplugin-vue-components/types';
4
+ import type { NetlifyCmsModuleOptions } from '../../modules/cms/module.ts';
3
5
  import type { FlowImagesModuleOptions } from '../../modules/images/runtime/types.ts';
4
6
  export interface FlowDirEntry {
5
7
  dir: string;
@@ -59,26 +61,15 @@ export type UserFlowConfig = Partial<FlowConfig> & Record<string, unknown> & {
59
61
  };
60
62
  locale?: Partial<FlowLocaleConfig>;
61
63
  images?: Partial<FlowImagesModuleOptions>;
64
+ cms?: Partial<NetlifyCmsModuleOptions>;
62
65
  server?: FlowServerConfig;
63
66
  siteUrl?: string;
64
67
  components?: Partial<ComponentOptions>;
65
68
  autoImport?: Partial<AutoimportOptions>;
66
69
  };
67
- export interface FlowModuleNitroConfig extends Record<string, unknown> {
68
- hooks: Record<string, unknown>;
69
- plugins: string[];
70
- handlers: Array<Record<string, unknown>>;
71
- routeRules: Record<string, Record<string, unknown>>;
72
- runtimeConfig: Record<string, unknown>;
73
- virtual: Record<string, string | (() => string | Promise<string>)>;
74
- imports?: {
75
- imports: Array<{
76
- name: string;
77
- from: string;
78
- as?: string;
79
- }>;
80
- };
81
- }
70
+ export type FlowModuleNitroConfig = NitroConfig & {
71
+ runtimeConfig: any;
72
+ };
82
73
  export interface FlowModuleViteConfig extends Record<string, unknown> {
83
74
  plugins: unknown[];
84
75
  resolve: {
@@ -1,3 +1,4 @@
1
+ import { useSchemaOrg } from '@unhead/schema-org-vue';
1
2
  import { useHead, useSeoMeta } from '@unhead/vue';
2
3
  export declare function getClientHead(): import("@unhead/vue").VueHeadClient<import("@unhead/vue").UseHeadInput<_Deprecated>, boolean>;
3
- export { useHead, useSeoMeta };
4
+ export { useHead, useSchemaOrg, useSeoMeta };
@@ -1,7 +1,10 @@
1
- import { createHead } from "@unhead/vue/client";
1
+ import { UnheadSchemaOrg } from "@unhead/schema-org";
2
+ import { useSchemaOrg } from "@unhead/schema-org-vue";
2
3
  import { useHead, useSeoMeta } from "@unhead/vue";
4
+ import { createHead } from "@unhead/vue/client";
3
5
  const clientHead = createHead();
6
+ clientHead.use(UnheadSchemaOrg());
4
7
  export function getClientHead() {
5
8
  return clientHead;
6
9
  }
7
- export { useHead, useSeoMeta };
10
+ export { useHead, useSchemaOrg, useSeoMeta };
@@ -1,5 +1,5 @@
1
1
  import islands from "virtual:flow/islands";
2
- import { createSSRApp } from "vue";
2
+ import { createSSRApp, h, defineComponent } from "vue";
3
3
  import { createBootImageUtils } from "./components/image-shared.mjs";
4
4
  import { getClientHead } from "./head.mjs";
5
5
  import { installFlowVuePlugins } from "./vue.mjs";
@@ -39,7 +39,25 @@ async function hydrateIsland(element, boot) {
39
39
  if (!mod.default) {
40
40
  return;
41
41
  }
42
- const app = createSSRApp(mod.default, props);
42
+ const slotNamesStr = element.dataset.flowSlots;
43
+ const clientSlots = {};
44
+ if (slotNamesStr) {
45
+ const slotNames = slotNamesStr.split(",");
46
+ for (const name of slotNames) {
47
+ const slotEl = element.querySelector(`div[data-flow-slot-template="${name}"]`);
48
+ if (slotEl) {
49
+ const html = slotEl.innerHTML;
50
+ clientSlots[name] = () => h("div", { "data-flow-slot": name, style: "display: contents;", innerHTML: html });
51
+ }
52
+ }
53
+ }
54
+ const RootComponent = defineComponent({
55
+ name: "FlowIslandRoot",
56
+ setup() {
57
+ return () => h(mod.default, props, Object.keys(clientSlots).length > 0 ? clientSlots : void 0);
58
+ }
59
+ });
60
+ const app = createSSRApp(RootComponent);
43
61
  const imageUtils = createBootImageUtils(boot);
44
62
  app.use(getClientHead());
45
63
  app.provide("utils", imageUtils);
@@ -1,7 +1,11 @@
1
1
  import { existsSync, readdirSync } from "node:fs";
2
2
  import { resolve } from "node:path";
3
3
  import { createJiti } from "jiti";
4
+ import { queryContent } from "../public/query-content.mjs";
5
+ import { useSchemaOrg } from "./head.mjs";
6
+ import { defineLayoutContext } from "./layout-context.mjs";
4
7
  import { localizeRoutePattern, normalizePath, toPublicRoute } from "./locale-routing.mjs";
8
+ import { definePage } from "./pages.mjs";
5
9
  const jiti = createJiti(import.meta.url, {
6
10
  fsCache: false,
7
11
  moduleCache: false
@@ -120,10 +124,14 @@ export async function loadPageDefinitions(projectRoot, flowConfig) {
120
124
  const files = pageDirs.flatMap((pagesDir) => collectFiles(pagesDir));
121
125
  const pages = [];
122
126
  for (const filePath of files) {
127
+ globalThis.definePage = definePage;
128
+ globalThis.queryContent = queryContent;
129
+ globalThis.useSchemaOrg = useSchemaOrg;
130
+ globalThis.defineLayoutContext = defineLayoutContext;
123
131
  const loaded = await jiti.import(filePath, { default: true });
124
132
  const definitions = Array.isArray(loaded) ? loaded : [loaded];
125
133
  for (const definition of definitions) {
126
- if (definition) {
134
+ if (definition && typeof definition === "object" && "name" in definition && "locales" in definition) {
127
135
  pages.push(definition);
128
136
  }
129
137
  }
@@ -8,28 +8,28 @@ export interface FlowLocale {
8
8
  export interface LegacySeoDefinition {
9
9
  title?: string;
10
10
  /**
11
- * @deprecated
12
- */
11
+ * @deprecated
12
+ */
13
13
  description?: string;
14
14
  /**
15
- * @deprecated
16
- */
15
+ * @deprecated
16
+ */
17
17
  keywords?: string;
18
18
  /**
19
- * @deprecated
20
- */
19
+ * @deprecated
20
+ */
21
21
  imageSocial?: string;
22
22
  /**
23
- * @deprecated
24
- */
23
+ * @deprecated
24
+ */
25
25
  twitterSite?: string;
26
26
  /**
27
- * @deprecated
28
- */
27
+ * @deprecated
28
+ */
29
29
  google?: boolean;
30
30
  /**
31
- * @deprecated
32
- */
31
+ * @deprecated
32
+ */
33
33
  twitter?: boolean;
34
34
  /**
35
35
  * @deprecated
@@ -81,7 +81,7 @@ export type PageContextGetImage = ((input: string, modifiers?: Record<string, an
81
81
  };
82
82
  export interface PageViewDefinition {
83
83
  bundle?: string;
84
- template: string;
84
+ template?: string;
85
85
  layout?: string;
86
86
  base?: string;
87
87
  mode?: FlowHydrationMode;
@@ -103,6 +103,7 @@ export interface PageContextInput {
103
103
  params: Record<string, string>;
104
104
  dynamic?: DynamicRouteEntry;
105
105
  utils: PageContextUtils;
106
+ preview?: boolean;
106
107
  }
107
108
  export interface PageLocaleDefinition {
108
109
  url: string;
@@ -1,6 +1,6 @@
1
- import { parse } from "vue/compiler-sfc";
2
- import { existsSync, readFileSync, readdirSync } from "node:fs";
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
3
2
  import { basename, extname, resolve } from "node:path";
3
+ import { parse } from "vue/compiler-sfc";
4
4
  function collectFiles(rootDir, extensions, currentDir = rootDir) {
5
5
  const entries = readdirSync(currentDir, { withFileTypes: true });
6
6
  const files = [];