{"version":3,"file":"dev-server-MS_HIMsk.mjs","names":["Loopback","AssetsWorker","RouterWorker","ViteAssets.ViteAssetsLive","ModuleRunnerWorker.worker","WrapperWorker.worker"],"sources":["../../src/assets/ViteAssets.ts","../../src/dev-server.ts"],"sourcesContent":["import * as Assets from \"@distilled.cloud/cloudflare-runtime/bindings/assets/Assets\";\nimport * as Loopback from \"@distilled.cloud/cloudflare-runtime/globals/Loopback\";\nimport { PluginContext } from \"@distilled.cloud/cloudflare-runtime/PluginContext\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as NodeFs from \"node:fs/promises\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type * as vite from \"vite\";\nimport * as AssetsWorker from \"worker:./assets.worker.ts\";\nimport * as RouterWorker from \"worker:./router.worker.ts\";\n/**\n * Marker prefix used by the vite-aware asset worker to indicate that an\n * HTML path lives inside Vite's `publicDir` (and so should be served\n * verbatim, without running through `transformIndexHtml`).\n */\nconst PUBLIC_DIR_PREFIX = \"__VITE_PUBLIC_DIR__\";\n\n/**\n * Asset plugin layer wired to a Vite dev server.\n *\n * Unlike {@link Assets.AssetsLive}, this implementation does not build a\n * disk-backed asset manifest or KV namespace at all: the vite-aware asset\n * worker overrides `unstable_exists` / `unstable_getByETag` to delegate\n * every HTML lookup back to Vite via Loopback bindings, so HMR,\n * `transformIndexHtml`, virtual routes, and files in `publicDir` all\n * resolve through the dev server instead of through a static snapshot.\n *\n * Mirrors the dev-mode asset wiring in\n * `upstream/workers-sdk/packages/vite-plugin-cloudflare/src/miniflare-options.ts`.\n */\nexport const ViteAssetsLive = (viteDevServer: vite.ViteDevServer) =>\n  Layer.effect(\n    Assets.Assets,\n    Effect.gen(function* () {\n      const loopback = yield* Loopback.Loopback;\n\n      if (Effect.isEffect(loopback)) {\n        return yield* Effect.die(\"Expected loopback to be initialized\");\n      }\n\n      return Assets.Assets.of(\n        Effect.gen(function* () {\n          const { worker } = yield* PluginContext;\n          const { assetsConfig, routerConfig } = Assets.buildAssetConfigs(worker);\n\n          const prefix = `vite-assets:${encodeURIComponent(worker.name)}`;\n          const htmlExistsService = yield* loopback.api.route(\n            `${prefix}:html-exists`,\n            viteHtmlExistsHandler(viteDevServer),\n          );\n          const fetchHtmlService = yield* loopback.api.route(\n            `${prefix}:fetch-html`,\n            viteFetchHtmlHandler(viteDevServer),\n          );\n          const [assetsWorker, routerWorker] = yield* Effect.forEach(\n            [AssetsWorker, RouterWorker],\n            (worker) =>\n              Effect.map(Effect.promise(worker.worker), ({ modules }) => modulesToWorkerd(modules)),\n            { concurrency: \"unbounded\" },\n          );\n\n          return {\n            services: [\n              {\n                name: \"assets:worker\",\n                worker: {\n                  compatibilityDate: \"2024-07-31\",\n                  compatibilityFlags: [\"nodejs_compat\", \"enable_ctx_exports\"],\n                  bindings: [\n                    {\n                      name: \"CONFIG\",\n                      json: JSON.stringify(assetsConfig),\n                    },\n                    {\n                      name: \"__VITE_HEADERS__\",\n                      json: JSON.stringify(viteDevServer.config.server.headers ?? {}),\n                    },\n                    {\n                      name: \"__VITE_HTML_EXISTS__\",\n                      service: htmlExistsService,\n                    },\n                    {\n                      name: \"__VITE_FETCH_HTML__\",\n                      service: fetchHtmlService,\n                    },\n                  ],\n                  modules: assetsWorker,\n                },\n              },\n            ],\n            middlewares: [\n              {\n                name: \"assets:router\",\n                worker: {\n                  compatibilityDate: \"2024-07-31\",\n                  compatibilityFlags: [\n                    \"nodejs_compat\",\n                    \"no_nodejs_compat_v2\",\n                    \"enable_ctx_exports\",\n                  ],\n                  bindings: [\n                    {\n                      name: \"ASSET_WORKER\",\n                      service: { name: \"assets:worker\" },\n                    },\n                    {\n                      name: \"CONFIG\",\n                      json: JSON.stringify(routerConfig),\n                    },\n                  ],\n                  modules: routerWorker,\n                },\n                upstreamBindingName: \"USER_WORKER\",\n                order: -1,\n              },\n            ],\n            api: { isConfigured: true },\n          };\n        }),\n      );\n    }),\n  );\n\n/**\n * Returns the resolved on-disk path for an HTML pathname (or `null`).\n * Files under Vite's `publicDir` are prefixed with `PUBLIC_DIR_PREFIX` so\n * the companion handler knows to skip `transformIndexHtml`.\n */\nconst viteHtmlExistsHandler =\n  (viteDevServer: vite.ViteDevServer) => async (req: IncomingMessage, res: ServerResponse) => {\n    const pathname = new URL(req.url ?? \"/\", \"http://localhost\").pathname;\n    const json = (body: unknown) => {\n      res.writeHead(200, { \"content-type\": \"application/json\" });\n      res.end(JSON.stringify(body));\n    };\n\n    if (!pathname.endsWith(\".html\")) {\n      return json(null);\n    }\n\n    const { root, publicDir } = viteDevServer.config;\n    const publicDirInRoot = publicDir.startsWith(withTrailingSlash(root));\n    const publicPath = withTrailingSlash(publicDir.slice(root.length));\n\n    // Files served from the public dir are addressed from the root path.\n    if (publicDirInRoot && pathname.startsWith(publicPath)) {\n      return json(null);\n    }\n\n    const publicDirFilePath = `${publicDir}${pathname}`;\n    const rootDirFilePath = `${root}${pathname}`;\n\n    for (const resolved of [publicDirFilePath, rootDirFilePath]) {\n      try {\n        const stats = await NodeFs.stat(resolved);\n        if (stats.isFile()) {\n          return json(\n            resolved === publicDirFilePath ? `${PUBLIC_DIR_PREFIX}${pathname}` : pathname,\n          );\n        }\n      } catch {\n        // continue\n      }\n    }\n    return json(null);\n  };\n\n/**\n * Returns the HTML body for a path previously resolved by\n * {@link viteHtmlExistsHandler}. Non-public HTML is run through\n * `viteDevServer.transformIndexHtml` so that HMR and plugin transforms\n * apply.\n */\nconst viteFetchHtmlHandler =\n  (viteDevServer: vite.ViteDevServer) => async (req: IncomingMessage, res: ServerResponse) => {\n    const pathname = new URL(req.url ?? \"/\", \"http://localhost\").pathname;\n    const { root, publicDir } = viteDevServer.config;\n    const isInPublicDir = pathname.startsWith(PUBLIC_DIR_PREFIX);\n    const resolved = isInPublicDir\n      ? `${publicDir}${pathname.slice(PUBLIC_DIR_PREFIX.length)}`\n      : `${root}${pathname}`;\n\n    try {\n      let html = await NodeFs.readFile(resolved, \"utf-8\");\n      if (!isInPublicDir) {\n        html = await viteDevServer.transformIndexHtml(resolved, html);\n      }\n      res.writeHead(200, { \"content-type\": \"text/html\" });\n      res.end(html);\n    } catch {\n      res.writeHead(500, { \"content-type\": \"text/plain\" });\n      res.end(`Unexpected error. Failed to load \"${pathname}\".`);\n    }\n  };\n\nconst withTrailingSlash = (s: string) => (s.endsWith(\"/\") ? s : `${s}/`);\n\nconst modulesToWorkerd = (modules: Record<string, string>) =>\n  Object.entries(modules).map(([name, esModule]) => ({\n    name,\n    esModule,\n  }));\n","import type { ExportTypes } from \"@distilled.cloud/cloudflare-rolldown-plugin/export-types\";\nimport { EXPORT_TYPES_MODULE_ID } from \"@distilled.cloud/cloudflare-rolldown-plugin/export-types\";\nimport { MODULE_REFERENCE_REGEX } from \"@distilled.cloud/cloudflare-rolldown-plugin/plugins\";\nimport type { BindingHooks, Module } from \"@distilled.cloud/cloudflare-runtime\";\nimport * as Runtime from \"@distilled.cloud/cloudflare-runtime/Runtime\";\nimport * as RuntimeServices from \"@distilled.cloud/cloudflare-runtime/RuntimeServices\";\nimport * as DurableObjectNamespace from \"@distilled.cloud/cloudflare-runtime/bindings/DurableObjectNamespace\";\nimport * as Json from \"@distilled.cloud/cloudflare-runtime/bindings/Json\";\nimport * as Loopback from \"@distilled.cloud/cloudflare-runtime/bindings/Loopback\";\nimport * as UnsafeEval from \"@distilled.cloud/cloudflare-runtime/bindings/UnsafeEval\";\nimport * as Credentials from \"@distilled.cloud/cloudflare/Credentials\";\nimport type * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as Scope from \"effect/Scope\";\nimport * as FetchHttpClient from \"effect/unstable/http/FetchHttpClient\";\nimport * as Headers from \"effect/unstable/http/Headers\";\nimport * as HttpServerRequest from \"effect/unstable/http/HttpServerRequest\";\nimport * as HttpServerResponse from \"effect/unstable/http/HttpServerResponse\";\nimport * as NodeFs from \"node:fs/promises\";\nimport * as NodeHttp from \"node:http\";\nimport type * as vite from \"vite\";\nimport * as ModuleRunnerWorker from \"worker:./module-runner/module-runner.worker.ts\";\nimport * as WrapperWorker from \"worker:./module-runner/wrapper.worker.ts\";\nimport * as ViteAssets from \"./assets/ViteAssets\";\nimport { renderExportWrappers } from \"./export-types.ts\";\nimport type { EntryEnvironment } from \"./module-runner/constants.shared.ts\";\nimport { ENVIRONMENT_NAME_HEADER } from \"./module-runner/constants.shared.ts\";\nimport type { CloudflareVitePluginOptions } from \"./plugin\";\n\nexport type ServerHandle = Awaited<ReturnType<typeof startServer>>;\n\nexport const startServer = async <B extends BindingHooks = BindingHooks>(\n  options: CloudflareVitePluginOptions<B>,\n  entryEnvironment: Omit<EntryEnvironment, \"exportTypesId\">,\n  server: vite.ViteDevServer,\n  context: Context.Context<RuntimeServices.RuntimeServices>,\n  exportTypes: ExportTypes,\n) => {\n  const scope = Scope.makeUnsafe();\n  const address = await serve(options, entryEnvironment, server, exportTypes).pipe(\n    Effect.provide(ViteAssets.ViteAssetsLive(server)),\n    Effect.provide(context),\n    Scope.provide(scope),\n    Effect.runPromise,\n  );\n  return {\n    address,\n    close: () => closeScope(scope),\n  };\n};\n\nconst importPlatformServices = Layer.unwrap(\n  Effect.promise(async () => {\n    try {\n      const BunServices = await import(\"@effect/platform-bun/BunServices\");\n      return BunServices.layer;\n    } catch {\n      // ignore and fall back to NodeServices\n    }\n    const NodeServices = await import(\"@effect/platform-node/NodeServices\");\n    return NodeServices.layer;\n  }),\n);\n\nexport const createDefaultContext = async (): Promise<\n  Context.Context<RuntimeServices.RuntimeServices>\n> => {\n  const scope = Scope.makeUnsafe();\n\n  return await RuntimeServices.layerRuntime({\n    api: {\n      accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,\n    },\n  }).pipe(\n    Layer.provideMerge(importPlatformServices),\n    Layer.provide(Layer.merge(Credentials.fromEnv(), FetchHttpClient.layer)),\n    Layer.buildWithScope(scope),\n    Effect.runPromise,\n  );\n};\n\nconst closeScope = async (scope: Scope.Scope) => {\n  await Effect.runPromiseExit(Scope.closeUnsafe(scope, Exit.void) ?? Effect.void);\n};\n\nconst makeModuleFallbackService = Effect.gen(function* () {\n  const server = NodeHttp.createServer(async (req, res) => {\n    try {\n      const request = await parseModuleFallbackRequest(req);\n      if (!request) {\n        res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n        res.end(\"Invalid module fallback request\");\n        return;\n      }\n\n      const candidate = request.rawSpecifier ?? request.specifier;\n      const match = MODULE_REFERENCE_REGEX.exec(candidate);\n      if (!match) {\n        res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n        res.end(`No match for module: ${candidate}`);\n        return;\n      }\n\n      const [, moduleType, modulePath] = match;\n      if (!moduleType || !modulePath) {\n        res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n        res.end(`Invalid module type or path: ${match[0]}`);\n        return;\n      }\n\n      let content: Buffer;\n      try {\n        content = await NodeFs.readFile(modulePath);\n      } catch {\n        res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n        res.end(`Module not found: ${modulePath}`);\n        return;\n      }\n\n      switch (moduleType) {\n        case \"CompiledWasm\": {\n          res.writeHead(200, { \"Content-Type\": \"application/json\" });\n          res.end(JSON.stringify({ wasm: Array.from(content) }));\n          return;\n        }\n        case \"Data\": {\n          res.writeHead(200, { \"Content-Type\": \"application/json\" });\n          res.end(JSON.stringify({ data: Array.from(content) }));\n          return;\n        }\n        case \"Text\": {\n          res.writeHead(200, { \"Content-Type\": \"application/json\" });\n          res.end(JSON.stringify({ text: content.toString() }));\n          return;\n        }\n        default: {\n          res.writeHead(400, { \"Content-Type\": \"text/plain\" });\n          res.end(`Invalid module type: ${moduleType}`);\n        }\n      }\n    } catch (error) {\n      res.writeHead(500, { \"Content-Type\": \"text/plain\" });\n      res.end(error instanceof Error ? (error.stack ?? error.message) : String(error));\n    }\n  });\n\n  // workerd fetches every fallback module over this server. Node's default\n  // 5s `keepAliveTimeout` closes idle sockets between module bursts, forcing\n  // workerd to open a fresh TCP connection per burst — on Windows CI the\n  // resulting TIME_WAIT churn exhausts ephemeral ports (WSAENOBUFS #10055).\n  // Keep idle connections around for a minute so they get reused.\n  server.keepAliveTimeout = 60_000;\n  server.headersTimeout = 65_000;\n  yield* Effect.callback<void>((resume) => {\n    server.listen(0, \"127.0.0.1\", () => resume(Effect.void));\n  });\n  yield* Effect.addFinalizer(() =>\n    Effect.callback<void>((resume) => {\n      server.close(() => resume(Effect.void));\n      // `close()` waits for in-flight/keep-alive connections; destroy them so\n      // shutdown doesn't hang for up to `keepAliveTimeout`.\n      server.closeAllConnections();\n    }),\n  );\n\n  const address = server.address();\n  if (address === null || typeof address === \"string\") {\n    return yield* Effect.die(new Error(\"Module fallback server address unavailable\"));\n  }\n  return `127.0.0.1:${address.port}`;\n});\n\nconst serve = Effect.fn(function* <B extends BindingHooks = BindingHooks>(\n  options: CloudflareVitePluginOptions<B>,\n  entryEnvironment: Omit<EntryEnvironment, \"exportTypesId\">,\n  server: vite.ViteDevServer,\n  exportTypes: ExportTypes,\n) {\n  const runtime = yield* Runtime.Runtime;\n  const moduleFallback = yield* makeModuleFallbackService;\n\n  const name = options.worker?.name ?? `vite-dev-${crypto.randomUUID()}`;\n  return yield* runtime.start({\n    name,\n    modules: yield* Effect.promise(() => makeWorkerModules(exportTypes)),\n    compatibilityDate: options.compatibilityDate ?? \"2026-05-12\",\n    compatibilityFlags: options.compatibilityFlags ?? [],\n    bindings: [\n      UnsafeEval.local(\"__DISTILLED_UNSAFE_EVAL__\"),\n      DurableObjectNamespace.local({\n        binding: \"__DISTILLED_MODULE_RUNNER__\",\n        className: \"ModuleRunnerDO\",\n      }),\n      Json.local(\"__DISTILLED_ENVIRONMENT__\", {\n        ...entryEnvironment,\n        exportTypesId: EXPORT_TYPES_MODULE_ID,\n      } satisfies EntryEnvironment),\n      Loopback.local({\n        binding: \"__DISTILLED_INVOKE_MODULE__\",\n        name: `vite:invoke-module:${name}`,\n        handler: Effect.gen(function* () {\n          const request = yield* HttpServerRequest.HttpServerRequest;\n          const targetEnvironment = Headers.get(request.headers, ENVIRONMENT_NAME_HEADER).pipe(\n            Option.getOrThrow,\n          );\n          const json = (yield* request.json) as unknown as vite.CustomPayload;\n          const devEnvironment = server.environments[targetEnvironment];\n          const result = yield* Effect.promise(\n            async () => await devEnvironment.hot.handleInvoke(json),\n          );\n          return HttpServerResponse.jsonUnsafe(result);\n        }),\n      }),\n      ...(options.worker?.bindings ?? []),\n    ],\n    durableObjectNamespaces: [\n      {\n        className: \"ModuleRunnerDO\",\n        sql: false,\n        ephemeralLocal: true,\n      },\n      ...(options.worker?.durableObjectNamespaces ?? []),\n    ],\n    workflows: options.worker?.workflows,\n    hyperdrives: options.worker?.hyperdrives,\n    // Without this the worker starts with no consumers, so a producer\n    // binding for a queue this worker consumes resolves to the dev-registry\n    // proxy instead of a local broker — and that accepts-and-drops every\n    // message, with `send()` never settling.\n    queueConsumers: options.worker?.queueConsumers,\n    assets: options.worker?.assets,\n    unsafe: {\n      moduleFallback,\n      ...(options.worker?.unsafe ?? {}),\n    },\n  });\n});\n\ntype ModuleFallbackRequest =\n  | {\n      protocol: \"v1\";\n      type: \"import\" | \"require\";\n      specifier: string;\n      rawSpecifier?: string;\n      referrer?: string;\n    }\n  | {\n      protocol: \"v2\";\n      type: \"import\" | \"require\" | \"internal\";\n      specifier: string;\n      rawSpecifier?: string;\n      referrer?: string;\n      attributes?: Array<{ name: string; value: string }>;\n    };\n\nconst parseModuleFallbackRequest = async (\n  req: NodeHttp.IncomingMessage,\n): Promise<ModuleFallbackRequest | undefined> => {\n  if (req.method === \"GET\" && req.headers[\"x-resolve-method\"]) {\n    const url = new URL(req.url ?? \"\", \"http://localhost\");\n    const specifier = url.searchParams.get(\"specifier\");\n    if (!specifier) {\n      return;\n    }\n    const resolveMethod = req.headers[\"x-resolve-method\"];\n    return {\n      protocol: \"v1\",\n      type: resolveMethod === \"require\" ? \"require\" : \"import\",\n      specifier,\n      rawSpecifier: url.searchParams.get(\"rawSpecifier\") ?? undefined,\n      referrer: url.searchParams.get(\"referrer\") ?? undefined,\n    };\n  }\n\n  if (req.method === \"POST\") {\n    const chunks: Array<Buffer> = [];\n    for await (const chunk of req) {\n      chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n    }\n    const json: unknown = JSON.parse(Buffer.concat(chunks).toString());\n    if (typeof json === \"object\" && json !== null && \"specifier\" in json) {\n      return {\n        protocol: \"v2\",\n        ...(json as Omit<Extract<ModuleFallbackRequest, { protocol: \"v2\" }>, \"protocol\">),\n      };\n    }\n  }\n};\n\nasync function makeWorkerModules(exportTypes: ExportTypes): Promise<Array<Module>> {\n  const [moduleRunnerWorker, wrapperWorker] = await Promise.all([\n    ModuleRunnerWorker.worker(),\n    WrapperWorker.worker(),\n  ]);\n  const modules = {\n    \"index.worker.mjs\": [\n      `import { createWorkerEntrypointWrapper, createDurableObjectWrapper, createWorkflowEntrypointWrapper } from \"./module-runner/wrapper.worker.mjs\";`,\n      'export { ModuleRunnerDO } from \"./module-runner/module-runner.worker.mjs\";',\n      'export default createWorkerEntrypointWrapper(\"default\");',\n      ...renderExportWrappers(exportTypes),\n    ].join(\"\\n\"),\n    ...moduleRunnerWorker.modules,\n    ...wrapperWorker.modules,\n  };\n  return Object.entries(modules).map(([name, content]) => ({\n    name,\n    type: \"ESModule\",\n    content,\n  }));\n}\n"],"mappings":"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"}