@vezham/config 26.0.0-alpha.5 → 26.0.0-alpha.6

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 (169) hide show
  1. package/README.md +14 -0
  2. package/dist/lib/deploy/cli.d.ts +3 -0
  3. package/dist/lib/deploy/cli.d.ts.map +1 -0
  4. package/dist/lib/deploy/cli.js +12 -0
  5. package/dist/lib/deploy/firebase.d.ts +3 -0
  6. package/dist/lib/deploy/firebase.d.ts.map +1 -0
  7. package/dist/lib/deploy/firebase.js +106 -0
  8. package/dist/lib/deploy/index.d.ts +4 -0
  9. package/dist/lib/deploy/index.d.ts.map +1 -0
  10. package/dist/lib/deploy/index.js +42 -0
  11. package/dist/lib/deploy/paths.d.ts +3 -0
  12. package/dist/lib/deploy/paths.d.ts.map +1 -0
  13. package/dist/lib/deploy/paths.js +6 -0
  14. package/dist/lib/deploy/presets.d.ts +5 -0
  15. package/dist/lib/deploy/presets.d.ts.map +1 -0
  16. package/dist/lib/deploy/presets.js +10 -0
  17. package/dist/lib/deploy/types.d.ts +97 -0
  18. package/dist/lib/deploy/types.d.ts.map +1 -0
  19. package/dist/lib/deploy/vercel.d.ts +3 -0
  20. package/dist/lib/deploy/vercel.d.ts.map +1 -0
  21. package/dist/lib/deploy/vercel.js +47 -0
  22. package/dist/lib/framework.d.ts +3 -0
  23. package/dist/lib/framework.d.ts.map +1 -0
  24. package/dist/lib/framework.js +7 -0
  25. package/dist/lib/i18n.d.ts +6 -0
  26. package/dist/lib/i18n.d.ts.map +1 -0
  27. package/dist/lib/i18n.js +11 -0
  28. package/dist/lib/integrations/next/index.d.ts +4 -0
  29. package/dist/lib/integrations/next/index.d.ts.map +1 -0
  30. package/dist/lib/integrations/next/index.js +29 -0
  31. package/dist/lib/integrations/playwright/index.d.ts +11 -0
  32. package/dist/lib/integrations/playwright/index.d.ts.map +1 -0
  33. package/dist/lib/integrations/playwright/index.js +77 -0
  34. package/dist/lib/integrations/playwright/test.d.ts +5 -0
  35. package/dist/lib/integrations/playwright/test.d.ts.map +1 -0
  36. package/dist/lib/integrations/playwright/test.js +23 -0
  37. package/dist/lib/integrations/vite/index.d.ts +12 -0
  38. package/dist/lib/integrations/vite/index.d.ts.map +1 -0
  39. package/dist/lib/integrations/vite/index.js +34 -0
  40. package/dist/lib/integrations/vite-lib/base.d.ts +3 -0
  41. package/dist/lib/integrations/vite-lib/base.d.ts.map +1 -0
  42. package/dist/lib/integrations/vite-lib/base.js +31 -0
  43. package/dist/lib/integrations/vite-lib/index.d.ts +3 -0
  44. package/dist/lib/integrations/vite-lib/index.d.ts.map +1 -0
  45. package/dist/lib/integrations/vite-lib/index.js +42 -0
  46. package/dist/lib/integrations/vite-lib/react.d.ts +3 -0
  47. package/dist/lib/integrations/vite-lib/react.d.ts.map +1 -0
  48. package/dist/lib/integrations/vite-lib/react.js +10 -0
  49. package/dist/lib/integrations/vitest/framework.d.ts +4 -0
  50. package/dist/lib/integrations/vitest/framework.d.ts.map +1 -0
  51. package/dist/lib/integrations/vitest/framework.js +5 -0
  52. package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts +3 -0
  53. package/dist/lib/integrations/vitest/frameworks/docs-plugins.d.ts.map +1 -0
  54. package/dist/lib/integrations/vitest/frameworks/docs-plugins.js +27 -0
  55. package/dist/lib/integrations/vitest/frameworks/docs.d.ts +3 -0
  56. package/dist/lib/integrations/vitest/frameworks/docs.d.ts.map +1 -0
  57. package/dist/lib/integrations/vitest/frameworks/docs.js +5 -0
  58. package/dist/lib/integrations/vitest/frameworks/next.d.ts +3 -0
  59. package/dist/lib/integrations/vitest/frameworks/next.d.ts.map +1 -0
  60. package/dist/lib/integrations/vitest/frameworks/next.js +5 -0
  61. package/dist/lib/integrations/vitest/frameworks/react.d.ts +3 -0
  62. package/dist/lib/integrations/vitest/frameworks/react.d.ts.map +1 -0
  63. package/dist/lib/integrations/vitest/frameworks/react.js +5 -0
  64. package/dist/lib/integrations/vitest/index.d.ts +4 -0
  65. package/dist/lib/integrations/vitest/index.d.ts.map +1 -0
  66. package/dist/lib/integrations/vitest/index.js +4 -0
  67. package/dist/lib/integrations/vitest/setup/next.d.ts +2 -0
  68. package/dist/lib/integrations/vitest/setup/next.d.ts.map +1 -0
  69. package/dist/lib/integrations/vitest/setup/next.js +11 -0
  70. package/dist/lib/integrations/vitest/setup/react.d.ts +2 -0
  71. package/dist/lib/integrations/vitest/setup/react.d.ts.map +1 -0
  72. package/dist/lib/integrations/vitest/setup/react.js +36 -0
  73. package/dist/lib/integrations/vitest/shared.d.ts +3 -0
  74. package/dist/lib/integrations/vitest/shared.d.ts.map +1 -0
  75. package/dist/lib/integrations/vitest/shared.js +24 -0
  76. package/dist/lib/metadata/cli.d.ts +3 -0
  77. package/dist/lib/metadata/cli.d.ts.map +1 -0
  78. package/dist/lib/metadata/cli.js +13 -0
  79. package/dist/lib/metadata/env.d.ts +9 -0
  80. package/dist/lib/metadata/env.d.ts.map +1 -0
  81. package/dist/lib/metadata/env.js +36 -0
  82. package/dist/lib/metadata/html.d.ts +3 -0
  83. package/dist/lib/metadata/html.d.ts.map +1 -0
  84. package/dist/lib/metadata/html.js +96 -0
  85. package/dist/lib/metadata/index.d.ts +7 -0
  86. package/dist/lib/metadata/index.d.ts.map +1 -0
  87. package/dist/lib/metadata/index.js +61 -0
  88. package/dist/lib/metadata/next.d.ts +79 -0
  89. package/dist/lib/metadata/next.d.ts.map +1 -0
  90. package/dist/lib/metadata/next.js +106 -0
  91. package/dist/lib/metadata/public.d.ts +3 -0
  92. package/dist/lib/metadata/public.d.ts.map +1 -0
  93. package/dist/lib/metadata/public.js +107 -0
  94. package/dist/lib/metadata/render.d.ts +7 -0
  95. package/dist/lib/metadata/render.d.ts.map +1 -0
  96. package/dist/lib/metadata/render.js +37 -0
  97. package/dist/lib/metadata/runtime.d.ts +68 -0
  98. package/dist/lib/metadata/runtime.d.ts.map +1 -0
  99. package/dist/lib/metadata/runtime.js +134 -0
  100. package/dist/lib/metadata/tanstack.d.ts +71 -0
  101. package/dist/lib/metadata/tanstack.d.ts.map +1 -0
  102. package/dist/lib/metadata/tanstack.js +194 -0
  103. package/dist/lib/metadata/templates/not-found.html +224 -0
  104. package/dist/lib/metadata/templates/offline.html +210 -0
  105. package/dist/lib/metadata/types.d.ts +118 -0
  106. package/dist/lib/metadata/types.d.ts.map +1 -0
  107. package/dist/lib/navigation/app-menu.d.ts +2 -0
  108. package/dist/lib/navigation/app-menu.d.ts.map +1 -0
  109. package/dist/lib/navigation/app-menu.js +45 -0
  110. package/dist/lib/navigation/control-center.d.ts +2 -0
  111. package/dist/lib/navigation/control-center.d.ts.map +1 -0
  112. package/dist/lib/navigation/control-center.js +66 -0
  113. package/dist/lib/navigation/index.d.ts +5 -0
  114. package/dist/lib/navigation/index.d.ts.map +1 -0
  115. package/dist/lib/navigation/index.js +59 -0
  116. package/dist/lib/navigation/toolbar.d.ts +2 -0
  117. package/dist/lib/navigation/toolbar.d.ts.map +1 -0
  118. package/dist/lib/navigation/toolbar.js +78 -0
  119. package/dist/lib/presets/app/index.d.ts +21 -0
  120. package/dist/lib/presets/app/index.d.ts.map +1 -0
  121. package/dist/lib/presets/app/index.js +114 -0
  122. package/dist/lib/presets/cdn/index.d.ts +2 -0
  123. package/dist/lib/presets/cdn/index.d.ts.map +1 -0
  124. package/dist/lib/presets/cdn/index.js +2 -0
  125. package/dist/lib/presets/docs/cli.d.ts +3 -0
  126. package/dist/lib/presets/docs/cli.d.ts.map +1 -0
  127. package/dist/lib/presets/docs/cli.js +18 -0
  128. package/dist/lib/presets/docs/config.d.ts +40 -0
  129. package/dist/lib/presets/docs/config.d.ts.map +1 -0
  130. package/dist/lib/presets/docs/config.js +39 -0
  131. package/dist/lib/presets/docs/files.d.ts +2 -0
  132. package/dist/lib/presets/docs/files.d.ts.map +1 -0
  133. package/dist/lib/presets/docs/files.js +13 -0
  134. package/dist/lib/presets/docs/index.d.ts +7 -0
  135. package/dist/lib/presets/docs/index.d.ts.map +1 -0
  136. package/dist/lib/presets/docs/index.js +6 -0
  137. package/dist/lib/presets/docs/mdx-path.d.ts +7 -0
  138. package/dist/lib/presets/docs/mdx-path.d.ts.map +1 -0
  139. package/dist/lib/presets/docs/mdx-path.js +19 -0
  140. package/dist/lib/presets/docs/og-image.d.ts +9 -0
  141. package/dist/lib/presets/docs/og-image.d.ts.map +1 -0
  142. package/dist/lib/presets/docs/og-image.js +88 -0
  143. package/dist/lib/presets/docs/og-output.d.ts +5 -0
  144. package/dist/lib/presets/docs/og-output.d.ts.map +1 -0
  145. package/dist/lib/presets/docs/og-output.js +34 -0
  146. package/dist/lib/presets/docs/og.d.ts +9 -0
  147. package/dist/lib/presets/docs/og.d.ts.map +1 -0
  148. package/dist/lib/presets/docs/og.js +112 -0
  149. package/dist/lib/presets/docs/openapi.d.ts +3 -0
  150. package/dist/lib/presets/docs/openapi.d.ts.map +1 -0
  151. package/dist/lib/presets/docs/openapi.js +105 -0
  152. package/dist/lib/presets/docs/routes.d.ts +7 -0
  153. package/dist/lib/presets/docs/routes.d.ts.map +1 -0
  154. package/dist/lib/presets/docs/routes.js +109 -0
  155. package/dist/lib/presets/docs/types.d.ts +31 -0
  156. package/dist/lib/presets/docs/types.d.ts.map +1 -0
  157. package/dist/lib/presets/docs/vite.d.ts +11 -0
  158. package/dist/lib/presets/docs/vite.d.ts.map +1 -0
  159. package/dist/lib/presets/docs/vite.js +78 -0
  160. package/dist/lib/presets/files.d.ts +5 -0
  161. package/dist/lib/presets/files.d.ts.map +1 -0
  162. package/dist/lib/presets/files.js +21 -0
  163. package/dist/lib/presets/route-files.d.ts +22 -0
  164. package/dist/lib/presets/route-files.d.ts.map +1 -0
  165. package/dist/lib/presets/route-files.js +49 -0
  166. package/dist/lib/yaml-config.d.ts +2 -0
  167. package/dist/lib/yaml-config.d.ts.map +1 -0
  168. package/dist/lib/yaml-config.js +6 -0
  169. package/package.json +99 -4
@@ -0,0 +1,39 @@
1
+ import { readYamlConfig } from "../../yaml-config.js";
2
+ import { resolveI18n } from "../../i18n.js";
3
+ import path from "node:path";
4
+ //#region src/lib/presets/docs/config.ts
5
+ var defaultContentDir = "content/docs";
6
+ var defaultDocsRoute = "/docs";
7
+ var defaultOpenApiDir = "openapi";
8
+ var docsImageRoute = (docsRoute) => {
9
+ return `/og${docsRoute}`;
10
+ };
11
+ var resolveDocsConfig = (config = {}) => {
12
+ const docsRoute = config.docsRoute ?? defaultDocsRoute;
13
+ return {
14
+ docsDir: defaultContentDir,
15
+ docsRoute,
16
+ docsImageRoute: docsImageRoute(docsRoute),
17
+ openapiDir: defaultOpenApiDir,
18
+ ogOutputDir: `public${docsImageRoute(docsRoute)}`
19
+ };
20
+ };
21
+ var loadVxDocsConfig = (projectRoot = process.cwd()) => {
22
+ const configFile = path.join(projectRoot, "vx.app.yaml");
23
+ const config = readYamlConfig(configFile);
24
+ return {
25
+ config,
26
+ configFile,
27
+ docs: {
28
+ ...config.docs,
29
+ og: {
30
+ ...config.og,
31
+ ...config.docs?.og
32
+ }
33
+ },
34
+ i18n: resolveI18n(config.i18n),
35
+ routes: config.routes ?? []
36
+ };
37
+ };
38
+ //#endregion
39
+ export { loadVxDocsConfig, resolveDocsConfig };
@@ -0,0 +1,2 @@
1
+ export declare const generatedDirectories: (dir: string) => string[];
2
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/files.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,MAAM,EAgBxD,CAAA"}
@@ -0,0 +1,13 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ //#region src/lib/presets/docs/files.ts
4
+ var generatedDirectories = (dir) => {
5
+ if (!fs.existsSync(dir)) return [];
6
+ return fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {
7
+ if (!entry.isDirectory()) return [];
8
+ const entryPath = path.join(dir, entry.name);
9
+ return entry.name === "(generated)" ? [entryPath] : generatedDirectories(entryPath);
10
+ });
11
+ };
12
+ //#endregion
13
+ export { generatedDirectories };
@@ -0,0 +1,7 @@
1
+ export { type DocsMdxMacroImportAliasOptions, type DocsMdxOptions, docsMdx, docsMdxMacroImportAlias, defineConfig } from './vite';
2
+ export { type OgConfig, type DocsConfig, type I18nConfig, type VxDocsConfig, resolveDocsConfig, loadVxDocsConfig } from './config';
3
+ export { generateDocs } from './openapi';
4
+ export { generateDocsOgImages } from './og';
5
+ export { type DocsStaticPaths, type DocsPrerenderPage, type RouteOg, type RouteConfig, type RouteInput, type DocsPrerenderPagesOptions } from './types';
6
+ export { getDocsStaticPaths, getDocsPrerenderPages, getPrerenderPages } from './routes';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,cAAc,EACnB,OAAO,EACP,uBAAuB,EACvB,YAAY,EACb,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAA;AAC3C,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC/B,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,UAAU,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { defineConfig, docsMdx, docsMdxMacroImportAlias } from "./vite.js";
2
+ import { loadVxDocsConfig, resolveDocsConfig } from "./config.js";
3
+ import { generateDocs } from "./openapi.js";
4
+ import { getDocsPrerenderPages, getDocsStaticPaths, getPrerenderPages } from "./routes.js";
5
+ import { generateDocsOgImages } from "./og.js";
6
+ export { defineConfig, docsMdx, docsMdxMacroImportAlias, generateDocs, generateDocsOgImages, getDocsPrerenderPages, getDocsStaticPaths, getPrerenderPages, loadVxDocsConfig, resolveDocsConfig };
@@ -0,0 +1,7 @@
1
+ import type { I18nConfig } from './config';
2
+ export declare const docsPathFromMdx: (docsDir: string, docsRoute: string, i18n: I18nConfig, filePath: string) => {
3
+ locale: string;
4
+ markdownPath: string;
5
+ routePath: string;
6
+ } | undefined;
7
+ //# sourceMappingURL=mdx-path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-path.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/mdx-path.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,eAAO,MAAM,eAAe,GAC1B,SAAS,MAAM,EACf,WAAW,MAAM,EACjB,MAAM,UAAU,EAChB,UAAU,MAAM;;;;aA0BjB,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { slash } from "../files.js";
2
+ import path from "node:path";
3
+ //#region src/lib/presets/docs/mdx-path.ts
4
+ var docsPathFromMdx = (docsDir, docsRoute, i18n, filePath) => {
5
+ const relativePath = slash(path.relative(docsDir, filePath));
6
+ if (!relativePath.endsWith(".mdx")) return;
7
+ const localizedLanguage = i18n.languages.find((lang) => lang !== i18n.defaultLanguage && relativePath.endsWith(`.${lang}.mdx`));
8
+ const suffix = localizedLanguage ? `.${localizedLanguage}.mdx` : ".mdx";
9
+ const segments = relativePath.slice(0, -suffix.length).split("/").filter((segment) => !(segment.startsWith("(") && segment.endsWith(")")));
10
+ if (segments[segments.length - 1] === "index") segments.pop();
11
+ const routePath = segments.length ? `${docsRoute}/${segments.join("/")}` : docsRoute;
12
+ return {
13
+ locale: localizedLanguage ?? i18n.defaultLanguage,
14
+ markdownPath: segments.length ? `${routePath}.md` : `${docsRoute}/index.md`,
15
+ routePath
16
+ };
17
+ };
18
+ //#endregion
19
+ export { docsPathFromMdx };
@@ -0,0 +1,9 @@
1
+ export type OgImageProps = {
2
+ title: string;
3
+ description?: string;
4
+ site?: string;
5
+ logo?: string;
6
+ theme?: 'dark' | 'light';
7
+ };
8
+ export declare const OgImage: ({ title, description, site, logo, theme }: OgImageProps) => import("react").JSX.Element;
9
+ //# sourceMappingURL=og-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"og-image.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/og-image.tsx"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB,CAAA;AAGD,eAAO,MAAM,OAAO,GAAI,2CAMrB,YAAY,gCA6Fd,CAAA"}
@@ -0,0 +1,88 @@
1
+ import { renderToStaticMarkup } from "react-dom/server";
2
+ import { VezhamLogo } from "@vezham/icons-react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/lib/presets/docs/og-image.tsx
5
+ /** @jsxRuntime automatic */
6
+ /** @jsxImportSource react */
7
+ var OgImage = ({ title, description, site = "Vezham", logo, theme = "light" }) => {
8
+ const colors = theme === "dark" ? {
9
+ background: "#18181b",
10
+ foreground: "#fafafa",
11
+ muted: "#a1a1aa"
12
+ } : {
13
+ background: "#f5f5f5",
14
+ foreground: "#18181b",
15
+ muted: "#71717a"
16
+ };
17
+ return /* @__PURE__ */ jsxs("div", {
18
+ style: {
19
+ display: "flex",
20
+ flexDirection: "column",
21
+ width: "100%",
22
+ height: "100%",
23
+ color: colors.foreground,
24
+ padding: 64,
25
+ backgroundColor: colors.background
26
+ },
27
+ children: [
28
+ /* @__PURE__ */ jsx("p", {
29
+ style: {
30
+ fontFamily: "Inter",
31
+ fontWeight: 700,
32
+ fontSize: 76,
33
+ lineHeight: 1.1,
34
+ margin: 0,
35
+ lineClamp: 2
36
+ },
37
+ children: title
38
+ }),
39
+ description && /* @__PURE__ */ jsx("p", {
40
+ style: {
41
+ fontFamily: "Inter",
42
+ fontSize: 34,
43
+ lineHeight: 1.4,
44
+ color: colors.muted,
45
+ margin: 0,
46
+ marginTop: 24,
47
+ lineClamp: 3
48
+ },
49
+ children: description
50
+ }),
51
+ /* @__PURE__ */ jsxs("div", {
52
+ style: {
53
+ display: "flex",
54
+ alignItems: "center",
55
+ gap: 12,
56
+ marginTop: "auto",
57
+ paddingTop: 24,
58
+ color: colors.foreground
59
+ },
60
+ children: [logo ? /* @__PURE__ */ jsx("img", {
61
+ alt: "",
62
+ width: 48,
63
+ height: 48,
64
+ src: logo,
65
+ style: { objectFit: "contain" }
66
+ }) : /* @__PURE__ */ jsx("img", {
67
+ alt: "Vezham",
68
+ width: 48,
69
+ height: 48,
70
+ src: `data:image/svg+xml;base64,${Buffer.from(renderToStaticMarkup(/* @__PURE__ */ jsx(VezhamLogo, {
71
+ size: 48,
72
+ color: colors.foreground
73
+ }))).toString("base64")}`
74
+ }), site && /* @__PURE__ */ jsx("p", {
75
+ style: {
76
+ fontFamily: "Jura",
77
+ fontSize: 36,
78
+ fontWeight: 600,
79
+ margin: 0
80
+ },
81
+ children: site
82
+ })]
83
+ })
84
+ ]
85
+ });
86
+ };
87
+ //#endregion
88
+ export { OgImage };
@@ -0,0 +1,5 @@
1
+ export declare const createOgOutput: (projectRoot: string) => {
2
+ add(files: string[], image: Buffer): void;
3
+ finish(): void;
4
+ };
5
+ //# sourceMappingURL=og-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"og-output.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/og-output.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc,GAAI,aAAa,MAAM;eAgCnC,MAAM,EAAE,SAAS,MAAM;;CAsBrC,CAAA"}
@@ -0,0 +1,34 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ //#region src/lib/presets/docs/og-output.ts
4
+ var createOgOutput = (projectRoot) => {
5
+ const root = path.resolve(projectRoot, "public/og");
6
+ const manifest = path.join(root, ".vx-generated.json");
7
+ const previous = fs.existsSync(manifest) ? JSON.parse(fs.readFileSync(manifest, "utf8")) : [];
8
+ const resolveFile = (file) => {
9
+ const resolved = path.resolve(root, file);
10
+ const relative = path.relative(root, resolved);
11
+ if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative) || path.extname(resolved) !== ".png") throw new Error(`Invalid generated OG image path: ${file}`);
12
+ return resolved;
13
+ };
14
+ if (!Array.isArray(previous) || !previous.every((file) => typeof file === "string")) throw new Error(`Invalid OG output manifest: ${manifest}`);
15
+ const previousFiles = previous.map(resolveFile);
16
+ const generated = /* @__PURE__ */ new Map();
17
+ return {
18
+ add(files, image) {
19
+ const resolvedFiles = files.map(resolveFile);
20
+ for (const file of resolvedFiles) generated.set(file, image);
21
+ },
22
+ finish() {
23
+ for (const [file, image] of generated) {
24
+ fs.mkdirSync(path.dirname(file), { recursive: true });
25
+ fs.writeFileSync(file, image);
26
+ }
27
+ for (const file of previousFiles) if (!generated.has(file)) fs.rmSync(file, { force: true });
28
+ fs.mkdirSync(root, { recursive: true });
29
+ fs.writeFileSync(manifest, `${JSON.stringify([...generated.keys()].map((file) => path.relative(root, file).split(path.sep).join("/")).sort(), null, 2)}\n`);
30
+ }
31
+ };
32
+ };
33
+ //#endregion
34
+ export { createOgOutput };
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from 'react';
2
+ import { type DocsConfig, type I18nConfig } from './config';
3
+ import type { OgImageProps } from './og-image';
4
+ import { type RouteInput } from './types';
5
+ export declare const generateDocsOgImages: (projectRoot: string, config: DocsConfig, i18n: I18nConfig, { routes, renderImage }?: {
6
+ routes?: RouteInput[];
7
+ renderImage?: (props: OgImageProps) => ReactElement;
8
+ }) => Promise<number>;
9
+ //# sourceMappingURL=og.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"og.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/og.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAIzC,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAqB,MAAM,UAAU,CAAA;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAA;AAoGzC,eAAO,MAAM,oBAAoB,GAC/B,aAAa,MAAM,EACnB,QAAQ,UAAU,EAClB,MAAM,UAAU,EAChB,0BAGG;IACD,MAAM,CAAC,EAAE,UAAU,EAAE,CAAA;IACrB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,YAAY,CAAA;CAC/C,oBAsEP,CAAA"}
@@ -0,0 +1,112 @@
1
+ import { walkFiles } from "../files.js";
2
+ import { resolveDocsConfig } from "./config.js";
3
+ import { docsPathFromMdx } from "./mdx-path.js";
4
+ import { createOgOutput } from "./og-output.js";
5
+ import { getDocsMirrorRoutes } from "./routes.js";
6
+ import fs from "node:fs";
7
+ import path from "node:path";
8
+ import { createRequire } from "node:module";
9
+ import { parse } from "yaml";
10
+ import { ImageResponse } from "@vercel/og";
11
+ //#region src/lib/presets/docs/og.ts
12
+ var uniqueByRoute = (entries) => {
13
+ const mapped = /* @__PURE__ */ new Map();
14
+ for (const entry of entries) mapped.set(entry.routePath, entry);
15
+ return [...mapped.values()];
16
+ };
17
+ var titleFromPath = (pagePath) => {
18
+ const segments = pagePath.split("/").filter(Boolean);
19
+ return (segments[segments.length - 1] ?? "Docs").split("-").map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
20
+ };
21
+ var getMdxEntries = ({ docsDir, docsRoute, ...i18n }) => {
22
+ return walkFiles(docsDir).flatMap((filePath) => {
23
+ const entry = docsPathFromMdx(docsDir, docsRoute, i18n, filePath);
24
+ if (!entry || entry.locale !== i18n.defaultLanguage) return [];
25
+ const { routePath } = entry;
26
+ const frontmatter = fs.readFileSync(filePath, "utf8").match(/^---\n([\s\S]*?)\n---/);
27
+ const meta = frontmatter ? parse(frontmatter[1]) : {};
28
+ return [{
29
+ description: typeof meta.description === "string" ? meta.description : "Documentation",
30
+ routePath,
31
+ title: typeof meta.title === "string" ? meta.title : titleFromPath(routePath)
32
+ }];
33
+ });
34
+ };
35
+ var getDocsOgOutputPaths = ({ docsRoute, entryRoutePath, mirrorRoutes, outputDir }) => {
36
+ const suffix = entryRoutePath === docsRoute ? "" : entryRoutePath.slice(docsRoute.length);
37
+ const outputRoot = path.dirname(outputDir);
38
+ const outputPaths = [path.join(outputDir, `${suffix}/image.png`.replace(/^\//, ""))];
39
+ if (entryRoutePath === docsRoute) outputPaths.push(path.join(outputRoot, "image.png"));
40
+ for (const mirrorRoute of mirrorRoutes) outputPaths.push(path.join(outputRoot, mirrorRoute, `${suffix}/image.png`.replace(/^\//, "")));
41
+ return outputPaths;
42
+ };
43
+ var generateDocsOgImages = async (projectRoot, config, i18n, { routes = [], renderImage } = {}) => {
44
+ let render = renderImage;
45
+ if (!render) {
46
+ const { OgImage } = await import("./og-image.js");
47
+ render = OgImage;
48
+ }
49
+ const resolved = resolveDocsConfig(config);
50
+ const resolvedDocsDir = path.resolve(projectRoot, resolved.docsDir);
51
+ const resolvedOutputDir = path.resolve(projectRoot, resolved.ogOutputDir);
52
+ const mirrorRoutes = getDocsMirrorRoutes(routes).filter((route) => route !== resolved.docsRoute);
53
+ const entries = uniqueByRoute(getMdxEntries({
54
+ ...i18n,
55
+ docsDir: resolvedDocsDir,
56
+ docsRoute: resolved.docsRoute
57
+ }));
58
+ const require = createRequire(import.meta.url);
59
+ const juraFont = fs.readFileSync(require.resolve("@fontsource/jura/files/jura-latin-600-normal.woff"));
60
+ const interRegular = fs.readFileSync(require.resolve("@fontsource/inter/files/inter-latin-400-normal.woff"));
61
+ const interBold = fs.readFileSync(require.resolve("@fontsource/inter/files/inter-latin-700-normal.woff"));
62
+ const logo = resolveDocsOgLogo(projectRoot, config.og?.logo);
63
+ const output = createOgOutput(projectRoot);
64
+ const generatedImageCounts = await Promise.all(entries.map(async (entry) => {
65
+ const outputPaths = getDocsOgOutputPaths({
66
+ docsRoute: resolved.docsRoute,
67
+ entryRoutePath: entry.routePath,
68
+ mirrorRoutes,
69
+ outputDir: resolvedOutputDir
70
+ });
71
+ const response = new ImageResponse(render({
72
+ ...config.og,
73
+ description: entry.description,
74
+ logo,
75
+ title: entry.title
76
+ }), {
77
+ fonts: [
78
+ {
79
+ data: interRegular,
80
+ name: "Inter",
81
+ weight: 400
82
+ },
83
+ {
84
+ data: interBold,
85
+ name: "Inter",
86
+ weight: 700
87
+ },
88
+ {
89
+ data: juraFont,
90
+ name: "Jura",
91
+ weight: 600
92
+ }
93
+ ],
94
+ height: 630,
95
+ width: 1200
96
+ });
97
+ const image = Buffer.from(await response.arrayBuffer());
98
+ output.add(outputPaths, image);
99
+ return outputPaths.length;
100
+ }));
101
+ output.finish();
102
+ return generatedImageCounts.reduce((total, count) => total + count, 0);
103
+ };
104
+ var resolveDocsOgLogo = (projectRoot, logo) => {
105
+ if (!logo || /^(data:|https?:)/.test(logo)) return logo;
106
+ const filePath = path.resolve(projectRoot, "public", logo.replace(/^\//, ""));
107
+ if (!fs.existsSync(filePath)) throw new Error(`Missing docs OG logo: ${filePath}`);
108
+ const extension = path.extname(filePath).slice(1) || "svg+xml";
109
+ return `data:${extension === "svg" ? "image/svg+xml" : `image/${extension}`};base64,${fs.readFileSync(filePath).toString("base64")}`;
110
+ };
111
+ //#endregion
112
+ export { generateDocsOgImages };
@@ -0,0 +1,3 @@
1
+ import { type DocsConfig, type I18nConfig } from './config';
2
+ export declare const generateDocs: (projectRoot: string, config: DocsConfig, i18n: I18nConfig) => Promise<number>;
3
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/openapi.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAqB,MAAM,UAAU,CAAA;AAuJ9E,eAAO,MAAM,YAAY,GACvB,aAAa,MAAM,EACnB,QAAQ,UAAU,EAClB,MAAM,UAAU,oBAsCjB,CAAA"}
@@ -0,0 +1,105 @@
1
+ import { slash, walkFiles, withoutExtension } from "../files.js";
2
+ import { resolveDocsConfig } from "./config.js";
3
+ import { generatedDirectories } from "./files.js";
4
+ import fs from "node:fs";
5
+ import path from "node:path";
6
+ import * as OpenAPI from "@vezham/docs-openapi";
7
+ import { createOpenAPI } from "@vezham/docs-openapi/server";
8
+ //#region src/lib/presets/docs/openapi.ts
9
+ var openapiExtensions = new Set([
10
+ ".json",
11
+ ".yaml",
12
+ ".yml"
13
+ ]);
14
+ var openAPISpecIdFromRelativePath = (relativePath) => {
15
+ const segments = withoutExtension(slash(relativePath)).split("/");
16
+ if (segments[segments.length - 1] === "index") segments.pop();
17
+ return segments.length === 0 ? "openapi" : segments.join("/");
18
+ };
19
+ var assertGeneratedOutput = (docsDir, outputDir) => {
20
+ const relativePath = path.relative(docsDir, outputDir);
21
+ if (relativePath === "" || relativePath.startsWith(`..${path.sep}`) || path.basename(outputDir) !== "(generated)" || !relativePath.startsWith(`openapi${path.sep}`)) throw new Error(`Refusing to clear unexpected generated docs dir: ${outputDir}`);
22
+ };
23
+ var discoverOpenAPISpecs = (projectRoot, docsDir, openapiDirName) => {
24
+ const specs = [];
25
+ const openapiDir = path.join(projectRoot, openapiDirName);
26
+ const folderSpecs = walkFiles(openapiDir).filter((filePath) => openapiExtensions.has(path.extname(filePath))).sort((left, right) => left.localeCompare(right));
27
+ for (const inputPath of folderSpecs) {
28
+ const documentId = openAPISpecIdFromRelativePath(path.relative(openapiDir, inputPath));
29
+ const outputSegments = documentId === "openapi" ? [] : documentId.split("/");
30
+ specs.push({
31
+ documentId,
32
+ inputPath,
33
+ outputDir: path.join(docsDir, "openapi", ...outputSegments, "(generated)")
34
+ });
35
+ }
36
+ const documentIds = /* @__PURE__ */ new Set();
37
+ for (const spec of specs) {
38
+ if (documentIds.has(spec.documentId)) throw new Error(`Duplicate OpenAPI document id: ${spec.documentId}`);
39
+ documentIds.add(spec.documentId);
40
+ }
41
+ return specs;
42
+ };
43
+ var pageNameFromMdx = (fileName, languages) => {
44
+ const withoutMdx = fileName.slice(0, -4);
45
+ for (const language of languages) {
46
+ const suffix = `.${language}`;
47
+ if (withoutMdx.endsWith(suffix)) return withoutMdx.slice(0, -suffix.length);
48
+ }
49
+ return withoutMdx;
50
+ };
51
+ var pagesInDirectory = (dir, languages) => {
52
+ const files = /* @__PURE__ */ new Set();
53
+ const directories = [];
54
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
55
+ if (entry.isFile() && entry.name.endsWith(".mdx")) files.add(pageNameFromMdx(entry.name, languages));
56
+ if (entry.isDirectory()) directories.push(entry.name === "(generated)" ? `...${entry.name}` : entry.name);
57
+ }
58
+ return [...[...files].sort((left, right) => {
59
+ if (left === "index") return -1;
60
+ if (right === "index") return 1;
61
+ return left.localeCompare(right);
62
+ }), ...directories.sort((left, right) => left.localeCompare(right))];
63
+ };
64
+ var synchronizeMetaFiles = (docsDir, outputDirectories, languages) => {
65
+ const metaFiles = new Set(walkFiles(docsDir).filter((filePath) => path.basename(filePath) === "meta.json"));
66
+ for (const outputDirectory of outputDirectories) metaFiles.add(path.join(path.dirname(outputDirectory), "meta.json"));
67
+ for (const metaFile of [...metaFiles].sort()) {
68
+ const pages = pagesInDirectory(path.dirname(metaFile), languages);
69
+ if (pages.length === 0) continue;
70
+ const existingContent = fs.existsSync(metaFile) ? fs.readFileSync(metaFile, "utf8") : void 0;
71
+ const existing = existingContent ? JSON.parse(existingContent) : {};
72
+ const content = `${JSON.stringify({
73
+ ...existing,
74
+ pages
75
+ }, null, 2)}\n`;
76
+ if (existingContent !== content) fs.writeFileSync(metaFile, content);
77
+ }
78
+ };
79
+ var generateDocs = async (projectRoot, config, i18n) => {
80
+ const resolved = resolveDocsConfig(config);
81
+ const docsDir = path.resolve(projectRoot, resolved.docsDir);
82
+ const specs = discoverOpenAPISpecs(projectRoot, docsDir, resolved.openapiDir);
83
+ const generatedRoot = path.join(docsDir, "openapi");
84
+ fs.mkdirSync(docsDir, { recursive: true });
85
+ for (const outputDir of generatedDirectories(generatedRoot)) {
86
+ assertGeneratedOutput(docsDir, outputDir);
87
+ fs.rmSync(outputDir, {
88
+ force: true,
89
+ recursive: true
90
+ });
91
+ }
92
+ await Promise.all(specs.map(async (spec) => {
93
+ assertGeneratedOutput(docsDir, spec.outputDir);
94
+ await OpenAPI.generateFiles({
95
+ input: createOpenAPI({ input: { [spec.documentId]: spec.inputPath } }),
96
+ groupBy: "tag",
97
+ meta: true,
98
+ output: spec.outputDir
99
+ });
100
+ }));
101
+ synchronizeMetaFiles(docsDir, specs.map((spec) => spec.outputDir), i18n.languages);
102
+ return specs.length;
103
+ };
104
+ //#endregion
105
+ export { generateDocs };
@@ -0,0 +1,7 @@
1
+ import { type DocsConfig, type I18nConfig } from './config';
2
+ import { type DocsPrerenderPage, type DocsPrerenderPagesOptions, type DocsStaticPaths, type RouteInput } from './types';
3
+ export declare const getDocsStaticPaths: (projectRoot: string, config: DocsConfig | undefined, i18n: I18nConfig) => DocsStaticPaths;
4
+ export declare const getDocsMirrorRoutes: (routes: RouteInput[]) => string[];
5
+ export declare const getDocsPrerenderPages: (projectRoot: string, config: DocsConfig | undefined, i18n: I18nConfig, { extraPages, includeDocsRoot, includeLocalizedDocsRoots, routes }?: DocsPrerenderPagesOptions) => DocsPrerenderPage[];
6
+ export declare const getPrerenderPages: (projectRoot?: string, options?: DocsPrerenderPagesOptions) => DocsPrerenderPage[];
7
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/lib/presets/docs/routes.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EAGhB,MAAM,UAAU,CAAA;AAEjB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EAEpB,KAAK,UAAU,EAChB,MAAM,SAAS,CAAA;AAwBhB,eAAO,MAAM,kBAAkB,GAC7B,aAAa,MAAM,EACnB,QAAQ,UAAU,YAAK,EACvB,MAAM,UAAU,KACf,eA+BF,CAAA;AAiGD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,UAAU,EAAE,aAQvD,CAAA;AAMD,eAAO,MAAM,qBAAqB,GAChC,aAAa,MAAM,EACnB,QAAQ,UAAU,YAAK,EACvB,MAAM,UAAU,EAChB,qEAKG,yBAA8B,wBA+DlC,CAAA;AAED,eAAO,MAAM,iBAAiB,GAC5B,oBAA2B,EAC3B,UAAS,yBAA8B,wBAQxC,CAAA"}
@@ -0,0 +1,109 @@
1
+ import { unique, walkFiles } from "../files.js";
2
+ import { expandFilesystemRoute, normalizeRoute, routeRootFromGlob } from "../route-files.js";
3
+ import { loadVxDocsConfig, resolveDocsConfig } from "./config.js";
4
+ import { docsPathFromMdx } from "./mdx-path.js";
5
+ import path from "node:path";
6
+ //#region src/lib/presets/docs/routes.ts
7
+ var docsRouteFileOptions = { rootRouteSegments: new Set(["__root__"]) };
8
+ var getNonDefaultLanguages = (i18n) => {
9
+ return i18n.languages.filter((lang) => lang !== i18n.defaultLanguage);
10
+ };
11
+ var getDocsStaticPathsForLocale = (docsDir, docsRoute, i18n, locale) => {
12
+ return unique(walkFiles(docsDir).map((filePath) => docsPathFromMdx(docsDir, docsRoute, i18n, filePath)).filter((entry) => entry?.locale === locale).flatMap((entry) => entry ? [entry.routePath, entry.markdownPath] : []));
13
+ };
14
+ var getDocsStaticPaths = (projectRoot, config = {}, i18n) => {
15
+ const resolved = resolveDocsConfig(config);
16
+ const docsDir = path.resolve(projectRoot, resolved.docsDir);
17
+ const defaultDocsStaticPaths = getDocsStaticPathsForLocale(docsDir, resolved.docsRoute, i18n, i18n.defaultLanguage);
18
+ const openApiStaticPaths = defaultDocsStaticPaths.filter((pagePath) => pagePath.startsWith(`${resolved.docsRoute}/openapi/`));
19
+ return {
20
+ defaultDocsStaticPaths,
21
+ docsShellStaticPaths: defaultDocsStaticPaths.filter((pagePath) => !pagePath.endsWith(".md")),
22
+ docsStaticPathsByLocale: Object.fromEntries(i18n.languages.map((lang) => [lang, unique([...getDocsStaticPathsForLocale(docsDir, resolved.docsRoute, i18n, lang), ...openApiStaticPaths])])),
23
+ openApiStaticPaths
24
+ };
25
+ };
26
+ var shouldWritePrerenderIndex = (pagePath) => {
27
+ return path.extname(pagePath) === "" && !pagePath.startsWith("/api/");
28
+ };
29
+ var isDocsShellPath = (pagePath) => {
30
+ return !pagePath.endsWith(".md");
31
+ };
32
+ var createDocsPrerenderPage = (pagePath) => {
33
+ return {
34
+ path: pagePath,
35
+ prerender: shouldWritePrerenderIndex(pagePath) ? { outputPath: `${pagePath}/index.html` } : void 0
36
+ };
37
+ };
38
+ var normalizeDocsPrerenderPage = (page) => {
39
+ return typeof page === "string" ? createDocsPrerenderPage(page) : page;
40
+ };
41
+ var replaceDocsRoute = (pagePath, docsRoute, nextRoute) => {
42
+ if (pagePath === docsRoute) return nextRoute;
43
+ return pagePath.startsWith(`${docsRoute}/`) ? `${nextRoute}${pagePath.slice(docsRoute.length)}` : pagePath;
44
+ };
45
+ var shouldPrerenderRoute = (route) => {
46
+ return route.prerender !== false;
47
+ };
48
+ var docsMirrorRouteFromRoute = (route) => {
49
+ const routeRoot = routeRootFromGlob(route.path);
50
+ return routeRoot && route.source === "docs" ? routeRoot : void 0;
51
+ };
52
+ var createFilesystemRoutePrerenderPages = (projectRoot, route) => {
53
+ return expandFilesystemRoute(projectRoot, route, docsRouteFileOptions).map((pagePath) => createDocsPrerenderPageFromRoute({
54
+ ...route,
55
+ path: pagePath
56
+ }));
57
+ };
58
+ var shouldGenerateDocsRouteOg = (route) => {
59
+ const hasDocsMirrorGlob = docsMirrorRouteFromRoute(route) !== void 0;
60
+ if (typeof route.og === "object") return false;
61
+ return route.og ?? hasDocsMirrorGlob;
62
+ };
63
+ var assertSupportedRoute = (route) => {
64
+ if (!routeRootFromGlob(route.path) || route.source === "docs" || route.source === "routes") return;
65
+ throw new Error(`Unsupported route source "${route.source ?? "none"}" for glob route "${route.path}". Use source "docs", source "routes", or provide an exact path.`);
66
+ };
67
+ var createDocsPrerenderPageFromRoute = (route) => {
68
+ if (typeof route.prerender === "object" && route.prerender.outputPath) return {
69
+ path: route.path,
70
+ prerender: { outputPath: route.prerender.outputPath }
71
+ };
72
+ return createDocsPrerenderPage(route.path);
73
+ };
74
+ var getDocsMirrorRoutes = (routes) => {
75
+ return unique(routes.map(normalizeRoute).filter(shouldGenerateDocsRouteOg).map(docsMirrorRouteFromRoute).filter((route) => route !== void 0));
76
+ };
77
+ var uniquePrerenderPages = (pages) => {
78
+ return [...new Map(pages.map((page) => [page.path, page])).values()];
79
+ };
80
+ var getDocsPrerenderPages = (projectRoot, config = {}, i18n, { extraPages = [], includeDocsRoot = true, includeLocalizedDocsRoots = true, routes = [] } = {}) => {
81
+ const resolved = resolveDocsConfig(config);
82
+ const { defaultDocsStaticPaths, docsShellStaticPaths, docsStaticPathsByLocale } = getDocsStaticPaths(projectRoot, config, i18n);
83
+ const routeEntries = routes.map(normalizeRoute).filter(shouldPrerenderRoute);
84
+ for (const route of routeEntries) assertSupportedRoute(route);
85
+ const globDocsRoutes = unique([...routeEntries.flatMap((route) => {
86
+ const docsRoute = docsMirrorRouteFromRoute(route);
87
+ return docsRoute ? [docsRoute] : [];
88
+ })]);
89
+ const staticRoutes = routeEntries.filter((route) => !routeRootFromGlob(route.path));
90
+ return uniquePrerenderPages([
91
+ ...includeDocsRoot ? [createDocsPrerenderPage(resolved.docsRoute)] : [],
92
+ ...defaultDocsStaticPaths.map(createDocsPrerenderPage),
93
+ ...globDocsRoutes.flatMap((route) => docsShellStaticPaths.map((pagePath) => createDocsPrerenderPage(replaceDocsRoute(pagePath, resolved.docsRoute, route)))),
94
+ ...getNonDefaultLanguages(i18n).flatMap((lang) => globDocsRoutes.flatMap((route) => docsStaticPathsByLocale[lang].filter(isDocsShellPath).map((pagePath) => createDocsPrerenderPage(`/${lang}${replaceDocsRoute(pagePath, resolved.docsRoute, route)}`)))),
95
+ ...getNonDefaultLanguages(i18n).flatMap((lang) => [...includeLocalizedDocsRoots ? [createDocsPrerenderPage(`/${lang}`), createDocsPrerenderPage(`/${lang}${resolved.docsRoute}`)] : [], ...docsStaticPathsByLocale[lang].map((pagePath) => createDocsPrerenderPage(`/${lang}${pagePath}`))]),
96
+ ...routeEntries.flatMap((route) => createFilesystemRoutePrerenderPages(projectRoot, route)),
97
+ ...staticRoutes.map(createDocsPrerenderPageFromRoute),
98
+ ...extraPages.map(normalizeDocsPrerenderPage)
99
+ ]);
100
+ };
101
+ var getPrerenderPages = (projectRoot = process.cwd(), options = {}) => {
102
+ const { docs, i18n, routes } = loadVxDocsConfig(projectRoot);
103
+ return getDocsPrerenderPages(projectRoot, docs, i18n, {
104
+ ...options,
105
+ routes: [...routes, ...options.routes ?? []]
106
+ });
107
+ };
108
+ //#endregion
109
+ export { getDocsMirrorRoutes, getDocsPrerenderPages, getDocsStaticPaths, getPrerenderPages };