vite-plugin-react-server 1.4.1 → 1.4.3

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 (146) hide show
  1. package/README.md +48 -313
  2. package/dist/package.json +123 -13
  3. package/dist/plugin/bundle/deferredStaticGeneration.js +14 -39
  4. package/dist/plugin/bundle/manifests.js +30 -48
  5. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
  6. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +4 -1
  7. package/dist/plugin/config/envPrefixFromConfig.js +12 -7
  8. package/dist/plugin/config/getCondition.d.ts.map +1 -1
  9. package/dist/plugin/config/getCondition.js +7 -5
  10. package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -1
  11. package/dist/plugin/dev-server/configureReactServer.server.js +5 -8
  12. package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -1
  13. package/dist/plugin/dev-server/plugin.client.js +2 -1
  14. package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -1
  15. package/dist/plugin/dev-server/plugin.server.js +2 -36
  16. package/dist/plugin/dev-server/virtualRscHmrPlugin.js +23 -23
  17. package/dist/plugin/environments/createBuildEventPlugin.js +88 -98
  18. package/dist/plugin/environments/createEnvironmentPlugin.js +222 -250
  19. package/dist/plugin/error/index.d.ts +1 -2
  20. package/dist/plugin/error/index.d.ts.map +1 -1
  21. package/dist/plugin/error/index.js +2 -3
  22. package/dist/plugin/error/panicThresholdHandler.js +14 -3
  23. package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -1
  24. package/dist/plugin/error/setupGlobalErrorHandler.js +23 -16
  25. package/dist/plugin/helpers/createRscRenderHelpers.d.ts +0 -5
  26. package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -1
  27. package/dist/plugin/helpers/createRscRenderHelpers.js +32 -55
  28. package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -1
  29. package/dist/plugin/helpers/createSharedLoader.js +4 -2
  30. package/dist/plugin/helpers/headlessStreamReuseHandler.js +30 -22
  31. package/dist/plugin/helpers/headlessStreamState.d.ts +0 -38
  32. package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -1
  33. package/dist/plugin/helpers/headlessStreamState.js +15 -76
  34. package/dist/plugin/helpers/index.d.ts +0 -3
  35. package/dist/plugin/helpers/index.d.ts.map +1 -1
  36. package/dist/plugin/helpers/index.js +1 -4
  37. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
  38. package/dist/plugin/helpers/requestInfo.js +3 -3
  39. package/dist/plugin/helpers/resolveComponent.d.ts.map +1 -1
  40. package/dist/plugin/helpers/resolveComponent.js +4 -2
  41. package/dist/plugin/helpers/workerCleanup.d.ts +1 -12
  42. package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -1
  43. package/dist/plugin/helpers/workerCleanup.js +1 -1
  44. package/dist/plugin/index.client.d.ts +5 -0
  45. package/dist/plugin/index.client.d.ts.map +1 -0
  46. package/dist/plugin/index.client.js +4 -0
  47. package/dist/plugin/index.d.ts +4 -3
  48. package/dist/plugin/index.d.ts.map +1 -1
  49. package/dist/plugin/index.js +10 -5
  50. package/dist/plugin/index.server.d.ts +5 -0
  51. package/dist/plugin/index.server.d.ts.map +1 -0
  52. package/dist/plugin/index.server.js +4 -0
  53. package/dist/plugin/loader/directives/index.d.ts +0 -1
  54. package/dist/plugin/loader/directives/index.d.ts.map +1 -1
  55. package/dist/plugin/loader/directives/index.js +1 -2
  56. package/dist/plugin/metrics/createWorkerStartupMetrics.js +31 -13
  57. package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +41 -38
  58. package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +43 -46
  59. package/dist/plugin/plugin.client.js +2 -2
  60. package/dist/plugin/plugin.server.js +2 -2
  61. package/dist/plugin/react-static/createBuildLoader.client.js +12 -6
  62. package/dist/plugin/react-static/createBuildLoader.server.js +255 -235
  63. package/dist/plugin/react-static/plugin.client.js +684 -770
  64. package/dist/plugin/react-static/plugin.server.js +517 -603
  65. package/dist/plugin/react-static/processCssFilesForPages.js +103 -88
  66. package/dist/plugin/react-static/renderPage.client.js +455 -529
  67. package/dist/plugin/react-static/renderPage.server.js +485 -508
  68. package/dist/plugin/react-static/renderPagesBatched.js +277 -275
  69. package/dist/plugin/react-static/rscToHtmlStream.client.js +48 -29
  70. package/dist/plugin/react-static/rscToHtmlStream.server.js +62 -37
  71. package/dist/plugin/react-static/temporaryReferences.server.js +11 -2
  72. package/dist/plugin/stream/createMainThreadHandlers.js +40 -31
  73. package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -1
  74. package/dist/plugin/stream/renderRscStream.server.js +127 -144
  75. package/dist/plugin/transformer/createTransformerPlugin.js +226 -265
  76. package/dist/plugin/utils/checkReactVersion.d.ts +7 -0
  77. package/dist/plugin/utils/checkReactVersion.d.ts.map +1 -0
  78. package/dist/plugin/utils/checkReactVersion.js +23 -0
  79. package/dist/plugin/utils/envUrls.node.js +12 -11
  80. package/dist/plugin/vendor/vendor-alias.js +84 -114
  81. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
  82. package/dist/plugin/vendor/vendor.client.js +1 -3
  83. package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -1
  84. package/dist/plugin/worker/rsc/handleRscRender.js +3 -1
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +123 -13
  87. package/plugin/config/autoDiscover/resolveAutoDiscover.ts +4 -0
  88. package/plugin/config/getCondition.ts +6 -4
  89. package/plugin/dev-server/configureReactServer.server.ts +7 -10
  90. package/plugin/dev-server/plugin.client.ts +2 -0
  91. package/plugin/dev-server/plugin.server.ts +2 -49
  92. package/plugin/error/index.ts +1 -2
  93. package/plugin/error/setupGlobalErrorHandler.ts +24 -25
  94. package/plugin/helpers/createRscRenderHelpers.ts +0 -29
  95. package/plugin/helpers/createSharedLoader.ts +6 -1
  96. package/plugin/helpers/headlessStreamState.ts +0 -69
  97. package/plugin/helpers/index.ts +0 -3
  98. package/plugin/helpers/requestInfo.ts +1 -2
  99. package/plugin/helpers/resolveComponent.ts +6 -1
  100. package/plugin/helpers/workerCleanup.ts +1 -38
  101. package/plugin/index.client.ts +4 -0
  102. package/plugin/index.server.ts +4 -0
  103. package/plugin/index.ts +12 -5
  104. package/plugin/loader/directives/index.ts +0 -1
  105. package/plugin/plugin.client.ts +1 -1
  106. package/plugin/plugin.server.ts +1 -1
  107. package/plugin/stream/renderRscStream.server.ts +3 -0
  108. package/plugin/transformer/README.md +1 -1
  109. package/plugin/utils/checkReactVersion.ts +28 -0
  110. package/plugin/vendor/vendor.client.ts +0 -2
  111. package/plugin/worker/html/README.md +1 -1
  112. package/plugin/worker/rsc/README.md +1 -1
  113. package/plugin/worker/rsc/handleRscRender.ts +2 -0
  114. package/scripts/generate-toc.mjs +27 -294
  115. package/dist/plugin/error/assertPanic.d.ts +0 -2
  116. package/dist/plugin/error/assertPanic.d.ts.map +0 -1
  117. package/dist/plugin/error/assertPanic.js +0 -15
  118. package/dist/plugin/error/directiveError.d.ts +0 -13
  119. package/dist/plugin/error/directiveError.d.ts.map +0 -1
  120. package/dist/plugin/error/directiveError.js +0 -21
  121. package/dist/plugin/error/enhanceError.d.ts +0 -14
  122. package/dist/plugin/error/enhanceError.d.ts.map +0 -1
  123. package/dist/plugin/error/enhanceError.js +0 -24
  124. package/dist/plugin/helpers/createSafePageComponent.d.ts +0 -36
  125. package/dist/plugin/helpers/createSafePageComponent.d.ts.map +0 -1
  126. package/dist/plugin/helpers/createSafePageComponent.js +0 -50
  127. package/dist/plugin/helpers/moduleResolver.d.ts +0 -25
  128. package/dist/plugin/helpers/moduleResolver.d.ts.map +0 -1
  129. package/dist/plugin/helpers/moduleResolver.js +0 -64
  130. package/dist/plugin/helpers/stashReturnValue.d.ts +0 -3
  131. package/dist/plugin/helpers/stashReturnValue.d.ts.map +0 -1
  132. package/dist/plugin/helpers/stashReturnValue.js +0 -23
  133. package/dist/plugin/helpers/workerManager.d.ts +0 -5
  134. package/dist/plugin/helpers/workerManager.d.ts.map +0 -1
  135. package/dist/plugin/helpers/workerManager.js +0 -18
  136. package/dist/plugin/loader/directives/collectExportsFromModule.d.ts +0 -6
  137. package/dist/plugin/loader/directives/collectExportsFromModule.d.ts.map +0 -1
  138. package/dist/plugin/loader/directives/collectExportsFromModule.js +0 -24
  139. package/plugin/error/assertPanic.ts +0 -9
  140. package/plugin/error/directiveError.ts +0 -29
  141. package/plugin/error/enhanceError.ts +0 -41
  142. package/plugin/helpers/createSafePageComponent.ts +0 -64
  143. package/plugin/helpers/moduleResolver.ts +0 -91
  144. package/plugin/helpers/stashReturnValue.ts +0 -19
  145. package/plugin/helpers/workerManager.ts +0 -16
  146. package/plugin/loader/directives/collectExportsFromModule.ts +0 -25
package/plugin/index.ts CHANGED
@@ -1,9 +1,16 @@
1
+ // Conditional exports in package.json resolve to index.server.js or index.client.js.
2
+ // This barrel file is kept for backward compat with tools that don't support conditions.
1
3
  import { getCondition } from './config/getCondition.js';
2
- import { pluginRoot } from './root.js';
3
4
  import type { VitePluginMainFn } from './types.js';
4
5
 
5
- export const condition = getCondition('');
6
- export const { vitePluginReactServer, vitePluginReactClient } = (await import(`${pluginRoot}/plugin.${condition}.js`)) as { vitePluginReactServer: VitePluginMainFn, vitePluginReactClient: VitePluginMainFn };
6
+ const condition = getCondition('');
7
+ const dir = new URL('./', import.meta.url).pathname.replace(/\/$/, '');
7
8
 
8
- // Export the orchestrator for direct use
9
- export { createPluginOrchestrator } from './orchestrator/createPluginOrchestrator.js';
9
+ const mod = await import(`${dir}/plugin.${condition}.js`);
10
+ export const vitePluginReactServer: VitePluginMainFn = mod.vitePluginReactServer;
11
+ export const vitePluginReactClient: VitePluginMainFn = mod.vitePluginReactServer;
12
+
13
+ const orch = await import(`${dir}/orchestrator/createPluginOrchestrator.${condition === 'server' ? 'server' : 'client'}.js`);
14
+ export const createPluginOrchestrator = orch.createPluginOrchestrator;
15
+
16
+ export { getCondition } from './config/getCondition.js';
@@ -1,6 +1,5 @@
1
1
  export * from "./addLocalExportedNames.js";
2
2
  export * from "./getExports.js";
3
- export * from "./collectExportsFromModule.js";
4
3
  export * from "./analyzeDirectives.js";
5
4
  export * from "./analyzeModule.js";
6
5
  export * from "./collectExports.js";
@@ -1,5 +1,5 @@
1
1
  import type { VitePluginMainFn } from "./types.js";
2
- import { createPluginOrchestrator } from "./orchestrator/createPluginOrchestrator.js";
2
+ import { createPluginOrchestrator } from "./orchestrator/createPluginOrchestrator.client.js";
3
3
  import type { UserOptions, Strategy } from "./orchestrator/types.js";
4
4
  import { assertNonReactServer } from "./config/getCondition.js";
5
5
 
@@ -2,7 +2,7 @@ import type { VitePluginMainFn } from "./types.js";
2
2
  import type { UserOptions, Strategy } from "./orchestrator/types.js";
3
3
 
4
4
  import { assertReactServer } from "./config/getCondition.js";
5
- import { createPluginOrchestrator } from "./orchestrator/createPluginOrchestrator.js";
5
+ import { createPluginOrchestrator } from "./orchestrator/createPluginOrchestrator.server.js";
6
6
 
7
7
  assertReactServer();
8
8
 
@@ -3,6 +3,7 @@ import type { CreateHandlerOptions } from "../types.js";
3
3
  import type { RscRenderResult } from "./renderRscStream.types.js";
4
4
  import { createStreamMetrics } from "../metrics/createStreamMetrics.js";
5
5
  import { createReactElement } from "../helpers/createRscRenderHelpers.js";
6
+ import { checkReactExperimental } from "../utils/checkReactVersion.js";
6
7
  import { ReactDOMServer } from "../vendor/vendor.server.js";
7
8
  import type { StreamHandlers } from "../worker/types.js";
8
9
 
@@ -78,6 +79,8 @@ export function renderRscStream(
78
79
  logger?.info(`[renderRscStream:${route}] Creating React stream for element`);
79
80
  }
80
81
 
82
+ checkReactExperimental();
83
+
81
84
  // Render React to stream - let it flow naturally like the RSC worker
82
85
  const reactStream = ReactDOMServer.renderToPipeableStream(
83
86
  reactElement,
@@ -2,4 +2,4 @@
2
2
 
3
3
  This directory contains the core transformation plugin for React Server Components (RSC) in Vite.
4
4
 
5
- 📖 **For full documentation, see [`../../docs/transformer-plugin.md`](../../docs/transformer-plugin.md)**
5
+ 📖 **For full documentation, see [`docs/maintenance/transformer-plugin.md`](../../docs/maintenance/transformer-plugin.md)**
@@ -0,0 +1,28 @@
1
+ let checked = false;
2
+
3
+ /**
4
+ * Verify React experimental is available. The vendored react-server-dom-esm
5
+ * transport requires Taint APIs that only exist in React experimental builds.
6
+ * Stable React 19.x causes: "Cannot read properties of undefined (reading 'add')"
7
+ */
8
+ export function checkReactExperimental() {
9
+ if (checked) return;
10
+ checked = true;
11
+
12
+ try {
13
+ // Use require for sync access — React is always available at this point
14
+ const version: string = globalThis.process?.versions
15
+ ? require("react").version
16
+ : "";
17
+
18
+ if (version && !version.includes("experimental")) {
19
+ throw new Error(
20
+ `[vite-plugin-react-server] React ${version} is not supported. ` +
21
+ `This plugin requires React experimental builds. ` +
22
+ `Install with: npm install react@experimental react-dom@experimental`
23
+ );
24
+ }
25
+ } catch (e: unknown) {
26
+ if (e instanceof Error && e.message.includes("not supported")) throw e;
27
+ }
28
+ }
@@ -2,9 +2,7 @@ import { createRequire } from "node:module";
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { existsSync } from "node:fs";
5
- import { assertNonReactServer } from "../config/getCondition.js";
6
5
 
7
- assertNonReactServer();
8
6
 
9
7
  const __dirname = dirname(fileURLToPath(import.meta.url));
10
8
  function findPkgRoot(): string {
@@ -2,4 +2,4 @@
2
2
 
3
3
  This directory contains the HTML worker implementation for the Vite React Server Plugin.
4
4
 
5
- 📖 **For full documentation, see [`../../docs/html-worker.md`](../../docs/html-worker.md)**
5
+ 📖 **For full documentation, see [`docs/maintenance/rsc-worker.md`](../../../docs/maintenance/rsc-worker.md)**
@@ -2,4 +2,4 @@
2
2
 
3
3
  This directory contains the RSC worker implementation for the Vite React Server Plugin.
4
4
 
5
- 📖 **For full documentation, see [`../../docs/rsc-worker.md`](../../docs/rsc-worker.md)**
5
+ 📖 **For full documentation, see [`docs/maintenance/rsc-worker.md`](../../../docs/maintenance/rsc-worker.md)**
@@ -9,6 +9,7 @@ import {
9
9
  type RenderToPipeableStreamOptions,
10
10
  } from "../../vendor/vendor.server.js";
11
11
  import { createElementWithReact } from "../../helpers/createElementWithReact.js";
12
+ import { checkReactExperimental } from "../../utils/checkReactVersion.js";
12
13
  /**
13
14
  * Handles the rendering of React Server Component streams in the RSC worker thread.
14
15
  *
@@ -261,6 +262,7 @@ export const handleRscRender: HandleRscRenderFn = function _handleRscRender(
261
262
  );
262
263
  }
263
264
 
265
+ checkReactExperimental();
264
266
  const { pipe } = ReactDOMServer.renderToPipeableStream(
265
267
  element,
266
268
  finalHandlerOptions.moduleBasePath,
@@ -1,311 +1,44 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { readFileSync, writeFileSync, readdirSync, existsSync } from 'fs';
3
+ /**
4
+ * Generate table of contents for documentation.
5
+ *
6
+ * Reads docs/README.md TOC entries and can inject navigation
7
+ * into individual doc files if they have <!-- TOC START --> / <!-- TOC END --> markers.
8
+ *
9
+ * With the current doc structure, the TOC lives only in docs/README.md
10
+ * and individual files don't embed navigation. This script is kept
11
+ * for future use if navigation footers are desired.
12
+ */
13
+
14
+ import { readFileSync, readdirSync, existsSync } from 'fs';
4
15
  import { join, dirname } from 'path';
5
16
  import { fileURLToPath } from 'url';
6
17
 
7
- const __filename = fileURLToPath(import.meta.url);
8
- const __dirname = dirname(__filename);
9
-
18
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
19
  const DOCS_DIR = join(__dirname, '../docs');
11
20
  const README_PATH = join(DOCS_DIR, 'README.md');
12
21
 
13
- // Markers for TOC injection
14
- const TOC_START = '<!-- TOC START -->';
15
- const TOC_END = '<!-- TOC END -->';
16
-
17
- function extractTOCFromReadme() {
18
- const readmeContent = readFileSync(README_PATH, 'utf8');
19
-
20
- // Find the table of contents section
21
- const tocStartIndex = readmeContent.indexOf('## Table of Contents');
22
- const tocEndIndex = readmeContent.indexOf('## Quick Links');
23
-
24
- if (tocStartIndex === -1 || tocEndIndex === -1) {
25
- throw new Error('Could not find Table of Contents section in README.md');
26
- }
27
-
28
- const tocSection = readmeContent.slice(tocStartIndex, tocEndIndex).trim();
29
-
30
- // Parse the TOC and build clickable links for sub-items
31
- const lines = tocSection.split('\n');
32
- let currentFile = null;
33
- let currentNumber = 1;
34
- let tocWithLinks = [];
35
- const anchor = (text) => text.toLowerCase().replace(/[^a-z0-9\s-]/g, '').replace(/\s+/g, '-');
36
-
37
- for (let line of lines) {
38
- // Main section: "1. [Getting Started](./getting-started.md)"
39
- const mainMatch = line.match(/^(\d+)\. \[([^\]]+)\]\(\.\/([^)]+)\)/);
40
- if (mainMatch) {
41
- const number = parseInt(mainMatch[1]);
42
- const title = mainMatch[2];
43
- const filename = mainMatch[3];
44
- currentFile = filename;
45
- currentNumber = number;
46
-
47
- // Always use 1 tab between number and bracket to account for 2-digit numbers
48
- tocWithLinks.push(`${number}.\t[${title}](./${filename})`);
49
- continue;
50
- }
51
- // Sub-item: " - Installation and Setup"
52
- const subMatch = line.match(/^(\s*)- (.+)$/);
53
- if (subMatch && currentFile) {
54
- const text = subMatch[2];
55
- const link = `./${currentFile}#${anchor(text)}`;
56
-
57
- // Always use 1 tab for sub-items
58
- const indent = '\t';
59
-
60
- tocWithLinks.push(`${indent}- [${text}](${link})`);
61
- continue;
62
- }
63
- // Only include lines that are part of the TOC (numbered items, sub-items, or empty lines)
64
- if (line.trim() === '' || line.match(/^\d+\./) || line.match(/^\s*-/)) {
65
- tocWithLinks.push(line);
66
- }
67
- }
68
-
69
- // Add navigation note (without the Table of Contents header or auto-generated comment)
70
- const tocWithNav = `${tocWithLinks.join('\n')}\n\n### Quick Links\n- [🏠 Main Documentation](./README.md)\n- [🚀 Getting Started](./getting-started.md)\n- [📖 GitHub Repository](https://github.com/nicobrinkkemper/vite-plugin-react-server)\n- [🎮 Official Demo](https://github.com/nicobrinkkemper/vite-plugin-react-server-demo-official)\n\n---`;
71
-
72
- return tocWithNav;
73
- }
74
-
75
- function injectTOCIntoFile(filePath, toc) {
76
- const content = readFileSync(filePath, 'utf8');
77
- const fileName = filePath.split('/').pop();
78
-
79
- // Check if TOC markers already exist
80
- const hasMarkers = content.includes(TOC_START) && content.includes(TOC_END);
22
+ function main() {
23
+ console.log('📚 Documentation structure:\n');
81
24
 
82
- // If TOC is a string, convert to array for manipulation
83
- let tocLines = toc.split('\n');
84
- // Highlight the current file in the TOC
85
- tocLines = tocLines.map(line => {
86
- // Match main TOC entry: "1. [Getting Started](./getting-started.md)" or "10. [Advanced Topics](./advanced-topics.md)"
87
- const mainMatch = line.match(/^(\d+)\.(\s*)\[([^\]]+)\]\(\.\/([^)]+)\)/);
88
- if (mainMatch) {
89
- const number = parseInt(mainMatch[1]);
90
- const spacing = mainMatch[2];
91
- const title = mainMatch[3];
92
- const entryFile = mainMatch[4];
93
- if (entryFile === fileName) {
94
- // Bold and add indicator, maintaining the spacing
95
- return `${number}.${spacing}**[${title}](./${entryFile}) ← you are here**`;
96
- }
97
- }
98
- return line;
99
- });
100
- const tocWithHere = tocLines.join('\n');
25
+ const readme = readFileSync(README_PATH, 'utf8');
26
+ const lines = readme.split('\n');
101
27
 
102
- if (hasMarkers) {
103
- // Always replace everything between markers
104
- const startIndex = content.indexOf(TOC_START);
105
- const endIndex = content.indexOf(TOC_END);
106
-
107
- if (startIndex === -1 || endIndex === -1 || endIndex <= startIndex) {
108
- console.log(`⚠️ Invalid marker positions in ${filePath}`);
109
- return 'error';
110
- }
111
-
112
- // Remove everything between the markers (including the markers themselves)
113
- const beforeTOC = content.substring(0, startIndex);
114
- const afterTOC = content.substring(endIndex + TOC_END.length);
115
-
116
- // Add the new content with markers
117
- const newContent = beforeTOC + TOC_START + '\n\n## 📚 Documentation Navigation\n\n<!-- Auto-generated TOC - Do not edit manually -->\n\n## Table of Contents\n\n<!-- Auto-generated TOC - Do not edit manually -->\n\n' + tocWithHere + '\n\n' + TOC_END + afterTOC;
118
- writeFileSync(filePath, newContent, 'utf8');
119
- return 'updated';
120
- } else {
121
- // Find a safe place to insert TOC (not inside a code block)
122
- const lines = content.split('\n');
123
- let insertIndex = lines.length;
124
- let inCodeBlock = false;
125
- let codeBlockDepth = 0;
126
- // Scan from the end to find a safe insertion point
127
- for (let i = lines.length - 1; i >= 0; i--) {
128
- const line = lines[i];
129
- const trimmedLine = line.trim();
130
- // Check for code block markers (including multiple backticks)
131
- if (trimmedLine.match(/^`{3,}/)) {
132
- codeBlockDepth++;
133
- inCodeBlock = codeBlockDepth % 2 === 1;
134
- continue;
135
- }
136
- if (!inCodeBlock && trimmedLine !== '') {
137
- insertIndex = i + 1;
138
- break;
139
- }
140
- }
141
- // Insert TOC at the safe position with markers
142
- lines.splice(insertIndex, 0, '', TOC_START + '\n\n## 📚 Documentation Navigation\n\n<!-- Auto-generated TOC - Do not edit manually -->\n\n## Table of Contents\n\n<!-- Auto-generated TOC - Do not edit manually -->\n\n' + tocWithHere + '\n\n' + TOC_END);
143
- const newContent = lines.join('\n');
144
- writeFileSync(filePath, newContent, 'utf8');
145
- return 'inserted';
146
- }
147
- }
148
-
149
- function generateMainReadmeTable() {
150
- const readmeContent = readFileSync(README_PATH, 'utf8');
151
-
152
- // Find the table of contents section
153
- const tocStartIndex = readmeContent.indexOf('## Table of Contents');
154
- const tocEndIndex = readmeContent.indexOf('## Plugin Implementation Documentation');
155
-
156
- if (tocStartIndex === -1 || tocEndIndex === -1) {
157
- throw new Error('Could not find Table of Contents section in README.md');
158
- }
159
-
160
- const tocSection = readmeContent.slice(tocStartIndex, tocEndIndex).trim();
161
-
162
- // Parse the TOC to extract file names
163
- const lines = tocSection.split('\n');
164
- const entries = [];
165
-
166
28
  for (const line of lines) {
167
- // Match pattern like: "1. [Getting Started](./getting-started.md)"
168
- const match = line.match(/^\d+\.\s+\[([^\]]+)\]\(\.\/([^)]+)\)/);
29
+ const match = line.match(/^\d+\.\s+\[.+\]\(.+\)/);
169
30
  if (match) {
170
- const title = match[1];
171
- const filename = match[2];
172
- entries.push({ title, filename });
173
- }
174
- }
175
-
176
- // Generate the markdown table
177
- let table = '| Topic |\n';
178
- table += '|-------|\n';
179
-
180
- for (const entry of entries) {
181
- table += `| [${entry.title}](./docs/${entry.filename}) |\n`;
182
- }
183
-
184
- return table;
185
- }
186
-
187
- function updateMainReadmeTable() {
188
- const mainReadmePath = join(__dirname, '../README.md');
189
- let content = readFileSync(mainReadmePath, 'utf8');
190
-
191
- // Remove ALL existing documentation tables using regex
192
- const docTableRegex = /## Documentation\s*\n\s*\|.*?\n\s*\|.*?\n\s*(\|.*?\n\s*)*/gs;
193
- content = content.replace(docTableRegex, '');
194
-
195
- // Find the License section to add documentation before it
196
- const licenseStart = content.indexOf('## License');
197
- if (licenseStart === -1) {
198
- console.log('⚠️ Could not find License section in main README.md');
199
- return false;
200
- }
201
-
202
- const beforeLicense = content.substring(0, licenseStart);
203
- const licenseSection = content.substring(licenseStart);
204
- const newTable = generateMainReadmeTable();
205
-
206
- // Insert the documentation table just before License
207
- const newContent = beforeLicense + '## Documentation\n\n' + newTable + '\n\n' + licenseSection;
208
- writeFileSync(mainReadmePath, newContent, 'utf8');
209
-
210
- return true;
211
- }
212
-
213
- function updateMainReadmeTOC() {
214
- const mainReadmePath = join(__dirname, '../docs/README.md');
215
- let content = readFileSync(mainReadmePath, 'utf8');
216
-
217
- // Find the table of contents section - look for the first occurrence
218
- const tocStartIndex = content.indexOf('## Table of Contents');
219
- const tocEndIndex = content.indexOf('## Plugin Implementation Documentation');
220
-
221
- if (tocStartIndex === -1 || tocEndIndex === -1) {
222
- console.log('⚠️ Could not find Table of Contents section in docs/README.md');
223
- return false;
224
- }
225
-
226
- const beforeTOC = content.substring(0, tocStartIndex);
227
- const afterTOC = content.substring(tocEndIndex);
228
-
229
- // Generate the TOC with tab-based formatting
230
- const tocSection = content.slice(tocStartIndex, tocEndIndex).trim();
231
- const lines = tocSection.split('\n');
232
- let tocWithTabs = [];
233
-
234
- for (let line of lines) {
235
- // Main section: "1. [Getting Started](./getting-started.md)"
236
- const mainMatch = line.match(/^(\d+)\. \[([^\]]+)\]\(\.\/([^)]+)\)/);
237
- if (mainMatch) {
238
- const number = parseInt(mainMatch[1]);
239
- const title = mainMatch[2];
240
- const filename = mainMatch[3];
241
-
242
- // Always use 1 tab between number and bracket to account for 2-digit numbers
243
- tocWithTabs.push(`${number}.\t[${title}](./${filename})`);
244
- continue;
245
- }
246
- // Skip duplicate "## Table of Contents" headers and auto-generated comments
247
- if (line.trim() === '## Table of Contents' || line.trim() === '<!-- Auto-generated TOC - Do not edit manually -->') {
248
- continue;
249
- }
250
- // Skip empty lines that might be between duplicate headers
251
- if (line.trim() === '') {
252
- continue;
31
+ // Extract path and check existence
32
+ const pathMatch = line.match(/\(\.\/([^)]+)\)/);
33
+ if (pathMatch) {
34
+ const filePath = join(DOCS_DIR, pathMatch[1]);
35
+ const exists = existsSync(filePath);
36
+ console.log(` ${exists ? '✅' : '❌'} ${line.trim()}`);
37
+ }
253
38
  }
254
- tocWithTabs.push(line);
255
39
  }
256
-
257
- const newTOC = `## Table of Contents\n\n<!-- Auto-generated TOC - Do not edit manually -->\n\n${tocWithTabs.join('\n')}\n`;
258
- const newContent = beforeTOC + newTOC + afterTOC;
259
- writeFileSync(mainReadmePath, newContent, 'utf8');
260
-
261
- return true;
262
- }
263
40
 
264
- function main() {
265
- console.log('🔧 Generating table of contents for documentation files...\n');
266
-
267
- try {
268
- // Extract TOC from README
269
- const toc = extractTOCFromReadme();
270
-
271
- // Get all markdown files except README.md
272
- const files = readdirSync(DOCS_DIR)
273
- .filter(file => file.endsWith('.md') && file !== 'README.md')
274
- .sort();
275
-
276
- console.log(`📁 Found ${files.length} documentation files:\n`);
277
-
278
- // Process each file
279
- const results = [];
280
- for (const file of files) {
281
- const filePath = join(DOCS_DIR, file);
282
- const action = injectTOCIntoFile(filePath, toc);
283
- results.push({ file, action });
284
- console.log(` ${action === 'updated' ? '🔄' : '✨'} ${file} - ${action}`);
285
- }
286
-
287
- // Update main README.md documentation table
288
- console.log('\n📝 Updating main README.md documentation table...');
289
- const mainReadmeUpdated = updateMainReadmeTable();
290
- if (mainReadmeUpdated) {
291
- console.log(' ✅ Main README.md documentation table updated');
292
- }
293
-
294
- // Update docs README.md TOC with tab-based formatting
295
- console.log('\n📝 Updating docs README.md TOC formatting...');
296
- const docsTOCUpdated = updateMainReadmeTOC();
297
- if (docsTOCUpdated) {
298
- console.log(' ✅ Docs README.md TOC formatting updated');
299
- }
300
-
301
- console.log('\n✅ Table of contents generation complete!');
302
- console.log(` 📝 ${results.filter(r => r.action === 'updated').length} files updated`);
303
- console.log(` ➕ ${results.filter(r => r.action === 'inserted').length} files had TOC inserted`);
304
-
305
- } catch (error) {
306
- console.error('❌ Error generating table of contents:', error.message);
307
- process.exit(1);
308
- }
41
+ console.log('\n✅ Done.');
309
42
  }
310
43
 
311
- main();
44
+ main();
@@ -1,2 +0,0 @@
1
- export declare function assertPanic<T>(error: T): asserts error is NonNullable<T>;
2
- //# sourceMappingURL=assertPanic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assertPanic.d.ts","sourceRoot":"","sources":["../../../plugin/error/assertPanic.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,GACP,OAAO,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAIjC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * vite-plugin-react-server
3
- * Copyright (c) Nico Brinkkemper
4
- * MIT License
5
- */
6
- import { isPanic } from './shouldPanic.js';
7
-
8
- function assertPanic(error) {
9
- if (isPanic(error)) {
10
- throw error;
11
- }
12
- }
13
-
14
- export { assertPanic };
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0UGFuaWMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9lcnJvci9hc3NlcnRQYW5pYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BhbmljIH0gZnJvbSBcIi4vc2hvdWxkUGFuaWMuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFBhbmljPFQ+KFxuICBlcnJvcjogVFxuKTogYXNzZXJ0cyBlcnJvciBpcyBOb25OdWxsYWJsZTxUPiB7XG4gIGlmIChpc1BhbmljKGVycm9yKSkge1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVPLFNBQVMsWUFDZCxLQUNpQyxFQUFBO0FBQ2pDLEVBQUksSUFBQSxPQUFBLENBQVEsS0FBSyxDQUFHLEVBQUE7QUFDbEIsSUFBTSxNQUFBLEtBQUE7QUFBQTtBQUVWOzs7OyJ9
@@ -1,13 +0,0 @@
1
- import type { DirectiveMatch } from "../loader/directives/types.js";
2
- export declare const DIRECTIVE_ERRORS: {
3
- readonly FILE_LEVEL: {
4
- readonly NOT_AT_TOP: "'use {directive}' directive must be at the top of the file, before any other statements.";
5
- readonly MIXED_DIRECTIVES: "Cannot use both 'use client' and 'use server' directives in the same file";
6
- };
7
- readonly FUNCTION_LEVEL: {
8
- readonly CLIENT_NOT_ALLOWED: "Directive 'use client' is not allowed at function level. Only 'use server' is allowed at the start of async functions.";
9
- readonly SERVER_NOT_ASYNC: "'use server' directive is only allowed at the start of async functions";
10
- };
11
- };
12
- export declare function isFileLevelWarning(warning: DirectiveMatch): boolean;
13
- //# sourceMappingURL=directiveError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"directiveError.d.ts","sourceRoot":"","sources":["../../../plugin/error/directiveError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGpE,eAAO,MAAM,gBAAgB;;;;;;;;;CAanB,CAAC;AAGX,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CASnE"}
@@ -1,21 +0,0 @@
1
- // Error types for better maintainability
2
- export const DIRECTIVE_ERRORS = {
3
- FILE_LEVEL: {
4
- NOT_AT_TOP: "'use {directive}' directive must be at the top of the file, before any other statements.",
5
- MIXED_DIRECTIVES: "Cannot use both 'use client' and 'use server' directives in the same file",
6
- },
7
- FUNCTION_LEVEL: {
8
- CLIENT_NOT_ALLOWED: "Directive 'use client' is not allowed at function level. Only 'use server' is allowed at the start of async functions.",
9
- SERVER_NOT_ASYNC: "'use server' directive is only allowed at the start of async functions",
10
- },
11
- };
12
- // Helper to check if a warning is about file-level issues
13
- export function isFileLevelWarning(warning) {
14
- if (!warning.message)
15
- return false;
16
- return (warning.message ===
17
- DIRECTIVE_ERRORS.FILE_LEVEL.NOT_AT_TOP.replace("{directive}", "client") ||
18
- warning.message ===
19
- DIRECTIVE_ERRORS.FILE_LEVEL.NOT_AT_TOP.replace("{directive}", "server") ||
20
- warning.message === DIRECTIVE_ERRORS.FILE_LEVEL.MIXED_DIRECTIVES);
21
- }
@@ -1,14 +0,0 @@
1
- /**
2
- * Creates a new error with context from any input.
3
- * Always creates a fresh stack trace and sets the original as the cause.
4
- * This is the preferred way to wrap errors with context.
5
- */
6
- export declare function enhanceError(originalError: Error | string | {
7
- message: string;
8
- }, captureStackTraceFunction: Function, context?: string): Error;
9
- /**
10
- * Creates a new error with context and captured stack trace
11
- * Useful for creating contextual errors at specific points in the code
12
- */
13
- export declare function createContextualError(message: string, context?: string, captureStackTraceFunction?: Function): Error;
14
- //# sourceMappingURL=enhanceError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enhanceError.d.ts","sourceRoot":"","sources":["../../../plugin/error/enhanceError.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,KAAK,GAAG,MAAM,GAAG;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,EACjD,yBAAyB,EAAE,QAAQ,EACnC,OAAO,GAAE,MAAuC,GAC/C,KAAK,CASP;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAW,EACpB,yBAAyB,CAAC,EAAE,QAAQ,GACnC,KAAK,CAYP"}
@@ -1,24 +0,0 @@
1
- /**
2
- * vite-plugin-react-server
3
- * Copyright (c) Nico Brinkkemper
4
- * MIT License
5
- */
6
- function enhanceError(originalError, captureStackTraceFunction, context = captureStackTraceFunction.name) {
7
- const baseMessage = typeof originalError === "string" ? originalError : originalError.message;
8
- const contextualError = createContextualError(baseMessage, context, captureStackTraceFunction || enhanceError);
9
- contextualError.cause = originalError;
10
- return contextualError;
11
- }
12
- function createContextualError(message, context = "", captureStackTraceFunction) {
13
- const contextualMessage = context && context !== "" ? `[${context}:error] ${message}` : message;
14
- const error = new Error(contextualMessage);
15
- error.name = "ContextualError";
16
- Error.captureStackTrace(
17
- error,
18
- captureStackTraceFunction || createContextualError
19
- );
20
- return error;
21
- }
22
-
23
- export { createContextualError, enhanceError };
24
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5oYW5jZUVycm9yLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9wbHVnaW4vZXJyb3IvZW5oYW5jZUVycm9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3JlYXRlcyBhIG5ldyBlcnJvciB3aXRoIGNvbnRleHQgZnJvbSBhbnkgaW5wdXQuXG4gKiBBbHdheXMgY3JlYXRlcyBhIGZyZXNoIHN0YWNrIHRyYWNlIGFuZCBzZXRzIHRoZSBvcmlnaW5hbCBhcyB0aGUgY2F1c2UuXG4gKiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgd2F5IHRvIHdyYXAgZXJyb3JzIHdpdGggY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihcbiAgb3JpZ2luYWxFcnJvcjogRXJyb3IgfCBzdHJpbmcgfCB7bWVzc2FnZTogc3RyaW5nfSxcbiAgY2FwdHVyZVN0YWNrVHJhY2VGdW5jdGlvbjogRnVuY3Rpb24sXG4gIGNvbnRleHQ6IHN0cmluZyA9IGNhcHR1cmVTdGFja1RyYWNlRnVuY3Rpb24ubmFtZSxcbik6IEVycm9yIHtcbiAgY29uc3QgYmFzZU1lc3NhZ2UgPSB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gJ3N0cmluZycgPyBvcmlnaW5hbEVycm9yIDogb3JpZ2luYWxFcnJvci5tZXNzYWdlO1xuICBcbiAgY29uc3QgY29udGV4dHVhbEVycm9yID0gY3JlYXRlQ29udGV4dHVhbEVycm9yKGJhc2VNZXNzYWdlLCBjb250ZXh0LCBjYXB0dXJlU3RhY2tUcmFjZUZ1bmN0aW9uIHx8IGVuaGFuY2VFcnJvcik7XG4gIFxuICAvLyBTZXQgdGhlIG9yaWdpbmFsIGFzIHRoZSBjYXVzZSBmb3IgdHJhY2VhYmlsaXR5XG4gIGNvbnRleHR1YWxFcnJvci5jYXVzZSA9IG9yaWdpbmFsRXJyb3I7XG4gIFxuICByZXR1cm4gY29udGV4dHVhbEVycm9yO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZXJyb3Igd2l0aCBjb250ZXh0IGFuZCBjYXB0dXJlZCBzdGFjayB0cmFjZVxuICogVXNlZnVsIGZvciBjcmVhdGluZyBjb250ZXh0dWFsIGVycm9ycyBhdCBzcGVjaWZpYyBwb2ludHMgaW4gdGhlIGNvZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRleHR1YWxFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nLFxuICBjb250ZXh0OiBzdHJpbmcgPSAnJyxcbiAgY2FwdHVyZVN0YWNrVHJhY2VGdW5jdGlvbj86IEZ1bmN0aW9uXG4pOiBFcnJvciB7XG4gIGNvbnN0IGNvbnRleHR1YWxNZXNzYWdlID0gY29udGV4dCAmJiBjb250ZXh0ICE9PSAnJyA/IGBbJHtjb250ZXh0fTplcnJvcl0gJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihjb250ZXh0dWFsTWVzc2FnZSk7XG4gIGVycm9yLm5hbWUgPSBcIkNvbnRleHR1YWxFcnJvclwiO1xuXG4gIC8vIENhcHR1cmUgc3RhY2sgdHJhY2UgZXhjbHVkaW5nIHRoaXMgZnVuY3Rpb24gKG9yIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24pXG4gIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKFxuICAgIGVycm9yLFxuICAgIGNhcHR1cmVTdGFja1RyYWNlRnVuY3Rpb24gfHwgY3JlYXRlQ29udGV4dHVhbEVycm9yXG4gICk7XG5cbiAgcmV0dXJuIGVycm9yO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS08sU0FBUyxZQUNkLENBQUEsYUFBQSxFQUNBLHlCQUNBLEVBQUEsT0FBQSxHQUFrQiwwQkFBMEIsSUFDckMsRUFBQTtBQUNQLEVBQUEsTUFBTSxXQUFjLEdBQUEsT0FBTyxhQUFrQixLQUFBLFFBQUEsR0FBVyxnQkFBZ0IsYUFBYyxDQUFBLE9BQUE7QUFFdEYsRUFBQSxNQUFNLGVBQWtCLEdBQUEscUJBQUEsQ0FBc0IsV0FBYSxFQUFBLE9BQUEsRUFBUyw2QkFBNkIsWUFBWSxDQUFBO0FBRzdHLEVBQUEsZUFBQSxDQUFnQixLQUFRLEdBQUEsYUFBQTtBQUV4QixFQUFPLE9BQUEsZUFBQTtBQUNUO0FBTU8sU0FBUyxxQkFDZCxDQUFBLE9BQUEsRUFDQSxPQUFrQixHQUFBLEVBQUEsRUFDbEIseUJBQ08sRUFBQTtBQUNQLEVBQU0sTUFBQSxpQkFBQSxHQUFvQixXQUFXLE9BQVksS0FBQSxFQUFBLEdBQUssSUFBSSxPQUFPLENBQUEsUUFBQSxFQUFXLE9BQU8sQ0FBSyxDQUFBLEdBQUEsT0FBQTtBQUN4RixFQUFNLE1BQUEsS0FBQSxHQUFRLElBQUksS0FBQSxDQUFNLGlCQUFpQixDQUFBO0FBQ3pDLEVBQUEsS0FBQSxDQUFNLElBQU8sR0FBQSxpQkFBQTtBQUdiLEVBQU0sS0FBQSxDQUFBLGlCQUFBO0FBQUEsSUFDSixLQUFBO0FBQUEsSUFDQSx5QkFBNkIsSUFBQTtBQUFBLEdBQy9CO0FBRUEsRUFBTyxPQUFBLEtBQUE7QUFDVDs7OzsifQ==
@@ -1,36 +0,0 @@
1
- /**
2
- * Creates a safe Page component that doesn't throw errors.
3
- * Used when headless streams have errors to prevent errors from reaching the HTML worker.
4
- *
5
- * @param errorMessage - Optional error message to display
6
- * @returns A safe React component that renders a div with error content
7
- */
8
- export declare function createSafePageComponent(errorMessage?: string): () => import("react").DetailedReactHTMLElement<{
9
- id: string;
10
- }, HTMLElement>;
11
- /**
12
- * Creates a fallback Page component using React.Fragment.
13
- * Used by RSC worker for consistent fallback behavior.
14
- *
15
- * @returns React.Fragment as a safe fallback
16
- */
17
- export declare function createFallbackPageComponent(): import("react").ExoticComponent<import("react").FragmentProps>;
18
- /**
19
- * Determines if a Page component should be replaced with a safe fallback.
20
- *
21
- * @param hasHeadlessError - Whether the headless stream had errors
22
- * @param isHeadless - Whether this is a headless stream
23
- * @returns true if a safe fallback should be used
24
- */
25
- export declare function shouldUseSafePageComponent(hasHeadlessError: boolean, isHeadless: boolean): boolean;
26
- /**
27
- * Creates the appropriate Page component based on error state.
28
- *
29
- * @param originalPageComponent - The original Page component
30
- * @param hasHeadlessError - Whether the headless stream had errors
31
- * @param isHeadless - Whether this is a headless stream
32
- * @param useReactFragment - Whether to use React.Fragment (RSC worker style) or div (server style)
33
- * @returns The appropriate Page component to use
34
- */
35
- export declare function createPageComponentWithErrorHandling(originalPageComponent: any, hasHeadlessError: boolean, isHeadless: boolean, useReactFragment?: boolean): any;
36
- //# sourceMappingURL=createSafePageComponent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSafePageComponent.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/createSafePageComponent.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,GAAE,MAA0C;;gBAE/F;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,mEAE1C;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,OAAO,EACzB,UAAU,EAAE,OAAO,GAClB,OAAO,CAQT;AAED;;;;;;;;GAQG;AACH,wBAAgB,oCAAoC,CAClD,qBAAqB,EAAE,GAAG,EAC1B,gBAAgB,EAAE,OAAO,EACzB,UAAU,EAAE,OAAO,EACnB,gBAAgB,GAAE,OAAe,OAOlC"}