@edgeone/react-router 1.0.5 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +7 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +134 -655
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
- package/LICENSE +0 -21
- package/README.md +0 -17
package/dist/index.d.ts
CHANGED
|
@@ -1,23 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EdgeOne
|
|
3
|
-
*
|
|
4
|
-
* Automatically performs post-processing after React Router build completion,
|
|
5
|
-
* converting build artifacts to a format deployable on the EdgeOne platform
|
|
2
|
+
* EdgeOne adapter for React Router v7 (SSR/SPA/Prerendering)
|
|
6
3
|
*/
|
|
7
4
|
import type { Plugin } from "vite";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
export interface EdgeOneAdapterOptions {
|
|
12
|
-
/** Whether to enable verbose logging, default false */
|
|
13
|
-
verbose?: boolean;
|
|
5
|
+
import { type ReactRouterAdapterOptions } from "@edgeone/vite-core";
|
|
6
|
+
export interface ReactRouterEdgeoneAdapterOptions extends ReactRouterAdapterOptions {
|
|
14
7
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* EdgeOne adapter plugin
|
|
20
|
-
*/
|
|
21
|
-
export declare function edgeoneAdapter(options?: EdgeOneAdapterOptions): Plugin;
|
|
22
|
-
export default edgeoneAdapter;
|
|
8
|
+
export declare function edgeoneReactRouterAdapter(options?: ReactRouterEdgeoneAdapterOptions): Plugin;
|
|
9
|
+
export default edgeoneReactRouterAdapter;
|
|
10
|
+
export { edgeoneReactRouterAdapter as edgeoneAdapter };
|
|
11
|
+
export type { ReactRouterAdapterOptions, RouteInfo, MetaConfig, BuildContext, BuildArtifacts, } from "@chuckcchen/vite-plugin";
|
|
23
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAkBL,KAAK,yBAAyB,EAI/B,MAAM,oBAAoB,CAAC;AAyD5B,MAAM,WAAW,gCACf,SAAQ,yBAAyB;CAAG;AAuKtC,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,gCAAqC,GAC7C,MAAM,CAKR;AAED,eAAe,yBAAyB,CAAC;AACzC,OAAO,EAAE,yBAAyB,IAAI,cAAc,EAAE,CAAC;AAEvD,YAAY,EACV,yBAAyB,EACzB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,GACf,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,674 +1,153 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* EdgeOne
|
|
3
|
-
*
|
|
4
|
-
* Automatically performs post-processing after React Router build completion,
|
|
5
|
-
* converting build artifacts to a format deployable on the EdgeOne platform
|
|
2
|
+
* EdgeOne adapter for React Router v7 (SSR/SPA/Prerendering)
|
|
6
3
|
*/
|
|
7
|
-
import * as esbuild from "esbuild";
|
|
8
|
-
import fs from "fs/promises";
|
|
9
4
|
import path from "path";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
config
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// Extract React Router config from Vite config
|
|
53
|
-
extractReactRouterConfig(config);
|
|
54
|
-
},
|
|
55
|
-
async writeBundle() {
|
|
56
|
-
// Skip execution if:
|
|
57
|
-
// 1. SSR is enabled in config AND
|
|
58
|
-
// 2. Current build is NOT for SSR (i.e., it's client build)
|
|
59
|
-
// This ensures we only run once after the server build completes
|
|
60
|
-
if (isSSR && !isBuildingForSSR) {
|
|
61
|
-
logVerbose("Skipping adapter execution (waiting for SSR build to complete)");
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
// Add a small delay to ensure all files are written
|
|
65
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
66
|
-
try {
|
|
67
|
-
// log("🚀 Starting EdgeOne adapter processing...\n");
|
|
68
|
-
// 1. Wait for React Router build to complete
|
|
69
|
-
await waitForBuildComplete();
|
|
70
|
-
// 2. Clean output directory
|
|
71
|
-
if (cleanOutput) {
|
|
72
|
-
await cleanOutputDirectory();
|
|
73
|
-
}
|
|
74
|
-
// 3. Copy static assets
|
|
75
|
-
await copyStaticAssets();
|
|
76
|
-
// 4. Bundle server code (SSR mode only)
|
|
77
|
-
if (isSSR) {
|
|
78
|
-
await bundleServerCode();
|
|
5
|
+
import { createCoreAdapter, createStatefulAdapter, resolvePreset, pathExists, detectConfigFile, loadConfigFile, loadServerBuildRoutes, flattenRouteTree, generateServerWrapperCode, createDefaultMeta, convertRoutesToMetaFormat, logBuildArtifacts, } from "@edgeone/vite-core";
|
|
6
|
+
const REACT_ROUTER_SERVER_PRESET = {
|
|
7
|
+
imports: `import { createRequestHandler } from "react-router";`,
|
|
8
|
+
setup: `
|
|
9
|
+
const {
|
|
10
|
+
routes, assets, assetsBuildDirectory, basename,
|
|
11
|
+
entry, future, isSpaMode, publicPath, routeDiscovery, ssr
|
|
12
|
+
} = serverExports;
|
|
13
|
+
|
|
14
|
+
const buildConfig = {
|
|
15
|
+
assets, assetsBuildDirectory, basename, entry, future,
|
|
16
|
+
isSpaMode, publicPath, routes, routeDiscovery, ssr
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const requestHandler = createRequestHandler(buildConfig);`,
|
|
20
|
+
invoke: "requestHandler(webRequest, ...args)",
|
|
21
|
+
};
|
|
22
|
+
/** Generate .data routes for React Router's Single Fetch */
|
|
23
|
+
function generateDataRoute(route, routePath, isStatic) {
|
|
24
|
+
if (isStatic || (!route.hasLoader && !route.hasAction))
|
|
25
|
+
return [];
|
|
26
|
+
if (routePath === "/")
|
|
27
|
+
return [{ path: "/_root.data", isStatic: false }];
|
|
28
|
+
if (routePath)
|
|
29
|
+
return [{ path: `${routePath}.data`, isStatic: false }];
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
function createReactRouterAdapter(_options) {
|
|
33
|
+
return createStatefulAdapter({ isSSR: true, isSpaMode: false, serverBuild: null, config: null }, (state) => ({
|
|
34
|
+
name: "react-router",
|
|
35
|
+
async detect(context) {
|
|
36
|
+
const { projectRoot, logger } = context;
|
|
37
|
+
const configPath = await detectConfigFile(projectRoot, [
|
|
38
|
+
"react-router.config.ts",
|
|
39
|
+
"react-router.config.js",
|
|
40
|
+
]);
|
|
41
|
+
if (configPath) {
|
|
42
|
+
logger.verbose("Found React Router config:", configPath);
|
|
43
|
+
state.config = await loadConfigFile(configPath);
|
|
44
|
+
if (state.config?.ssr === false) {
|
|
45
|
+
state.isSSR = false;
|
|
46
|
+
state.isSpaMode = true;
|
|
79
47
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
48
|
+
else if (state.config?.ssr === true) {
|
|
49
|
+
state.isSSR = true;
|
|
50
|
+
state.isSpaMode = false;
|
|
83
51
|
}
|
|
84
|
-
|
|
85
|
-
// showUsageInstructions();
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
console.error("\n❌ EdgeOne adapter processing failed:", error);
|
|
89
|
-
throw error;
|
|
52
|
+
return true;
|
|
90
53
|
}
|
|
54
|
+
const buildDir = state.config?.buildDirectory || "build";
|
|
55
|
+
const buildPath = path.join(projectRoot, buildDir, "client");
|
|
56
|
+
return pathExists(buildPath);
|
|
91
57
|
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
path.join(projectRoot, "build-ssr/client"),
|
|
105
|
-
];
|
|
106
|
-
// Check if any client build exists
|
|
107
|
-
let clientBuildFound = false;
|
|
108
|
-
for (const clientPath of clientBuildPaths) {
|
|
109
|
-
try {
|
|
110
|
-
await fs.access(clientPath);
|
|
111
|
-
clientBuildFound = true;
|
|
112
|
-
logVerbose(` ✅ Client build found: ${clientPath}`);
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
if (!clientBuildFound) {
|
|
120
|
-
throw new Error("Client build directory not found. Please ensure React Router build completed successfully.");
|
|
121
|
-
}
|
|
122
|
-
// If SSR mode, check for server build (should exist since we run after SSR build)
|
|
123
|
-
if (isSSR) {
|
|
124
|
-
const serverBuildPath = path.join(projectRoot, "build/server/index.js");
|
|
125
|
-
let serverBuildFound = false;
|
|
126
|
-
// Since we're running after SSR build, the file should exist
|
|
127
|
-
// But add a retry mechanism in case of file system delays
|
|
128
|
-
for (let i = 0; i < maxRetries; i++) {
|
|
129
|
-
try {
|
|
130
|
-
await fs.access(serverBuildPath);
|
|
131
|
-
serverBuildFound = true;
|
|
132
|
-
logVerbose(` ✅ Server build found: ${serverBuildPath}`);
|
|
133
|
-
break;
|
|
134
|
-
}
|
|
135
|
-
catch {
|
|
136
|
-
if (i < maxRetries - 1) {
|
|
137
|
-
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (!serverBuildFound) {
|
|
142
|
-
throw new Error(`Server build not found at ${serverBuildPath}. Please ensure React Router SSR build completed successfully.`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
logVerbose(" ✅ Build files verification completed");
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Extract React Router configuration from Vite config
|
|
149
|
-
* This method reads from the already resolved Vite config object
|
|
150
|
-
* instead of trying to import the config file directly
|
|
151
|
-
*/
|
|
152
|
-
function extractReactRouterConfig(config) {
|
|
153
|
-
try {
|
|
154
|
-
// React Router plugin should inject config into Vite config
|
|
155
|
-
// Look for reactRouter config in various possible locations
|
|
156
|
-
const reactRouterConfig = config.reactRouter || // Direct config
|
|
157
|
-
config.__reactRouterConfig || // Private field
|
|
158
|
-
(config.plugins?.find((p) => p?.name?.includes('react-router'))?.config); // Plugin config
|
|
159
|
-
if (reactRouterConfig) {
|
|
160
|
-
// Read SSR configuration
|
|
161
|
-
isSSR = reactRouterConfig.ssr !== false;
|
|
162
|
-
// Read prerender configuration
|
|
163
|
-
if (reactRouterConfig.prerender) {
|
|
164
|
-
// Store for later async processing
|
|
165
|
-
const prerenderConfig = reactRouterConfig.prerender;
|
|
166
|
-
// Handle boolean
|
|
167
|
-
if (typeof prerenderConfig === 'boolean') {
|
|
168
|
-
prerenderEnabled = prerenderConfig;
|
|
169
|
-
logVerbose("Prerender mode: All routes");
|
|
170
|
-
}
|
|
171
|
-
// Handle array
|
|
172
|
-
else if (Array.isArray(prerenderConfig)) {
|
|
173
|
-
prerenderRoutes = prerenderConfig;
|
|
174
|
-
logVerbose(`Prerender routes: ${prerenderRoutes.join(", ")}`);
|
|
175
|
-
}
|
|
176
|
-
// Handle function - will be resolved later when needed
|
|
177
|
-
else if (typeof prerenderConfig === 'function') {
|
|
178
|
-
logVerbose("Prerender function detected, will resolve later");
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
logVerbose(`React Router config loaded from Vite config (SSR: ${isSSR})`);
|
|
58
|
+
async getBuildArtifacts(context) {
|
|
59
|
+
const { projectRoot, logger } = context;
|
|
60
|
+
const buildDir = state.config?.buildDirectory || "build";
|
|
61
|
+
const serverBuildFile = state.config?.serverBuildFile || "index.js";
|
|
62
|
+
const clientDir = path.join(projectRoot, buildDir, "client");
|
|
63
|
+
const serverDir = path.join(projectRoot, buildDir, "server");
|
|
64
|
+
const serverEntry = path.join(serverDir, serverBuildFile);
|
|
65
|
+
const hasClient = await pathExists(clientDir);
|
|
66
|
+
const hasServer = await pathExists(serverEntry);
|
|
67
|
+
if (!hasServer) {
|
|
68
|
+
state.isSSR = false;
|
|
69
|
+
state.isSpaMode = true;
|
|
182
70
|
}
|
|
183
71
|
else {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
logVerbose("No React Router config found in Vite config, using defaults");
|
|
72
|
+
const serverBuild = await loadServerBuildRoutes(serverEntry, logger);
|
|
73
|
+
if (serverBuild) {
|
|
74
|
+
state.serverBuild = serverBuild;
|
|
75
|
+
if (state.config?.ssr === undefined) {
|
|
76
|
+
state.isSSR = serverBuild.ssr !== false;
|
|
77
|
+
state.isSpaMode = serverBuild.isSpaMode === true;
|
|
78
|
+
}
|
|
192
79
|
}
|
|
193
80
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Clean output directory
|
|
202
|
-
*/
|
|
203
|
-
async function cleanOutputDirectory() {
|
|
204
|
-
const outputPath = path.join(projectRoot, outputDir);
|
|
205
|
-
const assetsPath = path.join(outputPath, "assets");
|
|
206
|
-
const serverHandlerPath = path.join(outputPath, "server-handler");
|
|
207
|
-
const metaPath = path.join(outputPath, "meta.json");
|
|
208
|
-
try {
|
|
209
|
-
// Clean assets and server-handler directories, as well as meta.json file
|
|
210
|
-
await fs.rm(assetsPath, { recursive: true, force: true });
|
|
211
|
-
await fs.rm(serverHandlerPath, { recursive: true, force: true });
|
|
212
|
-
await fs.rm(metaPath, { force: true });
|
|
213
|
-
logVerbose("🧹 Cleaned directories: assets, server-handler, meta.json");
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
// Directory might not exist, ignore error
|
|
217
|
-
}
|
|
218
|
-
// Ensure output directory exists
|
|
219
|
-
await fs.mkdir(outputPath, { recursive: true });
|
|
220
|
-
logVerbose("📁 Ensured output directory exists:", outputDir);
|
|
221
|
-
logVerbose("");
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Copy static assets
|
|
225
|
-
*/
|
|
226
|
-
async function copyStaticAssets() {
|
|
227
|
-
// log("📦 Copying static assets...");
|
|
228
|
-
const targetPath = path.join(projectRoot, outputDir, "assets");
|
|
229
|
-
// Try multiple possible build artifact paths
|
|
230
|
-
const possibleSourcePaths = [
|
|
231
|
-
path.join(projectRoot, "build/client"),
|
|
232
|
-
path.join(projectRoot, "build-csr/client"),
|
|
233
|
-
path.join(projectRoot, "build-ssr/client"),
|
|
234
|
-
];
|
|
235
|
-
let sourcePath = null;
|
|
236
|
-
// Find existing build artifact directory
|
|
237
|
-
for (const possiblePath of possibleSourcePaths) {
|
|
238
|
-
try {
|
|
239
|
-
await fs.access(possiblePath);
|
|
240
|
-
sourcePath = possiblePath;
|
|
241
|
-
logVerbose(` Found build artifacts: ${possiblePath}`);
|
|
242
|
-
break;
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
// Continue trying next path
|
|
246
|
-
continue;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if (!sourcePath) {
|
|
250
|
-
throw new Error(`Build artifact directory not found, please run build command first`);
|
|
251
|
-
}
|
|
252
|
-
try {
|
|
253
|
-
// Recursively copy directory
|
|
254
|
-
await fs.cp(sourcePath, targetPath, { recursive: true });
|
|
255
|
-
// Count files
|
|
256
|
-
// const fileCount = await countFiles(targetPath);
|
|
257
|
-
// log(` ✅ Copied ${fileCount} files to ${outputDir}/assets`);
|
|
258
|
-
}
|
|
259
|
-
catch (error) {
|
|
260
|
-
throw new Error(`Failed to copy static assets: ${error}`);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Bundle server code
|
|
265
|
-
*/
|
|
266
|
-
async function bundleServerCode() {
|
|
267
|
-
// log("🔨 Bundling server code...");
|
|
268
|
-
const serverEntryPath = path.join(projectRoot, "build/server/index.js");
|
|
269
|
-
const outputPath = path.join(projectRoot, outputDir, "server-handler");
|
|
270
|
-
const outputFile = path.join(outputPath, "handler.js");
|
|
271
|
-
try {
|
|
272
|
-
// Check if entry file exists
|
|
273
|
-
await fs.access(serverEntryPath);
|
|
274
|
-
}
|
|
275
|
-
catch (error) {
|
|
276
|
-
log(" ⚠️ build/server/index.js does not exist, skipping server bundling");
|
|
277
|
-
log(" Hint: Ensure React Router is configured for SSR mode and built correctly");
|
|
278
|
-
log("");
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
try {
|
|
282
|
-
// Create output directory
|
|
283
|
-
await fs.mkdir(outputPath, { recursive: true });
|
|
284
|
-
// Create server wrapper file
|
|
285
|
-
const wrapperPath = await createServerWrapper(serverEntryPath);
|
|
286
|
-
// Bundle using esbuild
|
|
287
|
-
await esbuild.build({
|
|
288
|
-
entryPoints: [wrapperPath],
|
|
289
|
-
bundle: true,
|
|
290
|
-
platform: "node",
|
|
291
|
-
target: "node18",
|
|
292
|
-
format: "esm",
|
|
293
|
-
outfile: outputFile,
|
|
294
|
-
minify: false,
|
|
295
|
-
treeShaking: true,
|
|
296
|
-
external: ["node:*"],
|
|
297
|
-
metafile: true,
|
|
298
|
-
logLevel: "warning",
|
|
299
|
-
absWorkingDir: projectRoot,
|
|
300
|
-
banner: {
|
|
301
|
-
js: `import { createRequire } from 'node:module';
|
|
302
|
-
const require = createRequire(import.meta.url);
|
|
303
|
-
const __filename = new URL('', import.meta.url).pathname;
|
|
304
|
-
const __dirname = new URL('.', import.meta.url).pathname;`,
|
|
305
|
-
},
|
|
81
|
+
const needsServer = state.isSSR && !state.isSpaMode;
|
|
82
|
+
logBuildArtifacts(logger, "React Router", {
|
|
83
|
+
clientDir: hasClient ? clientDir : null,
|
|
84
|
+
serverDir: needsServer && hasServer ? serverDir : null,
|
|
85
|
+
serverEntry: needsServer && hasServer ? serverEntry : null,
|
|
306
86
|
});
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
// log(` ✅ Server code bundled`);
|
|
313
|
-
// log(` File: ${outputDir}/server-handler/index.mjs`);
|
|
314
|
-
// log(` Size: ${formatSize(outputInfo.bytes)}`);
|
|
315
|
-
// log("");
|
|
316
|
-
}
|
|
317
|
-
catch (error) {
|
|
318
|
-
throw new Error(`Failed to bundle server code: ${error}`);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Create server wrapper file
|
|
323
|
-
*/
|
|
324
|
-
async function createServerWrapper(serverBuildPath) {
|
|
325
|
-
logVerbose("📝 Creating server wrapper file...");
|
|
326
|
-
// Read original build/server/index.js
|
|
327
|
-
const serverBuildContent = await fs.readFile(serverBuildPath, "utf-8");
|
|
328
|
-
const wrapperContent = `// ========== React Router Server Build ==========
|
|
329
|
-
${serverBuildContent}
|
|
330
|
-
|
|
331
|
-
// ========== HTTP Server Wrapper ==========
|
|
332
|
-
import { createRequestHandler } from "react-router";
|
|
333
|
-
|
|
334
|
-
// Get exported build configuration
|
|
335
|
-
const buildConfig = {
|
|
336
|
-
assets: serverManifest,
|
|
337
|
-
assetsBuildDirectory,
|
|
338
|
-
basename,
|
|
339
|
-
entry,
|
|
340
|
-
future,
|
|
341
|
-
isSpaMode,
|
|
342
|
-
publicPath,
|
|
343
|
-
routes,
|
|
344
|
-
routeDiscovery,
|
|
345
|
-
ssr
|
|
346
|
-
};
|
|
347
|
-
|
|
348
|
-
// Create React Router request listener (accepts Web Request)
|
|
349
|
-
const requestHandler = createRequestHandler(buildConfig);
|
|
350
|
-
|
|
351
|
-
/**
|
|
352
|
-
* Convert Node.js IncomingMessage to Web API Request
|
|
353
|
-
*/
|
|
354
|
-
function nodeRequestToWebRequest(nodeReq) {
|
|
355
|
-
// Build full URL
|
|
356
|
-
const protocol = nodeReq.connection.encrypted ? 'https' : 'http';
|
|
357
|
-
const host = nodeReq.headers.host || 'localhost';
|
|
358
|
-
const url = \`\${protocol}://\${host}\${nodeReq.url}\`;
|
|
359
|
-
|
|
360
|
-
// Convert headers
|
|
361
|
-
const headers = new Headers();
|
|
362
|
-
for (const [key, value] of Object.entries(nodeReq.headers)) {
|
|
363
|
-
if (value) {
|
|
364
|
-
if (Array.isArray(value)) {
|
|
365
|
-
value.forEach(v => headers.append(key, v));
|
|
366
|
-
} else {
|
|
367
|
-
headers.set(key, value);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// Build request init options
|
|
373
|
-
const init = {
|
|
374
|
-
method: nodeReq.method,
|
|
375
|
-
headers: headers,
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
// Add body for non-GET/HEAD requests
|
|
379
|
-
if (nodeReq.method !== 'GET' && nodeReq.method !== 'HEAD') {
|
|
380
|
-
init.body = nodeReq;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
return new Request(url, init);
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Node.js request handler wrapper
|
|
388
|
-
* Converts first argument (Node.js req) to Web Request, other arguments are passed through
|
|
389
|
-
*/
|
|
390
|
-
async function nodeRequestHandler(nodeReq, ...args) {
|
|
391
|
-
// Convert Node.js request to Web Request
|
|
392
|
-
const webRequest = nodeRequestToWebRequest(nodeReq);
|
|
393
|
-
|
|
394
|
-
// Call React Router request handler with Web Request and other arguments
|
|
395
|
-
return requestHandler(webRequest, ...args);
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
// Export Node.js request handler as default
|
|
399
|
-
export default nodeRequestHandler;
|
|
400
|
-
`;
|
|
401
|
-
const tempPath = path.join(projectRoot, "server-wrapper.temp.js");
|
|
402
|
-
await fs.writeFile(tempPath, wrapperContent);
|
|
403
|
-
logVerbose(" ✅ Server wrapper file created");
|
|
404
|
-
return tempPath;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Generate meta.json
|
|
408
|
-
*/
|
|
409
|
-
async function generateMetaJson() {
|
|
410
|
-
// log("📄 Generating meta.json...");
|
|
411
|
-
try {
|
|
412
|
-
// Read route configuration (get serverManifest from build artifacts)
|
|
413
|
-
const manifest = await parseRoutes();
|
|
414
|
-
// Generate route list (intelligently determine rendering mode for each route)
|
|
415
|
-
const frameworkRoutes = generateRouteList(manifest);
|
|
416
|
-
// log("frameworkRoutes", frameworkRoutes);
|
|
417
|
-
// Build meta configuration
|
|
418
|
-
const metaConfig = {
|
|
419
|
-
conf: {
|
|
420
|
-
headers: [],
|
|
421
|
-
redirects: [],
|
|
422
|
-
rewrites: [],
|
|
423
|
-
caches: [],
|
|
424
|
-
has404: false,
|
|
425
|
-
ssr404: true,
|
|
426
|
-
},
|
|
427
|
-
has404: false,
|
|
428
|
-
frameworkRoutes,
|
|
87
|
+
return {
|
|
88
|
+
clientDir: hasClient ? clientDir : null,
|
|
89
|
+
serverDir: needsServer && hasServer ? serverDir : null,
|
|
90
|
+
serverEntry: needsServer && hasServer ? serverEntry : null,
|
|
91
|
+
assetsDir: hasClient ? clientDir : null,
|
|
429
92
|
};
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
// log(` Route count: ${frameworkRoutes.length}`);
|
|
442
|
-
// log("");
|
|
443
|
-
}
|
|
444
|
-
catch (error) {
|
|
445
|
-
throw new Error(`Failed to generate meta.json: ${error}`);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
/**
|
|
449
|
-
* Parse route configuration - unified reading from client manifest file
|
|
450
|
-
* Both SSR and CSR modes generate client manifest files
|
|
451
|
-
* This allows getting complete meta information for each route (hasLoader, hasClientLoader, etc.)
|
|
452
|
-
*/
|
|
453
|
-
async function parseRoutes() {
|
|
454
|
-
logVerbose(" 🔍 Looking for manifest file...");
|
|
455
|
-
// Possible build artifact paths (sorted by priority)
|
|
456
|
-
const possibleBuildPaths = [path.join(projectRoot, "build/client")];
|
|
457
|
-
for (const buildPath of possibleBuildPaths) {
|
|
458
|
-
try {
|
|
459
|
-
// Check if directory exists
|
|
460
|
-
await fs.access(buildPath);
|
|
461
|
-
// Search for manifest files in current directory and assets subdirectory
|
|
462
|
-
const searchPaths = [buildPath, path.join(buildPath, "assets")];
|
|
463
|
-
for (const searchPath of searchPaths) {
|
|
464
|
-
try {
|
|
465
|
-
const files = await fs.readdir(searchPath);
|
|
466
|
-
// Look for manifest-*.js files
|
|
467
|
-
const manifestFile = files.find((f) => f.startsWith("manifest-") && f.endsWith(".js"));
|
|
468
|
-
if (manifestFile) {
|
|
469
|
-
const manifestPath = path.join(searchPath, manifestFile);
|
|
470
|
-
const manifest = await parseManifestFile(manifestPath);
|
|
471
|
-
if (manifest) {
|
|
472
|
-
logVerbose(` ✅ Successfully read manifest: ${manifestPath}`);
|
|
473
|
-
return manifest;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
catch (error) {
|
|
478
|
-
// Continue trying next search path
|
|
479
|
-
continue;
|
|
93
|
+
},
|
|
94
|
+
hooks: {
|
|
95
|
+
async generateRoutes(context) {
|
|
96
|
+
const { projectRoot, logger } = context;
|
|
97
|
+
if (!state.serverBuild) {
|
|
98
|
+
const buildDir = state.config?.buildDirectory || "build";
|
|
99
|
+
const serverBuildFile = state.config?.serverBuildFile || "index.js";
|
|
100
|
+
const serverEntry = path.join(projectRoot, buildDir, "server", serverBuildFile);
|
|
101
|
+
if (await pathExists(serverEntry)) {
|
|
102
|
+
state.serverBuild =
|
|
103
|
+
await loadServerBuildRoutes(serverEntry, logger);
|
|
480
104
|
}
|
|
481
105
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
*/
|
|
494
|
-
async function parseManifestFile(manifestPath) {
|
|
495
|
-
try {
|
|
496
|
-
const manifestContent = await fs.readFile(manifestPath, "utf-8");
|
|
497
|
-
// Parse manifest content (format: window.__reactRouterManifest={...})
|
|
498
|
-
const match = manifestContent.match(/window\.__reactRouterManifest\s*=\s*({.*?});?\s*$/s);
|
|
499
|
-
if (match) {
|
|
500
|
-
const manifestData = JSON.parse(match[1]);
|
|
501
|
-
// Validate manifest data structure
|
|
502
|
-
if (manifestData.routes && manifestData.version) {
|
|
503
|
-
return {
|
|
504
|
-
routes: manifestData.routes,
|
|
505
|
-
version: manifestData.version,
|
|
506
|
-
};
|
|
106
|
+
if (state.serverBuild?.routes) {
|
|
107
|
+
const routes = flattenRouteTree(state.serverBuild.routes, {
|
|
108
|
+
isSSR: state.isSSR,
|
|
109
|
+
isSpaMode: state.isSpaMode,
|
|
110
|
+
onRouteProcessed: generateDataRoute,
|
|
111
|
+
});
|
|
112
|
+
if (state.isSSR && !state.isSpaMode) {
|
|
113
|
+
routes.push({ path: "/__manifest", isStatic: false });
|
|
114
|
+
}
|
|
115
|
+
logger.verbose(`Generated ${routes.length} routes from server build`);
|
|
116
|
+
return routes;
|
|
507
117
|
}
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
continue;
|
|
531
|
-
// Calculate route path
|
|
532
|
-
const routePath = calculateRoutePath(routeInfo);
|
|
533
|
-
// Determine if it's a prerender route
|
|
534
|
-
// 1. If prerender: true, all routes are prerendered
|
|
535
|
-
// 2. Otherwise check if route is in prerender list
|
|
536
|
-
const isPrerender = prerenderEnabled || prerenderRoutes.includes(routePath);
|
|
537
|
-
// Determine rendering mode
|
|
538
|
-
const renderMode = determineRenderMode(routeInfo, isPrerender);
|
|
539
|
-
logVerbose(` Route: ${routePath} -> ${renderMode}`);
|
|
540
|
-
// Add main route
|
|
541
|
-
routeList.push({
|
|
542
|
-
path: routePath,
|
|
543
|
-
isStatic: !isSSR, // All routes are static in CSR mode
|
|
544
|
-
srcRoute: routePath,
|
|
545
|
-
});
|
|
546
|
-
// SSR routes need .data routes (for getting data during client navigation)
|
|
547
|
-
if (renderMode === "ssr" && routePath && routePath.trim() !== "") {
|
|
548
|
-
// Root route's .data route should be /_root.data
|
|
549
|
-
const dataPath = routePath === "/" ? "/_root.data" : `${routePath}.data`;
|
|
550
|
-
routeList.push({
|
|
551
|
-
path: dataPath,
|
|
552
|
-
isStatic: false,
|
|
118
|
+
logger.warn("Cannot get routes from server build, using default");
|
|
119
|
+
return [
|
|
120
|
+
{
|
|
121
|
+
path: "/",
|
|
122
|
+
isStatic: state.isSpaMode || !state.isSSR,
|
|
123
|
+
srcRoute: "/",
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
},
|
|
127
|
+
async generateMeta(_context, routes) {
|
|
128
|
+
const metaRoutes = convertRoutesToMetaFormat(routes);
|
|
129
|
+
const meta = createDefaultMeta(metaRoutes, { isSSR: state.isSSR });
|
|
130
|
+
meta.conf.ssr404 = state.isSSR && !state.isSpaMode;
|
|
131
|
+
return meta;
|
|
132
|
+
},
|
|
133
|
+
generateServerWrapper(_context, config) {
|
|
134
|
+
const resolved = resolvePreset(REACT_ROUTER_SERVER_PRESET);
|
|
135
|
+
return generateServerWrapperCode({
|
|
136
|
+
serverEntryPath: config.serverEntryPath,
|
|
137
|
+
imports: resolved.imports,
|
|
138
|
+
handlerSetup: resolved.setup,
|
|
139
|
+
handlerCall: resolved.invoke,
|
|
553
140
|
});
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
return routeList;
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Determine route rendering mode
|
|
567
|
-
* @returns "ssr" | "csr" | "static"
|
|
568
|
-
*/
|
|
569
|
-
function determineRenderMode(routeInfo, isPrerender) {
|
|
570
|
-
// 1. Prerender route -> static
|
|
571
|
-
if (isPrerender) {
|
|
572
|
-
return "static";
|
|
573
|
-
}
|
|
574
|
-
// 2. Only clientLoader, no loader -> CSR
|
|
575
|
-
if (routeInfo.hasClientLoader && !routeInfo.hasLoader) {
|
|
576
|
-
return "csr";
|
|
577
|
-
}
|
|
578
|
-
// 3. Has loader (regardless of clientLoader) -> SSR
|
|
579
|
-
if (routeInfo.hasLoader) {
|
|
580
|
-
return "ssr";
|
|
581
|
-
}
|
|
582
|
-
// 4. Neither loader nor clientLoader, default to static
|
|
583
|
-
return "static";
|
|
584
|
-
}
|
|
585
|
-
/**
|
|
586
|
-
* Calculate complete route path
|
|
587
|
-
*/
|
|
588
|
-
function calculateRoutePath(routeInfo) {
|
|
589
|
-
// Handle index route
|
|
590
|
-
if (routeInfo.index) {
|
|
591
|
-
return "/";
|
|
592
|
-
}
|
|
593
|
-
// Handle regular route
|
|
594
|
-
let routePath;
|
|
595
|
-
if (routeInfo.path) {
|
|
596
|
-
routePath = routeInfo.path.startsWith("/")
|
|
597
|
-
? routeInfo.path
|
|
598
|
-
: `/${routeInfo.path}`;
|
|
599
|
-
}
|
|
600
|
-
else {
|
|
601
|
-
// Infer path from id (fallback)
|
|
602
|
-
const pathSegment = routeInfo.id.replace(/^routes\//, "");
|
|
603
|
-
if (pathSegment === "home" || pathSegment === "index") {
|
|
604
|
-
return "/";
|
|
605
|
-
}
|
|
606
|
-
routePath = `/${pathSegment.replace(/Page$/, "").toLowerCase()}`;
|
|
607
|
-
}
|
|
608
|
-
// Convert paths containing * to regex format (without parentheses)
|
|
609
|
-
if (routePath.includes("*")) {
|
|
610
|
-
// Escape special regex characters except *
|
|
611
|
-
routePath = routePath.replace(/[.+?^${}|[\]\\]/g, "\\$&");
|
|
612
|
-
// Handle trailing /* - can match empty or any path
|
|
613
|
-
// /docs/* should match /docs, /docs/, /docs/anything
|
|
614
|
-
// Using /.* with optional slash: make the / before * optional using /?.*
|
|
615
|
-
if (routePath.endsWith("/*")) {
|
|
616
|
-
routePath = routePath.slice(0, -2) + "/?.*";
|
|
617
|
-
}
|
|
618
|
-
else {
|
|
619
|
-
// Replace other * with .*
|
|
620
|
-
routePath = routePath.replace(/\*/g, ".*");
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
return routePath;
|
|
624
|
-
}
|
|
625
|
-
/**
|
|
626
|
-
* Count files
|
|
627
|
-
*/
|
|
628
|
-
// async function countFiles(dir: string): Promise<number> {
|
|
629
|
-
// let count = 0;
|
|
630
|
-
// try {
|
|
631
|
-
// const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
632
|
-
// for (const entry of entries) {
|
|
633
|
-
// if (entry.isDirectory()) {
|
|
634
|
-
// count += await countFiles(path.join(dir, entry.name));
|
|
635
|
-
// } else {
|
|
636
|
-
// count++;
|
|
637
|
-
// }
|
|
638
|
-
// }
|
|
639
|
-
// } catch (error) {
|
|
640
|
-
// // Ignore errors
|
|
641
|
-
// }
|
|
642
|
-
// return count;
|
|
643
|
-
// }
|
|
644
|
-
/**
|
|
645
|
-
* Show usage instructions
|
|
646
|
-
*/
|
|
647
|
-
// function showUsageInstructions() {
|
|
648
|
-
// log("\n📖 Usage Instructions:");
|
|
649
|
-
// log(` Output directory: ${outputDir}/`);
|
|
650
|
-
// log(` ├── assets/ # Static assets`);
|
|
651
|
-
// if (isSSR) {
|
|
652
|
-
// log(` ├── server-handler/ # Server code`);
|
|
653
|
-
// log(` │ └── index.mjs`);
|
|
654
|
-
// }
|
|
655
|
-
// log(` └── meta.json # Route metadata`);
|
|
656
|
-
// log("");
|
|
657
|
-
// if (isSSR) {
|
|
658
|
-
// log(" Start server:");
|
|
659
|
-
// log(` node ${outputDir}/server-handler/index.mjs`);
|
|
660
|
-
// log("");
|
|
661
|
-
// }
|
|
662
|
-
// log(" Deploy to EdgeOne:");
|
|
663
|
-
// log(` 1. Upload ${outputDir}/ directory to EdgeOne platform`);
|
|
664
|
-
// log(` 2. Configure static asset path as ${outputDir}/assets`);
|
|
665
|
-
// if (isSSR) {
|
|
666
|
-
// log(
|
|
667
|
-
// ` 3. Configure server entry as ${outputDir}/server-handler/index.mjs`
|
|
668
|
-
// );
|
|
669
|
-
// }
|
|
670
|
-
// log("");
|
|
671
|
-
// }
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
export function edgeoneReactRouterAdapter(options = {}) {
|
|
146
|
+
return createCoreAdapter({
|
|
147
|
+
...options,
|
|
148
|
+
adapter: createReactRouterAdapter(options),
|
|
149
|
+
});
|
|
672
150
|
}
|
|
673
|
-
export default
|
|
151
|
+
export default edgeoneReactRouterAdapter;
|
|
152
|
+
export { edgeoneReactRouterAdapter as edgeoneAdapter };
|
|
674
153
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edgeone/react-router",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "EdgeOne adapter
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "EdgeOne adapter for React Router v7 framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -12,31 +12,31 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"files": [
|
|
15
|
-
"dist"
|
|
16
|
-
"README.md",
|
|
17
|
-
"LICENSE"
|
|
15
|
+
"dist"
|
|
18
16
|
],
|
|
19
17
|
"scripts": {
|
|
20
18
|
"build": "tsc",
|
|
21
|
-
"prepublishOnly": "npm run build"
|
|
19
|
+
"prepublishOnly": "npm run build",
|
|
20
|
+
"release": "npm run build && npm version patch && npm publish",
|
|
21
|
+
"release:minor": "npm run build && npm version minor && npm publish",
|
|
22
|
+
"release:major": "npm run build && npm version major && npm publish"
|
|
22
23
|
},
|
|
23
24
|
"keywords": [
|
|
24
25
|
"vite",
|
|
25
26
|
"vite-plugin",
|
|
26
27
|
"react-router",
|
|
27
28
|
"edgeone",
|
|
28
|
-
"adapter"
|
|
29
|
+
"adapter",
|
|
30
|
+
"ssr"
|
|
29
31
|
],
|
|
30
32
|
"author": "EdgeOne Team",
|
|
31
33
|
"license": "MIT",
|
|
32
34
|
"peerDependencies": {
|
|
35
|
+
"@edgeone/vite-core": "^1.0.0",
|
|
33
36
|
"@react-router/dev": "^7.0.0",
|
|
37
|
+
"react-router": "^7.0.0",
|
|
34
38
|
"vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
|
|
35
39
|
},
|
|
36
|
-
"dependencies": {
|
|
37
|
-
"esbuild": "^0.20.0",
|
|
38
|
-
"react-router": "^7.9.4"
|
|
39
|
-
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/node": "^22.0.0",
|
|
42
42
|
"typescript": "^5.9.0",
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 EdgeOne Team
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
package/README.md
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# @edgeone/react-router
|
|
2
|
-
|
|
3
|
-
This adapter allows React Router to deploy your hybrid or server rendered site to [EdgeOne Pages](https://pages.edgeone.ai/).
|
|
4
|
-
|
|
5
|
-
## Documentation
|
|
6
|
-
|
|
7
|
-
Read the [`@edgeone/react-router` docs](https://pages.edgeone.ai/document/framework-react-router)
|
|
8
|
-
|
|
9
|
-
## Support
|
|
10
|
-
|
|
11
|
-
- Get help in the [EdgeOne Pages Discord](https://discord.com/invite/KpdcJ8xbq6).
|
|
12
|
-
|
|
13
|
-
- Check our [Product Introduction](https://pages.edgeone.ai/document/product-introduction) for more on integrations.
|
|
14
|
-
|
|
15
|
-
## License
|
|
16
|
-
|
|
17
|
-
MIT
|