@solidjs/start 2.0.0-alpha.0 → 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -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/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 +5 -5
- package/dist/config/fs-routes/tree-shake.js +12 -21
- package/dist/config/index.js +33 -36
- package/dist/config/lazy.js +9 -9
- package/dist/config/manifest.js +1 -1
- package/dist/http/index.d.ts +1 -4
- package/dist/http/index.js +3 -5
- package/dist/index.d.ts +0 -1
- package/dist/router.jsx +2 -2
- package/dist/server/assets/index.js +1 -1
- package/dist/server/assets/render.jsx +2 -2
- package/dist/server/fetchEvent.spec.js +1 -1
- package/dist/server/handler.js +29 -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/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 +95 -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 +7 -7
- package/src/config/fs-routes/tree-shake.ts +342 -363
- package/src/config/index.ts +36 -39
- package/src/config/lazy.ts +13 -13
- package/src/config/manifest.ts +5 -5
- package/src/config/vite-utils.ts +2 -6
- 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 +39 -49
- package/src/router.tsx +4 -3
- package/src/server/StartServer.tsx +1 -7
- package/src/server/assets/index.ts +1 -1
- package/src/server/assets/render.tsx +6 -2
- package/src/server/collect-styles.ts +63 -70
- package/src/server/fetchEvent.spec.ts +71 -75
- package/src/server/fetchEvent.ts +17 -17
- package/src/server/handler.ts +136 -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/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,80 @@
|
|
|
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
|
+
configureServer(viteDevServer) {
|
|
15
|
+
(globalThis as any).VITE_DEV_SERVER = viteDevServer;
|
|
16
|
+
return async () => {
|
|
17
|
+
if (viteDevServer.config.server.middlewareMode) return;
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
viteDevServer.environments[VITE_ENVIRONMENTS.server];
|
|
19
|
+
const serverEnv = viteDevServer.environments[VITE_ENVIRONMENTS.server];
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return;
|
|
28
|
-
// another plugin is controlling the dev server
|
|
29
|
-
if (!isRunnableDevEnvironment(serverEnv)) {
|
|
21
|
+
if (!serverEnv) throw new Error("Server environment not found");
|
|
22
|
+
if (
|
|
23
|
+
// do not check via `isFetchableDevEnvironment` since nitro does implement the `FetchableDevEnvironment` interface but not via inheritance (which this helper checks)
|
|
24
|
+
"dispatchFetch" in serverEnv
|
|
25
|
+
)
|
|
30
26
|
return;
|
|
31
|
-
|
|
27
|
+
// another plugin is controlling the dev server
|
|
28
|
+
if (!isRunnableDevEnvironment(serverEnv)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
32
31
|
|
|
33
32
|
globalThis.USING_SOLID_START_DEV_SERVER = true;
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
removeHtmlMiddlewares(viteDevServer);
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
viteDevServer.middlewares.use(async (req, res) => {
|
|
37
|
+
if (req.originalUrl) {
|
|
38
|
+
req.url = req.originalUrl;
|
|
39
|
+
}
|
|
40
|
+
const webReq = new NodeRequest({ req, res });
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
try {
|
|
43
|
+
const serverEntry: {
|
|
44
|
+
default: { fetch: (req: Request) => Promise<Response> };
|
|
45
|
+
} = await serverEnv.runner.import("./src/entry-server.tsx");
|
|
47
46
|
|
|
48
|
-
|
|
47
|
+
const webRes = await serverEntry.default.fetch(webReq);
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
return sendNodeResponse(res, webRes);
|
|
50
|
+
} catch (e: unknown) {
|
|
51
|
+
console.error(e);
|
|
52
|
+
viteDevServer.ssrFixStacktrace(e as Error);
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
),
|
|
75
|
-
);
|
|
76
|
-
}
|
|
54
|
+
if (webReq.headers.get("content-type")?.includes("application/json")) {
|
|
55
|
+
return sendNodeResponse(
|
|
56
|
+
res,
|
|
57
|
+
Response.json(
|
|
58
|
+
{
|
|
59
|
+
status: 500,
|
|
60
|
+
error: "Internal Server Error",
|
|
61
|
+
message: "An unexpected error occurred. Please try again later.",
|
|
62
|
+
timestamp: new Date().toISOString(),
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
status: 500,
|
|
66
|
+
headers: {
|
|
67
|
+
"Content-Type": "application/json",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
),
|
|
71
|
+
);
|
|
72
|
+
}
|
|
77
73
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
74
|
+
return sendNodeResponse(
|
|
75
|
+
res,
|
|
76
|
+
new Response(
|
|
77
|
+
`
|
|
82
78
|
<!DOCTYPE html>
|
|
83
79
|
<html lang="en">
|
|
84
80
|
<head>
|
|
@@ -87,26 +83,26 @@ export function devServer(): Array<PluginOption> {
|
|
|
87
83
|
<script type="module">
|
|
88
84
|
import { ErrorOverlay } from '/@vite/client'
|
|
89
85
|
document.body.appendChild(new ErrorOverlay(${JSON.stringify(
|
|
90
|
-
|
|
91
|
-
|
|
86
|
+
prepareError(req, e),
|
|
87
|
+
).replace(/</g, "\\u003c")}))
|
|
92
88
|
</script>
|
|
93
89
|
</head>
|
|
94
90
|
<body>
|
|
95
91
|
</body>
|
|
96
92
|
</html>
|
|
97
93
|
`,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
94
|
+
{
|
|
95
|
+
status: 500,
|
|
96
|
+
headers: { "Content-Type": "text/html" },
|
|
97
|
+
},
|
|
98
|
+
),
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
};
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
];
|
|
110
106
|
}
|
|
111
107
|
|
|
112
108
|
/**
|
|
@@ -115,21 +111,21 @@ export function devServer(): Array<PluginOption> {
|
|
|
115
111
|
* @param server
|
|
116
112
|
*/
|
|
117
113
|
function removeHtmlMiddlewares(server: ViteDevServer) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
114
|
+
const html_middlewares = [
|
|
115
|
+
"viteIndexHtmlMiddleware",
|
|
116
|
+
"vite404Middleware",
|
|
117
|
+
"viteSpaFallbackMiddleware",
|
|
118
|
+
];
|
|
119
|
+
for (let i = server.middlewares.stack.length - 1; i > 0; i--) {
|
|
120
|
+
if (
|
|
121
|
+
html_middlewares.includes(
|
|
122
|
+
// @ts-expect-error
|
|
123
|
+
server.middlewares.stack[i].handle.name,
|
|
124
|
+
)
|
|
125
|
+
) {
|
|
126
|
+
server.middlewares.stack.splice(i, 1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
133
129
|
}
|
|
134
130
|
|
|
135
131
|
/**
|
|
@@ -139,11 +135,11 @@ function removeHtmlMiddlewares(server: ViteDevServer) {
|
|
|
139
135
|
* @returns
|
|
140
136
|
*/
|
|
141
137
|
function prepareError(req: Connect.IncomingMessage, error: unknown) {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
138
|
+
const e = error as Error;
|
|
139
|
+
return {
|
|
140
|
+
message: `An error occured while server rendering ${req.url}:\n\n\t${
|
|
141
|
+
typeof e === "string" ? e : e.message
|
|
142
|
+
} `,
|
|
143
|
+
stack: typeof e === "string" ? "" : e.stack,
|
|
144
|
+
};
|
|
149
145
|
}
|
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
|
}
|