@solidjs/start 2.0.0-alpha.0 → 2.0.0-alpha.2
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/CHANGELOG.md +28 -0
- package/dist/client/mount.d.ts +1 -7
- package/dist/client/mount.js +1 -99
- package/dist/config/constants.js +2 -2
- package/dist/config/dev-server.js +10 -0
- package/dist/config/fs-router.js +10 -22
- package/dist/config/fs-routes/fs-watcher.js +4 -4
- package/dist/config/fs-routes/index.js +4 -6
- package/dist/config/fs-routes/router.js +10 -11
- package/dist/config/fs-routes/tree-shake.js +12 -21
- package/dist/config/index.js +42 -42
- package/dist/config/lazy.js +42 -12
- package/dist/config/manifest.js +4 -3
- package/dist/config/vite-utils.d.ts +5 -0
- package/dist/config/vite-utils.js +7 -3
- package/dist/http/index.d.ts +1 -4
- package/dist/http/index.js +3 -5
- package/dist/index.d.ts +0 -1
- package/dist/middleware/index.d.ts +5 -2
- package/dist/middleware/index.js +6 -1
- package/dist/router.jsx +2 -2
- package/dist/server/StartServer.jsx +2 -0
- package/dist/server/assets/PatchVirtualDevStyles.d.ts +4 -0
- package/dist/server/assets/PatchVirtualDevStyles.jsx +28 -0
- package/dist/server/assets/index.js +1 -1
- package/dist/server/assets/render.jsx +2 -2
- package/dist/server/collect-styles.js +9 -21
- package/dist/server/fetchEvent.spec.js +1 -1
- package/dist/server/handler.js +30 -15
- package/dist/server/index.d.ts +1 -0
- package/dist/server/manifest/dev-client-manifest.js +1 -1
- package/dist/server/manifest/dev-ssr-manifest.js +1 -1
- package/dist/server/manifest/prod-ssr-manifest.js +7 -12
- package/dist/server/routes.js +3 -3
- package/dist/server/server-fns-runtime.js +2 -2
- package/dist/server/server-functions-handler.js +6 -11
- package/dist/server/server-runtime.js +8 -8
- package/dist/server/spa/StartServer.jsx +2 -0
- package/dist/shared/dev-overlay/CodeView.d.ts +1 -1
- package/dist/shared/dev-overlay/CodeView.jsx +23 -34
- package/dist/shared/dev-overlay/DevOverlayDialog.jsx +4 -4
- package/dist/shared/dev-overlay/get-source-map.d.ts +1 -1
- package/dist/shared/dev-overlay/get-source-map.js +5 -5
- package/dist/shared/dev-overlay/icons.d.ts +10 -10
- package/dist/shared/dev-overlay/icons.jsx +91 -91
- package/dist/shared/dev-overlay/index.jsx +1 -1
- package/dist/shared/lazy.js +4 -2
- package/env.d.ts +9 -0
- package/package.json +5 -4
- package/scripts/build.js +3 -3
- package/scripts/validate-imports.js +8 -8
- package/src/client/mount.ts +1 -114
- package/src/config/constants.ts +3 -3
- package/src/config/dev-server.ts +107 -99
- package/src/config/fs-router.ts +140 -155
- package/src/config/fs-routes/fs-watcher.ts +57 -61
- package/src/config/fs-routes/index.ts +117 -119
- package/src/config/fs-routes/router.ts +12 -13
- package/src/config/fs-routes/tree-shake.ts +342 -363
- package/src/config/index.ts +42 -43
- package/src/config/lazy.ts +47 -16
- package/src/config/manifest.ts +8 -7
- package/src/config/vite-utils.ts +9 -9
- package/src/env.d.ts +10 -28
- package/src/http/index.ts +105 -142
- package/src/index.tsx +0 -12
- package/src/internal.d.ts +1 -1
- package/src/middleware/index.ts +42 -49
- package/src/router.tsx +4 -3
- package/src/server/StartServer.tsx +3 -7
- package/src/server/assets/PatchVirtualDevStyles.tsx +31 -0
- package/src/server/assets/index.ts +1 -1
- package/src/server/assets/render.tsx +6 -2
- package/src/server/collect-styles.ts +49 -73
- package/src/server/fetchEvent.spec.ts +71 -75
- package/src/server/fetchEvent.ts +17 -17
- package/src/server/handler.ts +138 -129
- package/src/server/index.tsx +13 -0
- package/src/server/manifest/client-manifest.ts +1 -1
- package/src/server/manifest/dev-client-manifest.ts +7 -5
- package/src/server/manifest/dev-ssr-manifest.ts +8 -6
- package/src/server/manifest/prod-client-manifest.ts +7 -4
- package/src/server/manifest/prod-ssr-manifest.ts +78 -94
- package/src/server/manifest/ssr-manifest.ts +4 -2
- package/src/server/routes.ts +96 -108
- package/src/server/server-fns-runtime.ts +3 -3
- package/src/server/server-functions-handler.ts +294 -319
- package/src/server/server-runtime.ts +13 -13
- package/src/server/spa/StartServer.tsx +2 -0
- package/src/server/spa/handler.ts +12 -12
- package/src/server/types.ts +46 -46
- package/src/server/util.ts +4 -4
- package/src/shared/ErrorBoundary.tsx +1 -1
- package/src/shared/HttpHeader.tsx +20 -20
- package/src/shared/HttpStatusCode.ts +14 -14
- package/src/shared/clientOnly.ts +3 -3
- package/src/shared/dev-overlay/CodeView.tsx +43 -46
- package/src/shared/dev-overlay/DevOverlayDialog.tsx +4 -4
- package/src/shared/dev-overlay/createStackFrame.ts +59 -62
- package/src/shared/dev-overlay/env.d.ts +2 -2
- package/src/shared/dev-overlay/get-source-map.ts +5 -7
- package/src/shared/dev-overlay/icons.tsx +289 -121
- package/src/shared/dev-overlay/index.tsx +1 -1
- package/src/shared/lazy.ts +4 -3
- package/src/shared/serverFunction.ts +1 -1
- package/src/virtual.d.ts +10 -10
- package/tsconfig.json +2 -2
- package/vitest.config.ts +2 -2
package/src/config/dev-server.ts
CHANGED
|
@@ -1,84 +1,92 @@
|
|
|
1
1
|
import { NodeRequest, sendNodeResponse } from "srvx/node";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
type Connect,
|
|
4
|
+
isRunnableDevEnvironment,
|
|
5
|
+
type PluginOption,
|
|
6
|
+
type ViteDevServer,
|
|
7
7
|
} from "vite";
|
|
8
8
|
import { VITE_ENVIRONMENTS } from "./constants.ts";
|
|
9
9
|
|
|
10
10
|
export function devServer(): Array<PluginOption> {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
name: "solid-start-dev-server",
|
|
14
|
+
configurePreviewServer(server) {
|
|
15
|
+
return () => {
|
|
16
|
+
server.middlewares.use(async (req, res) => {
|
|
17
|
+
res.setHeader("content-encoding", "identity");
|
|
18
|
+
const webReq = new NodeRequest({ req, res });
|
|
19
|
+
const def: {
|
|
20
|
+
default: { fetch: (req: Request) => Promise<Response> };
|
|
21
|
+
} = await import(process.cwd() + "/dist/server/entry-server.js");
|
|
22
|
+
sendNodeResponse(res, await def.default.fetch(webReq));
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
configureServer(viteDevServer) {
|
|
27
|
+
(globalThis as any).VITE_DEV_SERVER = viteDevServer;
|
|
28
|
+
return async () => {
|
|
29
|
+
if (viteDevServer.config.server.middlewareMode) return;
|
|
18
30
|
|
|
19
|
-
|
|
20
|
-
viteDevServer.environments[VITE_ENVIRONMENTS.server];
|
|
31
|
+
const serverEnv = viteDevServer.environments[VITE_ENVIRONMENTS.server];
|
|
21
32
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
// another plugin is controlling the dev server
|
|
29
|
-
if (!isRunnableDevEnvironment(serverEnv)) {
|
|
33
|
+
if (!serverEnv) throw new Error("Server environment not found");
|
|
34
|
+
if (
|
|
35
|
+
// do not check via `isFetchableDevEnvironment` since nitro does implement the `FetchableDevEnvironment` interface but not via inheritance (which this helper checks)
|
|
36
|
+
"dispatchFetch" in serverEnv
|
|
37
|
+
)
|
|
30
38
|
return;
|
|
31
|
-
|
|
39
|
+
// another plugin is controlling the dev server
|
|
40
|
+
if (!isRunnableDevEnvironment(serverEnv)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
32
43
|
|
|
33
44
|
globalThis.USING_SOLID_START_DEV_SERVER = true;
|
|
34
45
|
|
|
35
|
-
|
|
46
|
+
removeHtmlMiddlewares(viteDevServer);
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
48
|
+
viteDevServer.middlewares.use(async (req, res) => {
|
|
49
|
+
if (req.originalUrl) {
|
|
50
|
+
req.url = req.originalUrl;
|
|
51
|
+
}
|
|
52
|
+
const webReq = new NodeRequest({ req, res });
|
|
42
53
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
try {
|
|
55
|
+
const serverEntry: {
|
|
56
|
+
default: { fetch: (req: Request) => Promise<Response> };
|
|
57
|
+
} = await serverEnv.runner.import("./src/entry-server.tsx");
|
|
47
58
|
|
|
48
|
-
|
|
59
|
+
const webRes = await serverEntry.default.fetch(webReq);
|
|
49
60
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
61
|
+
return sendNodeResponse(res, webRes);
|
|
62
|
+
} catch (e: unknown) {
|
|
63
|
+
console.error(e);
|
|
64
|
+
viteDevServer.ssrFixStacktrace(e as Error);
|
|
54
65
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
),
|
|
75
|
-
);
|
|
76
|
-
}
|
|
66
|
+
if (webReq.headers.get("content-type")?.includes("application/json")) {
|
|
67
|
+
return sendNodeResponse(
|
|
68
|
+
res,
|
|
69
|
+
Response.json(
|
|
70
|
+
{
|
|
71
|
+
status: 500,
|
|
72
|
+
error: "Internal Server Error",
|
|
73
|
+
message: "An unexpected error occurred. Please try again later.",
|
|
74
|
+
timestamp: new Date().toISOString(),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
status: 500,
|
|
78
|
+
headers: {
|
|
79
|
+
"Content-Type": "application/json",
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
),
|
|
83
|
+
);
|
|
84
|
+
}
|
|
77
85
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
86
|
+
return sendNodeResponse(
|
|
87
|
+
res,
|
|
88
|
+
new Response(
|
|
89
|
+
`
|
|
82
90
|
<!DOCTYPE html>
|
|
83
91
|
<html lang="en">
|
|
84
92
|
<head>
|
|
@@ -87,26 +95,26 @@ export function devServer(): Array<PluginOption> {
|
|
|
87
95
|
<script type="module">
|
|
88
96
|
import { ErrorOverlay } from '/@vite/client'
|
|
89
97
|
document.body.appendChild(new ErrorOverlay(${JSON.stringify(
|
|
90
|
-
|
|
91
|
-
|
|
98
|
+
prepareError(req, e),
|
|
99
|
+
).replace(/</g, "\\u003c")}))
|
|
92
100
|
</script>
|
|
93
101
|
</head>
|
|
94
102
|
<body>
|
|
95
103
|
</body>
|
|
96
104
|
</html>
|
|
97
105
|
`,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
{
|
|
107
|
+
status: 500,
|
|
108
|
+
headers: { "Content-Type": "text/html" },
|
|
109
|
+
},
|
|
110
|
+
),
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
];
|
|
110
118
|
}
|
|
111
119
|
|
|
112
120
|
/**
|
|
@@ -115,21 +123,21 @@ export function devServer(): Array<PluginOption> {
|
|
|
115
123
|
* @param server
|
|
116
124
|
*/
|
|
117
125
|
function removeHtmlMiddlewares(server: ViteDevServer) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
126
|
+
const html_middlewares = [
|
|
127
|
+
"viteIndexHtmlMiddleware",
|
|
128
|
+
"vite404Middleware",
|
|
129
|
+
"viteSpaFallbackMiddleware",
|
|
130
|
+
];
|
|
131
|
+
for (let i = server.middlewares.stack.length - 1; i > 0; i--) {
|
|
132
|
+
if (
|
|
133
|
+
html_middlewares.includes(
|
|
134
|
+
// @ts-expect-error
|
|
135
|
+
server.middlewares.stack[i].handle.name,
|
|
136
|
+
)
|
|
137
|
+
) {
|
|
138
|
+
server.middlewares.stack.splice(i, 1);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
133
141
|
}
|
|
134
142
|
|
|
135
143
|
/**
|
|
@@ -139,11 +147,11 @@ function removeHtmlMiddlewares(server: ViteDevServer) {
|
|
|
139
147
|
* @returns
|
|
140
148
|
*/
|
|
141
149
|
function prepareError(req: Connect.IncomingMessage, error: unknown) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
150
|
+
const e = error as Error;
|
|
151
|
+
return {
|
|
152
|
+
message: `An error occured while server rendering ${req.url}:\n\n\t${
|
|
153
|
+
typeof e === "string" ? e : e.message
|
|
154
|
+
} `,
|
|
155
|
+
stack: typeof e === "string" ? "" : e.stack,
|
|
156
|
+
};
|
|
149
157
|
}
|
package/src/config/fs-router.ts
CHANGED
|
@@ -1,177 +1,162 @@
|
|
|
1
1
|
import type { ExportSpecifier } from "es-module-lexer";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
analyzeModule,
|
|
4
|
+
BaseFileSystemRouter,
|
|
5
|
+
cleanPath,
|
|
6
|
+
type FileSystemRouterConfig,
|
|
7
7
|
} from "./fs-routes/router.ts";
|
|
8
8
|
|
|
9
9
|
export class SolidStartClientFileRouter extends BaseFileSystemRouter {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
10
|
+
toPath(src: string) {
|
|
11
|
+
const routePath = cleanPath(src, this.config)
|
|
12
|
+
// remove the initial slash
|
|
13
|
+
.slice(1)
|
|
14
|
+
.replace(/index$/, "")
|
|
15
|
+
.replace(/\[([^/]+)\]/g, (_, m) => {
|
|
16
|
+
if (m.length > 3 && m.startsWith("...")) {
|
|
17
|
+
return `*${m.slice(3)}`;
|
|
18
|
+
}
|
|
19
|
+
if (m.length > 2 && m.startsWith("[") && m.endsWith("]")) {
|
|
20
|
+
return `:${m.slice(1, -1)}?`;
|
|
21
|
+
}
|
|
22
|
+
return `:${m}`;
|
|
23
|
+
});
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
return routePath?.length > 0 ? `/${routePath}` : "/";
|
|
26
|
+
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
toRoute(src: string) {
|
|
29
|
+
const path = this.toPath(src);
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
31
|
+
if (src.endsWith(".md") || src.endsWith(".mdx")) {
|
|
32
|
+
return {
|
|
33
|
+
page: true,
|
|
34
|
+
$component: {
|
|
35
|
+
src: src,
|
|
36
|
+
pick: ["$css"],
|
|
37
|
+
},
|
|
38
|
+
$$route: undefined,
|
|
39
|
+
path,
|
|
40
|
+
// filePath: src
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
}
|
|
44
|
+
const [_, exports] = analyzeModule(src);
|
|
45
|
+
const hasDefault = !!exports.find(e => e.n === "default");
|
|
46
|
+
const hasRouteConfig = !!exports.find(e => e.n === "route");
|
|
47
|
+
if (hasDefault) {
|
|
48
|
+
return {
|
|
49
|
+
page: true,
|
|
50
|
+
$component: {
|
|
51
|
+
src: src,
|
|
52
|
+
pick: [
|
|
53
|
+
...exports.filter(e => e.n === e.ln && e.n !== "route").map(e => e.n),
|
|
54
|
+
"default",
|
|
55
|
+
"$css",
|
|
56
|
+
],
|
|
57
|
+
},
|
|
58
|
+
$$route: hasRouteConfig
|
|
59
|
+
? {
|
|
60
|
+
src: src,
|
|
61
|
+
pick: ["route"],
|
|
62
|
+
}
|
|
63
|
+
: undefined,
|
|
64
|
+
path,
|
|
65
|
+
// filePath: src
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
71
69
|
}
|
|
72
70
|
|
|
73
|
-
const HTTP_METHODS = [
|
|
74
|
-
"HEAD",
|
|
75
|
-
"GET",
|
|
76
|
-
"POST",
|
|
77
|
-
"PUT",
|
|
78
|
-
"DELETE",
|
|
79
|
-
"PATCH",
|
|
80
|
-
"OPTIONS",
|
|
81
|
-
];
|
|
71
|
+
const HTTP_METHODS = ["HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
|
|
82
72
|
function createHTTPHandlers(src: string, exports: readonly ExportSpecifier[]) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
73
|
+
const handlers: Record<string, any> = {};
|
|
74
|
+
for (const exp of exports) {
|
|
75
|
+
if (HTTP_METHODS.includes(exp.n)) {
|
|
76
|
+
handlers[`$${exp.n}`] = {
|
|
77
|
+
src: src,
|
|
78
|
+
pick: [exp.n],
|
|
79
|
+
};
|
|
80
|
+
if (exp.n === "GET" && !exports.find(exp => exp.n === "HEAD")) {
|
|
81
|
+
handlers.$HEAD = {
|
|
82
|
+
src: src,
|
|
83
|
+
pick: [exp.n],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
98
88
|
|
|
99
|
-
|
|
89
|
+
return handlers;
|
|
100
90
|
}
|
|
101
91
|
|
|
102
92
|
export class SolidStartServerFileRouter extends BaseFileSystemRouter {
|
|
103
|
-
|
|
93
|
+
declare config: FileSystemRouterConfig & { dataOnly?: boolean };
|
|
104
94
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
95
|
+
constructor(config: FileSystemRouterConfig & { dataOnly?: boolean }) {
|
|
96
|
+
super(config);
|
|
97
|
+
}
|
|
108
98
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
99
|
+
toPath(src: string) {
|
|
100
|
+
const routePath = cleanPath(src, this.config)
|
|
101
|
+
// remove the initial slash
|
|
102
|
+
.slice(1)
|
|
103
|
+
.replace(/index$/, "")
|
|
104
|
+
.replace(/\[([^/]+)\]/g, (_, m) => {
|
|
105
|
+
if (m.length > 3 && m.startsWith("...")) {
|
|
106
|
+
return `*${m.slice(3)}`;
|
|
107
|
+
}
|
|
108
|
+
if (m.length > 2 && m.startsWith("[") && m.endsWith("]")) {
|
|
109
|
+
return `:${m.slice(1, -1)}?`;
|
|
110
|
+
}
|
|
111
|
+
return `:${m}`;
|
|
112
|
+
});
|
|
123
113
|
|
|
124
|
-
|
|
125
|
-
|
|
114
|
+
return routePath?.length > 0 ? `/${routePath}` : "/";
|
|
115
|
+
}
|
|
126
116
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
117
|
+
toRoute(src: string) {
|
|
118
|
+
const path = this.toPath(src);
|
|
119
|
+
if (src.endsWith(".md") || src.endsWith(".mdx")) {
|
|
120
|
+
return {
|
|
121
|
+
page: true,
|
|
122
|
+
$component: {
|
|
123
|
+
src: src,
|
|
124
|
+
pick: ["$css"],
|
|
125
|
+
},
|
|
126
|
+
$$route: undefined,
|
|
127
|
+
path,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
140
130
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
...createHTTPHandlers(src, exports),
|
|
173
|
-
path,
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
}
|
|
131
|
+
const [_, exports] = analyzeModule(src);
|
|
132
|
+
const hasRouteConfig = exports.find(e => e.n === "route");
|
|
133
|
+
const hasDefault = !!exports.find(e => e.n === "default");
|
|
134
|
+
const hasAPIRoutes = !!exports.find(exp => HTTP_METHODS.includes(exp.n));
|
|
135
|
+
if (hasDefault || hasAPIRoutes) {
|
|
136
|
+
return {
|
|
137
|
+
page: hasDefault,
|
|
138
|
+
$component:
|
|
139
|
+
!this.config.dataOnly && hasDefault
|
|
140
|
+
? {
|
|
141
|
+
src: src,
|
|
142
|
+
pick: [
|
|
143
|
+
...exports
|
|
144
|
+
.filter(e => e.n === e.ln && e.n !== "route" && !HTTP_METHODS.includes(e.n))
|
|
145
|
+
.map(e => e.n),
|
|
146
|
+
"default",
|
|
147
|
+
"$css",
|
|
148
|
+
],
|
|
149
|
+
}
|
|
150
|
+
: undefined,
|
|
151
|
+
$$route: hasRouteConfig
|
|
152
|
+
? {
|
|
153
|
+
src: src,
|
|
154
|
+
pick: ["route"],
|
|
155
|
+
}
|
|
156
|
+
: undefined,
|
|
157
|
+
...createHTTPHandlers(src, exports),
|
|
158
|
+
path,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
177
162
|
}
|