@cloudflare/vite-plugin 1.25.5 → 1.26.0

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 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/utils.ts","../src/workers-configs.ts","../src/plugin-config.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;;ACgDK,KDMO,OCNP,CAAA,CAAA,CAAA,GDMoB,OCNpB,CDM4B,CCN5B,EAAA,SAA8B,CAAA;;;;AAA9B,KAjBO,YAAA,GAAe,IAiBtB,CAjB2B,eAiBG,EAAU,MAjBU,mBAiBV,CAA0B;KAAlE,8BAAA,UAAwC;KAExC,mBAAA,GACF,oCACA;KAEE,iCAAA,SACE;AC/BP,KDiCK,8BAAA,GACJ,8BClCuB,CAAA,aAAA,CAAA,CAAA,MAAA,CAAA;AAA8B;AAE5B;AAI0B;AAS1C,cDwBG,0BCtBJ,EAAA;EAGJ;AAEyB;AAMU;EAQnC,SAAA,cAAA,EAAsB;IAChB,SAAA,KAAA,EAAA;MAAR,SAAA,eAAA,EAAA,eAAA;MAES,SAAA,QAAA,EAAA,2DAAA;IACG,CAAA;IAED,SAAA,MAAA,EAAA;MACa,SAAA,eAAA,EAAA,QAAA;MAEX,SAAA,QAAA,EAAA,oDAAA;IAAR,CAAA;IAAO,SAAA,MAAA,EAAA;MAEE,SAAa,eAAA,EAAA,cAAA;MACV,SAAA,QAAA,EAAA,yDAAA;IACJ,CAAA;EAGA,CAAA;EALsB;;AAQtC;;EACe,SAAA,WAAA,EAAA,SAAA,CAAA,UAAA,EAAA,OAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA;CACA;;;AF3BH,KE9BA,YAAA,GF8BqB,OAAR,GAAA;;;UE5Bf,gBAAA;EDKE,eAAY,CAAA,EAAA;IAAQ,IAAA,CAAA,EAAA,MAAA;IAAuB,iBAAA,CAAA,EAAA,MAAA,EAAA;EAA5B,CAAA;;AAezB,UChBQ,iBAAA,SAA0B,gBDkBS,CAAA;EAExC,UAAA,CAAA,EAAA,MAAA;EAIA,MAAA,CAAA,ECtBK,sBDsBL,CAAA,IAAiC,CAAA;AACD;AAQrC,UC5BU,yBAAA,SAAkC,gBD4DlC,CAAA;;;UCxDA,2BAAA,SAAoC;EAflC,UAAA,CAAA,EAAA,MAAY;EAEd,MAAA,EAeD,sBAfiB,CAAA,KAAA,CAAA;AAAA;AAI0B,KAc/C,qBAAA,GACF,yBAVyC,GAWzC,2BAXyD;AAAA,UAalD,YAAA,CATA;EAKL;EAIK,iCAIS,CAAA,EAAA,OAAA;EAGd;EAKA,eAAA,CAAA,EARc,qBAQQ;;KALtB,yBAAA,GAA4B,IAM9B,CALF,wBAKE,EAAA,cAAA,GAAA,MAAA,CAAA;KADE,sBAGO,CAAA,uBAAA,OAAA,CAAA,GAFT,OAES,CAFD,YAEC,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,cAAA,SAAA,IAAA,GAAA,CAAA,MAAA,EACG,YADH,CAAA,GAAA,CACG,MAAA,EAED,YAFC,EAED;EACa,iBAAA,EAAA,yBAAA;AAEX,CAAA,CAAR,EAAA,GAAA,OAAA,CAAQ,YAAR,CAAA,GAAA,IAAA,CAAA;AAAO,UAEE,YAAA,SAAqB,iBAFvB,CAAA;EAEE,gBAAa,CAAA,EACV,qBADU,EAAA;EACV,YAAA,CAAA,EACJ,YADI;EACJ,aAAA,CAAA,EAAA,MAAA,GAAA,KAAA;EAGA,cAAA,CAAA,EAAA,OAAA;EALsB,YAAA,CAAA,EAKtB,YALsB;;AAQrB,UAAA,wBAAA,SAAiC,YAAR,CAAA;EACnB,YAAA,EAAR,OAAQ,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA;EAAR,IAAA,EACR,OADQ,CACA,YADA,CAAA,MAAA,CAAA,CAAA;EACA,kBAAA,EACM,OADN,CACc,YADd,CAAA,oBAAA,CAAA,CAAA;;;;;AF3Bf;;;;ACvBA;;AAAuD,iBEevC,UAAA,CFfuC,YAAA,CAAA,EEed,YFfc,CAAA,EEeM,IAAA,CAAK,MFfX,EAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/utils.ts","../src/workers-configs.ts","../src/plugin-config.ts","../src/index.ts"],"sourcesContent":[],"mappings":";;;;;;;ACgDK,KDOO,OCPP,CAAA,CAAA,CAAA,GDOoB,OCPpB,CDO4B,CCP5B,EAAA,SAA8B,CAAA;;;;AAA9B,KAjBO,YAAA,GAAe,IAiBtB,CAjB2B,eAiBG,EAAU,MAjBU,mBAiBV,CAA0B;KAAlE,8BAAA,UAAwC;KAExC,mBAAA,GACF,oCACA;KAEE,iCAAA,SACE;AC/BP,KDiCK,8BAAA,GACJ,8BClCuB,CAAA,aAAA,CAAA,CAAA,MAAA,CAAA;AAA8B;AAE5B;AAI0B;AAS1C,cDwBG,0BCtBJ,EAAA;EAGJ;AAEyB;AAMU;EAQnC,SAAA,cAAA,EAAsB;IAChB,SAAA,KAAA,EAAA;MAAR,SAAA,eAAA,EAAA,eAAA;MAES,SAAA,QAAA,EAAA,2DAAA;IACG,CAAA;IAED,SAAA,MAAA,EAAA;MACa,SAAA,eAAA,EAAA,QAAA;MAEX,SAAA,QAAA,EAAA,oDAAA;IAAR,CAAA;IAAO,SAAA,MAAA,EAAA;MAEE,SAAa,eAAA,EAAA,cAAA;MACV,SAAA,QAAA,EAAA,yDAAA;IACJ,CAAA;EAGA,CAAA;EALsB;;AAQtC;;EACe,SAAA,WAAA,EAAA,SAAA,CAAA,UAAA,EAAA,OAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,CAAA;CACA;;;AF1BH,KE/BA,YAAA,GF+BqB,OAAR,GAAA;;;UE7Bf,gBAAA;EDKE,eAAY,CAAA,EAAA;IAAQ,IAAA,CAAA,EAAA,MAAA;IAAuB,iBAAA,CAAA,EAAA,MAAA,EAAA;EAA5B,CAAA;;AAezB,UChBQ,iBAAA,SAA0B,gBDkBS,CAAA;EAExC,UAAA,CAAA,EAAA,MAAA;EAIA,MAAA,CAAA,ECtBK,sBDsBL,CAAA,IAAiC,CAAA;AACD;AAQrC,UC5BU,yBAAA,SAAkC,gBD4DlC,CAAA;;;UCxDA,2BAAA,SAAoC;EAflC,UAAA,CAAA,EAAA,MAAY;EAEd,MAAA,EAeD,sBAfiB,CAAA,KAAA,CAAA;AAAA;AAI0B,KAc/C,qBAAA,GACF,yBAVyC,GAWzC,2BAXyD;AAAA,UAalD,YAAA,CATA;EAKL;EAIK,iCAIS,CAAA,EAAA,OAAA;EAGd;EAKA,eAAA,CAAA,EARc,qBAQQ;;KALtB,yBAAA,GAA4B,IAM9B,CALF,wBAKE,EAAA,cAAA,GAAA,MAAA,CAAA;KADE,sBAGO,CAAA,uBAAA,OAAA,CAAA,GAFT,OAES,CAFD,YAEC,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,cAAA,SAAA,IAAA,GAAA,CAAA,MAAA,EACG,YADH,CAAA,GAAA,CACG,MAAA,EAED,YAFC,EAED;EACa,iBAAA,EAAA,yBAAA;AAEX,CAAA,CAAR,EAAA,GAAA,OAAA,CAAQ,YAAR,CAAA,GAAA,IAAA,CAAA;AAAO,UAEE,YAAA,SAAqB,iBAFvB,CAAA;EAEE,gBAAa,CAAA,EACV,qBADU,EAAA;EACV,YAAA,CAAA,EACJ,YADI;EACJ,aAAA,CAAA,EAAA,MAAA,GAAA,KAAA;EAGA,cAAA,CAAA,EAAA,OAAA;EALsB,YAAA,CAAA,EAKtB,YALsB;;AAQrB,UAAA,wBAAA,SAAiC,YAAR,CAAA;EACnB,YAAA,EAAR,OAAQ,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA;EAAR,IAAA,EACR,OADQ,CACA,YADA,CAAA,MAAA,CAAA,CAAA;EACA,kBAAA,EACM,OADN,CACc,YADd,CAAA,oBAAA,CAAA,CAAA;;;;;AF1Bf;;;;ACxBA;;AAAuD,iBEevC,UAAA,CFfuC,YAAA,CAAA,EEed,YFfc,CAAA,EEeM,IAAA,CAAK,MFfX,EAAA"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,5 @@
1
1
  import module$1, { builtinModules, createRequire } from "node:module";
2
2
  import assert from "node:assert";
3
- import { randomUUID } from "node:crypto";
4
3
  import { CoreHeaders, Log, LogLevel, Miniflare, Request as Request$1, Response as Response$1, coupleWebSocket, getDefaultDevRegistryPath, getNodeCompat, getWorkerRegistry, kUnsafeEphemeralUniqueKey } from "miniflare";
5
4
  import * as wrangler from "wrangler";
6
5
  import * as nodePath from "node:path";
@@ -9,6 +8,7 @@ import * as util$1 from "node:util";
9
8
  import { format, inspect } from "node:util";
10
9
  import * as vite from "vite";
11
10
  import { version } from "vite";
11
+ import { randomUUID } from "node:crypto";
12
12
  import * as fs$1 from "node:fs";
13
13
  import fs, { existsSync, readFileSync, realpathSync, statSync } from "node:fs";
14
14
  import os from "node:os";
@@ -1557,8 +1557,16 @@ async function sendResponse(res, response) {
1557
1557
  }
1558
1558
 
1559
1559
  //#endregion
1560
- //#region src/utils.ts
1560
+ //#region src/constants.ts
1561
1561
  var import_gte = /* @__PURE__ */ __toESM$1(require_gte(), 1);
1562
+ const ROUTER_WORKER_NAME = "__router-worker__";
1563
+ const ASSET_WORKER_NAME = "__asset-worker__";
1564
+ const VITE_PROXY_WORKER_NAME = "__vite_proxy_worker__";
1565
+ const PROXY_SHARED_SECRET = randomUUID();
1566
+ const kRequestType = Symbol("kRequestType");
1567
+
1568
+ //#endregion
1569
+ //#region src/utils.ts
1562
1570
  const debuglog = util$1.debuglog("@cloudflare:vite-plugin");
1563
1571
  /**
1564
1572
  * Creates an internal plugin to be used inside the main `vite-plugin-cloudflare` plugin.
@@ -1584,13 +1592,13 @@ function cleanUrl(url) {
1584
1592
  function withTrailingSlash(path$1) {
1585
1593
  return path$1.endsWith("/") ? path$1 : `${path$1}/`;
1586
1594
  }
1587
- function createRequestHandler(ctx, handler) {
1595
+ function createRequestHandler(handler) {
1588
1596
  return async (req, res, next) => {
1589
1597
  let request$1;
1590
1598
  try {
1591
1599
  if (req.originalUrl) req.url = req.originalUrl;
1592
1600
  request$1 = createRequest(req, res);
1593
- let response = await handler(toMiniflareRequest(ctx, request$1), req);
1601
+ let response = await handler(toMiniflareRequest(request$1), req);
1594
1602
  if (req.httpVersionMajor === 2) {
1595
1603
  response = new Response$1(response.body, response);
1596
1604
  response.headers.delete("transfer-encoding");
@@ -1605,11 +1613,11 @@ function createRequestHandler(ctx, handler) {
1605
1613
  function satisfiesViteVersion(minVersion$2) {
1606
1614
  return (0, import_gte.default)(version, minVersion$2);
1607
1615
  }
1608
- function toMiniflareRequest(ctx, request$1) {
1616
+ function toMiniflareRequest(request$1) {
1609
1617
  const host = request$1.headers.get("Host");
1610
1618
  const xForwardedHost = request$1.headers.get("X-Forwarded-Host");
1611
1619
  if (host && !xForwardedHost) request$1.headers.set("X-Forwarded-Host", host);
1612
- request$1.headers.set(CoreHeaders.PROXY_SHARED_SECRET, ctx.proxySharedSecret);
1620
+ request$1.headers.set(CoreHeaders.PROXY_SHARED_SECRET, PROXY_SHARED_SECRET);
1613
1621
  const secFetchMode = request$1.headers.get("Sec-Fetch-Mode");
1614
1622
  if (secFetchMode) request$1.headers.set(CoreHeaders.SEC_FETCH_MODE, secFetchMode);
1615
1623
  return new Request$1(request$1.url, {
@@ -1710,10 +1718,8 @@ var PluginContext = class {
1710
1718
  #sharedContext;
1711
1719
  #resolvedPluginConfig;
1712
1720
  #resolvedViteConfig;
1713
- #proxySharedSecret;
1714
1721
  constructor(sharedContext$1) {
1715
1722
  this.#sharedContext = sharedContext$1;
1716
- this.#proxySharedSecret = randomUUID();
1717
1723
  }
1718
1724
  /** Creates a new Miniflare instance or updates the existing instance */
1719
1725
  async startOrUpdateMiniflare(options) {
@@ -1758,11 +1764,14 @@ var PluginContext = class {
1758
1764
  get hasShownWorkerConfigWarnings() {
1759
1765
  return this.#sharedContext.hasShownWorkerConfigWarnings;
1760
1766
  }
1761
- setIsRestartingDevServer(isRestartingDevServer) {
1762
- this.#sharedContext.isRestartingDevServer = isRestartingDevServer;
1767
+ beginRestartingDevServer() {
1768
+ this.#sharedContext.restartingDevServerCount++;
1769
+ }
1770
+ endRestartingDevServer() {
1771
+ this.#sharedContext.restartingDevServerCount--;
1763
1772
  }
1764
1773
  get isRestartingDevServer() {
1765
- return this.#sharedContext.isRestartingDevServer;
1774
+ return this.#sharedContext.restartingDevServerCount > 0;
1766
1775
  }
1767
1776
  setResolvedPluginConfig(resolvedPluginConfig) {
1768
1777
  this.#resolvedPluginConfig = resolvedPluginConfig;
@@ -1803,9 +1812,6 @@ var PluginContext = class {
1803
1812
  getNodeJsCompat(environmentName) {
1804
1813
  return this.#getWorker(environmentName)?.nodeJsCompat;
1805
1814
  }
1806
- get proxySharedSecret() {
1807
- return this.#proxySharedSecret;
1808
- }
1809
1815
  };
1810
1816
  function assertIsNotPreview(ctx) {
1811
1817
  assert(ctx.resolvedPluginConfig.type !== "preview", `Expected "assets-only" or "workers" plugin config`);
@@ -5262,6 +5268,7 @@ var defaultWranglerConfig = {
5262
5268
  upload_source_maps: void 0,
5263
5269
  assets: void 0,
5264
5270
  observability: { enabled: true },
5271
+ cache: void 0,
5265
5272
  compliance_region: void 0,
5266
5273
  python_modules: { exclude: ["**/*.pyc"] },
5267
5274
  define: {},
@@ -6157,6 +6164,7 @@ var validateStreamingTailConsumers = /* @__PURE__ */ __name((diagnostics, field,
6157
6164
  function normalizeAndValidateEnvironment(diagnostics, configPath, rawEnv, isDispatchNamespace, preserveOriginalMain, envName = "top level", topLevelEnv, useServiceEnvironments, rawConfig) {
6158
6165
  deprecated(diagnostics, rawEnv, "node_compat", `The "node_compat" field is no longer supported as of Wrangler v4. Instead, use the \`nodejs_compat\` compatibility flag. This includes the functionality from legacy \`node_compat\` polyfills and natively implemented Node.js APIs. See https://developers.cloudflare.com/workers/runtime-apis/nodejs for more information.`, true, "Removed", "error");
6159
6166
  experimental(diagnostics, rawEnv, "unsafe");
6167
+ experimental(diagnostics, rawEnv, "secrets");
6160
6168
  const route = normalizeAndValidateRoute(diagnostics, topLevelEnv, rawEnv);
6161
6169
  const account_id = inheritableInWranglerEnvironments(diagnostics, useServiceEnvironments, topLevelEnv, mutateEmptyStringAccountIDValue(diagnostics, rawEnv), "account_id", isString$2, void 0, void 0);
6162
6170
  const routes = validateRoutes(diagnostics, topLevelEnv, rawEnv);
@@ -6186,6 +6194,7 @@ function normalizeAndValidateEnvironment(diagnostics, configPath, rawEnv, isDisp
6186
6194
  workers_dev,
6187
6195
  preview_urls,
6188
6196
  vars: notInheritable(diagnostics, topLevelEnv, rawConfig, rawEnv, envName, "vars", validateVars(envName), {}),
6197
+ secrets: notInheritable(diagnostics, topLevelEnv, rawConfig, rawEnv, envName, "secrets", validateSecrets(envName), void 0),
6189
6198
  define: notInheritable(diagnostics, topLevelEnv, rawConfig, rawEnv, envName, "define", validateDefines(envName), {}),
6190
6199
  durable_objects: notInheritable(diagnostics, topLevelEnv, rawConfig, rawEnv, envName, "durable_objects", validateBindingsProperty(envName, validateDurableObjectBinding), { bindings: [] }),
6191
6200
  workflows: notInheritable(diagnostics, topLevelEnv, rawConfig, rawEnv, envName, "workflows", all(validateBindingArray(envName, validateWorkflowBinding), validateUniqueNameProperty), []),
@@ -6228,6 +6237,7 @@ function normalizeAndValidateEnvironment(diagnostics, configPath, rawEnv, isDisp
6228
6237
  logpush: inheritable(diagnostics, topLevelEnv, rawEnv, "logpush", isBoolean, void 0),
6229
6238
  upload_source_maps: inheritable(diagnostics, topLevelEnv, rawEnv, "upload_source_maps", isBoolean, void 0),
6230
6239
  observability: inheritable(diagnostics, topLevelEnv, rawEnv, "observability", validateObservability, void 0),
6240
+ cache: inheritable(diagnostics, topLevelEnv, rawEnv, "cache", validateCache, void 0),
6231
6241
  compliance_region: inheritable(diagnostics, topLevelEnv, rawEnv, "compliance_region", isOneOf("public", "fedramp_high"), void 0),
6232
6242
  python_modules: inheritable(diagnostics, topLevelEnv, rawEnv, "python_modules", validatePythonModules, { exclude: ["**/*.pyc"] })
6233
6243
  };
@@ -6343,6 +6353,18 @@ Please add "vars.${varName}" to "env.${envName}".`);
6343
6353
  }
6344
6354
  return isValid$1;
6345
6355
  }, "validateVars");
6356
+ var validateSecrets = /* @__PURE__ */ __name((envName) => (diagnostics, field, value, config) => {
6357
+ const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;
6358
+ if (value === void 0) return true;
6359
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
6360
+ diagnostics.errors.push(`The field "${fieldPath}" should be an object but got ${JSON.stringify(value)}.`);
6361
+ return false;
6362
+ }
6363
+ let isValid$1 = true;
6364
+ validateAdditionalProperties(diagnostics, fieldPath, Object.keys(value), ["required"]);
6365
+ isValid$1 = validateOptionalTypedArray(diagnostics, `${fieldPath}.required`, value.required, "string") && isValid$1;
6366
+ return isValid$1;
6367
+ }, "validateSecrets");
6346
6368
  var validateBindingsProperty = /* @__PURE__ */ __name((envName, validateBinding) => (diagnostics, field, value, config) => {
6347
6369
  let isValid$1 = true;
6348
6370
  const fieldPath = config === void 0 ? `${field}` : `env.${envName}.${field}`;
@@ -6478,12 +6500,26 @@ var validateWorkflowBinding = /* @__PURE__ */ __name((diagnostics, field, value)
6478
6500
  diagnostics.errors.push(`"${field}" bindings should, optionally, have a boolean "remote" field but got ${JSON.stringify(value)}.`);
6479
6501
  isValid$1 = false;
6480
6502
  }
6503
+ if (hasProperty(value, "limits") && value.limits !== void 0) if (typeof value.limits !== "object" || value.limits === null || Array.isArray(value.limits)) {
6504
+ diagnostics.errors.push(`"${field}" bindings should, optionally, have an object "limits" field but got ${JSON.stringify(value)}.`);
6505
+ isValid$1 = false;
6506
+ } else {
6507
+ const limits = value.limits;
6508
+ if (limits.steps !== void 0) {
6509
+ if (typeof limits.steps !== "number" || !Number.isInteger(limits.steps) || limits.steps < 1) {
6510
+ diagnostics.errors.push(`"${field}" bindings "limits.steps" field must be a positive integer but got ${JSON.stringify(limits.steps)}.`);
6511
+ isValid$1 = false;
6512
+ } else if (limits.steps > 25e3) diagnostics.warnings.push(`"${field}" has a step limit of ${limits.steps}, which exceeds the production maximum of 25,000. This configuration may not work when deployed.`);
6513
+ }
6514
+ validateAdditionalProperties(diagnostics, `${field}.limits`, Object.keys(limits), ["steps"]);
6515
+ }
6481
6516
  validateAdditionalProperties(diagnostics, field, Object.keys(value), [
6482
6517
  "binding",
6483
6518
  "name",
6484
6519
  "class_name",
6485
6520
  "script_name",
6486
- "remote"
6521
+ "remote",
6522
+ "limits"
6487
6523
  ]);
6488
6524
  return isValid$1;
6489
6525
  }, "validateWorkflowBinding");
@@ -7083,6 +7119,7 @@ var validateBindingsHaveUniqueNames = /* @__PURE__ */ __name((diagnostics, confi
7083
7119
  let hasDuplicates = false;
7084
7120
  const bindingNamesArray = Object.entries(friendlyBindingNames);
7085
7121
  const bindingsGroupedByType = Object.fromEntries(bindingNamesArray.map(([bindingType, binding]) => [binding, getBindingNames(bindingType === "queues" ? config[bindingType]?.producers : config[bindingType])]));
7122
+ bindingsGroupedByType["Secret"] = config.secrets?.required ?? [];
7086
7123
  const bindingsGroupedByName = {};
7087
7124
  for (const bindingType in bindingsGroupedByType) {
7088
7125
  const bindingNames = bindingsGroupedByType[bindingType];
@@ -7520,6 +7557,18 @@ var validateObservability = /* @__PURE__ */ __name((diagnostics, field, value) =
7520
7557
  if (samplingRate && (samplingRate < 0 || samplingRate > 1)) diagnostics.errors.push(`"${field}.head_sampling_rate" must be a value between 0 and 1.`);
7521
7558
  return isValid$1;
7522
7559
  }, "validateObservability");
7560
+ var validateCache = /* @__PURE__ */ __name((diagnostics, field, value) => {
7561
+ if (value === void 0) return true;
7562
+ if (typeof value !== "object" || value === null) {
7563
+ diagnostics.errors.push(`"${field}" should be an object but got ${JSON.stringify(value)}.`);
7564
+ return false;
7565
+ }
7566
+ const val = value;
7567
+ let isValid$1 = true;
7568
+ isValid$1 = validateRequiredProperty(diagnostics, field, "enabled", val.enabled, "boolean") && isValid$1;
7569
+ isValid$1 = validateAdditionalProperties(diagnostics, field, Object.keys(val), ["enabled"]) && isValid$1;
7570
+ return isValid$1;
7571
+ }, "validateCache");
7523
7572
  function warnIfDurableObjectsHaveNoMigrations(diagnostics, durableObjects, migrations, configPath) {
7524
7573
  if (Array.isArray(durableObjects.bindings) && durableObjects.bindings.length > 0) {
7525
7574
  const exportedDurableObjects = (durableObjects.bindings || []).filter((binding) => !binding.script_name);
@@ -21733,10 +21782,11 @@ function initRunners(resolvedPluginConfig, viteDevServer, miniflare) {
21733
21782
  /**
21734
21783
  * Gets any variables with which to augment the Worker config in preview mode.
21735
21784
  *
21736
- * Calls `unstable_getVarsForDev` with the current Cloudflare environment to get local dev variables from the `.dev.vars` and `.env` files.
21785
+ * Calls `unstable_getVarsForDev` with the current Cloudflare environment to get local dev variables from the .dev.vars/.env/process.env.
21786
+ * When `secrets` is defined in the Worker config, only declared secrets are loaded.
21737
21787
  */
21738
- function getLocalDevVarsForPreview(configPath, cloudflareEnv) {
21739
- const dotDevDotVars = wrangler.unstable_getVarsForDev(configPath, void 0, {}, cloudflareEnv);
21788
+ function getLocalDevVarsForPreview(config, cloudflareEnv) {
21789
+ const dotDevDotVars = wrangler.unstable_getVarsForDev(config.configPath, void 0, {}, cloudflareEnv, false, config.secrets);
21740
21790
  const dotDevDotVarsEntries = Array.from(Object.entries(dotDevDotVars));
21741
21791
  if (dotDevDotVarsEntries.length > 0) return dotDevDotVarsEntries.map(([key, { value }]) => {
21742
21792
  return `${key} = "${value?.toString().replaceAll(`"`, `\\"`)}"\n`;
@@ -22272,6 +22322,18 @@ let DeploymentNotFoundError;
22272
22322
  }({});
22273
22323
  })(DeploymentNotFoundError || (DeploymentNotFoundError = {}));
22274
22324
 
22325
+ //#endregion
22326
+ //#region ../containers-shared/src/client/models/ExternalRegistryKind.ts
22327
+ /* istanbul ignore file */
22328
+ /**
22329
+ * The type of external registry that is being configured.
22330
+ */
22331
+ let ExternalRegistryKind = /* @__PURE__ */ function(ExternalRegistryKind$1) {
22332
+ ExternalRegistryKind$1["ECR"] = "ECR";
22333
+ ExternalRegistryKind$1["DOCKER_HUB"] = "DockerHub";
22334
+ return ExternalRegistryKind$1;
22335
+ }({});
22336
+
22275
22337
  //#endregion
22276
22338
  //#region ../containers-shared/src/client/models/ImageRegistryAlreadyExistsError.ts
22277
22339
  let ImageRegistryAlreadyExistsError;
@@ -23108,19 +23170,20 @@ async function cleanupDuplicateImageTags(dockerPath, imageTag) {
23108
23170
  } catch {}
23109
23171
  }
23110
23172
 
23111
- //#endregion
23112
- //#region ../containers-shared/src/client/models/ExternalRegistryKind.ts
23113
- /* istanbul ignore file */
23114
- /**
23115
- * The type of external registry that is being configured.
23116
- */
23117
- let ExternalRegistryKind = /* @__PURE__ */ function(ExternalRegistryKind$1) {
23118
- ExternalRegistryKind$1["ECR"] = "ECR";
23119
- return ExternalRegistryKind$1;
23120
- }({});
23121
-
23122
23173
  //#endregion
23123
23174
  //#region ../containers-shared/src/images.ts
23175
+ const DEFAULT_CONTAINER_EGRESS_INTERCEPTOR_IMAGE = "cloudflare/proxy-everything:4dc6c7f@sha256:9621ef445ef120409e5d95bbd845ab2fa0f613636b59a01d998f5704f4096ae2";
23176
+ function getEgressInterceptorImage() {
23177
+ return process.env.MINIFLARE_CONTAINER_EGRESS_IMAGE ?? DEFAULT_CONTAINER_EGRESS_INTERCEPTOR_IMAGE;
23178
+ }
23179
+ async function pullEgressInterceptorImage(dockerPath) {
23180
+ await runDockerCmd(dockerPath, [
23181
+ "pull",
23182
+ getEgressInterceptorImage(),
23183
+ "--platform",
23184
+ "linux/amd64"
23185
+ ]);
23186
+ }
23124
23187
  async function pullImage(dockerPath, options, logger, isVite) {
23125
23188
  const domain = new URL(`http://${options.image_uri}`).hostname;
23126
23189
  const isExternalRegistry = domain !== getCloudflareContainerRegistry();
@@ -23198,6 +23261,7 @@ async function prepareContainerImagesForDev(args) {
23198
23261
  await checkExposedPorts(dockerPath, options);
23199
23262
  }
23200
23263
  }
23264
+ if (!aborted && args.compatibilityFlags?.includes("experimental")) await pullEgressInterceptorImage(dockerPath);
23201
23265
  }
23202
23266
 
23203
23267
  //#endregion
@@ -23219,13 +23283,6 @@ const generateStaticRoutingRuleMatcher = (rules) => ({ request: request$1 }) =>
23219
23283
  return false;
23220
23284
  };
23221
23285
 
23222
- //#endregion
23223
- //#region src/constants.ts
23224
- const ROUTER_WORKER_NAME = "__router-worker__";
23225
- const ASSET_WORKER_NAME = "__asset-worker__";
23226
- const VITE_PROXY_WORKER_NAME = "__vite_proxy_worker__";
23227
- const kRequestType = Symbol("kRequestType");
23228
-
23229
23286
  //#endregion
23230
23287
  //#region src/containers.ts
23231
23288
  /**
@@ -26037,7 +26094,7 @@ async function getDevMiniflareOptions(ctx, viteDevServer) {
26037
26094
  return {
26038
26095
  miniflareOptions: {
26039
26096
  log: logger,
26040
- unsafeProxySharedSecret: ctx.proxySharedSecret,
26097
+ unsafeProxySharedSecret: PROXY_SHARED_SECRET,
26041
26098
  logRequests: false,
26042
26099
  inspectorPort: inputInspectorPort === false ? void 0 : inputInspectorPort,
26043
26100
  unsafeDevRegistryPath: getDefaultDevRegistryPath(),
@@ -26142,7 +26199,7 @@ async function getPreviewMiniflareOptions(ctx, vitePreviewServer) {
26142
26199
  return {
26143
26200
  miniflareOptions: {
26144
26201
  log: logger,
26145
- unsafeProxySharedSecret: ctx.proxySharedSecret,
26202
+ unsafeProxySharedSecret: PROXY_SHARED_SECRET,
26146
26203
  inspectorPort: inputInspectorPort === false ? void 0 : inputInspectorPort,
26147
26204
  unsafeDevRegistryPath: getDefaultDevRegistryPath(),
26148
26205
  unsafeTriggerHandlers: true,
@@ -26283,7 +26340,7 @@ const devPlugin = createPlugin("dev", (ctx) => {
26283
26340
  if (staticRouting) {
26284
26341
  const excludeRulesMatcher = generateStaticRoutingRuleMatcher(staticRouting.asset_worker ?? []);
26285
26342
  const includeRulesMatcher = generateStaticRoutingRuleMatcher(staticRouting.user_worker);
26286
- const userWorkerHandler = createRequestHandler(ctx, async (request$1) => {
26343
+ const userWorkerHandler = createRequestHandler(async (request$1) => {
26287
26344
  request$1.headers.set(CoreHeaders.ROUTE_OVERRIDE, entryWorkerName);
26288
26345
  return ctx.miniflare.dispatchFetch(request$1, { redirect: "manual" });
26289
26346
  });
@@ -26306,7 +26363,8 @@ const devPlugin = createPlugin("dev", (ctx) => {
26306
26363
  onContainerImagePreparationStart: () => {},
26307
26364
  onContainerImagePreparationEnd: () => {},
26308
26365
  logger: viteDevServer.config.logger,
26309
- isVite: true
26366
+ isVite: true,
26367
+ compatibilityFlags: ctx.allWorkerConfigs.flatMap((c) => c.compatibility_flags)
26310
26368
  });
26311
26369
  containerImageTags = new Set(containerTagToOptionsMap.keys());
26312
26370
  viteDevServer.config.logger.info(import_picocolors$2.default.dim(import_picocolors$2.default.yellow("\n⚡️ Containers successfully built. To rebuild your containers during development, restart the Vite dev server (r + enter).")));
@@ -26325,7 +26383,7 @@ const devPlugin = createPlugin("dev", (ctx) => {
26325
26383
  handle: preMiddleware
26326
26384
  });
26327
26385
  }
26328
- viteDevServer.middlewares.use(createRequestHandler(ctx, async (request$1, req) => {
26386
+ viteDevServer.middlewares.use(createRequestHandler(async (request$1, req) => {
26329
26387
  if (req[kRequestType] === "asset") {
26330
26388
  request$1.headers.set(CoreHeaders.ROUTE_OVERRIDE, ASSET_WORKER_NAME);
26331
26389
  return ctx.miniflare.dispatchFetch(request$1, { redirect: "manual" });
@@ -26477,7 +26535,7 @@ const outputConfigPlugin = createPlugin("output-config", (ctx) => {
26477
26535
  };
26478
26536
  if (inputWorkerConfig.upload_source_maps === void 0 && this.environment.config.build.sourcemap) outputConfig.upload_source_maps = true;
26479
26537
  if (inputWorkerConfig.configPath) {
26480
- const localDevVars = getLocalDevVarsForPreview(inputWorkerConfig.configPath, ctx.resolvedPluginConfig.cloudflareEnv);
26538
+ const localDevVars = getLocalDevVarsForPreview(inputWorkerConfig, ctx.resolvedPluginConfig.cloudflareEnv);
26481
26539
  if (localDevVars) this.emitFile({
26482
26540
  type: "asset",
26483
26541
  fileName: ".dev.vars",
@@ -26556,7 +26614,8 @@ const previewPlugin = createPlugin("preview", (ctx) => {
26556
26614
  onContainerImagePreparationStart: () => {},
26557
26615
  onContainerImagePreparationEnd: () => {},
26558
26616
  logger: vitePreviewServer.config.logger,
26559
- isVite: true
26617
+ isVite: true,
26618
+ compatibilityFlags: ctx.allWorkerConfigs.flatMap((c) => c.compatibility_flags)
26560
26619
  });
26561
26620
  const containerImageTags = new Set(containerTagToOptionsMap.keys());
26562
26621
  vitePreviewServer.config.logger.info(import_picocolors$1.default.dim(import_picocolors$1.default.yellow("\n⚡️ Containers successfully built.\n")));
@@ -26565,7 +26624,7 @@ const previewPlugin = createPlugin("preview", (ctx) => {
26565
26624
  };
26566
26625
  }
26567
26626
  handleWebSocket(vitePreviewServer.httpServer, ctx.miniflare);
26568
- vitePreviewServer.middlewares.use(createRequestHandler(ctx, (request$1) => {
26627
+ vitePreviewServer.middlewares.use(createRequestHandler((request$1) => {
26569
26628
  return ctx.miniflare.dispatchFetch(request$1, { redirect: "manual" });
26570
26629
  }));
26571
26630
  } };
@@ -26645,7 +26704,7 @@ const triggerHandlersPlugin = createPlugin("trigger-handlers", (ctx) => {
26645
26704
  const entryWorkerConfig = ctx.entryWorkerConfig;
26646
26705
  if (!entryWorkerConfig) return;
26647
26706
  const entryWorkerName = entryWorkerConfig.name;
26648
- const requestHandler = createRequestHandler(ctx, (request$1) => {
26707
+ const requestHandler = createRequestHandler((request$1) => {
26649
26708
  request$1.headers.set(CoreHeaders.ROUTE_OVERRIDE, entryWorkerName);
26650
26709
  return ctx.miniflare.dispatchFetch(request$1, { redirect: "manual" });
26651
26710
  });
@@ -26685,7 +26744,7 @@ const wasmHelperPlugin = createPlugin("wasm-helper", (ctx) => {
26685
26744
  //#region src/index.ts
26686
26745
  const sharedContext = {
26687
26746
  hasShownWorkerConfigWarnings: false,
26688
- isRestartingDevServer: false
26747
+ restartingDevServerCount: 0
26689
26748
  };
26690
26749
  await assertWranglerVersion();
26691
26750
  /**
@@ -26709,12 +26768,12 @@ function cloudflare(pluginConfig = {}) {
26709
26768
  const restartServer = viteDevServer.restart.bind(viteDevServer);
26710
26769
  viteDevServer.restart = async () => {
26711
26770
  try {
26712
- ctx.setIsRestartingDevServer(true);
26771
+ ctx.beginRestartingDevServer();
26713
26772
  debuglog("From server.restart(): Restarting server...");
26714
26773
  await restartServer();
26715
26774
  debuglog("From server.restart(): Restarted server...");
26716
26775
  } finally {
26717
- ctx.setIsRestartingDevServer(false);
26776
+ ctx.endRestartingDevServer();
26718
26777
  }
26719
26778
  };
26720
26779
  }