@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
@@ -1,17 +1,18 @@
1
1
  // @refresh skip
2
- import ErrorStackParser from 'error-stack-parser';
3
- import * as htmlToImage from 'html-to-image';
4
- import { ErrorBoundary, For, Show, Suspense, createMemo, createSignal } from 'solid-js';
5
- import { Portal } from 'solid-js/web';
6
- import { Dialog, DialogOverlay, DialogPanel, Select, SelectOption } from 'terracotta';
7
- import info from '../../../package.json';
8
- import { CodeView } from './CodeView';
9
- import { createStackFrame } from './createStackFrame';
10
- import download from './download';
11
- import { ArrowLeftIcon, ArrowRightIcon, CameraIcon, DiscordIcon, GithubIcon, RefreshIcon, SolidStartIcon, ViewCompiledIcon, ViewOriginalIcon } from './icons';
12
- import './styles.css';
2
+ import ErrorStackParser from "error-stack-parser";
3
+ import * as htmlToImage from "html-to-image";
4
+ import { ErrorBoundary, For, Show, Suspense, createMemo, createSignal } from "solid-js";
5
+ import { Portal } from "solid-js/web";
6
+ // @ts-ignore - terracotta module resolution issue with NodeNext
7
+ import { Dialog, DialogOverlay, DialogPanel, Select, SelectOption } from "terracotta";
8
+ import info from "../../../package.json" with { type: "json" };
9
+ import { CodeView } from "./CodeView.jsx";
10
+ import { createStackFrame } from "./createStackFrame.js";
11
+ import download from "./download.js";
12
+ import { ArrowLeftIcon, ArrowRightIcon, CameraIcon, DiscordIcon, GithubIcon, RefreshIcon, SolidStartIcon, ViewCompiledIcon, ViewOriginalIcon } from "./icons.jsx";
13
+ import "./styles.css";
13
14
  export function classNames(...classes) {
14
- return classes.filter(Boolean).join(' ');
15
+ return classes.filter(Boolean).join(" ");
15
16
  }
16
17
  function ErrorInfo(props) {
17
18
  const error = createMemo(() => {
@@ -31,8 +32,8 @@ function ErrorInfo(props) {
31
32
  }
32
33
  function getFileName(source) {
33
34
  try {
34
- const path = source.startsWith('/') ? new URL(source, 'file://') : new URL(source);
35
- const paths = path.pathname.split('/');
35
+ const path = source.startsWith("/") ? new URL(source, "file://") : new URL(source);
36
+ const paths = path.pathname.split("/");
36
37
  return paths[paths.length - 1];
37
38
  }
38
39
  catch (error) {
@@ -40,71 +41,77 @@ function getFileName(source) {
40
41
  }
41
42
  }
42
43
  function getFilePath(source) {
43
- const line = source.line ? `:${source.line}` : '';
44
- const column = source.column ? `:${source.column}` : '';
44
+ const line = source.line ? `:${source.line}` : "";
45
+ const column = source.column ? `:${source.column}` : "";
45
46
  return `${getFileName(source.source)}${line}${column}`;
46
47
  }
47
48
  function CodeFallback() {
48
- return <div class="dev-overlay-stack-frames-code-fallback">
49
- <span>Source not available.</span>
50
- </div>;
49
+ return (<div class="dev-overlay-stack-frames-code-fallback">
50
+ <span>Source not available.</span>
51
+ </div>);
51
52
  }
52
53
  function StackFramesContent(props) {
53
54
  const stackframes = ErrorStackParser.parse(props.error);
54
55
  const [selectedFrame, setSelectedFrame] = createSignal(stackframes[0]);
55
56
  return (<div class="dev-overlay-stack-frames-content">
56
- <div class="dev-overlay-stack-frames-code">
57
- <ErrorBoundary fallback={null}>
58
- {(() => {
57
+ <div class="dev-overlay-stack-frames-code">
58
+ <ErrorBoundary fallback={null}>
59
+ {(() => {
59
60
  const data = createStackFrame(selectedFrame(), () => props.isCompiled);
60
61
  return (<Suspense fallback={<CodeFallback />}>
61
- <Show when={data()} keyed fallback={<CodeFallback />}>
62
- {(source) => (<>
63
- <span class="dev-overlay-stack-frames-code-source">{source.source}</span>
64
- <div class="dev-overlay-stack-frames-code-container">
65
- <CodeView fileName={source.source} line={source.line} content={source.content}/>
66
- </div>
67
- </>)}
68
- </Show>
69
- </Suspense>);
62
+ <Show when={data()} keyed fallback={<CodeFallback />}>
63
+ {source => (<>
64
+ <span class="dev-overlay-stack-frames-code-source">{source.source}</span>
65
+ <div class="dev-overlay-stack-frames-code-container">
66
+ <CodeView fileName={source.source} line={source.line} content={source.content}/>
67
+ </div>
68
+ </>)}
69
+ </Show>
70
+ </Suspense>);
70
71
  })()}
71
- </ErrorBoundary>
72
- </div>
73
- <Select class="dev-overlay-stack-frames" value={selectedFrame()} onChange={setSelectedFrame}>
74
- <For each={stackframes}>
75
- {(current) => (<ErrorBoundary fallback={(<div class="dev-overlay-stack-frame">
76
- <span class="dev-overlay-stack-frame-function">{current.functionName ?? '<anonymous>'}</span>
77
- <span class="dev-overlay-stack-frame-file">{getFilePath({
72
+ </ErrorBoundary>
73
+ </div>
74
+ <Select class="dev-overlay-stack-frames" value={selectedFrame()} onChange={setSelectedFrame}>
75
+ <For each={stackframes}>
76
+ {current => (<ErrorBoundary fallback={<div class="dev-overlay-stack-frame">
77
+ <span class="dev-overlay-stack-frame-function">
78
+ {current.functionName ?? "<anonymous>"}
79
+ </span>
80
+ <span class="dev-overlay-stack-frame-file">
81
+ {getFilePath({
78
82
  source: current.getFileName(),
79
- content: '',
83
+ content: "",
80
84
  line: current.getLineNumber(),
81
85
  column: current.getColumnNumber(),
82
- name: current.getFunctionName(),
83
- })}</span>
84
- </div>)}>
86
+ name: current.getFunctionName()
87
+ })}
88
+ </span>
89
+ </div>}>
85
90
  {(() => {
86
91
  const data = createStackFrame(current, () => props.isCompiled);
87
92
  return (<Suspense>
88
93
  <Show when={data()} keyed>
89
- {(source) => (<SelectOption class="dev-overlay-stack-frame" value={current}>
90
- <span class="dev-overlay-stack-frame-function">{source.name ?? '<anonymous>'}</span>
94
+ {source => (<SelectOption class="dev-overlay-stack-frame" value={current}>
95
+ <span class="dev-overlay-stack-frame-function">
96
+ {source.name ?? "<anonymous>"}
97
+ </span>
91
98
  <span class="dev-overlay-stack-frame-file">{getFilePath(source)}</span>
92
99
  </SelectOption>)}
93
100
  </Show>
94
101
  </Suspense>);
95
102
  })()}
96
103
  </ErrorBoundary>)}
97
- </For>
98
- </Select>
99
- </div>);
104
+ </For>
105
+ </Select>
106
+ </div>);
100
107
  }
101
108
  function StackFrames(props) {
102
109
  return (<Show when={props.error instanceof Error && props.error} keyed>
103
- {(current) => (<StackFramesContent error={current} isCompiled={props.isCompiled}/>)}
110
+ {current => <StackFramesContent error={current} isCompiled={props.isCompiled}/>}
104
111
  </Show>);
105
112
  }
106
- const ISSUE_THREAD = 'https://github.com/solidjs/solid-start/issues/new';
107
- const DISCORD_INVITE = 'https://discord.com/invite/solidjs';
113
+ const ISSUE_THREAD = "https://github.com/solidjs/solid-start/issues/new";
114
+ const DISCORD_INVITE = "https://discord.com/invite/solidjs";
108
115
  export default function DevOverlayDialog(props) {
109
116
  const [currentPage, setCurrentPage] = createSignal(1);
110
117
  const [isCompiled, setIsCompiled] = createSignal(false);
@@ -113,7 +120,7 @@ export default function DevOverlayDialog(props) {
113
120
  return Math.min(currentPage(), length());
114
121
  });
115
122
  function goPrev() {
116
- setCurrentPage((c) => {
123
+ setCurrentPage(c => {
117
124
  if (c > 1) {
118
125
  return c - 1;
119
126
  }
@@ -121,7 +128,7 @@ export default function DevOverlayDialog(props) {
121
128
  });
122
129
  }
123
130
  function goNext() {
124
- setCurrentPage((c) => {
131
+ setCurrentPage(c => {
125
132
  if (c < length()) {
126
133
  return c + 1;
127
134
  }
@@ -129,31 +136,33 @@ export default function DevOverlayDialog(props) {
129
136
  });
130
137
  }
131
138
  function toggleIsCompiled() {
132
- setIsCompiled((c) => !c);
139
+ setIsCompiled(c => !c);
133
140
  }
134
141
  const [panel, setPanel] = createSignal();
135
142
  function downloadScreenshot() {
136
143
  const current = panel();
137
144
  if (current) {
138
- htmlToImage.toPng(current, {
145
+ htmlToImage
146
+ .toPng(current, {
139
147
  style: {
140
- transform: 'scale(0.75)',
141
- },
142
- }).then((url) => {
143
- download(url, 'start-screenshot.png');
148
+ transform: "scale(0.75)"
149
+ }
150
+ })
151
+ .then(url => {
152
+ download(url, "start-screenshot.png");
144
153
  });
145
154
  }
146
155
  }
147
156
  function redirectToGithub() {
148
157
  const url = new URL(ISSUE_THREAD);
149
- url.searchParams.append('labels', 'bug');
150
- url.searchParams.append('labels', 'needs+triage');
151
- url.searchParams.append('template', 'bug.yml');
152
- url.searchParams.append('title', `[Bug?]:` + props.errors[truncated() - 1].toString());
153
- window.open(url, '_blank').focus();
158
+ url.searchParams.append("labels", "bug");
159
+ url.searchParams.append("labels", "needs+triage");
160
+ url.searchParams.append("template", "bug.yml");
161
+ url.searchParams.append("title", `[Bug?]:` + props.errors[truncated() - 1].toString());
162
+ window.open(url, "_blank").focus();
154
163
  }
155
164
  function redirectToDiscord() {
156
- window.open(DISCORD_INVITE, '_blank').focus();
165
+ window.open(DISCORD_INVITE, "_blank").focus();
157
166
  }
158
167
  return (<Portal>
159
168
  <Dialog class="dev-overlay" isOpen>
@@ -194,7 +203,7 @@ export default function DevOverlayDialog(props) {
194
203
  <CameraIcon title="Capture Error Overlay"/>
195
204
  </button>
196
205
  <button class="dev-overlay-button" onClick={toggleIsCompiled} type="button">
197
- <Show when={isCompiled()} fallback={(<ViewOriginalIcon title="View Original Source"/>)}>
206
+ <Show when={isCompiled()} fallback={<ViewOriginalIcon title="View Original Source"/>}>
198
207
  <ViewCompiledIcon title="View Compiled Source"/>
199
208
  </Show>
200
209
  </button>
@@ -204,7 +213,7 @@ export default function DevOverlayDialog(props) {
204
213
  </div>
205
214
  </div>
206
215
  <Show when={props.errors[truncated() - 1]} keyed>
207
- {(current) => (<div class="dev-overlay-content">
216
+ {current => (<div class="dev-overlay-content">
208
217
  <ErrorInfo error={current}/>
209
218
  <StackFrames error={current} isCompiled={isCompiled()}/>
210
219
  </div>)}
@@ -1,8 +1,8 @@
1
1
  import { createMemo, createResource } from "solid-js";
2
- import getSourceMap from "./get-source-map";
2
+ import getSourceMap from "./get-source-map.js";
3
3
  function getActualFileSource(path) {
4
- if (path.startsWith('file://')) {
5
- return '/_build/@fs' + path.substring('file://'.length);
4
+ if (path.startsWith("file://")) {
5
+ return "/_build/@fs" + path.substring("file://".length);
6
6
  }
7
7
  return path;
8
8
  }
@@ -1,13 +1,10 @@
1
1
  // @refresh skip
2
2
  import { ErrorBoundary, Show, createEffect, createSignal, onCleanup, resetErrorBoundaries } from "solid-js";
3
- import { HttpStatusCode } from "../HttpStatusCode";
4
- import clientOnly from "../clientOnly";
5
- const DevOverlayDialog =
6
- /* #__PURE__ */ process.env.NODE_ENV === "production"
7
- ? () => {
8
- return <></>;
9
- }
10
- : /* #__PURE__ */ clientOnly(() => import("./DevOverlayDialog"), { lazy: true });
3
+ import { HttpStatusCode } from "../HttpStatusCode.js";
4
+ import clientOnly from "../clientOnly.js";
5
+ const DevOverlayDialog = import.meta.env.PROD
6
+ ? () => <></>
7
+ : clientOnly(() => import("./DevOverlayDialog"), { lazy: true });
11
8
  export function DevOverlay(props) {
12
9
  const [errors, setErrors] = createSignal([]);
13
10
  function resetError() {
@@ -0,0 +1,3 @@
1
+ import { lazy as solidLazy } from "solid-js";
2
+ declare const lazy: typeof solidLazy;
3
+ export default lazy;
@@ -0,0 +1,40 @@
1
+ import { 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.js";
5
+ const assetsById = {};
6
+ const getAssets = async (id) => {
7
+ if (assetsById[id])
8
+ return assetsById[id];
9
+ const manifest = getManifest(import.meta.env.SSR && import.meta.env.DEV ? "ssr" : "client");
10
+ const assets = await manifest.getAssets(id);
11
+ if (import.meta.env.PROD)
12
+ assetsById[id] = assets;
13
+ return assets;
14
+ };
15
+ const withAssets = function (fn) {
16
+ const wrapper = async () => {
17
+ const mod = await fn();
18
+ // This id$$ export is generated by the lazy vite plugin
19
+ const id = mod.id$$;
20
+ if (!id)
21
+ return mod;
22
+ if (!mod.default) {
23
+ console.error(`Module ${id} does not export default`);
24
+ return { default: () => [] };
25
+ }
26
+ const assets = await getAssets(id);
27
+ if (!assets.length)
28
+ return mod;
29
+ return {
30
+ default: (props) => {
31
+ const { nonce } = getRequestEvent();
32
+ useAssets(assets, nonce);
33
+ return mod.default(props);
34
+ }
35
+ };
36
+ };
37
+ return wrapper;
38
+ };
39
+ const lazy = !isServer ? solidLazy : (fn) => solidLazy(withAssets(fn));
40
+ export default lazy;
@@ -1,4 +1,4 @@
1
- import type { ServerFunctionMeta } from "../server/types";
1
+ import type { ServerFunctionMeta } from "../server/types.ts";
2
2
  /**
3
3
  *
4
4
  * Read more: https://docs.solidjs.com/solid-start/reference/server/get-server-function-meta
package/package.json CHANGED
@@ -1,88 +1,66 @@
1
1
  {
2
2
  "name": "@solidjs/start",
3
- "version": "1.2.0",
3
+ "version": "2.0.0-alpha.0",
4
4
  "type": "module",
5
- "author": "Ryan Carniato",
6
- "license": "MIT",
7
- "homepage": "https://start.solidjs.com/",
8
- "bugs": "https://github.com/solidjs/solid-start/issues",
9
- "repository": {
10
- "type": "git",
11
- "url": "https://github.com/solidjs/solid-start.git",
12
- "directory": "packages/start"
13
- },
14
- "publishConfig": {
15
- "access": "public"
16
- },
17
- "files": [
18
- "config",
19
- "dist",
20
- "env.d.ts"
21
- ],
22
- "types": "./dist/index.d.ts",
23
5
  "exports": {
24
6
  ".": "./dist/index.jsx",
25
- "./config": "./config/index.js",
26
- "./middleware": "./dist/middleware/index.jsx",
27
- "./router": "./dist/router/index.jsx",
7
+ "./config": "./dist/config/index.js",
28
8
  "./server": "./dist/server/index.jsx",
29
- "./server/spa": "./dist/server/spa/index.jsx",
30
9
  "./client": "./dist/client/index.jsx",
31
- "./client/islands": "./dist/client/islands.jsx",
10
+ "./router": "./dist/router.jsx",
11
+ "./server/spa": "./dist/server/spa/index.jsx",
32
12
  "./client/spa": "./dist/client/spa/index.jsx",
33
- "./env": {
34
- "types": "./env.d.ts",
35
- "import": null
36
- }
37
- },
38
- "typesVersions": {
39
- "*": {
40
- ".": [
41
- "./dist/index.d.ts"
42
- ],
43
- "middleware": [
44
- "./dist/middleware/index.d.ts"
45
- ],
46
- "router": [
47
- "./dist/router/index.d.ts"
48
- ],
49
- "server": [
50
- "./dist/server/index.d.ts"
51
- ],
52
- "client": [
53
- "./dist/client/index.d.ts"
54
- ]
55
- }
13
+ "./middleware": "./dist/middleware/index.js",
14
+ "./http": "./dist/http/index.js"
56
15
  },
57
- "devDependencies": {
58
- "solid-js": "^1.9.5",
59
- "vinxi": "^0.5.7",
60
- "vitest": "3.0.5"
16
+ "publishConfig": {
17
+ "access": "public"
61
18
  },
62
19
  "dependencies": {
63
- "@tanstack/server-functions-plugin": "1.121.21",
64
- "@vinxi/plugin-directives": "^0.5.0",
65
- "@vinxi/server-components": "^0.5.0",
20
+ "@babel/core": "^7.28.3",
21
+ "@babel/traverse": "^7.28.3",
22
+ "@babel/types": "^7.28.5",
23
+ "@solidjs/meta": "^0.29.4",
24
+ "@tanstack/server-functions-plugin": "1.134.5",
25
+ "@types/babel__traverse": "^7.28.0",
26
+ "@types/micromatch": "^4.0.9",
66
27
  "cookie-es": "^2.0.0",
67
- "defu": "^6.1.2",
28
+ "defu": "^6.1.4",
68
29
  "error-stack-parser": "^2.1.4",
69
- "html-to-image": "^1.11.11",
70
- "radix3": "^1.1.0",
71
- "seroval": "^1.0.2",
72
- "seroval-plugins": "^1.0.2",
30
+ "es-module-lexer": "^1.7.0",
31
+ "esbuild": "^0.25.3",
32
+ "fast-glob": "^3.3.3",
33
+ "h3": "npm:h3@2.0.1-rc.4",
34
+ "html-to-image": "^1.11.13",
35
+ "micromatch": "^4.0.8",
36
+ "path-to-regexp": "^8.2.0",
37
+ "pathe": "^2.0.3",
38
+ "radix3": "^1.1.2",
39
+ "seroval": "^1.3.2",
40
+ "seroval-plugins": "^1.2.1",
73
41
  "shiki": "^1.26.1",
74
- "source-map-js": "^1.0.2",
75
- "terracotta": "^1.0.4",
76
- "tinyglobby": "^0.2.2",
77
- "vite-plugin-solid": "^2.11.1"
42
+ "solid-js": "^1.9.9",
43
+ "source-map-js": "^1.2.1",
44
+ "srvx": "^0.9.1",
45
+ "terracotta": "^1.0.6",
46
+ "vite-plugin-solid": "^2.11.9"
47
+ },
48
+ "engines": {
49
+ "node": ">=22"
50
+ },
51
+ "devDependencies": {
52
+ "@types/babel__core": "^7.20.5",
53
+ "vite": "^7.1.10",
54
+ "vitest": "^4.0.10"
78
55
  },
79
56
  "peerDependencies": {
80
- "vinxi": "^0.5.7"
57
+ "vite": "^7"
81
58
  },
82
59
  "scripts": {
83
- "typecheck": "tsc --noEmit",
84
- "build": "node build && pnpm tsc",
60
+ "build": "pnpm validate-imports && tsc && node scripts/build.js",
61
+ "dev": "tsc --watch",
85
62
  "test": "vitest",
86
- "test:ci": "vitest run"
63
+ "test:ci": "vitest run",
64
+ "validate-imports": "node scripts/validate-imports.js"
87
65
  }
88
66
  }
@@ -0,0 +1,15 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import glob from "fast-glob";
4
+
5
+ const files = await glob("**/*.{js,css}", { cwd: `${process.cwd()}/src` });
6
+
7
+ await Promise.all(
8
+ files.map(file =>
9
+ fs.cp(
10
+ path.join(import.meta.dirname, "../src", file),
11
+ path.join(import.meta.dirname, "../dist", file),
12
+ { recursive: true }
13
+ )
14
+ )
15
+ );