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