diff --git a/apps/fixtures/experiments/src/routes/index.tsx b/apps/fixtures/experiments/src/routes/index.tsx index ee43bcba8..1201bd2c0 100644 --- a/apps/fixtures/experiments/src/routes/index.tsx +++ b/apps/fixtures/experiments/src/routes/index.tsx @@ -23,7 +23,7 @@ export default function Home() { console.log(await v.hello); }); const port = isServer ? new URL(getRequestEvent()!.request.url).port: location.port; - fetch(`http://localhost:${port}/${import.meta.env.SERVER_BASE_URL}/unknown`, { + fetch(`http://localhost:${port}${import.meta.env.BASE_URL}/unknown`, { headers: { Accept: "application/json" } }).then(async res => console.log(await res.json())); return ( diff --git a/apps/fixtures/experiments/tsconfig.json b/apps/fixtures/experiments/tsconfig.json index 4ea27f698..b9f69f64a 100644 --- a/apps/fixtures/experiments/tsconfig.json +++ b/apps/fixtures/experiments/tsconfig.json @@ -11,6 +11,7 @@ "strict": true, "noEmit": true, "isolatedModules": true, + "types": ["vite/client"], "paths": { "~/*": ["./src/*"] } diff --git a/packages/start/src/server/handler.ts b/packages/start/src/server/handler.ts index 090c5484a..58d69aa87 100644 --- a/packages/start/src/server/handler.ts +++ b/packages/start/src/server/handler.ts @@ -34,7 +34,7 @@ export function createBaseHandler( const url = new URL(event.request.url); const pathname = url.pathname; - const serverFunctionTest = join("/", SERVER_FN_BASE); + const serverFunctionTest = join(import.meta.env.BASE_URL, SERVER_FN_BASE); if (pathname.startsWith(serverFunctionTest)) { const serverFnResponse = await handleServerFunction(e); diff --git a/packages/start/src/server/manifest/dev-client-manifest.ts b/packages/start/src/server/manifest/dev-client-manifest.ts index db9170e03..0d15c4d54 100644 --- a/packages/start/src/server/manifest/dev-client-manifest.ts +++ b/packages/start/src/server/manifest/dev-client-manifest.ts @@ -6,11 +6,7 @@ export function getClientDevManifest() { return import(/* @vite-ignore */ join("/", id)) }, async getAssets(id) { - const assetsPath = - join( - import.meta.env.BASE_URL, - `@manifest/client/${Date.now()}/assets?id=${id}`, - ); + const assetsPath = `/@manifest/client/${Date.now()}/assets?id=${id}`; const assets = (await import(/* @vite-ignore */ assetsPath)).default; diff --git a/packages/start/src/server/manifest/dev-ssr-manifest.ts b/packages/start/src/server/manifest/dev-ssr-manifest.ts index 9ecc556c8..735ec073f 100644 --- a/packages/start/src/server/manifest/dev-ssr-manifest.ts +++ b/packages/start/src/server/manifest/dev-ssr-manifest.ts @@ -2,13 +2,9 @@ import { join, normalize } from "pathe"; export function getSsrDevManifest(environment: "client" | "ssr") { return { - path: (id: string) => normalize(join("/", id)), + path: (id: string) => normalize(join(import.meta.env.BASE_URL, id)), async getAssets(id) { - const assetsPath = - join( - import.meta.env.BASE_URL, - `@manifest/${environment}/${Date.now()}/assets?id=${id}`, - ); + const assetsPath = `/@manifest/${environment}/${Date.now()}/assets?id=${id}`; const assets = (await import(/* @vite-ignore */ assetsPath)).default; diff --git a/packages/start/src/server/server-fns-runtime.ts b/packages/start/src/server/server-fns-runtime.ts index cb728d271..f56fdad72 100644 --- a/packages/start/src/server/server-fns-runtime.ts +++ b/packages/start/src/server/server-fns-runtime.ts @@ -4,11 +4,13 @@ import { provideRequestEvent } from "solid-js/web/storage"; export function createServerReference(fn: Function, id: string) { if (typeof fn !== "function") throw new Error("Export from a 'use server' module must be a function"); - const baseURL = import.meta.env.SERVER_BASE_URL ?? ""; + let baseURL = import.meta.env.BASE_URL ?? "/"; + if(!baseURL.endsWith("/")) baseURL += "/" + return new Proxy(fn, { get(target, prop, receiver) { if (prop === "url") { - return `${baseURL}/_server?id=${encodeURIComponent(id)}`; + return `${baseURL}_server?id=${encodeURIComponent(id)}`; } if (prop === "GET") return receiver; return (target as any)[prop]; diff --git a/packages/start/src/server/server-functions-handler.ts b/packages/start/src/server/server-functions-handler.ts index c7da390ad..2466567d0 100644 --- a/packages/start/src/server/server-functions-handler.ts +++ b/packages/start/src/server/server-functions-handler.ts @@ -237,7 +237,7 @@ function handleNoJS( `Location`, new URL( result.headers.get("Location")!, - url.origin + import.meta.env.SERVER_BASE_URL, + url.origin + import.meta.env.BASE_URL, ).toString(), ); statusCode = getExpectedRedirectStatus(result); @@ -318,7 +318,7 @@ async function handleSingleFlight( url = new URL( result.headers.get("Location")!, new URL(sourceEvent.request.url).origin + - import.meta.env.SERVER_BASE_URL, + import.meta.env.BASE_URL, ).toString(); } const event = { ...sourceEvent } as PageEvent; diff --git a/packages/start/src/server/server-runtime.ts b/packages/start/src/server/server-runtime.ts index 404e1cb27..0af198aea 100644 --- a/packages/start/src/server/server-runtime.ts +++ b/packages/start/src/server/server-runtime.ts @@ -1,4 +1,5 @@ // @ts-ignore - seroval exports issue with NodeNext +import { join } from "pathe"; import { deserialize, toJSONAsync } from "seroval"; import { CustomEventPlugin, @@ -193,19 +194,21 @@ async function fetchServerFunction( } export function createServerReference(id: string) { - const baseURL = import.meta.env.SERVER_BASE_URL ?? ""; - const fn = (...args: any[]) => fetchServerFunction(`${baseURL}/_server`, id, {}, args); + let baseURL = import.meta.env.BASE_URL ?? "/"; + if(!baseURL.endsWith("/")) baseURL += "/" + + const fn = (...args: any[]) => fetchServerFunction(`${baseURL}_server`, id, {}, args); return new Proxy(fn, { get(target, prop, receiver) { if (prop === "url") { - return `${baseURL}/_server?id=${encodeURIComponent(id)}`; + return `${baseURL}_server?id=${encodeURIComponent(id)}`; } if (prop === "GET") { return receiver.withOptions({ method: "GET" }); } if (prop === "withOptions") { - const url = `${baseURL}/_server?id=${encodeURIComponent(id)}`; + const url = `${baseURL}_server?id=${encodeURIComponent(id)}`; return (options: RequestInit) => { const fn = async (...args: any[]) => { const encodeArgs = options.method && options.method.toUpperCase() === "GET"; @@ -217,7 +220,7 @@ export function createServerReference(id: string) { JSON.stringify(await Promise.resolve(toJSONAsync(args, { plugins }))) )}` : "") - : `${baseURL}/_server`, + : `${baseURL}_server`, id, options, encodeArgs ? [] : args