@solidjs/start 1.2.0 → 2.0.0-alpha.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.
Files changed (184) hide show
  1. package/README.md +88 -8
  2. package/dist/client/StartClient.d.ts +0 -1
  3. package/dist/client/StartClient.jsx +2 -4
  4. package/dist/client/index.d.ts +2 -3
  5. package/dist/client/index.jsx +2 -4
  6. package/dist/client/mount.js +10 -2
  7. package/dist/client/spa/index.d.ts +1 -2
  8. package/dist/client/spa/index.jsx +1 -2
  9. package/dist/config/constants.d.ts +16 -0
  10. package/dist/config/constants.js +16 -0
  11. package/dist/config/dev-server.d.ts +2 -0
  12. package/dist/config/dev-server.js +108 -0
  13. package/dist/config/fs-router.d.ts +37 -0
  14. package/dist/config/fs-router.js +153 -0
  15. package/dist/config/fs-routes/fs-watcher.d.ts +3 -0
  16. package/dist/config/fs-routes/fs-watcher.js +49 -0
  17. package/dist/config/fs-routes/index.d.ts +7 -0
  18. package/dist/config/fs-routes/index.js +109 -0
  19. package/dist/config/fs-routes/router.d.ts +37 -0
  20. package/dist/config/fs-routes/router.js +136 -0
  21. package/dist/config/fs-routes/tree-shake.d.ts +2 -0
  22. package/dist/config/fs-routes/tree-shake.js +357 -0
  23. package/dist/config/index.d.ts +10 -0
  24. package/dist/config/index.js +217 -0
  25. package/dist/config/lazy.d.ts +3 -0
  26. package/dist/config/lazy.js +82 -0
  27. package/dist/config/manifest.d.ts +3 -0
  28. package/dist/config/manifest.js +74 -0
  29. package/dist/config/utils.d.ts +4 -0
  30. package/dist/config/utils.js +6 -0
  31. package/dist/config/vite-utils.d.ts +16 -0
  32. package/dist/config/vite-utils.js +81 -0
  33. package/dist/http/index.d.ts +84 -0
  34. package/dist/http/index.js +131 -0
  35. package/dist/index.d.ts +6 -5
  36. package/dist/index.jsx +5 -5
  37. package/dist/middleware/index.d.ts +6 -6
  38. package/dist/middleware/index.js +39 -0
  39. package/dist/{router/FileRoutes.js → router.jsx} +5 -6
  40. package/dist/server/StartServer.d.ts +3 -3
  41. package/dist/server/StartServer.jsx +9 -63
  42. package/dist/server/assets/index.d.ts +2 -0
  43. package/dist/server/assets/index.js +52 -0
  44. package/dist/server/assets/render.d.ts +19 -0
  45. package/dist/server/{renderAsset.jsx → assets/render.jsx} +1 -1
  46. package/dist/server/collect-styles.d.ts +3 -0
  47. package/dist/server/collect-styles.js +69 -0
  48. package/dist/server/fetchEvent.d.ts +4 -3
  49. package/dist/server/fetchEvent.js +12 -74
  50. package/dist/server/fetchEvent.spec.js +18 -197
  51. package/dist/server/handler.d.ts +6 -12
  52. package/dist/server/handler.js +180 -97
  53. package/dist/server/index.d.ts +8 -6
  54. package/dist/server/index.jsx +14 -6
  55. package/dist/server/manifest/client-manifest.d.ts +9 -0
  56. package/dist/server/manifest/client-manifest.js +6 -0
  57. package/dist/server/manifest/dev-client-manifest.d.ts +4 -0
  58. package/dist/server/manifest/dev-client-manifest.js +24 -0
  59. package/dist/server/manifest/dev-ssr-manifest.d.ts +5 -0
  60. package/dist/server/manifest/dev-ssr-manifest.js +23 -0
  61. package/dist/server/manifest/prod-client-manifest.d.ts +5 -0
  62. package/dist/server/manifest/prod-client-manifest.js +26 -0
  63. package/dist/server/manifest/prod-ssr-manifest.d.ts +6 -0
  64. package/dist/server/manifest/prod-ssr-manifest.js +90 -0
  65. package/dist/server/manifest/ssr-manifest.d.ts +4 -0
  66. package/dist/server/manifest/ssr-manifest.js +6 -0
  67. package/dist/{router → server}/routes.d.ts +5 -10
  68. package/dist/{router → server}/routes.js +35 -36
  69. package/dist/{runtime → server}/server-fns-runtime.d.ts +1 -1
  70. package/dist/{runtime → server}/server-fns-runtime.js +7 -6
  71. package/dist/server/server-functions-handler.d.ts +2 -0
  72. package/dist/{runtime/server-handler.js → server/server-functions-handler.js} +65 -100
  73. package/dist/server/server-runtime.d.ts +3 -0
  74. package/dist/{runtime → server}/server-runtime.js +9 -16
  75. package/dist/server/spa/StartServer.d.ts +1 -1
  76. package/dist/server/spa/StartServer.jsx +7 -9
  77. package/dist/server/spa/handler.d.ts +3 -3
  78. package/dist/server/spa/handler.js +9 -11
  79. package/dist/server/spa/index.d.ts +4 -3
  80. package/dist/server/spa/index.jsx +4 -3
  81. package/dist/server/types.d.ts +7 -9
  82. package/dist/server/util.d.ts +2 -0
  83. package/dist/server/util.js +8 -0
  84. package/dist/shared/ErrorBoundary.jsx +2 -2
  85. package/dist/shared/HttpHeader.jsx +4 -2
  86. package/dist/shared/{HttpStatusCode.jsx → HttpStatusCode.js} +3 -1
  87. package/dist/shared/dev-overlay/DevOverlayDialog.d.ts +2 -2
  88. package/dist/shared/dev-overlay/DevOverlayDialog.jsx +75 -66
  89. package/dist/shared/dev-overlay/createStackFrame.js +3 -3
  90. package/dist/shared/dev-overlay/index.jsx +5 -8
  91. package/dist/shared/lazy.d.ts +3 -0
  92. package/dist/shared/lazy.js +40 -0
  93. package/dist/shared/serverFunction.d.ts +1 -1
  94. package/package.json +45 -67
  95. package/scripts/build.js +15 -0
  96. package/scripts/validate-imports.js +316 -0
  97. package/src/client/StartClient.tsx +34 -0
  98. package/src/client/index.tsx +2 -0
  99. package/src/client/mount.ts +114 -0
  100. package/src/client/spa/index.tsx +9 -0
  101. package/src/config/constants.ts +19 -0
  102. package/src/config/dev-server.ts +149 -0
  103. package/src/config/fs-router.ts +177 -0
  104. package/src/config/fs-routes/fs-watcher.ts +81 -0
  105. package/src/config/fs-routes/index.ts +138 -0
  106. package/src/config/fs-routes/router.ts +169 -0
  107. package/src/config/fs-routes/tree-shake.ts +392 -0
  108. package/src/config/index.ts +236 -0
  109. package/src/config/lazy.ts +100 -0
  110. package/src/config/manifest.ts +84 -0
  111. package/src/config/utils.ts +5 -0
  112. package/src/config/vite-utils.ts +113 -0
  113. package/src/env.d.ts +35 -0
  114. package/src/http/index.ts +253 -0
  115. package/src/index.tsx +19 -0
  116. package/src/internal.d.ts +14 -0
  117. package/src/middleware/index.ts +82 -0
  118. package/src/router.tsx +36 -0
  119. package/src/server/StartServer.tsx +62 -0
  120. package/src/server/assets/index.ts +70 -0
  121. package/src/server/assets/render.tsx +42 -0
  122. package/src/server/collect-styles.ts +94 -0
  123. package/src/server/fetchEvent.spec.ts +89 -0
  124. package/src/server/fetchEvent.ts +36 -0
  125. package/src/server/handler.ts +250 -0
  126. package/src/server/index.tsx +16 -0
  127. package/src/server/manifest/client-manifest.ts +8 -0
  128. package/src/server/manifest/dev-client-manifest.ts +19 -0
  129. package/src/server/manifest/dev-ssr-manifest.ts +21 -0
  130. package/src/server/manifest/prod-client-manifest.ts +18 -0
  131. package/src/server/manifest/prod-ssr-manifest.ts +125 -0
  132. package/src/server/manifest/ssr-manifest.ts +8 -0
  133. package/src/server/routes.ts +138 -0
  134. package/src/server/server-fns-runtime.ts +31 -0
  135. package/src/server/server-functions-handler.ts +364 -0
  136. package/src/server/server-runtime.ts +240 -0
  137. package/src/server/spa/StartServer.tsx +40 -0
  138. package/src/server/spa/handler.ts +29 -0
  139. package/src/server/spa/index.tsx +5 -0
  140. package/src/server/types.ts +82 -0
  141. package/src/server/util.ts +12 -0
  142. package/src/shared/ErrorBoundary.tsx +52 -0
  143. package/src/shared/GET.ts +8 -0
  144. package/src/shared/HttpHeader.tsx +42 -0
  145. package/src/shared/HttpStatusCode.ts +27 -0
  146. package/src/shared/clientOnly.ts +44 -0
  147. package/src/shared/dev-overlay/CodeView.tsx +95 -0
  148. package/src/shared/dev-overlay/DevOverlayDialog.tsx +316 -0
  149. package/src/shared/dev-overlay/createStackFrame.ts +77 -0
  150. package/src/shared/dev-overlay/download.ts +6 -0
  151. package/src/shared/dev-overlay/env.d.ts +4 -0
  152. package/src/shared/dev-overlay/get-source-map.ts +35 -0
  153. package/src/shared/dev-overlay/icons.tsx +288 -0
  154. package/src/shared/dev-overlay/index.tsx +63 -0
  155. package/src/shared/dev-overlay/styles.css +292 -0
  156. package/src/shared/lazy.ts +51 -0
  157. package/src/shared/serverFunction.ts +10 -0
  158. package/src/virtual.d.ts +27 -0
  159. package/tsconfig.json +23 -0
  160. package/vitest.config.ts +9 -0
  161. package/config/fs-router.js +0 -142
  162. package/config/index.d.ts +0 -40
  163. package/config/index.js +0 -304
  164. package/config/server-components.js +0 -106
  165. package/dist/client/islands.d.ts +0 -7
  166. package/dist/client/islands.jsx +0 -10
  167. package/dist/middleware/index.jsx +0 -35
  168. package/dist/router/index.d.ts +0 -1
  169. package/dist/router/index.jsx +0 -2
  170. package/dist/router/lazyRoute.d.ts +0 -6
  171. package/dist/router/lazyRoute.js +0 -53
  172. package/dist/runtime/server-handler.d.ts +0 -2
  173. package/dist/runtime/server-runtime.d.ts +0 -3
  174. package/dist/server/islands/index.d.ts +0 -19
  175. package/dist/server/islands/index.jsx +0 -62
  176. package/dist/server/islands/utils.d.ts +0 -1
  177. package/dist/server/islands/utils.jsx +0 -85
  178. package/dist/server/pageEvent.d.ts +0 -2
  179. package/dist/server/pageEvent.js +0 -56
  180. package/dist/server/renderAsset.d.ts +0 -2
  181. package/env.d.ts +0 -26
  182. /package/dist/{router/FileRoutes.d.ts → router.d.ts} +0 -0
  183. /package/dist/shared/{clientOnly.jsx → clientOnly.js} +0 -0
  184. /package/dist/shared/{serverFunction.jsx → serverFunction.js} +0 -0
@@ -0,0 +1,292 @@
1
+ .dev-overlay {
2
+ position: fixed;
3
+ inset: 0px;
4
+ z-index: 50;
5
+ overflow-y: auto;
6
+ }
7
+
8
+ .dev-overlay>div {
9
+ position: relative;
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ min-height: 100vh;
14
+ }
15
+
16
+ .dev-overlay-background {
17
+ position: absolute;
18
+ inset: 0px;
19
+ background-color: rgb(17 24 39 / 0.5);
20
+ }
21
+
22
+ .dev-overlay-panel {
23
+ display: flex;
24
+ flex-direction: column;
25
+ width: 75vw;
26
+ margin-top: 2rem;
27
+ margin-bottom: 2rem;
28
+ gap: 0.5rem;
29
+ color: rgb(17 24 39);
30
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
31
+ }
32
+
33
+ .dev-overlay-panel-container {
34
+ margin: 2rem;
35
+ z-index: 10;
36
+ }
37
+
38
+ .dev-overlay-navbar {
39
+ display: flex;
40
+ flex-direction: row;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ gap: 0.5rem;
44
+ }
45
+
46
+ .dev-overlay-pagination {
47
+ display: flex;
48
+ flex-direction: row;
49
+ align-items: center;
50
+ justify-content: center;
51
+ gap: 0.5rem;
52
+ border-radius: 9999px;
53
+ background-color: rgb(249 250 251);
54
+ padding: 0.25rem;
55
+ }
56
+
57
+ .dev-overlay-button {
58
+ display: flex;
59
+ padding: 0.125rem;
60
+ border-radius: 9999px;
61
+ border-width: 0px;
62
+ align-items: center;
63
+ justify-content: center;
64
+ background-color: rgb(249 250 251);
65
+ color: rgb(17 24 39);
66
+ transition-property: color, background-color, border-color, box-shadow;
67
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
68
+ transition-duration: 150ms;
69
+ }
70
+
71
+ .dev-overlay-button:hover {
72
+ background-color: rgb(229 231 235);
73
+ color: rgb(55 65 81);
74
+ }
75
+
76
+ .dev-overlay-button:focus {
77
+ outline: 2px solid transparent;
78
+ outline-offset: 2px
79
+ }
80
+
81
+ .dev-overlay-button:focus-visible {
82
+ box-shadow: 0 0 0 calc(3px) rgb(17 24 39 / 0.75);
83
+ }
84
+
85
+ .dev-overlay-button:active {
86
+ background-color: rgb(243 244 246);
87
+ color: rgb(31 41 55);
88
+ }
89
+
90
+ .dev-overlay-button>svg {
91
+ height: 1.5rem;
92
+ width: 1.5rem;
93
+ }
94
+
95
+ .dev-overlay-page-counter {
96
+ font-size: 0.875rem;
97
+ line-height: 1.25rem;
98
+ font-weight: 600;
99
+ }
100
+
101
+ .dev-overlay-navbar-left {
102
+ display: flex;
103
+ flex-direction: row;
104
+ gap: 0.5rem;
105
+ }
106
+
107
+
108
+ .dev-overlay-controls {
109
+ display: flex;
110
+ flex-direction: row;
111
+ align-items: center;
112
+ justify-content: center;
113
+ gap: 0.25rem;
114
+ border-radius: 9999px;
115
+ background-color: rgb(249 250 251);
116
+ padding: 0.25rem;
117
+ }
118
+
119
+ .dev-overlay-version {
120
+ display: flex;
121
+ flex-direction: row;
122
+ align-items: center;
123
+ justify-content: center;
124
+ gap: 0.25rem;
125
+ border-radius: 9999px;
126
+ background-color: rgb(249 250 251);
127
+ padding: 0.25rem 0.5rem;
128
+ font-size: 0.875rem;
129
+ line-height: 1.25rem;
130
+ font-weight: 600;
131
+ }
132
+
133
+ .dev-overlay-version>div {
134
+ height: 1.5rem;
135
+ width: 1.5rem;
136
+ }
137
+
138
+ .dev-overlay-version>div>svg {
139
+ height: 1.5rem;
140
+ width: 1.5rem;
141
+ }
142
+
143
+ .dev-overlay-content {
144
+ display: flex;
145
+ flex-direction: column;
146
+ gap: 0.75rem;
147
+ border-radius: 1.5rem;
148
+ background-color: rgb(249 250 251);
149
+ padding: 1rem;
150
+ }
151
+
152
+ .dev-overlay-error-info {
153
+ display: flex;
154
+ flex-direction: column;
155
+ gap: 0.25rem;
156
+ }
157
+
158
+ .dev-overlay-error-info-name {
159
+ font-weight: 700;
160
+ }
161
+
162
+ .dev-overlay-error-info-message {
163
+ font-size: 1.5rem;
164
+ line-height: 2rem;
165
+ color: rgb(239 68 68);
166
+ font-weight: 700;
167
+ }
168
+
169
+ .dev-overlay-stack-frames-content {
170
+ display: flex;
171
+ flex-direction: column;
172
+ gap: 0.75rem;
173
+ }
174
+
175
+ .dev-overlay-stack-frames {
176
+ flex: 1 1 0%;
177
+ display: flex;
178
+ flex-direction: column;
179
+ margin: 0;
180
+ margin-block: 0;
181
+ list-style-type: none;
182
+ padding-inline: 0;
183
+ max-height: 16rem;
184
+ overflow-y: auto;
185
+ border-radius: 0.5rem;
186
+ }
187
+
188
+ .dev-overlay-stack-frame {
189
+ display: flex;
190
+ flex-direction: row;
191
+ align-items: center;
192
+ justify-content: space-between;
193
+ gap: 1rem;
194
+ color: rgb(17 24 39);
195
+ cursor: default;
196
+ user-select: none;
197
+ padding-top: 0.5rem;
198
+ padding-bottom: 0.5rem;
199
+ padding-left: 1rem;
200
+ padding-right: 1rem;
201
+ font-size: 0.875rem;
202
+ line-height: 1.25rem;
203
+ outline: none;
204
+ }
205
+
206
+ .dev-overlay-stack-frame[tc-active],
207
+ .dev-overlay-stack-frame[tc-selected],
208
+ .dev-overlay-stack-frame:focus {
209
+ background-color: rgb(219 234 254);
210
+ color: rgb(30 58 138);
211
+ }
212
+
213
+ .dev-overlay-stack-frame-function {
214
+ font-weight: 700;
215
+ }
216
+
217
+ .dev-overlay-stack-frame-file {
218
+ white-space: nowrap;
219
+ font-size: 0.75rem;
220
+ /* 12px */
221
+ line-height: 1rem;
222
+ /* 16px */
223
+ }
224
+
225
+ .dev-overlay-stack-frames-code {
226
+ padding: 0.5rem 1rem;
227
+ gap: 0.25rem;
228
+ flex: 1 1 0%;
229
+ display: flex;
230
+ flex-direction: column;
231
+ align-items: center;
232
+ justify-content: center;
233
+ border-radius: 0.5rem;
234
+ background-color: rgb(17 24 39);
235
+ }
236
+
237
+ .dev-overlay-stack-frames-code-fallback {
238
+ display: flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+ color: rgb(249 250 251);
242
+ min-height: 16rem;
243
+ font-size: 0.875rem;
244
+ line-height: 1.25rem;
245
+ }
246
+
247
+ .dev-overlay-stack-frames-code-source {
248
+ font-size: 0.875rem;
249
+ line-height: 1.25rem;
250
+ color: rgb(249 250 251);
251
+ }
252
+
253
+ .dev-overlay-stack-frames-code-container {
254
+ width: 100%;
255
+ overflow: hidden;
256
+ min-width: 100%;
257
+ min-height: 16rem;
258
+ border-top-width: 1px;
259
+ border-top-style: solid;
260
+ border-top-color: rgb(249 250 251);
261
+ }
262
+
263
+ .dev-overlay-code-view {
264
+ overflow: auto;
265
+ min-width: 100%;
266
+ min-height: 16rem;
267
+ }
268
+
269
+ .dev-overlay-code-view>.shiki {
270
+ float: left;
271
+ min-width: 100%;
272
+ overflow-x: auto;
273
+ font-size: 0.75rem;
274
+ line-height: 1rem;
275
+ counter-reset: step;
276
+ counter-increment: step calc(var(--dev-overlay-code-view-start, 1) - 1);
277
+ background-color: transparent !important;
278
+ }
279
+
280
+ .dev-overlay-code-view>.shiki .line::before {
281
+ content: counter(step);
282
+ counter-increment: step;
283
+ width: 1rem;
284
+ margin-right: 1.5rem;
285
+ display: inline-block;
286
+ text-align: right;
287
+ color: rgba(115, 138, 148, .4)
288
+ }
289
+
290
+ .dev-overlay-error-line {
291
+ background-color: rgba(239, 68, 68, .4);
292
+ }
@@ -0,0 +1,51 @@
1
+ import { Component, lazy as solidLazy } from "solid-js";
2
+ import { getRequestEvent, isServer } from "solid-js/web";
3
+ import { getManifest } from "solid-start:get-manifest";
4
+ import { useAssets } from "../server/assets/index.ts";
5
+ import { Asset, PageEvent } from "../server/types.ts";
6
+
7
+ const assetsById: Record<string, Asset[]> = {};
8
+
9
+ const getAssets = async (id: string) => {
10
+ if (assetsById[id]) return assetsById[id];
11
+
12
+ const manifest = getManifest(import.meta.env.SSR && import.meta.env.DEV ? "ssr" : "client");
13
+ const assets = await manifest.getAssets(id);
14
+ if (import.meta.env.PROD) assetsById[id] = assets;
15
+
16
+ return assets;
17
+ };
18
+
19
+ const withAssets = function <T extends () => Promise<{ default: Component<any> }>>(fn: T): T {
20
+ const wrapper = async () => {
21
+ const mod = await fn();
22
+
23
+ // This id$$ export is generated by the lazy vite plugin
24
+ const id: string = (mod as any).id$$;
25
+ if (!id) return mod;
26
+
27
+ if (!mod.default) {
28
+ console.error(`Module ${id} does not export default`);
29
+ return { default: () => [] };
30
+ }
31
+
32
+ const assets: Asset[] = await getAssets(id);
33
+ if (!assets.length) return mod;
34
+
35
+ return {
36
+ default: (props: any) => {
37
+ const { nonce } = getRequestEvent() as PageEvent;
38
+ useAssets(assets, nonce);
39
+
40
+ return mod.default(props);
41
+ }
42
+ };
43
+ };
44
+
45
+ return wrapper as T;
46
+ };
47
+
48
+ const lazy = !isServer ? solidLazy: <T extends Component<any>>(fn: () => Promise<{ default: T }>) =>
49
+ solidLazy(withAssets(fn));
50
+
51
+ export default lazy;
@@ -0,0 +1,10 @@
1
+ import { getRequestEvent } from "solid-js/web";
2
+ import type { ServerFunctionMeta } from "../server/types.ts";
3
+
4
+ /**
5
+ *
6
+ * Read more: https://docs.solidjs.com/solid-start/reference/server/get-server-function-meta
7
+ */
8
+ export function getServerFunctionMeta(): ServerFunctionMeta | undefined {
9
+ return getRequestEvent()?.locals.serverFunctionMeta;
10
+ }
@@ -0,0 +1,27 @@
1
+ declare module "solid-start:client-vite-manifest" {
2
+ export const clientViteManifest: Record<
3
+ string,
4
+ { css?: Array<string>; file: string; [key: string]: unknown }
5
+ >;
6
+ }
7
+
8
+ interface StartManifest {
9
+ getAssets(id: string): Promise<import("./server/assets/render").Asset[]>;
10
+ }
11
+
12
+ declare module "solid-start:get-client-manifest" {
13
+ export const getClientManifest: () => StartManifest;
14
+ }
15
+
16
+ declare module "solid-start:get-manifest" {
17
+ export const getManifest: (target: "client" | "ssr") => StartManifest;
18
+ }
19
+
20
+ declare module "solid-start:app" {
21
+ export default App as import("solid-js").Component;
22
+ }
23
+
24
+ declare module "solid-start:middleware" {
25
+ type MaybeArray<T> = T | Array<T>;
26
+ export default Middleware as import("h3").Middleware[];
27
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ESNext",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "strict": true,
7
+ "noUncheckedIndexedAccess": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "esModuleInterop": true,
10
+ "jsx": "preserve",
11
+ "jsxImportSource": "solid-js",
12
+ "allowJs": true,
13
+ "isolatedModules": true,
14
+ "outDir": "./dist",
15
+ "declaration": true,
16
+ "skipLibCheck": true,
17
+ "types": ["vite/client"],
18
+ "allowImportingTsExtensions": true,
19
+ "rewriteRelativeImportExtensions": true,
20
+ "rootDir": "./src"
21
+ },
22
+ "include": ["./src", "./src/env.d.ts"]
23
+ }
@@ -0,0 +1,9 @@
1
+ import { defineConfig } from "vitest/config";
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: "node",
7
+ mockReset: true
8
+ }
9
+ });
@@ -1,142 +0,0 @@
1
- import {analyzeModule, BaseFileSystemRouter, cleanPath} from "vinxi/fs-router";
2
-
3
- export class SolidStartClientFileRouter extends BaseFileSystemRouter {
4
- toPath(src) {
5
- const routePath = cleanPath(src, this.config)
6
- // remove the initial slash
7
- .slice(1)
8
- .replace(/index$/, "")
9
- .replace(/\[([^\/]+)\]/g, (_, m) => {
10
- if (m.length > 3 && m.startsWith("...")) {
11
- return `*${m.slice(3)}`;
12
- }
13
- if (m.length > 2 && m.startsWith("[") && m.endsWith("]")) {
14
- return `:${m.slice(1, -1)}?`;
15
- }
16
- return `:${m}`;
17
- });
18
-
19
- return routePath?.length > 0 ? `/${routePath}` : "/";
20
- }
21
-
22
- toRoute(src) {
23
- let path = this.toPath(src);
24
-
25
- if (src.endsWith(".md") || src.endsWith(".mdx")) {
26
- return {
27
- page: true,
28
- $component: {
29
- src: src,
30
- pick: ["$css"]
31
- },
32
- $$route: undefined,
33
- path,
34
- filePath: src
35
- };
36
- }
37
-
38
- const [_, exports] = analyzeModule(src);
39
- const hasDefault = !!exports.find(e => e.n === "default");
40
- const hasRouteConfig = !!exports.find(e => e.n === "route");
41
- if (hasDefault) {
42
- return {
43
- page: true,
44
- $component: {
45
- src: src,
46
- pick: [...exports.filter(e => e.n === e.ln && e.n !== "route").map(e => e.n), "default", "$css"]
47
- },
48
- $$route: hasRouteConfig
49
- ? {
50
- src: src,
51
- pick: ["route"]
52
- }
53
- : undefined,
54
- path,
55
- filePath: src
56
- };
57
- }
58
- }
59
- }
60
-
61
- const HTTP_METHODS = ["HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"];
62
- function createHTTPHandlers(src, exports) {
63
- const handlers = {};
64
- for (const exp of exports) {
65
- if (HTTP_METHODS.includes(exp.n)) {
66
- handlers[`$${exp.n}`] = {
67
- src: src,
68
- pick: [exp.n]
69
- };
70
- if (exp.n === "GET" && !exports.find(exp => exp.n === "HEAD")) {
71
- handlers.$HEAD = {
72
- src: src,
73
- pick: [exp.n]
74
- };
75
- }
76
- }
77
- }
78
-
79
- return handlers;
80
- }
81
-
82
- export class SolidStartServerFileRouter extends BaseFileSystemRouter {
83
- toPath(src) {
84
- const routePath = cleanPath(src, this.config)
85
- // remove the initial slash
86
- .slice(1)
87
- .replace(/index$/, "")
88
- .replace(/\[([^\/]+)\]/g, (_, m) => {
89
- if (m.length > 3 && m.startsWith("...")) {
90
- return `*${m.slice(3)}`;
91
- }
92
- if (m.length > 2 && m.startsWith("[") && m.endsWith("]")) {
93
- return `:${m.slice(1, -1)}?`;
94
- }
95
- return `:${m}`;
96
- });
97
-
98
- return routePath?.length > 0 ? `/${routePath}` : "/";
99
- }
100
-
101
- toRoute(src) {
102
- let path = this.toPath(src);
103
- if (src.endsWith(".md") || src.endsWith(".mdx")) {
104
- return {
105
- page: true,
106
- $component: {
107
- src: src,
108
- pick: ["$css"]
109
- },
110
- $$route: undefined,
111
- path,
112
- filePath: src
113
- };
114
- }
115
-
116
- const [_, exports] = analyzeModule(src);
117
- const hasRouteConfig = exports.find(e => e.n === "route");
118
- const hasDefault = !!exports.find(e => e.n === "default");
119
- const hasAPIRoutes = !!exports.find(exp => HTTP_METHODS.includes(exp.n));
120
- if (hasDefault || hasAPIRoutes) {
121
- return {
122
- page: hasDefault,
123
- $component:
124
- !this.config.dataOnly && hasDefault
125
- ? {
126
- src: src,
127
- pick: [...exports.filter(e => e.n === e.ln && e.n !== "route" && !HTTP_METHODS.includes(e.n)).map(e => e.n), "default", "$css"]
128
- }
129
- : undefined,
130
- $$route: hasRouteConfig
131
- ? {
132
- src: src,
133
- pick: ["route"]
134
- }
135
- : undefined,
136
- ...createHTTPHandlers(src, exports),
137
- path,
138
- filePath: src
139
- };
140
- }
141
- }
142
- }
package/config/index.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import type { AppOptions, createApp } from "vinxi";
2
- import type { CustomizableConfig } from "vinxi/dist/types/lib/vite-dev";
3
- import { InlineConfig } from "vite";
4
- import type { Options } from "vite-plugin-solid";
5
-
6
- // should probably be maintained by Vinxi
7
- type VinxiViteServerOptions = Omit<
8
- InlineConfig["server"],
9
- "port" | "strictPort" | "host" | "middlewareMode" | "open"
10
- >;
11
-
12
- type ViteCustomizableConfig = CustomizableConfig & {
13
- server?: VinxiViteServerOptions;
14
- };
15
-
16
- type SolidStartInlineConfig = {
17
- publicDir?: string;
18
- ssr?: boolean;
19
- solid?: Options;
20
- extensions?: string[];
21
- server?: AppOptions["server"];
22
- appRoot?: string;
23
- routeDir?: string;
24
- middleware?: string;
25
- devOverlay?: boolean;
26
- experimental?: {
27
- islands?: boolean;
28
- };
29
- vite?:
30
- | ViteCustomizableConfig
31
- | ((options: { router: "server" | "client" | "server-function" }) => ViteCustomizableConfig);
32
- };
33
-
34
- /**
35
- *
36
- * Read more: https://docs.solidjs.com/solid-start/reference/entrypoints/app-config
37
- */
38
- export declare function defineConfig(
39
- baseConfig?: SolidStartInlineConfig
40
- ): ReturnType<typeof createApp>;