diff --git a/packages/start/package.json b/packages/start/package.json index e3f75341e..21cf61bc1 100644 --- a/packages/start/package.json +++ b/packages/start/package.json @@ -19,7 +19,9 @@ "./client/spa": "./src/client/spa/index.tsx", "./middleware": "./src/middleware/index.ts", "./http": "./src/http/index.ts", - "./env": "./env.d.ts" + "./env": "./env.d.ts", + "./fns/server": "./src/fns/server.ts", + "./fns/client": "./src/fns/client.ts" }, "publishConfig": { "access": "public", @@ -33,7 +35,9 @@ "./client/spa": "./dist/client/spa/index.jsx", "./middleware": "./dist/middleware/index.js", "./http": "./dist/http/index.js", - "./env": "./env.d.ts" + "./env": "./env.d.ts", + "./fns/server": "./dist/fns/server.js", + "./fns/client": "./dist/fns/client.js" } }, "dependencies": { diff --git a/packages/start/src/config/index.ts b/packages/start/src/config/index.ts index cf0f10a3f..32f309011 100644 --- a/packages/start/src/config/index.ts +++ b/packages/start/src/config/index.ts @@ -1,13 +1,12 @@ import { defu } from "defu"; import { globSync } from "node:fs"; import { extname, isAbsolute, join } from "node:path"; -import { fileURLToPath } from "node:url"; -import { normalizePath, type PluginOption } from "vite"; +import type { PluginOption } from "vite"; import solid, { type Options as SolidOptions } from "vite-plugin-solid"; -import { serverFunctionsPlugin } from "../directives/index.ts"; +import { type ServerFunctionsOptions, serverFunctionsPlugin } from "../directives/index.ts"; import { DEFAULT_EXTENSIONS, VIRTUAL_MODULES, VITE_ENVIRONMENTS } from "./constants.ts"; import { devServer } from "./dev-server.ts"; -import { type EnvPluginOptions, envPlugin } from "./env.ts"; +import { envPlugin, type EnvPluginOptions } from "./env.ts"; import { SolidStartClientFileRouter, SolidStartServerFileRouter } from "./fs-router.ts"; import { fsRoutes } from "./fs-routes/index.ts"; import type { BaseFileSystemRouter } from "./fs-routes/router.ts"; @@ -33,6 +32,7 @@ export interface SolidStartOptions { mode?: "js" | "json"; }; env?: EnvPluginOptions; + serverFunctions?: Pick; } const absolute = (path: string, root: string) => @@ -182,13 +182,10 @@ export function solidStart(options?: SolidStartOptions): Array { serverFunctionsPlugin({ manifest: VIRTUAL_MODULES.serverFnManifest, runtime: { - server: normalizePath( - fileURLToPath(new URL("../server/server-fns-runtime.ts", import.meta.url)), - ), - client: normalizePath( - fileURLToPath(new URL("../server/server-runtime.ts", import.meta.url)), - ), + server: '@solidjs/start/fns/server', + client: '@solidjs/start/fns/client', }, + filter: options?.serverFunctions?.filter, }), { name: "solid-start:virtual-modules", diff --git a/packages/start/src/directives/index.ts b/packages/start/src/directives/index.ts index 009756d37..0219fe346 100644 --- a/packages/start/src/directives/index.ts +++ b/packages/start/src/directives/index.ts @@ -113,6 +113,7 @@ function invalidateModules( } } + export function serverFunctionsPlugin(options: ServerFunctionsOptions): Plugin[] { const filter = createFilter( options.filter?.include || DEFAULT_INCLUDE, diff --git a/packages/start/src/server/server-runtime.ts b/packages/start/src/fns/client.ts similarity index 98% rename from packages/start/src/server/server-runtime.ts rename to packages/start/src/fns/client.ts index 8b1f9fdf8..c50fb21f9 100644 --- a/packages/start/src/server/server-runtime.ts +++ b/packages/start/src/fns/client.ts @@ -8,7 +8,7 @@ import { BodyFormat, extractBody, getHeadersAndBody, -} from "./server-functions-shared.ts"; +} from "./shared.ts"; let INSTANCE = 0; diff --git a/packages/start/src/server/server-functions-handler.spec.ts b/packages/start/src/fns/handler.spec.ts similarity index 100% rename from packages/start/src/server/server-functions-handler.spec.ts rename to packages/start/src/fns/handler.spec.ts diff --git a/packages/start/src/server/server-functions-handler.ts b/packages/start/src/fns/handler.ts similarity index 96% rename from packages/start/src/server/server-functions-handler.ts rename to packages/start/src/fns/handler.ts index 46fb65d55..53c821476 100644 --- a/packages/start/src/server/server-functions-handler.ts +++ b/packages/start/src/fns/handler.ts @@ -4,8 +4,8 @@ import { sharedConfig } from "solid-js"; import { renderToString } from "solid-js/web"; import { provideRequestEvent } from "solid-js/web/storage"; -import { getFetchEvent, mergeResponseHeaders } from "./fetchEvent.ts"; -import { createPageEvent } from "./handler.ts"; +import { getFetchEvent, mergeResponseHeaders } from "../server/fetchEvent.ts"; +import { createPageEvent } from "../server/handler.ts"; import { deserializeFromJSONString, serializeToJSONStream, @@ -16,12 +16,12 @@ import { BodyFormat, extractBody, getHeadersAndBody, -} from "./server-functions-shared.ts"; +} from "./shared.ts"; import "solidstart:server-fn-manifest"; -import { getServerFunction } from "./server-fns.ts"; -import type { FetchEvent, PageEvent } from "./types.ts"; -import { getExpectedRedirectStatus } from "./util.ts"; +import { getServerFunction } from "./registration.ts"; +import type { FetchEvent, PageEvent } from "../server/types.ts"; +import { getExpectedRedirectStatus } from "../server/util.ts"; export async function handleServerFunction(h3Event: H3Event) { const event = getFetchEvent(h3Event); diff --git a/packages/start/src/server/server-fns.ts b/packages/start/src/fns/registration.ts similarity index 100% rename from packages/start/src/server/server-fns.ts rename to packages/start/src/fns/registration.ts diff --git a/packages/start/src/server/serialization.ts b/packages/start/src/fns/serialization.ts similarity index 100% rename from packages/start/src/server/serialization.ts rename to packages/start/src/fns/serialization.ts diff --git a/packages/start/src/server/server-fns-runtime.ts b/packages/start/src/fns/server.ts similarity index 95% rename from packages/start/src/server/server-fns-runtime.ts rename to packages/start/src/fns/server.ts index a60ce3c7d..de6ecd8a8 100644 --- a/packages/start/src/server/server-fns-runtime.ts +++ b/packages/start/src/fns/server.ts @@ -1,6 +1,6 @@ import { getRequestEvent } from "solid-js/web"; import { provideRequestEvent } from "solid-js/web/storage"; -import { registerServerFunction } from "./server-fns.ts"; +import { registerServerFunction } from "./registration.ts"; interface Registration { id: string; diff --git a/packages/start/src/server/server-functions-shared.ts b/packages/start/src/fns/shared.ts similarity index 100% rename from packages/start/src/server/server-functions-shared.ts rename to packages/start/src/fns/shared.ts diff --git a/packages/start/src/server/handler.ts b/packages/start/src/server/handler.ts index 3b0609db9..c67ba8193 100644 --- a/packages/start/src/server/handler.ts +++ b/packages/start/src/server/handler.ts @@ -9,7 +9,7 @@ import { createRoutes } from "../router.tsx"; import { decorateHandler, decorateMiddleware } from "./fetchEvent.ts"; import { getSsrManifest } from "./manifest/ssr-manifest.ts"; import { matchAPIRoute } from "./routes.ts"; -import { handleServerFunction } from "./server-functions-handler.ts"; +import { handleServerFunction } from "../fns/handler.ts"; import type { APIEvent, FetchEvent, HandlerOptions, PageEvent } from "./types.ts"; import { getExpectedRedirectStatus } from "./util.ts";