@edgeone/react-router 1.0.4 → 1.1.0
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 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +126 -695
- 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,20 +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 "@chuckcchen/vite-plugin";
|
|
6
|
+
export interface ReactRouterEdgeoneAdapterOptions extends ReactRouterAdapterOptions {
|
|
14
7
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export
|
|
19
|
-
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";
|
|
20
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,yBAAyB,CAAC;AAgDjC,MAAM,WAAW,gCAAiC,SAAQ,yBAAyB;CAAG;AA6ItF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,gCAAqC,GAAG,MAAM,CAKhG;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,715 +1,146 @@
|
|
|
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
|
-
if (Array.isArray(prerender)) {
|
|
37
|
-
return { routes: prerender, enableAll: false };
|
|
38
|
-
}
|
|
39
|
-
// 3. Function: call function to get route list
|
|
40
|
-
if (typeof prerender === "function") {
|
|
41
|
-
try {
|
|
42
|
-
// Provide an empty getStaticPaths function as parameter
|
|
43
|
-
// In actual projects, static paths might need to be obtained from route configuration
|
|
44
|
-
const getStaticPaths = () => [];
|
|
45
|
-
const routes = await Promise.resolve(prerender({ getStaticPaths }));
|
|
46
|
-
return {
|
|
47
|
-
routes: Array.isArray(routes) ? routes : [],
|
|
48
|
-
enableAll: false,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
console.warn("[EdgeOne Adapter] Failed to call prerender function:", error);
|
|
53
|
-
return { routes: [], enableAll: false };
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return { routes: [], enableAll: false };
|
|
5
|
+
import { createCoreAdapter, createStatefulAdapter, resolvePreset, pathExists, detectConfigFile, loadConfigFile, loadServerBuildRoutes, flattenRouteTree, generateServerWrapperCode, createDefaultMeta, convertRoutesToMetaFormat, logBuildArtifacts, } from "@chuckcchen/vite-plugin";
|
|
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 [];
|
|
57
31
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
};
|
|
74
|
-
const logVerbose = (message, ...args) => {
|
|
75
|
-
if (verbose) {
|
|
76
|
-
console.log(`[EdgeOne Adapter] ${message}`, ...args);
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
return {
|
|
80
|
-
name: "vite-plugin-edgeone-adapter",
|
|
81
|
-
apply: "build",
|
|
82
|
-
enforce: "post",
|
|
83
|
-
configResolved(config) {
|
|
84
|
-
projectRoot = config.root;
|
|
85
|
-
// Detect if this is SSR build by checking build.ssr config
|
|
86
|
-
isBuildingForSSR =
|
|
87
|
-
config.build.ssr !== false && config.build.ssr !== undefined;
|
|
88
|
-
logVerbose("Project root directory:", projectRoot);
|
|
89
|
-
logVerbose("Current build type:", isBuildingForSSR ? "SSR" : "Client");
|
|
90
|
-
},
|
|
91
|
-
async writeBundle() {
|
|
92
|
-
// Load React Router configuration first to know if SSR is enabled
|
|
93
|
-
await loadReactRouterConfig();
|
|
94
|
-
// Skip execution if:
|
|
95
|
-
// 1. SSR is enabled in config AND
|
|
96
|
-
// 2. Current build is NOT for SSR (i.e., it's client build)
|
|
97
|
-
// This ensures we only run once after the server build completes
|
|
98
|
-
if (isSSR && !isBuildingForSSR) {
|
|
99
|
-
logVerbose("Skipping adapter execution (waiting for SSR build to complete)");
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
// Add a small delay to ensure all files are written
|
|
103
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
104
|
-
try {
|
|
105
|
-
// log("🚀 Starting EdgeOne adapter processing...\n");
|
|
106
|
-
// 1. Wait for React Router build to complete
|
|
107
|
-
await waitForBuildComplete();
|
|
108
|
-
// 2. Clean output directory
|
|
109
|
-
if (cleanOutput) {
|
|
110
|
-
await cleanOutputDirectory();
|
|
111
|
-
}
|
|
112
|
-
// 3. Copy static assets
|
|
113
|
-
await copyStaticAssets();
|
|
114
|
-
// 4. Bundle server code (SSR mode only)
|
|
115
|
-
if (isSSR) {
|
|
116
|
-
await bundleServerCode();
|
|
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;
|
|
117
47
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
48
|
+
else if (state.config?.ssr === true) {
|
|
49
|
+
state.isSSR = true;
|
|
50
|
+
state.isSpaMode = false;
|
|
121
51
|
}
|
|
122
|
-
|
|
123
|
-
// showUsageInstructions();
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
console.error("\n❌ EdgeOne adapter processing failed:", error);
|
|
127
|
-
throw error;
|
|
52
|
+
return true;
|
|
128
53
|
}
|
|
54
|
+
const buildDir = state.config?.buildDirectory || "build";
|
|
55
|
+
const buildPath = path.join(projectRoot, buildDir, "client");
|
|
56
|
+
return pathExists(buildPath);
|
|
129
57
|
},
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
path.join(projectRoot, "build-ssr/client"),
|
|
143
|
-
];
|
|
144
|
-
// Check if any client build exists
|
|
145
|
-
let clientBuildFound = false;
|
|
146
|
-
for (const clientPath of clientBuildPaths) {
|
|
147
|
-
try {
|
|
148
|
-
await fs.access(clientPath);
|
|
149
|
-
clientBuildFound = true;
|
|
150
|
-
logVerbose(` ✅ Client build found: ${clientPath}`);
|
|
151
|
-
break;
|
|
152
|
-
}
|
|
153
|
-
catch {
|
|
154
|
-
continue;
|
|
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;
|
|
155
70
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
let serverBuildFound = false;
|
|
164
|
-
// Since we're running after SSR build, the file should exist
|
|
165
|
-
// But add a retry mechanism in case of file system delays
|
|
166
|
-
for (let i = 0; i < maxRetries; i++) {
|
|
167
|
-
try {
|
|
168
|
-
await fs.access(serverBuildPath);
|
|
169
|
-
serverBuildFound = true;
|
|
170
|
-
logVerbose(` ✅ Server build found: ${serverBuildPath}`);
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
if (i < maxRetries - 1) {
|
|
175
|
-
await new Promise((resolve) => setTimeout(resolve, retryDelay));
|
|
71
|
+
else {
|
|
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;
|
|
176
78
|
}
|
|
177
79
|
}
|
|
178
80
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Load React Router configuration
|
|
187
|
-
*/
|
|
188
|
-
async function loadReactRouterConfig() {
|
|
189
|
-
// log("📖 Loading React Router configuration...");
|
|
190
|
-
try {
|
|
191
|
-
// Try multiple possible config file paths and extensions
|
|
192
|
-
const possibleConfigPaths = [
|
|
193
|
-
path.join(projectRoot, "react-router.config.ts"),
|
|
194
|
-
path.join(projectRoot, "react-router.config.js"),
|
|
195
|
-
path.join(projectRoot, "react-router.config.mjs"),
|
|
196
|
-
];
|
|
197
|
-
let configModule = null;
|
|
198
|
-
// let foundConfigPath: string | null = null;
|
|
199
|
-
for (const configPath of possibleConfigPaths) {
|
|
200
|
-
try {
|
|
201
|
-
// Check if file exists first
|
|
202
|
-
await fs.access(configPath);
|
|
203
|
-
// Use dynamic import with file:// protocol for better compatibility
|
|
204
|
-
const fileUrl = `file://${configPath}`;
|
|
205
|
-
configModule = await import(fileUrl);
|
|
206
|
-
// foundConfigPath = configPath;
|
|
207
|
-
logVerbose(` ✅ Found config file: ${configPath}`);
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
// Continue trying next path
|
|
212
|
-
continue;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
if (!configModule) {
|
|
216
|
-
throw new Error("Config file not found");
|
|
217
|
-
}
|
|
218
|
-
const config = configModule.default || configModule;
|
|
219
|
-
// Read SSR configuration
|
|
220
|
-
isSSR = config.ssr !== false;
|
|
221
|
-
// Read prerender routes
|
|
222
|
-
if (config.prerender) {
|
|
223
|
-
const result = await resolvePrerenderRoutes(config.prerender);
|
|
224
|
-
prerenderRoutes = result.routes;
|
|
225
|
-
prerenderEnabled = result.enableAll;
|
|
226
|
-
if (prerenderEnabled) {
|
|
227
|
-
log(` Prerender mode: All routes`);
|
|
228
|
-
}
|
|
229
|
-
else if (prerenderRoutes.length > 0) {
|
|
230
|
-
log(` Prerender routes: ${prerenderRoutes.join(", ")}`);
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
log("");
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
logVerbose(` ⚠️ Unable to read react-router.config file: ${error}`);
|
|
237
|
-
log(" ⚠️ Unable to read react-router.config.ts, using default configuration");
|
|
238
|
-
log("");
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Clean output directory
|
|
243
|
-
*/
|
|
244
|
-
async function cleanOutputDirectory() {
|
|
245
|
-
const outputPath = path.join(projectRoot, outputDir);
|
|
246
|
-
const assetsPath = path.join(outputPath, "assets");
|
|
247
|
-
const serverHandlerPath = path.join(outputPath, "server-handler");
|
|
248
|
-
const metaPath = path.join(outputPath, "meta.json");
|
|
249
|
-
try {
|
|
250
|
-
// Clean assets and server-handler directories, as well as meta.json file
|
|
251
|
-
await fs.rm(assetsPath, { recursive: true, force: true });
|
|
252
|
-
await fs.rm(serverHandlerPath, { recursive: true, force: true });
|
|
253
|
-
await fs.rm(metaPath, { force: true });
|
|
254
|
-
logVerbose("🧹 Cleaned directories: assets, server-handler, meta.json");
|
|
255
|
-
}
|
|
256
|
-
catch (error) {
|
|
257
|
-
// Directory might not exist, ignore error
|
|
258
|
-
}
|
|
259
|
-
// Ensure output directory exists
|
|
260
|
-
await fs.mkdir(outputPath, { recursive: true });
|
|
261
|
-
logVerbose("📁 Ensured output directory exists:", outputDir);
|
|
262
|
-
logVerbose("");
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Copy static assets
|
|
266
|
-
*/
|
|
267
|
-
async function copyStaticAssets() {
|
|
268
|
-
// log("📦 Copying static assets...");
|
|
269
|
-
const targetPath = path.join(projectRoot, outputDir, "assets");
|
|
270
|
-
// Try multiple possible build artifact paths
|
|
271
|
-
const possibleSourcePaths = [
|
|
272
|
-
path.join(projectRoot, "build/client"),
|
|
273
|
-
path.join(projectRoot, "build-csr/client"),
|
|
274
|
-
path.join(projectRoot, "build-ssr/client"),
|
|
275
|
-
];
|
|
276
|
-
let sourcePath = null;
|
|
277
|
-
// Find existing build artifact directory
|
|
278
|
-
for (const possiblePath of possibleSourcePaths) {
|
|
279
|
-
try {
|
|
280
|
-
await fs.access(possiblePath);
|
|
281
|
-
sourcePath = possiblePath;
|
|
282
|
-
logVerbose(` Found build artifacts: ${possiblePath}`);
|
|
283
|
-
break;
|
|
284
|
-
}
|
|
285
|
-
catch (error) {
|
|
286
|
-
// Continue trying next path
|
|
287
|
-
continue;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
if (!sourcePath) {
|
|
291
|
-
throw new Error(`Build artifact directory not found, please run build command first`);
|
|
292
|
-
}
|
|
293
|
-
try {
|
|
294
|
-
// Recursively copy directory
|
|
295
|
-
await fs.cp(sourcePath, targetPath, { recursive: true });
|
|
296
|
-
// Count files
|
|
297
|
-
// const fileCount = await countFiles(targetPath);
|
|
298
|
-
// log(` ✅ Copied ${fileCount} files to ${outputDir}/assets`);
|
|
299
|
-
}
|
|
300
|
-
catch (error) {
|
|
301
|
-
throw new Error(`Failed to copy static assets: ${error}`);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
/**
|
|
305
|
-
* Bundle server code
|
|
306
|
-
*/
|
|
307
|
-
async function bundleServerCode() {
|
|
308
|
-
// log("🔨 Bundling server code...");
|
|
309
|
-
const serverEntryPath = path.join(projectRoot, "build/server/index.js");
|
|
310
|
-
const outputPath = path.join(projectRoot, outputDir, "server-handler");
|
|
311
|
-
const outputFile = path.join(outputPath, "handler.js");
|
|
312
|
-
try {
|
|
313
|
-
// Check if entry file exists
|
|
314
|
-
await fs.access(serverEntryPath);
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
log(" ⚠️ build/server/index.js does not exist, skipping server bundling");
|
|
318
|
-
log(" Hint: Ensure React Router is configured for SSR mode and built correctly");
|
|
319
|
-
log("");
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
try {
|
|
323
|
-
// Create output directory
|
|
324
|
-
await fs.mkdir(outputPath, { recursive: true });
|
|
325
|
-
// Create server wrapper file
|
|
326
|
-
const wrapperPath = await createServerWrapper(serverEntryPath);
|
|
327
|
-
// Bundle using esbuild
|
|
328
|
-
await esbuild.build({
|
|
329
|
-
entryPoints: [wrapperPath],
|
|
330
|
-
bundle: true,
|
|
331
|
-
platform: "node",
|
|
332
|
-
target: "node18",
|
|
333
|
-
format: "esm",
|
|
334
|
-
outfile: outputFile,
|
|
335
|
-
minify: false,
|
|
336
|
-
treeShaking: true,
|
|
337
|
-
external: ["node:*"],
|
|
338
|
-
metafile: true,
|
|
339
|
-
logLevel: "warning",
|
|
340
|
-
absWorkingDir: projectRoot,
|
|
341
|
-
banner: {
|
|
342
|
-
js: `import { createRequire } from 'node:module';
|
|
343
|
-
const require = createRequire(import.meta.url);
|
|
344
|
-
const __filename = new URL('', import.meta.url).pathname;
|
|
345
|
-
const __dirname = new URL('.', import.meta.url).pathname;`,
|
|
346
|
-
},
|
|
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,
|
|
347
86
|
});
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
// log(` ✅ Server code bundled`);
|
|
354
|
-
// log(` File: ${outputDir}/server-handler/index.mjs`);
|
|
355
|
-
// log(` Size: ${formatSize(outputInfo.bytes)}`);
|
|
356
|
-
// log("");
|
|
357
|
-
}
|
|
358
|
-
catch (error) {
|
|
359
|
-
throw new Error(`Failed to bundle server code: ${error}`);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Create server wrapper file
|
|
364
|
-
*/
|
|
365
|
-
async function createServerWrapper(serverBuildPath) {
|
|
366
|
-
logVerbose("📝 Creating server wrapper file...");
|
|
367
|
-
// Read original build/server/index.js
|
|
368
|
-
const serverBuildContent = await fs.readFile(serverBuildPath, "utf-8");
|
|
369
|
-
const wrapperContent = `// ========== React Router Server Build ==========
|
|
370
|
-
${serverBuildContent}
|
|
371
|
-
|
|
372
|
-
// ========== HTTP Server Wrapper ==========
|
|
373
|
-
import { createRequestHandler } from "react-router";
|
|
374
|
-
|
|
375
|
-
// Get exported build configuration
|
|
376
|
-
const buildConfig = {
|
|
377
|
-
assets: serverManifest,
|
|
378
|
-
assetsBuildDirectory,
|
|
379
|
-
basename,
|
|
380
|
-
entry,
|
|
381
|
-
future,
|
|
382
|
-
isSpaMode,
|
|
383
|
-
publicPath,
|
|
384
|
-
routes,
|
|
385
|
-
routeDiscovery,
|
|
386
|
-
ssr
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
// Create React Router request listener (accepts Web Request)
|
|
390
|
-
const requestHandler = createRequestHandler(buildConfig);
|
|
391
|
-
|
|
392
|
-
/**
|
|
393
|
-
* Convert Node.js IncomingMessage to Web API Request
|
|
394
|
-
*/
|
|
395
|
-
function nodeRequestToWebRequest(nodeReq) {
|
|
396
|
-
// Build full URL
|
|
397
|
-
const protocol = nodeReq.connection.encrypted ? 'https' : 'http';
|
|
398
|
-
const host = nodeReq.headers.host || 'localhost';
|
|
399
|
-
const url = \`\${protocol}://\${host}\${nodeReq.url}\`;
|
|
400
|
-
|
|
401
|
-
// Convert headers
|
|
402
|
-
const headers = new Headers();
|
|
403
|
-
for (const [key, value] of Object.entries(nodeReq.headers)) {
|
|
404
|
-
if (value) {
|
|
405
|
-
if (Array.isArray(value)) {
|
|
406
|
-
value.forEach(v => headers.append(key, v));
|
|
407
|
-
} else {
|
|
408
|
-
headers.set(key, value);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
// Build request init options
|
|
414
|
-
const init = {
|
|
415
|
-
method: nodeReq.method,
|
|
416
|
-
headers: headers,
|
|
417
|
-
};
|
|
418
|
-
|
|
419
|
-
// Add body for non-GET/HEAD requests
|
|
420
|
-
if (nodeReq.method !== 'GET' && nodeReq.method !== 'HEAD') {
|
|
421
|
-
init.body = nodeReq;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
return new Request(url, init);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
/**
|
|
428
|
-
* Node.js request handler wrapper
|
|
429
|
-
* Converts first argument (Node.js req) to Web Request, other arguments are passed through
|
|
430
|
-
*/
|
|
431
|
-
async function nodeRequestHandler(nodeReq, ...args) {
|
|
432
|
-
// Convert Node.js request to Web Request
|
|
433
|
-
const webRequest = nodeRequestToWebRequest(nodeReq);
|
|
434
|
-
|
|
435
|
-
// Call React Router request handler with Web Request and other arguments
|
|
436
|
-
return requestHandler(webRequest, ...args);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
// Export Node.js request handler as default
|
|
440
|
-
export default nodeRequestHandler;
|
|
441
|
-
`;
|
|
442
|
-
const tempPath = path.join(projectRoot, "server-wrapper.temp.js");
|
|
443
|
-
await fs.writeFile(tempPath, wrapperContent);
|
|
444
|
-
logVerbose(" ✅ Server wrapper file created");
|
|
445
|
-
return tempPath;
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Generate meta.json
|
|
449
|
-
*/
|
|
450
|
-
async function generateMetaJson() {
|
|
451
|
-
// log("📄 Generating meta.json...");
|
|
452
|
-
try {
|
|
453
|
-
// Read route configuration (get serverManifest from build artifacts)
|
|
454
|
-
const manifest = await parseRoutes();
|
|
455
|
-
// Generate route list (intelligently determine rendering mode for each route)
|
|
456
|
-
const frameworkRoutes = generateRouteList(manifest);
|
|
457
|
-
// log("frameworkRoutes", frameworkRoutes);
|
|
458
|
-
// Build meta configuration
|
|
459
|
-
const metaConfig = {
|
|
460
|
-
conf: {
|
|
461
|
-
headers: [],
|
|
462
|
-
redirects: [],
|
|
463
|
-
rewrites: [],
|
|
464
|
-
caches: [],
|
|
465
|
-
has404: false,
|
|
466
|
-
ssr404: true,
|
|
467
|
-
},
|
|
468
|
-
has404: false,
|
|
469
|
-
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,
|
|
470
92
|
};
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
// log(` ✅ meta.json generated`);
|
|
482
|
-
// log(` Route count: ${frameworkRoutes.length}`);
|
|
483
|
-
// log("");
|
|
484
|
-
}
|
|
485
|
-
catch (error) {
|
|
486
|
-
throw new Error(`Failed to generate meta.json: ${error}`);
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Parse route configuration - unified reading from client manifest file
|
|
491
|
-
* Both SSR and CSR modes generate client manifest files
|
|
492
|
-
* This allows getting complete meta information for each route (hasLoader, hasClientLoader, etc.)
|
|
493
|
-
*/
|
|
494
|
-
async function parseRoutes() {
|
|
495
|
-
logVerbose(" 🔍 Looking for manifest file...");
|
|
496
|
-
// Possible build artifact paths (sorted by priority)
|
|
497
|
-
const possibleBuildPaths = [path.join(projectRoot, "build/client")];
|
|
498
|
-
for (const buildPath of possibleBuildPaths) {
|
|
499
|
-
try {
|
|
500
|
-
// Check if directory exists
|
|
501
|
-
await fs.access(buildPath);
|
|
502
|
-
// Search for manifest files in current directory and assets subdirectory
|
|
503
|
-
const searchPaths = [buildPath, path.join(buildPath, "assets")];
|
|
504
|
-
for (const searchPath of searchPaths) {
|
|
505
|
-
try {
|
|
506
|
-
const files = await fs.readdir(searchPath);
|
|
507
|
-
// Look for manifest-*.js files
|
|
508
|
-
const manifestFile = files.find((f) => f.startsWith("manifest-") && f.endsWith(".js"));
|
|
509
|
-
if (manifestFile) {
|
|
510
|
-
const manifestPath = path.join(searchPath, manifestFile);
|
|
511
|
-
const manifest = await parseManifestFile(manifestPath);
|
|
512
|
-
if (manifest) {
|
|
513
|
-
logVerbose(` ✅ Successfully read manifest: ${manifestPath}`);
|
|
514
|
-
return manifest;
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
catch (error) {
|
|
519
|
-
// Continue trying next search path
|
|
520
|
-
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 = await loadServerBuildRoutes(serverEntry, logger);
|
|
521
103
|
}
|
|
522
104
|
}
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
*/
|
|
535
|
-
async function parseManifestFile(manifestPath) {
|
|
536
|
-
try {
|
|
537
|
-
const manifestContent = await fs.readFile(manifestPath, "utf-8");
|
|
538
|
-
// Parse manifest content (format: window.__reactRouterManifest={...})
|
|
539
|
-
const match = manifestContent.match(/window\.__reactRouterManifest\s*=\s*({.*?});?\s*$/s);
|
|
540
|
-
if (match) {
|
|
541
|
-
const manifestData = JSON.parse(match[1]);
|
|
542
|
-
// Validate manifest data structure
|
|
543
|
-
if (manifestData.routes && manifestData.version) {
|
|
544
|
-
return {
|
|
545
|
-
routes: manifestData.routes,
|
|
546
|
-
version: manifestData.version,
|
|
547
|
-
};
|
|
105
|
+
if (state.serverBuild?.routes) {
|
|
106
|
+
const routes = flattenRouteTree(state.serverBuild.routes, {
|
|
107
|
+
isSSR: state.isSSR,
|
|
108
|
+
isSpaMode: state.isSpaMode,
|
|
109
|
+
onRouteProcessed: generateDataRoute,
|
|
110
|
+
});
|
|
111
|
+
if (state.isSSR && !state.isSpaMode) {
|
|
112
|
+
routes.push({ path: "/__manifest", isStatic: false });
|
|
113
|
+
}
|
|
114
|
+
logger.verbose(`Generated ${routes.length} routes from server build`);
|
|
115
|
+
return routes;
|
|
548
116
|
}
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
return routeList;
|
|
566
|
-
}
|
|
567
|
-
// Iterate through all routes
|
|
568
|
-
for (const [routeId, routeInfo] of Object.entries(manifest.routes)) {
|
|
569
|
-
// Skip root route
|
|
570
|
-
if (routeId === "root")
|
|
571
|
-
continue;
|
|
572
|
-
// Calculate route path
|
|
573
|
-
const routePath = calculateRoutePath(routeInfo);
|
|
574
|
-
// Determine if it's a prerender route
|
|
575
|
-
// 1. If prerender: true, all routes are prerendered
|
|
576
|
-
// 2. Otherwise check if route is in prerender list
|
|
577
|
-
const isPrerender = prerenderEnabled || prerenderRoutes.includes(routePath);
|
|
578
|
-
// Determine rendering mode
|
|
579
|
-
const renderMode = determineRenderMode(routeInfo, isPrerender);
|
|
580
|
-
logVerbose(` Route: ${routePath} -> ${renderMode}`);
|
|
581
|
-
// Add main route
|
|
582
|
-
routeList.push({
|
|
583
|
-
path: routePath,
|
|
584
|
-
isStatic: !isSSR, // All routes are static in CSR mode
|
|
585
|
-
srcRoute: routePath,
|
|
586
|
-
});
|
|
587
|
-
// SSR routes need .data routes (for getting data during client navigation)
|
|
588
|
-
if (renderMode === "ssr" && routePath && routePath.trim() !== "") {
|
|
589
|
-
// Root route's .data route should be /_root.data
|
|
590
|
-
const dataPath = routePath === "/" ? "/_root.data" : `${routePath}.data`;
|
|
591
|
-
routeList.push({
|
|
592
|
-
path: dataPath,
|
|
593
|
-
isStatic: false,
|
|
117
|
+
logger.warn("Cannot get routes from server build, using default");
|
|
118
|
+
return [{ path: "/", isStatic: state.isSpaMode || !state.isSSR, srcRoute: "/" }];
|
|
119
|
+
},
|
|
120
|
+
async generateMeta(_context, routes) {
|
|
121
|
+
const metaRoutes = convertRoutesToMetaFormat(routes);
|
|
122
|
+
const meta = createDefaultMeta(metaRoutes, { isSSR: state.isSSR });
|
|
123
|
+
meta.conf.ssr404 = state.isSSR && !state.isSpaMode;
|
|
124
|
+
return meta;
|
|
125
|
+
},
|
|
126
|
+
generateServerWrapper(_context, config) {
|
|
127
|
+
const resolved = resolvePreset(REACT_ROUTER_SERVER_PRESET);
|
|
128
|
+
return generateServerWrapperCode({
|
|
129
|
+
serverEntryPath: config.serverEntryPath,
|
|
130
|
+
imports: resolved.imports,
|
|
131
|
+
handlerSetup: resolved.setup,
|
|
132
|
+
handlerCall: resolved.invoke,
|
|
594
133
|
});
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
return routeList;
|
|
605
|
-
}
|
|
606
|
-
/**
|
|
607
|
-
* Determine route rendering mode
|
|
608
|
-
* @returns "ssr" | "csr" | "static"
|
|
609
|
-
*/
|
|
610
|
-
function determineRenderMode(routeInfo, isPrerender) {
|
|
611
|
-
// 1. Prerender route -> static
|
|
612
|
-
if (isPrerender) {
|
|
613
|
-
return "static";
|
|
614
|
-
}
|
|
615
|
-
// 2. Only clientLoader, no loader -> CSR
|
|
616
|
-
if (routeInfo.hasClientLoader && !routeInfo.hasLoader) {
|
|
617
|
-
return "csr";
|
|
618
|
-
}
|
|
619
|
-
// 3. Has loader (regardless of clientLoader) -> SSR
|
|
620
|
-
if (routeInfo.hasLoader) {
|
|
621
|
-
return "ssr";
|
|
622
|
-
}
|
|
623
|
-
// 4. Neither loader nor clientLoader, default to static
|
|
624
|
-
return "static";
|
|
625
|
-
}
|
|
626
|
-
/**
|
|
627
|
-
* Calculate complete route path
|
|
628
|
-
*/
|
|
629
|
-
function calculateRoutePath(routeInfo) {
|
|
630
|
-
// Handle index route
|
|
631
|
-
if (routeInfo.index) {
|
|
632
|
-
return "/";
|
|
633
|
-
}
|
|
634
|
-
// Handle regular route
|
|
635
|
-
let routePath;
|
|
636
|
-
if (routeInfo.path) {
|
|
637
|
-
routePath = routeInfo.path.startsWith("/")
|
|
638
|
-
? routeInfo.path
|
|
639
|
-
: `/${routeInfo.path}`;
|
|
640
|
-
}
|
|
641
|
-
else {
|
|
642
|
-
// Infer path from id (fallback)
|
|
643
|
-
const pathSegment = routeInfo.id.replace(/^routes\//, "");
|
|
644
|
-
if (pathSegment === "home" || pathSegment === "index") {
|
|
645
|
-
return "/";
|
|
646
|
-
}
|
|
647
|
-
routePath = `/${pathSegment.replace(/Page$/, "").toLowerCase()}`;
|
|
648
|
-
}
|
|
649
|
-
// Convert paths containing * to regex format (without parentheses)
|
|
650
|
-
if (routePath.includes("*")) {
|
|
651
|
-
// Escape special regex characters except *
|
|
652
|
-
routePath = routePath.replace(/[.+?^${}|[\]\\]/g, "\\$&");
|
|
653
|
-
// Handle trailing /* - can match empty or any path
|
|
654
|
-
// /docs/* should match /docs, /docs/, /docs/anything
|
|
655
|
-
// Using /.* with optional slash: make the / before * optional using /?.*
|
|
656
|
-
if (routePath.endsWith("/*")) {
|
|
657
|
-
routePath = routePath.slice(0, -2) + "/?.*";
|
|
658
|
-
}
|
|
659
|
-
else {
|
|
660
|
-
// Replace other * with .*
|
|
661
|
-
routePath = routePath.replace(/\*/g, ".*");
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
return routePath;
|
|
665
|
-
}
|
|
666
|
-
/**
|
|
667
|
-
* Count files
|
|
668
|
-
*/
|
|
669
|
-
// async function countFiles(dir: string): Promise<number> {
|
|
670
|
-
// let count = 0;
|
|
671
|
-
// try {
|
|
672
|
-
// const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
673
|
-
// for (const entry of entries) {
|
|
674
|
-
// if (entry.isDirectory()) {
|
|
675
|
-
// count += await countFiles(path.join(dir, entry.name));
|
|
676
|
-
// } else {
|
|
677
|
-
// count++;
|
|
678
|
-
// }
|
|
679
|
-
// }
|
|
680
|
-
// } catch (error) {
|
|
681
|
-
// // Ignore errors
|
|
682
|
-
// }
|
|
683
|
-
// return count;
|
|
684
|
-
// }
|
|
685
|
-
/**
|
|
686
|
-
* Show usage instructions
|
|
687
|
-
*/
|
|
688
|
-
// function showUsageInstructions() {
|
|
689
|
-
// log("\n📖 Usage Instructions:");
|
|
690
|
-
// log(` Output directory: ${outputDir}/`);
|
|
691
|
-
// log(` ├── assets/ # Static assets`);
|
|
692
|
-
// if (isSSR) {
|
|
693
|
-
// log(` ├── server-handler/ # Server code`);
|
|
694
|
-
// log(` │ └── index.mjs`);
|
|
695
|
-
// }
|
|
696
|
-
// log(` └── meta.json # Route metadata`);
|
|
697
|
-
// log("");
|
|
698
|
-
// if (isSSR) {
|
|
699
|
-
// log(" Start server:");
|
|
700
|
-
// log(` node ${outputDir}/server-handler/index.mjs`);
|
|
701
|
-
// log("");
|
|
702
|
-
// }
|
|
703
|
-
// log(" Deploy to EdgeOne:");
|
|
704
|
-
// log(` 1. Upload ${outputDir}/ directory to EdgeOne platform`);
|
|
705
|
-
// log(` 2. Configure static asset path as ${outputDir}/assets`);
|
|
706
|
-
// if (isSSR) {
|
|
707
|
-
// log(
|
|
708
|
-
// ` 3. Configure server entry as ${outputDir}/server-handler/index.mjs`
|
|
709
|
-
// );
|
|
710
|
-
// }
|
|
711
|
-
// log("");
|
|
712
|
-
// }
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
export function edgeoneReactRouterAdapter(options = {}) {
|
|
139
|
+
return createCoreAdapter({
|
|
140
|
+
...options,
|
|
141
|
+
adapter: createReactRouterAdapter(options),
|
|
142
|
+
});
|
|
713
143
|
}
|
|
714
|
-
export default
|
|
144
|
+
export default edgeoneReactRouterAdapter;
|
|
145
|
+
export { edgeoneReactRouterAdapter as edgeoneAdapter };
|
|
715
146
|
//# 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.0
|
|
4
|
-
"description": "EdgeOne adapter
|
|
3
|
+
"version": "1.1.0",
|
|
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
|
+
"@chuckcchen/vite-plugin": "^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
|