diff --git a/.changeset/sharp-rooms-think.md b/.changeset/sharp-rooms-think.md
new file mode 100644
index 000000000..289e2709b
--- /dev/null
+++ b/.changeset/sharp-rooms-think.md
@@ -0,0 +1,5 @@
+---
+"@solidjs/start": patch
+---
+
+Handle multiple exports from the same file in fs-router
diff --git a/.changeset/ten-areas-burn.md b/.changeset/ten-areas-burn.md
new file mode 100644
index 000000000..af1bfc200
--- /dev/null
+++ b/.changeset/ten-areas-burn.md
@@ -0,0 +1,5 @@
+---
+"@solidjs/start": patch
+---
+
+Add a test route for multiple exports handling and correct variable typos
diff --git a/packages/start/config/fs-router.js b/packages/start/config/fs-router.js
index b4eb0e682..6d92c763c 100644
--- a/packages/start/config/fs-router.js
+++ b/packages/start/config/fs-router.js
@@ -1,4 +1,4 @@
-import { analyzeModule, BaseFileSystemRouter, cleanPath } from "vinxi/fs-router";
+import {analyzeModule, BaseFileSystemRouter, cleanPath} from "vinxi/fs-router";
export class SolidStartClientFileRouter extends BaseFileSystemRouter {
toPath(src) {
@@ -43,13 +43,13 @@ export class SolidStartClientFileRouter extends BaseFileSystemRouter {
page: true,
$component: {
src: src,
- pick: ["default", "$css"]
+ pick: [...exports.filter(e => e.n === e.ln && e.n !== "route").map(e => e.n), "default", "$css"]
},
$$route: hasRouteConfig
? {
- src: src,
- pick: ["route"]
- }
+ src: src,
+ pick: ["route"]
+ }
: undefined,
path,
filePath: src
@@ -123,15 +123,15 @@ export class SolidStartServerFileRouter extends BaseFileSystemRouter {
$component:
!this.config.dataOnly && hasDefault
? {
- src: src,
- pick: ["default", "$css"]
- }
+ src: src,
+ pick: [...exports.filter(e => e.n === e.ln && e.n !== "route" && !HTTP_METHODS.includes(e.n)).map(e => e.n), "default", "$css"]
+ }
: undefined,
$$route: hasRouteConfig
? {
- src: src,
- pick: ["route"]
- }
+ src: src,
+ pick: ["route"]
+ }
: undefined,
...createHTTPHandlers(src, exports),
path,
diff --git a/packages/tests/src/app.tsx b/packages/tests/src/app.tsx
index a84fd3f03..3be335393 100644
--- a/packages/tests/src/app.tsx
+++ b/packages/tests/src/app.tsx
@@ -50,6 +50,9 @@ export default function App() {
generator server function
+
+ referencing multiple export named functions in the same file
+
{props.children}
diff --git a/packages/tests/src/functions/text-render-test-component.tsx b/packages/tests/src/functions/text-render-test-component.tsx
new file mode 100644
index 000000000..705cd44e6
--- /dev/null
+++ b/packages/tests/src/functions/text-render-test-component.tsx
@@ -0,0 +1,4 @@
+export function TextRenderTestComponent() {
+ const text = "(´。> ᵕ <。`) ♡";
+ return <>{text}>;
+}
diff --git a/packages/tests/src/routes/is-server-const.tsx b/packages/tests/src/routes/is-server-const.tsx
index cfd05ef94..6c8821e17 100644
--- a/packages/tests/src/routes/is-server-const.tsx
+++ b/packages/tests/src/routes/is-server-const.tsx
@@ -6,8 +6,8 @@ export default function App() {
createEffect(async () => {
- const restult = await serverFnWithIsServer();
- setOutput(prev => ({ ...prev, serverFnWithIsServer: restult }));
+ const result = await serverFnWithIsServer();
+ setOutput(prev => ({ ...prev, serverFnWithIsServer: result }));
});
diff --git a/packages/tests/src/routes/is-server-nested.tsx b/packages/tests/src/routes/is-server-nested.tsx
index 5806c207a..3e6086453 100644
--- a/packages/tests/src/routes/is-server-nested.tsx
+++ b/packages/tests/src/routes/is-server-nested.tsx
@@ -12,8 +12,8 @@ export default function App() {
createEffect(async () => {
- const restult = await serverFnWithIsServer();
- setOutput(prev => ({ ...prev, serverFnWithIsServer: restult }));
+ const result = await serverFnWithIsServer();
+ setOutput(prev => ({ ...prev, serverFnWithIsServer: result }));
});
diff --git a/packages/tests/src/routes/is-server-toplevel.tsx b/packages/tests/src/routes/is-server-toplevel.tsx
index 43add2dc2..b829cef9d 100644
--- a/packages/tests/src/routes/is-server-toplevel.tsx
+++ b/packages/tests/src/routes/is-server-toplevel.tsx
@@ -6,8 +6,8 @@ export default function App() {
createEffect(async () => {
- const restult = await serverFnWithIsServer();
- setOutput(prev => ({ ...prev, serverFnWithIsServer: restult }));
+ const result = await serverFnWithIsServer();
+ setOutput(prev => ({ ...prev, serverFnWithIsServer: result }));
});
diff --git a/packages/tests/src/routes/is-server-with-anon-default-export.tsx b/packages/tests/src/routes/is-server-with-anon-default-export.tsx
index d9cc25ae7..47922b2c8 100644
--- a/packages/tests/src/routes/is-server-with-anon-default-export.tsx
+++ b/packages/tests/src/routes/is-server-with-anon-default-export.tsx
@@ -6,8 +6,8 @@ export default function App() {
createEffect(async () => {
- const restult = await serverFnWithIsServer();
- setOutput(prev => ({ ...prev, serverFnWithIsServer: restult }));
+ const result = await serverFnWithIsServer();
+ setOutput(prev => ({ ...prev, serverFnWithIsServer: result }));
});
diff --git a/packages/tests/src/routes/node-builtin-nested.tsx b/packages/tests/src/routes/node-builtin-nested.tsx
index deb038851..e1f27c2df 100644
--- a/packages/tests/src/routes/node-builtin-nested.tsx
+++ b/packages/tests/src/routes/node-builtin-nested.tsx
@@ -13,8 +13,8 @@ export default function App() {
createEffect(async () => {
- const restult = await serverFnWithNodeBuiltin();
- setOutput(prev => ({ ...prev, serverFnWithNodeBuiltin: restult }));
+ const result = await serverFnWithNodeBuiltin();
+ setOutput(prev => ({ ...prev, serverFnWithNodeBuiltin: result }));
});
return (
diff --git a/packages/tests/src/routes/node-builtin-toplevel.tsx b/packages/tests/src/routes/node-builtin-toplevel.tsx
index 960b6bf0d..b9ca3db82 100644
--- a/packages/tests/src/routes/node-builtin-toplevel.tsx
+++ b/packages/tests/src/routes/node-builtin-toplevel.tsx
@@ -6,8 +6,8 @@ export default function App() {
const [output, setOutput] = createSignal<{ serverFnWithNodeBuiltin?: string }>({});
createEffect(async () => {
- const restult = await serverFnWithNodeBuiltin();
- setOutput(prev => ({ ...prev, serverFnWithNodeBuiltin: restult }));
+ const result = await serverFnWithNodeBuiltin();
+ setOutput(prev => ({ ...prev, serverFnWithNodeBuiltin: result }));
});
return (
diff --git a/packages/tests/src/routes/npm-module-nested.tsx b/packages/tests/src/routes/npm-module-nested.tsx
index 4116796db..19af38e17 100644
--- a/packages/tests/src/routes/npm-module-nested.tsx
+++ b/packages/tests/src/routes/npm-module-nested.tsx
@@ -11,8 +11,8 @@ export default function App() {
const [output, setOutput] = createSignal<{ serverFnWithNpmModule?: number[] }>({});
createEffect(async () => {
- const restult = await serverFnWithNpmModule();
- setOutput(prev => ({ ...prev, serverFnWithNpmModule: restult }));
+ const result = await serverFnWithNpmModule();
+ setOutput(prev => ({ ...prev, serverFnWithNpmModule: result }));
});
return (
diff --git a/packages/tests/src/routes/npm-module-toplevel.tsx b/packages/tests/src/routes/npm-module-toplevel.tsx
index e275f7a95..f9d6cfbf9 100644
--- a/packages/tests/src/routes/npm-module-toplevel.tsx
+++ b/packages/tests/src/routes/npm-module-toplevel.tsx
@@ -5,8 +5,8 @@ export default function App() {
const [output, setOutput] = createSignal<{ serverFnWithNpmModule?: number[] }>({});
createEffect(async () => {
- const restult = await serverFnWithNpmModule();
- setOutput(prev => ({ ...prev, serverFnWithNpmModule: restult }));
+ const result = await serverFnWithNpmModule();
+ setOutput(prev => ({ ...prev, serverFnWithNpmModule: result }));
});
return (
diff --git a/packages/tests/src/routes/referencing-multiple-export-named-functions-in-the-same-file.tsx b/packages/tests/src/routes/referencing-multiple-export-named-functions-in-the-same-file.tsx
new file mode 100644
index 000000000..6d477bd43
--- /dev/null
+++ b/packages/tests/src/routes/referencing-multiple-export-named-functions-in-the-same-file.tsx
@@ -0,0 +1,23 @@
+import { TextRenderTestComponent as ExternalCuteFaceDisplay} from "../functions/text-render-test-component";
+
+export function TextRenderTestComponent() {
+ return <>(´。• ᵕ •。`) ♡>;
+}
+
+export function VariableImportTestComponent() {
+ return <>{testObjectExport.stringValue}>;
+}
+
+export const testStringExport = "♡(˃͈ દ ˂͈ ༶ )";
+
+export const testObjectExport = {
+ stringValue: testStringExport,
+};
+
+export default function () {
+ return <>
+
+
+
+ >;
+}