@edgeone/vite-core 1.0.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/bundler.d.ts +13 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +101 -0
- package/dist/bundler.js.map +1 -0
- package/dist/core.d.ts +11 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +330 -0
- package/dist/core.js.map +1 -0
- package/dist/factory/detectors.d.ts +13 -0
- package/dist/factory/detectors.d.ts.map +1 -0
- package/dist/factory/detectors.js +46 -0
- package/dist/factory/detectors.js.map +1 -0
- package/dist/factory/hooks.d.ts +29 -0
- package/dist/factory/hooks.d.ts.map +1 -0
- package/dist/factory/hooks.js +158 -0
- package/dist/factory/hooks.js.map +1 -0
- package/dist/factory/index.d.ts +24 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/factory/index.js +47 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/factory/presets.d.ts +27 -0
- package/dist/factory/presets.d.ts.map +1 -0
- package/dist/factory/presets.js +186 -0
- package/dist/factory/presets.js.map +1 -0
- package/dist/factory.d.ts +183 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +482 -0
- package/dist/factory.js.map +1 -0
- package/dist/helpers.d.ts +53 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +177 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/route/index.d.ts +7 -0
- package/dist/route/index.d.ts.map +1 -0
- package/dist/route/index.js +6 -0
- package/dist/route/index.js.map +1 -0
- package/dist/route/parser.d.ts +18 -0
- package/dist/route/parser.d.ts.map +1 -0
- package/dist/route/parser.js +187 -0
- package/dist/route/parser.js.map +1 -0
- package/dist/route/regex.d.ts +31 -0
- package/dist/route/regex.d.ts.map +1 -0
- package/dist/route/regex.js +140 -0
- package/dist/route/regex.js.map +1 -0
- package/dist/route/regex.test.d.ts +7 -0
- package/dist/route/regex.test.d.ts.map +1 -0
- package/dist/route/regex.test.js +662 -0
- package/dist/route/regex.test.js.map +1 -0
- package/dist/route/types.d.ts +58 -0
- package/dist/route/types.d.ts.map +1 -0
- package/dist/route/types.js +5 -0
- package/dist/route/types.js.map +1 -0
- package/dist/route-parser.d.ts +8 -0
- package/dist/route-parser.d.ts.map +1 -0
- package/dist/route-parser.js +8 -0
- package/dist/route-parser.js.map +1 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +40 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +242 -0
- package/dist/utils.js.map +1 -0
- package/dist/vite-config-parser.d.ts +62 -0
- package/dist/vite-config-parser.d.ts.map +1 -0
- package/dist/vite-config-parser.js +229 -0
- package/dist/vite-config-parser.js.map +1 -0
- package/package.json +51 -0
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helper functions for EdgeOne adapters
|
|
3
|
+
*/
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { pathToFileURL } from "url";
|
|
6
|
+
import { pathExists, readFile } from "./utils.js";
|
|
7
|
+
/** Detect config file from candidate list */
|
|
8
|
+
export async function detectConfigFile(projectRoot, patterns) {
|
|
9
|
+
for (const pattern of patterns) {
|
|
10
|
+
const fullPath = path.join(projectRoot, pattern);
|
|
11
|
+
if (await pathExists(fullPath)) {
|
|
12
|
+
return fullPath;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
/** Dynamically import config file */
|
|
18
|
+
export async function loadConfigFile(configPath) {
|
|
19
|
+
try {
|
|
20
|
+
const fileUrl = pathToFileURL(configPath).href;
|
|
21
|
+
const module = await import(`${fileUrl}?t=${Date.now()}`);
|
|
22
|
+
return module.default;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Create default meta configuration */
|
|
29
|
+
export function createDefaultMeta(routes, options = {}) {
|
|
30
|
+
const { isSSR = false, has404 = false } = options;
|
|
31
|
+
return {
|
|
32
|
+
conf: {
|
|
33
|
+
headers: [],
|
|
34
|
+
redirects: [],
|
|
35
|
+
rewrites: [],
|
|
36
|
+
caches: [],
|
|
37
|
+
has404,
|
|
38
|
+
ssr404: isSSR && !has404,
|
|
39
|
+
},
|
|
40
|
+
has404,
|
|
41
|
+
frameworkRoutes: routes,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** Node.js IncomingMessage to Web Request converter code */
|
|
45
|
+
export const NODE_REQUEST_CONVERTER_CODE = `
|
|
46
|
+
function nodeRequestToWebRequest(nodeReq) {
|
|
47
|
+
const protocol = nodeReq.connection?.encrypted ? 'https' : 'http';
|
|
48
|
+
const host = nodeReq.headers.host || 'localhost';
|
|
49
|
+
const url = \`\${protocol}://\${host}\${nodeReq.url}\`;
|
|
50
|
+
|
|
51
|
+
// Convert request headers
|
|
52
|
+
const headers = new Headers();
|
|
53
|
+
for (const [key, value] of Object.entries(nodeReq.headers)) {
|
|
54
|
+
if (value) {
|
|
55
|
+
if (Array.isArray(value)) {
|
|
56
|
+
value.forEach(v => headers.append(key, v));
|
|
57
|
+
} else {
|
|
58
|
+
headers.set(key, value);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const init = {
|
|
64
|
+
method: nodeReq.method,
|
|
65
|
+
headers: headers,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// Add request body for non-GET/HEAD requests
|
|
69
|
+
if (nodeReq.method !== 'GET' && nodeReq.method !== 'HEAD') {
|
|
70
|
+
init.body = nodeReq;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return new Request(url, init);
|
|
74
|
+
}
|
|
75
|
+
`.trim();
|
|
76
|
+
/** Generate server wrapper code */
|
|
77
|
+
export async function generateServerWrapperCode(options) {
|
|
78
|
+
const { serverEntryPath, handlerSetup = "", handlerCall, imports = "", needsNodeRequestConversion = true, mode = "inline", additionalExports = [], } = options;
|
|
79
|
+
const parts = [];
|
|
80
|
+
if (mode === "inline") {
|
|
81
|
+
// Inline mode: read and embed server entry content
|
|
82
|
+
const serverBuildContent = await readFile(serverEntryPath);
|
|
83
|
+
parts.push(`// Server build content`);
|
|
84
|
+
parts.push(serverBuildContent);
|
|
85
|
+
parts.push(``);
|
|
86
|
+
parts.push(`// HTTP server wrapper`);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
// Import mode: use import statement
|
|
90
|
+
parts.push(`// TanStack Start Server Wrapper for EdgeOne`);
|
|
91
|
+
parts.push(`import server from "${serverEntryPath}";`);
|
|
92
|
+
parts.push(``);
|
|
93
|
+
}
|
|
94
|
+
// Add additional imports
|
|
95
|
+
if (imports) {
|
|
96
|
+
parts.push(imports);
|
|
97
|
+
parts.push(``);
|
|
98
|
+
}
|
|
99
|
+
// Add handler setup code
|
|
100
|
+
if (handlerSetup) {
|
|
101
|
+
parts.push(handlerSetup);
|
|
102
|
+
parts.push(``);
|
|
103
|
+
}
|
|
104
|
+
// Add request conversion function
|
|
105
|
+
if (needsNodeRequestConversion) {
|
|
106
|
+
parts.push(NODE_REQUEST_CONVERTER_CODE);
|
|
107
|
+
parts.push(``);
|
|
108
|
+
}
|
|
109
|
+
// Add request handler
|
|
110
|
+
parts.push(`
|
|
111
|
+
async function nodeRequestHandler(nodeReq, ...args) {
|
|
112
|
+
const webRequest = nodeRequestToWebRequest(nodeReq);
|
|
113
|
+
return ${handlerCall};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export default nodeRequestHandler;`.trim());
|
|
117
|
+
// Add additional exports for import mode
|
|
118
|
+
if (mode === "import" && additionalExports.length > 0) {
|
|
119
|
+
parts.push(`\nexport { ${additionalExports.join(", ")} };`);
|
|
120
|
+
}
|
|
121
|
+
return parts.join("\n");
|
|
122
|
+
}
|
|
123
|
+
/** Normalize route path */
|
|
124
|
+
export function normalizeRoutePath(routePath) {
|
|
125
|
+
let normalized = routePath.replace(/\/+/g, "/");
|
|
126
|
+
if (!normalized.startsWith("/")) {
|
|
127
|
+
normalized = "/" + normalized;
|
|
128
|
+
}
|
|
129
|
+
if (normalized !== "/" && normalized.endsWith("/")) {
|
|
130
|
+
normalized = normalized.slice(0, -1);
|
|
131
|
+
}
|
|
132
|
+
return normalized;
|
|
133
|
+
}
|
|
134
|
+
/** Convert route path to regex format */
|
|
135
|
+
export function routePathToRegex(routePath) {
|
|
136
|
+
let result = normalizeRoutePath(routePath);
|
|
137
|
+
if (result.includes("*")) {
|
|
138
|
+
result = result.replace(/[.+?^${}|[\]\\]/g, "\\$&");
|
|
139
|
+
if (result.endsWith("/*")) {
|
|
140
|
+
result = result.slice(0, -2) + "/?.*";
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
result = result.replace(/\*/g, ".*");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return result;
|
|
147
|
+
}
|
|
148
|
+
/** Detect server entry file */
|
|
149
|
+
export async function detectServerEntry(serverDir, candidates = ["index.js", "index.mjs", "entry.js", "main.js"]) {
|
|
150
|
+
for (const candidate of candidates) {
|
|
151
|
+
const entryPath = path.join(serverDir, candidate);
|
|
152
|
+
if (await pathExists(entryPath)) {
|
|
153
|
+
return entryPath;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
/** Detect build directory */
|
|
159
|
+
export async function detectBuildDir(projectRoot, candidates) {
|
|
160
|
+
for (const candidate of candidates) {
|
|
161
|
+
const dirPath = path.join(projectRoot, candidate);
|
|
162
|
+
if (await pathExists(dirPath)) {
|
|
163
|
+
return dirPath;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
/** Log build artifacts info */
|
|
169
|
+
export function logBuildArtifacts(logger, adapterName, artifacts) {
|
|
170
|
+
logger.verbose(`${adapterName} build artifacts:`);
|
|
171
|
+
logger.verbose(` Client: ${artifacts.clientDir || "not found"}`);
|
|
172
|
+
logger.verbose(` Server: ${artifacts.serverDir || "not found"}`);
|
|
173
|
+
if (artifacts.serverEntry) {
|
|
174
|
+
logger.verbose(` Server entry: ${artifacts.serverEntry}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElD,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB,EACnB,QAAkB;IAElB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,qCAAqC;AACrC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,OAAO,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC,OAAY,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,iBAAiB,CAC/B,MAAmB,EACnB,UAGI,EAAE;IAEN,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAElD,OAAO;QACL,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,MAAM;YACN,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM;SACzB;QACD,MAAM;QACN,eAAe,EAAE,MAAM;KACxB,CAAC;AACJ,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,MAAM,2BAA2B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B1C,CAAC,IAAI,EAAE,CAAC;AAwBT,mCAAmC;AACnC,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAsC;IAEtC,MAAM,EACJ,eAAe,EACf,YAAY,GAAG,EAAE,EACjB,WAAW,EACX,OAAO,GAAG,EAAE,EACZ,0BAA0B,GAAG,IAAI,EACjC,IAAI,GAAG,QAAQ,EACf,iBAAiB,GAAG,EAAE,GACvB,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,mDAAmD;QACnD,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,oCAAoC;QACpC,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,uBAAuB,eAAe,IAAI,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,yBAAyB;IACzB,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,yBAAyB;IACzB,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,kCAAkC;IAClC,IAAI,0BAA0B,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,IAAI,CAAC;;;WAGF,WAAW;;;mCAGa,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1C,yCAAyC;IACzC,IAAI,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,cAAc,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,IAAI,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEhD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,UAAU,GAAG,GAAG,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,IAAI,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,aAAuB,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC;IAEvE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB,EACnB,UAAoB;IAEpB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,WAAmB,EACnB,SAIC;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,mBAAmB,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,CAAC,aAAa,SAAS,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,OAAO,CAAC,aAAa,SAAS,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,mBAAmB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EdgeOne Vite Plugin Adapter - Core exports
|
|
3
|
+
*/
|
|
4
|
+
export { createCoreAdapter, default } from "./core.js";
|
|
5
|
+
export { bundleServerCode, createServerWrapper, cleanupWrapper, createEsmInteropPlugin, } from "./bundler.js";
|
|
6
|
+
export type { EsmInteropPluginOptions } from "./bundler.js";
|
|
7
|
+
export { ViteConfigParser, createViteConfigParser, parseViteConfig, getOutputDirFromViteConfig, getServerDirFromViteConfig, getServerEntryFromViteConfig, } from "./vite-config-parser.js";
|
|
8
|
+
export { createLogger, logBuildArtifacts, pathExists, copyDirectory, ensureDirectory, readFile, writeFile, deleteFile, listFiles, detectConfigFile, detectBuildDir, detectServerEntry, loadConfigFile, normalizeRoutePath, createDefaultMeta, NODE_REQUEST_CONVERTER_CODE, generateServerWrapperCode, } from "./utils.js";
|
|
9
|
+
export { createFrameworkAdapter, createStatefulAdapter, combineDetectors, createConfigDetector, createBuildDirDetector, createDependencyDetector, SERVER_WRAPPER_PRESETS, extendServerWrapperPresets, createServerWrapperPreset, resolvePreset, createWebHandlerPreset, createSSRRenderPreset, createAutoDetectPreset, WEB_HANDLER_EXPORTS, SSR_RENDER_EXPORTS, } from "./factory/index.js";
|
|
10
|
+
export { isDynamicRoute, routeToRegex, addRegexToRoutes, convertRoutesToMetaFormat, parseRouteTreeContent, parseRouteTreeFile, scanRoutesDirectory, scanRoutesFromDirectories, loadServerBuildRoutes, flattenRouteTree, parseRoutesFromSources, toRouteInfo, toRouteInfoArray, } from "./route/index.js";
|
|
11
|
+
export type { RouteInfo, MetaRouteInfo, MetaConfig, HeaderRule, RedirectRule, RewriteRule, CacheRule, BuildContext, Logger, BuildArtifacts, ServerWrapperConfig, ServerBundleConfig, EsbuildConfig, ServerWrapperPreset, HandlerMode, BeforeBuildHook, AfterBuildHook, BeforeBundleHook, AfterBundleHook, GenerateRoutesHook, GenerateMetaHook, GenerateServerWrapperHook, AdapterHooks, FrameworkAdapter, CoreAdapterOptions, ViteAdapterOptions, ReactRouterAdapterOptions, TanStackStartAdapterOptions, CreateAdapterPlugin, } from "./types.js";
|
|
12
|
+
export type { ServerWrapperGeneratorOptions } from "./utils.js";
|
|
13
|
+
export type { ViteConfigInfo, ViteConfigParserOptions, } from "./vite-config-parser.js";
|
|
14
|
+
export type { PresetName, BuildDirConfig, AdapterFactoryConfig, AdapterFactoryOptions, RouteSourceConfig, ExtendedPresetsResult, } from "./factory/index.js";
|
|
15
|
+
export type { RouteNode, RouteParserConfig, RouteTreeParserOptions, ServerBuildRouteSource, RouteTreeFileSource, DirectoryScanSource, RouteSource, InternalRouteInfo, FlattenRouteTreeOptions, RouteSyntax, RouteToRegexOptions, } from "./route/index.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EAEf,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,eAAe,EACf,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,MAAM,EACN,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,yBAAyB,EACzB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE,YAAY,EACV,cAAc,EACd,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EdgeOne Vite Plugin Adapter - Core exports
|
|
3
|
+
*/
|
|
4
|
+
export { createCoreAdapter, default } from "./core.js";
|
|
5
|
+
export { bundleServerCode, createServerWrapper, cleanupWrapper, createEsmInteropPlugin, } from "./bundler.js";
|
|
6
|
+
export { ViteConfigParser, createViteConfigParser, parseViteConfig,
|
|
7
|
+
// @deprecated Use ViteConfigParser instead
|
|
8
|
+
getOutputDirFromViteConfig, getServerDirFromViteConfig, getServerEntryFromViteConfig, } from "./vite-config-parser.js";
|
|
9
|
+
export { createLogger, logBuildArtifacts, pathExists, copyDirectory, ensureDirectory, readFile, writeFile, deleteFile, listFiles, detectConfigFile, detectBuildDir, detectServerEntry, loadConfigFile, normalizeRoutePath, createDefaultMeta, NODE_REQUEST_CONVERTER_CODE, generateServerWrapperCode, } from "./utils.js";
|
|
10
|
+
export { createFrameworkAdapter, createStatefulAdapter, combineDetectors, createConfigDetector, createBuildDirDetector, createDependencyDetector, SERVER_WRAPPER_PRESETS, extendServerWrapperPresets, createServerWrapperPreset, resolvePreset, createWebHandlerPreset, createSSRRenderPreset, createAutoDetectPreset, WEB_HANDLER_EXPORTS, SSR_RENDER_EXPORTS, } from "./factory/index.js";
|
|
11
|
+
export { isDynamicRoute, routeToRegex, addRegexToRoutes, convertRoutesToMetaFormat, parseRouteTreeContent, parseRouteTreeFile, scanRoutesDirectory, scanRoutesFromDirectories, loadServerBuildRoutes, flattenRouteTree, parseRoutesFromSources, toRouteInfo, toRouteInfoArray, } from "./route/index.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAItB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe;AACf,2CAA2C;AAC3C,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,eAAe,EACf,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,2BAA2B,EAC3B,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Module - Unified exports for route parsing utilities
|
|
3
|
+
*/
|
|
4
|
+
export type { RouteNode, RouteParserConfig, RouteTreeParserOptions, ServerBuildRouteSource, RouteTreeFileSource, DirectoryScanSource, RouteSource, FlattenRouteTreeOptions, InternalRouteInfo, } from "./types.js";
|
|
5
|
+
export { type RouteSyntax, type RouteToRegexOptions, isDynamicRoute, isCatchAllRoute, routeToRegex, addRegexToRoutes, convertRoutesToMetaFormat, sortRoutesByPriority, } from "./regex.js";
|
|
6
|
+
export { parseRouteTreeContent, parseRouteTreeFile, scanRoutesDirectory, scanRoutesFromDirectories, loadServerBuildRoutes, flattenRouteTree, parseRoutesFromSources, toRouteInfo, toRouteInfoArray, } from "./parser.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/route/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Module - Unified exports for route parsing utilities
|
|
3
|
+
*/
|
|
4
|
+
export { isDynamicRoute, isCatchAllRoute, routeToRegex, addRegexToRoutes, convertRoutesToMetaFormat, sortRoutesByPriority, } from "./regex.js";
|
|
5
|
+
export { parseRouteTreeContent, parseRouteTreeFile, scanRoutesDirectory, scanRoutesFromDirectories, loadServerBuildRoutes, flattenRouteTree, parseRoutesFromSources, toRouteInfo, toRouteInfoArray, } from "./parser.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/route/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,EAGL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Parser - Parse routes from various sources
|
|
3
|
+
*/
|
|
4
|
+
import type { RouteInfo, Logger } from "../types.js";
|
|
5
|
+
import type { RouteNode, RouteParserConfig, RouteTreeParserOptions, RouteSource, FlattenRouteTreeOptions, InternalRouteInfo } from "./types.js";
|
|
6
|
+
export declare function parseRouteTreeContent(content: string, options?: RouteTreeParserOptions): InternalRouteInfo[];
|
|
7
|
+
export declare function parseRouteTreeFile(projectRoot: string, candidatePaths: string[], options?: RouteTreeParserOptions, logger?: Logger): Promise<InternalRouteInfo[]>;
|
|
8
|
+
export declare function scanRoutesDirectory(dir: string, basePath?: string, config?: RouteParserConfig): Promise<InternalRouteInfo[]>;
|
|
9
|
+
export declare function scanRoutesFromDirectories(projectRoot: string, candidateDirs: string[], config?: RouteParserConfig, logger?: Logger): Promise<InternalRouteInfo[]>;
|
|
10
|
+
export declare function loadServerBuildRoutes<T = unknown>(serverEntryPath: string, logger?: Logger): Promise<T | null>;
|
|
11
|
+
export declare function flattenRouteTree(routes: Record<string, RouteNode>, options?: FlattenRouteTreeOptions): RouteInfo[];
|
|
12
|
+
export declare function parseRoutesFromSources(projectRoot: string, sources: RouteSource[], options?: {
|
|
13
|
+
isSSR?: boolean;
|
|
14
|
+
logger?: Logger;
|
|
15
|
+
}): Promise<RouteInfo[]>;
|
|
16
|
+
export declare function toRouteInfo(internal: InternalRouteInfo): RouteInfo;
|
|
17
|
+
export declare function toRouteInfoArray(internals: InternalRouteInfo[]): RouteInfo[];
|
|
18
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/route/parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAUpB,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,iBAAiB,EAAE,CA8BrB;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,GAAE,sBAA2B,EACpC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkB9B;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAY,EACtB,MAAM,GAAE,iBAAsB,GAC7B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkC9B;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,GAAE,iBAAsB,EAC9B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAY9B;AAED,wBAAsB,qBAAqB,CAAC,CAAC,GAAG,OAAO,EACrD,eAAe,EAAE,MAAM,EACvB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAUnB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACjC,OAAO,GAAE,uBAA4B,GACpC,SAAS,EAAE,CAuCb;AAiBD,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,OAAO,CAAC,SAAS,EAAE,CAAC,CA8BtB;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,SAAS,CAElE;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,EAAE,GAAG,SAAS,EAAE,CAE5E"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Parser - Parse routes from various sources
|
|
3
|
+
*/
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { pathToFileURL } from "url";
|
|
6
|
+
import { pathExists, readFile, listFiles, normalizeRoutePath } from "../utils.js";
|
|
7
|
+
const DEFAULT_PARSER_CONFIG = {
|
|
8
|
+
paramPattern: /^\$/,
|
|
9
|
+
paramReplacement: ":",
|
|
10
|
+
indexFiles: ["index"],
|
|
11
|
+
layoutFiles: ["__root", "_root", "_layout", "__layout"],
|
|
12
|
+
extensions: [".tsx", ".ts", ".jsx", ".js"],
|
|
13
|
+
};
|
|
14
|
+
export function parseRouteTreeContent(content, options = {}) {
|
|
15
|
+
const { pathPattern = /path:\s*['"]([^'"]+)['"]/g, fullPathPattern = /fullPath:\s*['"]([^'"]+)['"]/g, } = options;
|
|
16
|
+
const routes = [];
|
|
17
|
+
const seenPaths = new Set();
|
|
18
|
+
const fullPathMatches = content.matchAll(fullPathPattern);
|
|
19
|
+
for (const match of fullPathMatches) {
|
|
20
|
+
const routePath = normalizeRoutePath(match[1]);
|
|
21
|
+
if (!seenPaths.has(routePath)) {
|
|
22
|
+
seenPaths.add(routePath);
|
|
23
|
+
routes.push({ id: routePath, path: routePath, fullPath: routePath, filePath: "", isStatic: false });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (routes.length === 0) {
|
|
27
|
+
const pathMatches = content.matchAll(pathPattern);
|
|
28
|
+
for (const match of pathMatches) {
|
|
29
|
+
const routePath = normalizeRoutePath(match[1]);
|
|
30
|
+
if (!seenPaths.has(routePath)) {
|
|
31
|
+
seenPaths.add(routePath);
|
|
32
|
+
routes.push({ id: routePath, path: routePath, fullPath: routePath, filePath: "", isStatic: false });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return routes;
|
|
37
|
+
}
|
|
38
|
+
export async function parseRouteTreeFile(projectRoot, candidatePaths, options = {}, logger) {
|
|
39
|
+
for (const relativePath of candidatePaths) {
|
|
40
|
+
const fullPath = path.join(projectRoot, relativePath);
|
|
41
|
+
if (await pathExists(fullPath)) {
|
|
42
|
+
try {
|
|
43
|
+
const content = await readFile(fullPath);
|
|
44
|
+
const routes = parseRouteTreeContent(content, options);
|
|
45
|
+
if (routes.length > 0) {
|
|
46
|
+
logger?.verbose(`Parsed ${routes.length} routes from ${relativePath}`);
|
|
47
|
+
return routes;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
logger?.verbose(`Failed to parse route tree from ${relativePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
export async function scanRoutesDirectory(dir, basePath = "/", config = {}) {
|
|
59
|
+
const mergedConfig = { ...DEFAULT_PARSER_CONFIG, ...config };
|
|
60
|
+
const routes = [];
|
|
61
|
+
try {
|
|
62
|
+
const files = await listFiles(dir);
|
|
63
|
+
for (const file of files) {
|
|
64
|
+
const ext = path.extname(file);
|
|
65
|
+
if (!mergedConfig.extensions.includes(ext))
|
|
66
|
+
continue;
|
|
67
|
+
const fileName = file.replace(ext, "");
|
|
68
|
+
if (mergedConfig.layoutFiles.includes(fileName))
|
|
69
|
+
continue;
|
|
70
|
+
let routePath = fileName;
|
|
71
|
+
if (mergedConfig.indexFiles.includes(fileName))
|
|
72
|
+
routePath = "";
|
|
73
|
+
if (mergedConfig.paramPattern) {
|
|
74
|
+
routePath = routePath.replace(mergedConfig.paramPattern, mergedConfig.paramReplacement);
|
|
75
|
+
}
|
|
76
|
+
routePath = routePath.replace(/\$$/, "*");
|
|
77
|
+
const fullPath = basePath === "/" && routePath === "" ? "/" : normalizeRoutePath(`${basePath}/${routePath}`);
|
|
78
|
+
routes.push({ id: fullPath, path: routePath || "/", fullPath, filePath: path.join(dir, file), isStatic: false });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof Error && !error.message.includes("ENOENT")) {
|
|
83
|
+
console.warn(`[route-parser] Failed to scan directory ${dir}: ${error.message}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return routes;
|
|
87
|
+
}
|
|
88
|
+
export async function scanRoutesFromDirectories(projectRoot, candidateDirs, config = {}, logger) {
|
|
89
|
+
for (const relativeDir of candidateDirs) {
|
|
90
|
+
const dir = path.join(projectRoot, relativeDir);
|
|
91
|
+
if (await pathExists(dir)) {
|
|
92
|
+
const routes = await scanRoutesDirectory(dir, "/", config);
|
|
93
|
+
if (routes.length > 0) {
|
|
94
|
+
logger?.verbose(`Scanned ${routes.length} routes from ${relativeDir}`);
|
|
95
|
+
return routes;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return [];
|
|
100
|
+
}
|
|
101
|
+
export async function loadServerBuildRoutes(serverEntryPath, logger) {
|
|
102
|
+
try {
|
|
103
|
+
const fileUrl = pathToFileURL(serverEntryPath).href;
|
|
104
|
+
const serverBuild = await import(`${fileUrl}?t=${Date.now()}`);
|
|
105
|
+
logger?.verbose(`Loaded server build from ${serverEntryPath}`);
|
|
106
|
+
return serverBuild;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
logger?.verbose(`Failed to load server build: ${error}`);
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
export function flattenRouteTree(routes, options = {}) {
|
|
114
|
+
const { parentPath = "", isSSR = true, isSpaMode = false, skipRootId = "root", onRouteProcessed, isStaticRoute, } = options;
|
|
115
|
+
const routeList = [];
|
|
116
|
+
const processedPaths = new Set();
|
|
117
|
+
function processRoute(route, currentParentPath) {
|
|
118
|
+
if (route.id === skipRootId) {
|
|
119
|
+
route.children?.forEach(child => processRoute(child, currentParentPath));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const routePath = calculateRoutePath(route, currentParentPath);
|
|
123
|
+
if (processedPaths.has(routePath))
|
|
124
|
+
return;
|
|
125
|
+
processedPaths.add(routePath);
|
|
126
|
+
const isStatic = isStaticRoute
|
|
127
|
+
? isStaticRoute(route, isSSR, isSpaMode)
|
|
128
|
+
: determineIsStatic(route, isSSR, isSpaMode);
|
|
129
|
+
routeList.push({ path: routePath, isStatic, srcRoute: routePath });
|
|
130
|
+
if (onRouteProcessed) {
|
|
131
|
+
routeList.push(...onRouteProcessed(route, routePath, isStatic));
|
|
132
|
+
}
|
|
133
|
+
route.children?.forEach(child => processRoute(child, routePath));
|
|
134
|
+
}
|
|
135
|
+
Object.values(routes).forEach(route => processRoute(route, parentPath));
|
|
136
|
+
return routeList;
|
|
137
|
+
}
|
|
138
|
+
function calculateRoutePath(route, parentPath) {
|
|
139
|
+
if (route.index)
|
|
140
|
+
return parentPath || "/";
|
|
141
|
+
if (!route.path)
|
|
142
|
+
return parentPath || "/";
|
|
143
|
+
if (route.path.startsWith("/"))
|
|
144
|
+
return normalizeRoutePath(route.path);
|
|
145
|
+
const fullPath = parentPath === "/" ? `/${route.path}` : `${parentPath}/${route.path}`;
|
|
146
|
+
return normalizeRoutePath(fullPath);
|
|
147
|
+
}
|
|
148
|
+
function determineIsStatic(route, isSSR, isSpaMode) {
|
|
149
|
+
if (isSpaMode || !isSSR)
|
|
150
|
+
return true;
|
|
151
|
+
if (route.hasClientLoader && !route.hasLoader)
|
|
152
|
+
return true;
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
export async function parseRoutesFromSources(projectRoot, sources, options = {}) {
|
|
156
|
+
const { isSSR = true, logger } = options;
|
|
157
|
+
for (const source of sources) {
|
|
158
|
+
let routes = [];
|
|
159
|
+
switch (source.type) {
|
|
160
|
+
case "serverBuild": {
|
|
161
|
+
const serverBuild = await loadServerBuildRoutes(source.serverEntry, logger);
|
|
162
|
+
if (serverBuild?.routes) {
|
|
163
|
+
routes = source.transform ? source.transform(serverBuild.routes) : flattenRouteTree(serverBuild.routes, { isSSR });
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case "routeTree": {
|
|
168
|
+
routes = await parseRouteTreeFile(projectRoot, source.paths, source.parserOptions, logger);
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case "directory": {
|
|
172
|
+
routes = await scanRoutesFromDirectories(projectRoot, source.paths, source.config, logger);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (routes.length > 0)
|
|
177
|
+
return routes;
|
|
178
|
+
}
|
|
179
|
+
return [];
|
|
180
|
+
}
|
|
181
|
+
export function toRouteInfo(internal) {
|
|
182
|
+
return { path: internal.path, isStatic: internal.isStatic, srcRoute: internal.srcRoute };
|
|
183
|
+
}
|
|
184
|
+
export function toRouteInfoArray(internals) {
|
|
185
|
+
return internals.map(toRouteInfo);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/route/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route Regex - Convert dynamic routes to regular expressions
|
|
3
|
+
*/
|
|
4
|
+
import type { RouteInfo, MetaRouteInfo } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Route parameter syntax:
|
|
7
|
+
* - "colon": :param (Express/React Router)
|
|
8
|
+
* - "dollar": $param (Remix/TanStack)
|
|
9
|
+
* - "bracket": [param] (Next.js/Nuxt)
|
|
10
|
+
* - "at": @param (Vike)
|
|
11
|
+
* - "auto": auto-detect
|
|
12
|
+
*/
|
|
13
|
+
export type RouteSyntax = "colon" | "dollar" | "bracket" | "at" | "auto";
|
|
14
|
+
export interface RouteToRegexOptions {
|
|
15
|
+
syntax?: RouteSyntax;
|
|
16
|
+
trailingSlashOptional?: boolean;
|
|
17
|
+
anchored?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Check if a route path contains dynamic segments */
|
|
20
|
+
export declare function isDynamicRoute(routePath: string): boolean;
|
|
21
|
+
/** Check if a route is a catch-all route */
|
|
22
|
+
export declare function isCatchAllRoute(routePath: string): boolean;
|
|
23
|
+
/** Convert a route path to a regular expression pattern */
|
|
24
|
+
export declare function routeToRegex(routePath: string, options?: RouteToRegexOptions): string;
|
|
25
|
+
/** Sort routes by priority for correct matching order */
|
|
26
|
+
export declare function sortRoutesByPriority(routes: RouteInfo[]): RouteInfo[];
|
|
27
|
+
/** Add regex patterns to routes with dynamic segments */
|
|
28
|
+
export declare function addRegexToRoutes(routes: RouteInfo[], options?: RouteToRegexOptions): RouteInfo[];
|
|
29
|
+
/** Convert routes to simplified meta.json format */
|
|
30
|
+
export declare function convertRoutesToMetaFormat(routes: RouteInfo[], options?: RouteToRegexOptions): MetaRouteInfo[];
|
|
31
|
+
//# sourceMappingURL=regex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex.d.ts","sourceRoot":"","sources":["../../src/route/regex.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOzD;AAED,4CAA4C;AAC5C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK1D;AASD,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,MAAM,CAgCzF;AAyDD,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAMrE;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,mBAAwB,GAAG,SAAS,EAAE,CAQpG;AAED,oDAAoD;AACpD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,mBAAwB,GAAG,aAAa,EAAE,CAMjH"}
|