diff --git a/.changeset/fix-windows-preview-path-to-file-url.md b/.changeset/fix-windows-preview-path-to-file-url.md new file mode 100644 index 000000000..a007cc505 --- /dev/null +++ b/.changeset/fix-windows-preview-path-to-file-url.md @@ -0,0 +1,5 @@ +--- +"@solidjs/start": patch +--- + +Convert absolute path to file:// URL before dynamic import in preview server to fix Windows compatibility diff --git a/packages/start/src/config/dev-server.ts b/packages/start/src/config/dev-server.ts index d88a8cb0d..3b2ad6ae6 100644 --- a/packages/start/src/config/dev-server.ts +++ b/packages/start/src/config/dev-server.ts @@ -1,4 +1,5 @@ import { NodeRequest, sendNodeResponse } from "srvx/node"; +import { pathToFileURL } from "node:url"; import { type Connect, isRunnableDevEnvironment, @@ -18,7 +19,7 @@ export function devServer(): Array { const webReq = new NodeRequest({ req, res }); const def: { default: { fetch: (req: Request) => Promise }; - } = await import(process.cwd() + "/dist/server/entry-server.js"); + } = await import(pathToFileURL(process.cwd() + "/dist/server/entry-server.js").href); sendNodeResponse(res, await def.default.fetch(webReq)); }); }; diff --git a/packages/start/src/server/handler.ts b/packages/start/src/server/handler.ts index 9b1c9f218..f08f1f41c 100644 --- a/packages/start/src/server/handler.ts +++ b/packages/start/src/server/handler.ts @@ -114,12 +114,15 @@ export function createBaseHandler( if (mode === "async") return await stream; - delete (stream as any).then; - // using TransformStream in dev can cause solid-start-dev-server to crash // when stream is cancelled if (globalThis.USING_SOLID_START_DEV_SERVER) return stream; + // remove thenable so h3/Cloudflare Workers do not await the stream object; + // must happen after the dev-server branch so the stream remains awaitable + // when returned to solid-start-dev-server above + delete (stream as any).then; + // returning stream directly breaks cloudflare workers const { writable, readable } = new TransformStream(); stream.pipeTo(writable);