devflare 1.0.0-next.67 → 1.0.0-next.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { a as cyanBold, f as logLine, o as dim, r as createCliTheme } from "./ui-BhCdDC2N.js";
2
- import { t as prepareBuildArtifacts } from "./build-artifacts-Btqs5gPy.js";
2
+ import { t as prepareBuildArtifacts } from "./build-artifacts-CkwCap5N.js";
3
3
  //#region src/cli/commands/build.ts
4
4
  async function runBuildCommand(parsed, logger, options) {
5
5
  const theme = createCliTheme(parsed.options);
@@ -4,7 +4,7 @@ import { c as writeWranglerConfig, i as isolateViteBuildOutputPaths$1, o as reba
4
4
  import { f as logLine } from "./ui-BhCdDC2N.js";
5
5
  import { n as getPackageVersion } from "./package-metadata-CLI488gB.js";
6
6
  import { t as resolvePackageSpecifier } from "./resolve-package-DeJUGxoE.js";
7
- import { i as writeGeneratedViteConfig, l as prepareComposedWorkerEntrypoint, n as resolveEffectiveViteProject } from "./vite-Dxuhm1BP.js";
7
+ import { i as writeGeneratedViteConfig, l as prepareComposedWorkerEntrypoint, n as resolveEffectiveViteProject } from "./vite-Bml-Whp8.js";
8
8
  import { t as bundleWorkerEntry } from "./worker-bundler-Isj5jiW6.js";
9
9
  import { t as detectViteProject } from "./vite-utils-D8kPPxUy.js";
10
10
  import { t as getDependencies } from "./dependencies-wKqrxKV_.js";
@@ -1140,19 +1140,19 @@ async function runInit(parsed, logger, options) {
1140
1140
  return runInitCommand(parsed, logger, options);
1141
1141
  }
1142
1142
  async function runDev(parsed, logger, options) {
1143
- const { runDevCommand } = await import("./dev-DOoDj7SJ.js");
1143
+ const { runDevCommand } = await import("./dev-D8JuhNjD.js");
1144
1144
  return runDevCommand(parsed, logger, options);
1145
1145
  }
1146
1146
  async function runWorkspace(parsed, logger, options) {
1147
- const { runWorkspaceCommand } = await import("./workspace-DE60No0K.js");
1147
+ const { runWorkspaceCommand } = await import("./workspace-CrvqPLTX.js");
1148
1148
  return runWorkspaceCommand(parsed, logger, options);
1149
1149
  }
1150
1150
  async function runBuild(parsed, logger, options) {
1151
- const { runBuildCommand } = await import("./build-DCgW1i8g.js");
1151
+ const { runBuildCommand } = await import("./build-DplSo6Gc.js");
1152
1152
  return runBuildCommand(parsed, logger, options);
1153
1153
  }
1154
1154
  async function runDeploy(parsed, logger, options) {
1155
- const { runDeployCommand } = await import("./deploy-DqYme109.js");
1155
+ const { runDeployCommand } = await import("./deploy-z1_wbNn2.js");
1156
1156
  return runDeployCommand(parsed, logger, {
1157
1157
  ...options,
1158
1158
  requireExplicitDeployTarget: true
@@ -1138,17 +1138,28 @@ var BridgeClient = class {
1138
1138
  }
1139
1139
  openConnection(WebSocketCtor) {
1140
1140
  return new Promise((resolve, reject) => {
1141
+ let socket = null;
1142
+ const isCurrent = () => socket !== null && this.ws === socket;
1143
+ const releaseConnectSlot = () => {
1144
+ if (isCurrent()) this.connectPromise = null;
1145
+ };
1141
1146
  const timeout = setTimeout(() => {
1147
+ socket?.close();
1142
1148
  reject(/* @__PURE__ */ new Error(`Connection timeout: ${this.url}`));
1143
- this.ws?.close();
1144
1149
  }, this.connectTimeout);
1145
1150
  try {
1146
- this.ws = new WebSocketCtor(this.url);
1147
- this.ws.binaryType = "arraybuffer";
1148
- const adapter = new BridgeWsAdapter(this.ws);
1151
+ socket = new WebSocketCtor(this.url);
1152
+ this.ws = socket;
1153
+ socket.binaryType = "arraybuffer";
1154
+ const adapter = new BridgeWsAdapter(socket);
1149
1155
  this.adapter = adapter;
1150
- this.ws.onopen = () => {
1156
+ socket.onopen = () => {
1151
1157
  clearTimeout(timeout);
1158
+ if (!isCurrent()) {
1159
+ socket?.close();
1160
+ reject(/* @__PURE__ */ new Error(`Bridge connection superseded: ${this.url}`));
1161
+ return;
1162
+ }
1152
1163
  this.codec = new TransportV2Codec(adapter, {
1153
1164
  capabilities: [...BRIDGE_CLIENT_CAPABILITIES],
1154
1165
  onUnknownControl: (data) => this.handleJsonMessage(data),
@@ -1157,28 +1168,28 @@ var BridgeClient = class {
1157
1168
  this.codec.sendHello();
1158
1169
  this.codec.handshake.catch(() => {});
1159
1170
  this.isConnected = true;
1160
- this.connectPromise = null;
1171
+ releaseConnectSlot();
1161
1172
  resolve();
1162
1173
  };
1163
- this.ws.onerror = (event) => {
1174
+ socket.onerror = (event) => {
1164
1175
  clearTimeout(timeout);
1165
- this.connectPromise = null;
1176
+ releaseConnectSlot();
1166
1177
  adapter.onerror?.({ error: event.error });
1167
1178
  reject(/* @__PURE__ */ new Error("WebSocket connection failed"));
1168
1179
  };
1169
- this.ws.onclose = (event) => {
1180
+ socket.onclose = (event) => {
1170
1181
  adapter.onclose?.({
1171
1182
  code: event?.code ?? 1006,
1172
1183
  reason: event?.reason ?? ""
1173
1184
  });
1185
+ if (!isCurrent()) return;
1174
1186
  this.handleDisconnect();
1175
1187
  };
1176
- this.ws.onmessage = (event) => {
1188
+ socket.onmessage = (event) => {
1177
1189
  adapter.onmessage?.({ data: event.data });
1178
1190
  };
1179
1191
  } catch (error) {
1180
1192
  clearTimeout(timeout);
1181
- this.connectPromise = null;
1182
1193
  reject(error);
1183
1194
  }
1184
1195
  });
@@ -7,7 +7,7 @@ import { _ as yellowBold, d as green, f as logLine, g as yellow, o as dim, r as
7
7
  import { n as getPackageVersion } from "./package-metadata-CLI488gB.js";
8
8
  import { t as resolvePackageSpecifier } from "./resolve-package-DeJUGxoE.js";
9
9
  import { t as asOptionalString } from "./command-utils-DjaaMQX7.js";
10
- import { a as createBuildManifest, i as compareManifests, n as applyDeploymentStrategy, o as formatDriftWarning, r as describeDeploymentStrategy, s as readBuildManifest, t as prepareBuildArtifacts } from "./build-artifacts-Btqs5gPy.js";
10
+ import { a as createBuildManifest, i as compareManifests, n as applyDeploymentStrategy, o as formatDriftWarning, r as describeDeploymentStrategy, s as readBuildManifest, t as prepareBuildArtifacts } from "./build-artifacts-CkwCap5N.js";
11
11
  import { t as getDependencies } from "./dependencies-wKqrxKV_.js";
12
12
  import { n as preparePreviewScopedResourcesForDeploy } from "./preview-resources-CQIu2-NY.js";
13
13
  import { basename, dirname, isAbsolute, join, resolve } from "pathe";
@@ -4,9 +4,9 @@ import { t as applyLocalDevVarsToConfig } from "./local-dev-vars-BFLS-HoI.js";
4
4
  import { a as cyanBold, f as logLine, g as yellow, o as dim, r as createCliTheme } from "./ui-BhCdDC2N.js";
5
5
  import { clearLocalSendEmailBindings, setLocalSendEmailBindings } from "../utils/send-email.js";
6
6
  import { s as resolveServiceBindings, t as discoverRoutes } from "./routes-CRXB3-iw.js";
7
- import { l as prepareComposedWorkerEntrypoint, m as hasWorkerSurfacePaths, n as resolveEffectiveViteProject } from "./vite-Dxuhm1BP.js";
7
+ import { l as prepareComposedWorkerEntrypoint, m as hasWorkerSurfacePaths, n as resolveEffectiveViteProject } from "./vite-Bml-Whp8.js";
8
8
  import { t as bundleWorkerEntry } from "./worker-bundler-Isj5jiW6.js";
9
- import { _ as createMiniflareLog, a as logWorkerHandlerDetection, c as resolveViteIntegration, d as createRuntimeStdioForwarder, f as buildMiniflareDevConfig, g as runD1Migrations, h as resolveMainWorkerSurfacePaths, i as logRemoteBindingRequirements, l as resolveWorkerConfigWatchPath, m as collectWorkerWatchRoots, n as logMiniflareBindingDiagnostics, o as maybeStartBrowserShim, p as resolveR2PresignOrigin, r as logMiniflareConfigDiagnostics, s as maybeStartDOBundler, t as startViteProcess } from "./vite-process-BxZ8pb7i.js";
9
+ import { _ as createMiniflareLog, a as logWorkerHandlerDetection, c as resolveViteIntegration, d as createRuntimeStdioForwarder, f as buildMiniflareDevConfig, g as runD1Migrations, h as resolveMainWorkerSurfacePaths, i as logRemoteBindingRequirements, l as resolveWorkerConfigWatchPath, m as collectWorkerWatchRoots, n as logMiniflareBindingDiagnostics, o as maybeStartBrowserShim, p as resolveR2PresignOrigin, r as logMiniflareConfigDiagnostics, s as maybeStartDOBundler, t as startViteProcess } from "./vite-process-CDa3yQui.js";
10
10
  import { n as bundleWorkflowEntrypointScript } from "./r2-presign-runtime-C75FkLMd.js";
11
11
  import { r as stopSpawnedProcessTree, t as detectViteProject } from "./vite-utils-D8kPPxUy.js";
12
12
  import { dirname, relative, resolve } from "pathe";
@@ -1,4 +1,4 @@
1
- import { j as bridgeEnv, n as getContextOrNull } from "./context-ZQydom21.js";
1
+ import { j as bridgeEnv, n as getContextOrNull } from "./context-DGMev2AF.js";
2
2
  //#region src/env.ts
3
3
  let testContextEnv = null;
4
4
  let testContextDispose = null;
@@ -1,4 +1,4 @@
1
- import { D as createFetchEvent, b as createContextProxy, n as getContextOrNull, v as runWithEventContext } from "./context-ZQydom21.js";
1
+ import { D as createFetchEvent, b as createContextProxy, n as getContextOrNull, v as runWithEventContext } from "./context-DGMev2AF.js";
2
2
  import { AwsV4Signer } from "aws4fetch";
3
3
  //#region src/runtime/exports.ts
4
4
  /**
@@ -2,7 +2,7 @@ import { d as resolveConfigEnvVars } from "./preview-j9Kbx4-G.js";
2
2
  import { i as resolveConfigPath, o as loadResolvedConfig, r as loadConfig, s as resolveResources, u as resolveConfigForEnvironment } from "./loader-BC0skbnH.js";
3
3
  import { o as normalizeDOBinding } from "./schema-normalization-CTdiY17P.js";
4
4
  import { c as writeWranglerConfig, i as isolateViteBuildOutputPaths, n as compileConfig, o as rebaseWranglerConfigPaths, r as compileToProgrammaticConfig, t as compileBuildConfig } from "./compiler-UxXQgEPq.js";
5
- import { _ as resolveFetchHandler, o as assertExplicit2ArgStyle } from "./runtime-CuMe2D6n.js";
5
+ import { _ as resolveFetchHandler, o as assertExplicit2ArgStyle } from "./runtime-BlKTWIgD.js";
6
6
  import { s as resolveServiceBindings, t as discoverRoutes } from "./routes-CRXB3-iw.js";
7
7
  import { n as findDurableObjectClasses } from "./durable-object-DuMPM8re.js";
8
8
  import { r as SUPPORTED_WORKER_EXTENSIONS } from "./worker-entrypoint-C8j23t6d.js";
@@ -3,7 +3,7 @@ import { g as normalizeR2Binding, n as getLocalKVNamespaceIdentifier, r as getSi
3
3
  import { C as buildSendEmailConfig, D as buildVersionMetadataConfig, E as buildTailConsumersConfig, O as buildWorkerLoadersConfig, S as buildSecretsStoreConfig, T as buildStreamingTailConsumersConfig, _ as buildMtlsCertificatesConfig, b as buildQueueProducers, c as buildAiSearchInstancesConfig, d as buildArtifactsConfig, f as buildDispatchNamespacesConfig, g as buildMediaConfig, h as buildImagesConfig, k as buildWorkflowsConfig, l as buildAiSearchNamespacesConfig, m as buildHyperdrivesConfig, n as getRouteDirectoryCandidate, p as buildFlagshipConfig, u as buildAnalyticsEngineConfig, v as buildPipelinesConfig, w as buildStreamConfig, x as buildRateLimitsConfig, y as buildQueueConsumers } from "./routes-CRXB3-iw.js";
4
4
  import { r as transformDurableObject } from "./durable-object-DuMPM8re.js";
5
5
  import { i as findFiles } from "./glob-DRw9sbfF.js";
6
- import { d as DEFAULT_FETCH_ENTRY_FILES, f as DEFAULT_QUEUE_ENTRY_FILES, g as discoverDurableObjectFiles, h as resolveWorkerSurfacePaths, i as writeGeneratedViteConfig, m as hasWorkerSurfacePaths, p as DEFAULT_SCHEDULED_ENTRY_FILES, u as DEFAULT_EMAIL_ENTRY_FILES } from "./vite-Dxuhm1BP.js";
6
+ import { d as DEFAULT_FETCH_ENTRY_FILES, f as DEFAULT_QUEUE_ENTRY_FILES, g as discoverDurableObjectFiles, h as resolveWorkerSurfacePaths, i as writeGeneratedViteConfig, m as hasWorkerSurfacePaths, p as DEFAULT_SCHEDULED_ENTRY_FILES, u as DEFAULT_EMAIL_ENTRY_FILES } from "./vite-Bml-Whp8.js";
7
7
  import { a as createWorkerdBundlerDefaults, i as writeWorkerCompatibleBundle, n as ensureDebugShim, r as resolveWorkerCompatibleRolldownConfig } from "./worker-bundler-Isj5jiW6.js";
8
8
  import { t as R2_PRESIGN_RUNTIME_JS } from "./r2-presign-runtime-C75FkLMd.js";
9
9
  import { n as buildLocalSecretWrappedBindingConfig } from "./local-secrets-C0n5oRgI.js";
@@ -6,9 +6,9 @@ import { t as applyLocalDevVarsToConfig } from "./local-dev-vars-BFLS-HoI.js";
6
6
  import { a as cyanBold, f as logLine, g as yellow, o as dim, r as createCliTheme } from "./ui-BhCdDC2N.js";
7
7
  import { setLocalSendEmailBindings } from "../utils/send-email.js";
8
8
  import { s as resolveServiceBindings, t as discoverRoutes } from "./routes-CRXB3-iw.js";
9
- import { l as prepareComposedWorkerEntrypoint } from "./vite-Dxuhm1BP.js";
9
+ import { l as prepareComposedWorkerEntrypoint } from "./vite-Bml-Whp8.js";
10
10
  import { t as bundleWorkerEntry } from "./worker-bundler-Isj5jiW6.js";
11
- import { _ as createMiniflareLog, c as resolveViteIntegration, d as createRuntimeStdioForwarder, f as buildMiniflareDevConfig, g as runD1Migrations, h as resolveMainWorkerSurfacePaths, p as resolveR2PresignOrigin, t as startViteProcess, u as createBrowserShim, v as createDOBundler } from "./vite-process-BxZ8pb7i.js";
11
+ import { _ as createMiniflareLog, c as resolveViteIntegration, d as createRuntimeStdioForwarder, f as buildMiniflareDevConfig, g as runD1Migrations, h as resolveMainWorkerSurfacePaths, p as resolveR2PresignOrigin, t as startViteProcess, u as createBrowserShim, v as createDOBundler } from "./vite-process-CDa3yQui.js";
12
12
  import { n as bundleWorkflowEntrypointScript } from "./r2-presign-runtime-C75FkLMd.js";
13
13
  import { dirname, resolve } from "pathe";
14
14
  import { createConsola } from "consola";
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bridge/client.ts"],"names":[],"mappings":"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"}
package/dist/browser.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { n as defineConfig, t as ref } from "./_chunks/ref-CYJNAAe_.js";
2
2
  import { t as workerName } from "./_chunks/workerName-kEXwmV2m.js";
3
3
  import { n as getDurableObjectOptions, t as durableObject } from "./_chunks/decorators-eXNZ1S0N.js";
4
- import { F as BridgeClient, I as getClient, M as createEnvProxy, N as initEnv, P as setBindingHints } from "./_chunks/context-ZQydom21.js";
5
- import { i as vars, r as env } from "./_chunks/env-DyL6JOXI.js";
4
+ import { F as BridgeClient, I as getClient, M as createEnvProxy, N as initEnv, P as setBindingHints } from "./_chunks/context-DGMev2AF.js";
5
+ import { i as vars, r as env } from "./_chunks/env-D4uJqqgu.js";
6
6
  //#region src/browser.ts
7
7
  function createUnsupportedApiError(name) {
8
8
  return /* @__PURE__ */ new Error(`${name} is not available in browser environments; import from devflare/test or devflare/runtime in a worker/Node context instead.`);
package/dist/cli/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as runCli, t as parseArgs } from "../_chunks/cli-DXnofibT.js";
1
+ import { n as runCli, t as parseArgs } from "../_chunks/cli-3RIFRu7O.js";
2
2
  export { parseArgs, runCli };
package/dist/index.js CHANGED
@@ -5,6 +5,6 @@ import { a as ConfigResourceResolutionError, d as configSchema, n as ConfigValid
5
5
  import { n as compileConfig, s as stringifyConfig } from "./_chunks/compiler-UxXQgEPq.js";
6
6
  import { t as workerName } from "./_chunks/workerName-kEXwmV2m.js";
7
7
  import { n as getDurableObjectOptions, t as durableObject } from "./_chunks/decorators-eXNZ1S0N.js";
8
- import { n as runCli, t as parseArgs } from "./_chunks/cli-DXnofibT.js";
9
- import { i as vars, r as env } from "./_chunks/env-DyL6JOXI.js";
8
+ import { n as runCli, t as parseArgs } from "./_chunks/cli-3RIFRu7O.js";
9
+ import { i as vars, r as env } from "./_chunks/env-D4uJqqgu.js";
10
10
  export { ConfigNotFoundError, ConfigResourceResolutionError, ConfigValidationError, compileConfig, configSchema, defineConfig as default, defineConfig, defineWorkspace, durableObject, env, getDurableObjectOptions, loadConfig, loadResolvedConfig, parseArgs, preview, ref, runCli, stringifyConfig, vars, workerName };
@@ -1,5 +1,5 @@
1
1
  import { n as getDurableObjectOptions, t as durableObject } from "../_chunks/decorators-eXNZ1S0N.js";
2
- import { A as createTailEvent, C as createDurableObjectWebSocketCloseEvent, D as createFetchEvent, E as createEmailEvent, O as createQueueEvent, S as createDurableObjectFetchEvent, T as createDurableObjectWebSocketMessageEvent, _ as runWithContext, a as getDurableObjectFetchEvent, b as createContextProxy, c as getDurableObjectWebSocketMessageEvent, d as getEventContextOrNull, f as getFetchEvent, g as hasContext, h as getTailEvent, i as getDurableObjectEvent, k as createScheduledEvent, l as getEmailEvent, m as getScheduledEvent, n as getContextOrNull, o as getDurableObjectWebSocketCloseEvent, p as getQueueEvent, r as getDurableObjectAlarmEvent, s as getDurableObjectWebSocketErrorEvent, t as getContext, u as getEventContext, v as runWithEventContext, w as createDurableObjectWebSocketErrorEvent, x as createDurableObjectAlarmEvent, y as ContextAccessError } from "../_chunks/context-ZQydom21.js";
2
+ import { A as createTailEvent, C as createDurableObjectWebSocketCloseEvent, D as createFetchEvent, E as createEmailEvent, O as createQueueEvent, S as createDurableObjectFetchEvent, T as createDurableObjectWebSocketMessageEvent, _ as runWithContext, a as getDurableObjectFetchEvent, b as createContextProxy, c as getDurableObjectWebSocketMessageEvent, d as getEventContextOrNull, f as getFetchEvent, g as hasContext, h as getTailEvent, i as getDurableObjectEvent, k as createScheduledEvent, l as getEmailEvent, m as getScheduledEvent, n as getContextOrNull, o as getDurableObjectWebSocketCloseEvent, p as getQueueEvent, r as getDurableObjectAlarmEvent, s as getDurableObjectWebSocketErrorEvent, t as getContext, u as getEventContext, v as runWithEventContext, w as createDurableObjectWebSocketErrorEvent, x as createDurableObjectAlarmEvent, y as ContextAccessError } from "../_chunks/context-DGMev2AF.js";
3
3
  import { clearLocalSendEmailBindings, setLocalSendEmailBindings } from "../utils/send-email.js";
4
- import { C as vars, S as locals, _ as resolveFetchHandler, a as matchFetchRoute, b as env, c as assertExplicitScheduledHandlerStyle, d as defineQueueHandler, f as defineScheduledHandler, g as markWorkerStyle, h as markResolveStyle, i as invokeRouteModules, l as createResolveFetch, m as invokeFetchModule, n as presignR2Put, o as assertExplicit2ArgStyle, p as invokeFetchHandler, r as createRouteResolve, s as assertExplicitQueueHandlerStyle, t as presignR2Get, u as defineFetchHandler, v as sequence, x as event, y as ctx } from "../_chunks/runtime-CuMe2D6n.js";
4
+ import { C as vars, S as locals, _ as resolveFetchHandler, a as matchFetchRoute, b as env, c as assertExplicitScheduledHandlerStyle, d as defineQueueHandler, f as defineScheduledHandler, g as markWorkerStyle, h as markResolveStyle, i as invokeRouteModules, l as createResolveFetch, m as invokeFetchModule, n as presignR2Put, o as assertExplicit2ArgStyle, p as invokeFetchHandler, r as createRouteResolve, s as assertExplicitQueueHandlerStyle, t as presignR2Get, u as defineFetchHandler, v as sequence, x as event, y as ctx } from "../_chunks/runtime-BlKTWIgD.js";
5
5
  export { ContextAccessError, assertExplicit2ArgStyle, assertExplicitQueueHandlerStyle, assertExplicitScheduledHandlerStyle, clearLocalSendEmailBindings, createContextProxy, createDurableObjectAlarmEvent, createDurableObjectFetchEvent, createDurableObjectWebSocketCloseEvent, createDurableObjectWebSocketErrorEvent, createDurableObjectWebSocketMessageEvent, createEmailEvent, createFetchEvent, createQueueEvent, createResolveFetch, createRouteResolve, createScheduledEvent, createTailEvent, ctx, defineFetchHandler, defineQueueHandler, defineScheduledHandler, durableObject, env, event, getContext, getContextOrNull, getDurableObjectAlarmEvent, getDurableObjectEvent, getDurableObjectFetchEvent, getDurableObjectOptions, getDurableObjectWebSocketCloseEvent, getDurableObjectWebSocketErrorEvent, getDurableObjectWebSocketMessageEvent, getEmailEvent, getEventContext, getEventContextOrNull, getFetchEvent, getQueueEvent, getScheduledEvent, getTailEvent, hasContext, invokeFetchHandler, invokeFetchModule, invokeRouteModules, locals, markResolveStyle, markWorkerStyle, matchFetchRoute, presignR2Get, presignR2Put, resolveFetchHandler, runWithContext, runWithEventContext, sequence, setLocalSendEmailBindings, vars };
@@ -1,6 +1,6 @@
1
1
  import { r as loadConfig } from "../_chunks/loader-BC0skbnH.js";
2
2
  import { l as normalizeHyperdriveBinding } from "../_chunks/schema-normalization-CTdiY17P.js";
3
- import { D as createFetchEvent, I as getClient, M as createEnvProxy, P as setBindingHints, v as runWithEventContext } from "../_chunks/context-ZQydom21.js";
3
+ import { D as createFetchEvent, I as getClient, M as createEnvProxy, P as setBindingHints, v as runWithEventContext } from "../_chunks/context-DGMev2AF.js";
4
4
  import { createLocalSendEmailBinding } from "../utils/send-email.js";
5
5
  import { i as extractBindingHints, n as createLocalWorkerLoaderBinding, t as createLocalHyperdrive } from "../_chunks/local-hyperdrive-CcORzo76.js";
6
6
  import { t as buildLocalSecretNodeBindings } from "../_chunks/local-secrets-C0n5oRgI.js";
@@ -88,6 +88,45 @@ function createDevExecutionContext(pendingErrors) {
88
88
  };
89
89
  }
90
90
  /**
91
+ * Total budget for riding out a transient bridge outage while (re)connecting for a request. An HMR worker
92
+ * reload or a brief coordinator restart drops the bridge socket for well under a second; retrying within this
93
+ * window keeps the request's bindings available instead of failing it. Kept modest so a bridge that is
94
+ * genuinely down (devflare not running) still surfaces the error promptly rather than hanging every request.
95
+ */
96
+ const BRIDGE_CONNECT_MAX_WAIT_MS = 3e3;
97
+ /** Delay between bridge (re)connect attempts within {@link BRIDGE_CONNECT_MAX_WAIT_MS}. */
98
+ const BRIDGE_CONNECT_RETRY_DELAY_MS = 150;
99
+ /**
100
+ * Connect to the bridge, riding out a TRANSIENT outage with a bounded retry.
101
+ *
102
+ * The bridge socket drops for a fraction of a second whenever the dev runtime reloads a worker (HMR /
103
+ * config change) or the coordinator briefly restarts (e.g. after a worker threw). A single per-request
104
+ * `connect()` attempt rejects the instant the socket is refused, which the SvelteKit handle turns into
105
+ * "dropped every binding for this request" — so an unrelated route 500s with a missing D1/KV/R2 binding
106
+ * mid-reload. Retrying for a short window instead lets the reconnect land and the request proceed. The LAST
107
+ * error is rethrown only once the budget is spent (the bridge really is down), so a genuine
108
+ * misconfiguration still fails fast rather than hanging.
109
+ *
110
+ * Exported for unit testing; `sleep`/`now` are injectable so the retry schedule is asserted without real time.
111
+ *
112
+ * @param connect - the bridge client's `connect()`; a fresh attempt each call (the client dedups in-flight ones).
113
+ * @param options - `maxWaitMs` total budget, `retryDelayMs` between attempts, and injectable `sleep`/`now` for tests.
114
+ */
115
+ async function connectBridgeWithRetry(connect, options = {}) {
116
+ const maxWaitMs = options.maxWaitMs ?? BRIDGE_CONNECT_MAX_WAIT_MS;
117
+ const retryDelayMs = options.retryDelayMs ?? BRIDGE_CONNECT_RETRY_DELAY_MS;
118
+ const sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
119
+ const now = options.now ?? Date.now;
120
+ const deadline = now() + maxWaitMs;
121
+ for (;;) try {
122
+ await connect();
123
+ return;
124
+ } catch (error) {
125
+ if (now() + retryDelayMs >= deadline) throw error;
126
+ await sleep(retryDelayMs);
127
+ }
128
+ }
129
+ /**
91
130
  * Create a platform object that routes bindings through the bridge
92
131
  *
93
132
  * Use this in dev mode to get access to Miniflare bindings via WebSocket RPC.
@@ -119,7 +158,7 @@ async function createDevflarePlatform(options = {}) {
119
158
  const cacheKey = getPlatformCacheKey(bridgeUrl, hints);
120
159
  if (shouldUseCachedPlatform(localBindings) && platformCache?.key === cacheKey) return platformCache.platform;
121
160
  const client = getClient({ url: bridgeUrl });
122
- await client.connect();
161
+ await connectBridgeWithRetry(() => client.connect());
123
162
  const env = overlayLocalBindings(createEnvProxy({
124
163
  client,
125
164
  hints,
@@ -238,8 +277,35 @@ function resolveWithPlatformContext(event, resolve, platform) {
238
277
  if (!(event.request instanceof Request)) return resolve(event);
239
278
  return runWithEventContext(createFetchEvent(event.request, platform.env, platform.context), () => resolve(event));
240
279
  }
241
- async function createPlatformWithRequestContext(event, resolve, options) {
242
- const platform = await createDevflarePlatform(options);
280
+ /**
281
+ * Build this request's dev platform, reporting a failure instead of throwing.
282
+ *
283
+ * A dev request should still be served when the bridge is unreachable — just without bindings — so the
284
+ * failure is deliberately swallowed here. Equally deliberately, this covers ONLY the setup: resolving
285
+ * options and connecting. An error raised by the request itself belongs to the request. Catching that
286
+ * here (as one try around setup AND `resolve()` used to) blamed it on the platform, hid the real cause,
287
+ * and re-ran the whole request — repeating every side effect and running the second pass outside the
288
+ * context {@link resolveWithPlatformContext} established for the first.
289
+ *
290
+ * @param resolveOptions - produces the platform options; may itself fail (config load, hint extraction).
291
+ * @returns the platform, or null when it could not be built.
292
+ */
293
+ async function createPlatformOrReport(resolveOptions) {
294
+ try {
295
+ return await createDevflarePlatform(await resolveOptions());
296
+ } catch (error) {
297
+ console.error("[devflare] Failed to create platform:", error);
298
+ return null;
299
+ }
300
+ }
301
+ /**
302
+ * Attach a built platform to the event and resolve the request under its context.
303
+ *
304
+ * @param event - the SvelteKit request event.
305
+ * @param resolve - SvelteKit's resolve for this handle.
306
+ * @param platform - the platform from {@link createPlatformOrReport}.
307
+ */
308
+ function serveWithPlatform(event, resolve, platform) {
243
309
  event.platform = platform;
244
310
  return resolveWithPlatformContext(event, resolve, platform);
245
311
  }
@@ -285,10 +351,9 @@ async function getCustomPlatformOptions(options) {
285
351
  function createHandle(options = {}) {
286
352
  const { shouldEnable, ...platformOptions } = options;
287
353
  return async ({ event, resolve }) => {
288
- if (shouldEnable ? shouldEnable() : process.env.NODE_ENV !== "production" && process.env.DEVFLARE_DEV === "true") try {
289
- return await createPlatformWithRequestContext(event, resolve, await getCustomPlatformOptions(platformOptions));
290
- } catch (error) {
291
- console.error("[devflare] Failed to create platform:", error);
354
+ if (shouldEnable ? shouldEnable() : process.env.NODE_ENV !== "production" && process.env.DEVFLARE_DEV === "true") {
355
+ const platform = await createPlatformOrReport(() => getCustomPlatformOptions(platformOptions));
356
+ if (platform) return serveWithPlatform(event, resolve, platform);
292
357
  }
293
358
  return resolve(event);
294
359
  };
@@ -317,10 +382,9 @@ function createHandle(options = {}) {
317
382
  */
318
383
  const handle = async (input) => {
319
384
  const { event, resolve } = input;
320
- if (process.env.NODE_ENV !== "production" && process.env.DEVFLARE_DEV === "true") try {
321
- return await createPlatformWithRequestContext(event, resolve, await getAutoPlatformOptions());
322
- } catch (error) {
323
- console.error("[devflare] Failed to create platform:", error);
385
+ if (process.env.NODE_ENV !== "production" && process.env.DEVFLARE_DEV === "true") {
386
+ const platform = await createPlatformOrReport(getAutoPlatformOptions);
387
+ if (platform) return serveWithPlatform(event, resolve, platform);
324
388
  }
325
389
  return resolve(event);
326
390
  };
@@ -36,6 +36,28 @@ export interface DevflarePlatformOptions {
36
36
  * Returns a snapshot of the pending errors and clears the buffer.
37
37
  */
38
38
  export declare function drainWaitUntilErrors(platform: Platform): unknown[];
39
+ /**
40
+ * Connect to the bridge, riding out a TRANSIENT outage with a bounded retry.
41
+ *
42
+ * The bridge socket drops for a fraction of a second whenever the dev runtime reloads a worker (HMR /
43
+ * config change) or the coordinator briefly restarts (e.g. after a worker threw). A single per-request
44
+ * `connect()` attempt rejects the instant the socket is refused, which the SvelteKit handle turns into
45
+ * "dropped every binding for this request" — so an unrelated route 500s with a missing D1/KV/R2 binding
46
+ * mid-reload. Retrying for a short window instead lets the reconnect land and the request proceed. The LAST
47
+ * error is rethrown only once the budget is spent (the bridge really is down), so a genuine
48
+ * misconfiguration still fails fast rather than hanging.
49
+ *
50
+ * Exported for unit testing; `sleep`/`now` are injectable so the retry schedule is asserted without real time.
51
+ *
52
+ * @param connect - the bridge client's `connect()`; a fresh attempt each call (the client dedups in-flight ones).
53
+ * @param options - `maxWaitMs` total budget, `retryDelayMs` between attempts, and injectable `sleep`/`now` for tests.
54
+ */
55
+ export declare function connectBridgeWithRetry(connect: () => Promise<void>, options?: {
56
+ maxWaitMs?: number;
57
+ retryDelayMs?: number;
58
+ sleep?: (ms: number) => Promise<void>;
59
+ now?: () => number;
60
+ }): Promise<void>;
39
61
  /**
40
62
  * Create a platform object that routes bindings through the bridge
41
63
  *
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/sveltekit/platform.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,WAAW,CAAA;AAUzF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,OAAO,EAAE,gBAAgB,CAAA;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAA;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC;AAkDD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,CAQlE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,QAAQ,CAAC,CAqDnB;AA4BD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAgGD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IACnE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAC3B,CAAC,SAAS;IACT,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACzD,EACA,OAAO,GAAE,mBAAwB,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAwBpE;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,MAAM,GAClB,CAAC,SAAS;IACT,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACzD,SAEM,CAAC,KACN,OAAO,CAAC,QAAQ,CAgBlB,CAAA"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/sveltekit/platform.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,WAAW,CAAA;AAUzF;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5B,OAAO,EAAE,gBAAgB,CAAA;IACzB,MAAM,EAAE,YAAY,CAAA;IACpB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,EAAE,CAAA;CACzB;AAED,MAAM,WAAW,uBAAuB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,CAAA;IAEpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACvC;AAkDD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,CAQlE;AAYD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC5B,OAAO,GAAE;IACR,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACb,GACJ,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,sBAAsB,CAC3C,OAAO,GAAE,uBAA4B,GACnC,OAAO,CAAC,QAAQ,CAAC,CAsDnB;AA4BD;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AA8HD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IACnE;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAC3B,CAAC,SAAS;IACT,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACzD,EACA,OAAO,GAAE,mBAAwB,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAiBpE;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,MAAM,GAClB,CAAC,SAAS;IACT,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAChD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CACzD,SAEM,CAAC,KACN,OAAO,CAAC,QAAQ,CAalB,CAAA"}
@@ -4,10 +4,10 @@ import { _ as normalizeSecretsStoreBinding, f as normalizeMediaBinding, h as nor
4
4
  import { t as applyLocalDevVarsToConfig } from "../_chunks/local-dev-vars-BFLS-HoI.js";
5
5
  import { g as isAuthenticated, p as getApiToken } from "../_chunks/api-BKClUlUf.js";
6
6
  import { d as getPrimaryAccount, n as getEffectiveAccountId } from "../_chunks/preferences-CbYERA_m.js";
7
- import { A as createTailEvent, D as createFetchEvent, E as createEmailEvent, F as BridgeClient, M as createEnvProxy, O as createQueueEvent, P as setBindingHints, _ as runWithContext, k as createScheduledEvent, v as runWithEventContext, x as createDurableObjectAlarmEvent } from "../_chunks/context-ZQydom21.js";
7
+ import { A as createTailEvent, D as createFetchEvent, E as createEmailEvent, F as BridgeClient, M as createEnvProxy, O as createQueueEvent, P as setBindingHints, _ as runWithContext, k as createScheduledEvent, v as runWithEventContext, x as createDurableObjectAlarmEvent } from "../_chunks/context-DGMev2AF.js";
8
8
  import { createLocalSendEmailBinding, wrapEnvSendEmailBindings } from "../utils/send-email.js";
9
- import { n as __setTestContext, r as env, t as __clearTestContext } from "../_chunks/env-DyL6JOXI.js";
10
- import { _ as resolveFetchHandler, a as matchFetchRoute, m as invokeFetchModule, r as createRouteResolve } from "../_chunks/runtime-CuMe2D6n.js";
9
+ import { n as __setTestContext, r as env, t as __clearTestContext } from "../_chunks/env-D4uJqqgu.js";
10
+ import { _ as resolveFetchHandler, a as matchFetchRoute, m as invokeFetchModule, r as createRouteResolve } from "../_chunks/runtime-BlKTWIgD.js";
11
11
  import { i as extractBindingHints, n as createLocalWorkerLoaderBinding, r as disposeLocalWorkerLoaderBindings, t as createLocalHyperdrive } from "../_chunks/local-hyperdrive-CcORzo76.js";
12
12
  import { E as buildTailConsumersConfig, T as buildStreamingTailConsumersConfig, a as hasServiceBindings, i as hasCrossWorkerDOs, m as buildHyperdrivesConfig, o as resolveDOBindings, r as clearBundleCache, s as resolveServiceBindings, t as discoverRoutes, u as buildAnalyticsEngineConfig } from "../_chunks/routes-CRXB3-iw.js";
13
13
  import { i as findFiles, t as DEFAULT_DO_PATTERN } from "../_chunks/glob-DRw9sbfF.js";
@@ -1,2 +1,2 @@
1
- import { a as devflarePlugin, c as getDevflareConfigs, i as writeGeneratedViteConfig, n as resolveEffectiveViteProject, o as getPluginContext, r as resolveViteUserConfig, s as getCloudflareConfig, t as hasInlineViteConfig } from "../_chunks/vite-Dxuhm1BP.js";
1
+ import { a as devflarePlugin, c as getDevflareConfigs, i as writeGeneratedViteConfig, n as resolveEffectiveViteProject, o as getPluginContext, r as resolveViteUserConfig, s as getCloudflareConfig, t as hasInlineViteConfig } from "../_chunks/vite-Bml-Whp8.js";
2
2
  export { devflarePlugin as default, devflarePlugin, getCloudflareConfig, getDevflareConfigs, getPluginContext, hasInlineViteConfig, resolveEffectiveViteProject, resolveViteUserConfig, writeGeneratedViteConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devflare",
3
- "version": "1.0.0-next.67",
3
+ "version": "1.0.0-next.69",
4
4
  "description": "Devflare is a developer-first toolkit for Cloudflare Workers that sits on top of Miniflare and Wrangler-compatible config",
5
5
  "repository": {
6
6
  "type": "git",