wrangler 3.1.2 → 3.2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "3.1.2",
3
+ "version": "3.2.0",
4
4
  "description": "Command-line interface for all things Cloudflare Workers",
5
5
  "keywords": [
6
6
  "wrangler",
@@ -103,7 +103,7 @@
103
103
  "blake3-wasm": "^2.1.5",
104
104
  "chokidar": "^3.5.3",
105
105
  "esbuild": "0.16.3",
106
- "miniflare": "3.20230628.0",
106
+ "miniflare": "3.20230710.0",
107
107
  "nanoid": "^3.3.3",
108
108
  "path-to-regexp": "^6.2.0",
109
109
  "selfsigned": "^2.0.1",
@@ -65,6 +65,8 @@ type MissingExportHandlers = Omit<
65
65
  "tail" | "trace" | "scheduled" | "queue" | "test" | "fetch"
66
66
  >;
67
67
 
68
+ let registeredMiddleware = false;
69
+
68
70
  const facade: ExportedHandler<unknown> & MissingExportHandlers = {
69
71
  ...(worker.tail && {
70
72
  tail: maskHandlerEnv(worker.tail),
@@ -86,8 +88,13 @@ const facade: ExportedHandler<unknown> & MissingExportHandlers = {
86
88
  const env = getMaskedEnv(rawEnv);
87
89
  // Get the chain of middleware from the worker object
88
90
  if (worker.middleware && worker.middleware.length > 0) {
89
- for (const middleware of worker.middleware) {
90
- __facade_register__(middleware);
91
+ // Make sure we only register middleware once:
92
+ // https://github.com/cloudflare/workers-sdk/issues/2386#issuecomment-1614715911
93
+ if (!registeredMiddleware) {
94
+ registeredMiddleware = true;
95
+ for (const middleware of worker.middleware) {
96
+ __facade_register__(middleware);
97
+ }
91
98
  }
92
99
 
93
100
  const __facade_modules_dispatch__: Dispatcher = function (type, init) {
@@ -119568,7 +119568,7 @@ var import_undici3 = __toESM(require_undici());
119568
119568
  var import_undici4 = __toESM(require_undici());
119569
119569
 
119570
119570
  // package.json
119571
- var version = "3.1.2";
119571
+ var version = "3.2.0";
119572
119572
  var package_default = {
119573
119573
  name: "wrangler",
119574
119574
  version,
@@ -119674,7 +119674,7 @@ var package_default = {
119674
119674
  "blake3-wasm": "^2.1.5",
119675
119675
  chokidar: "^3.5.3",
119676
119676
  esbuild: "0.16.3",
119677
- miniflare: "3.20230628.0",
119677
+ miniflare: "3.20230710.0",
119678
119678
  nanoid: "^3.3.3",
119679
119679
  "path-to-regexp": "^6.2.0",
119680
119680
  selfsigned: "^2.0.1",
@@ -124559,7 +124559,8 @@ async function bundleWorker(entry, destination, options14) {
124559
124559
  sourceMapMetadata: {
124560
124560
  tmpDir: tmpDir.path,
124561
124561
  entryDirectory: entry.directory
124562
- }
124562
+ },
124563
+ moduleCollector
124563
124564
  };
124564
124565
  }
124565
124566
  __name(bundleWorker, "bundleWorker");
@@ -128510,7 +128511,8 @@ async function traverseModuleGraph(entry, rules) {
128510
128511
  bundleType,
128511
128512
  stop: void 0,
128512
128513
  sourceMapPath: void 0,
128513
- sourceMapMetadata: void 0
128514
+ sourceMapMetadata: void 0,
128515
+ moduleCollector: void 0
128514
128516
  };
128515
128517
  }
128516
128518
  __name(traverseModuleGraph, "traverseModuleGraph");
@@ -137271,6 +137273,9 @@ function deleteOptions(yargs) {
137271
137273
  }).option("dry-run", {
137272
137274
  describe: "Don't actually delete",
137273
137275
  type: "boolean"
137276
+ }).option("force", {
137277
+ describe: "Delete even if doing so will break other Workers that depend on this one",
137278
+ type: "boolean"
137274
137279
  }).option("legacy-env", {
137275
137280
  type: "boolean",
137276
137281
  describe: "Use legacy environments",
@@ -137298,14 +137303,18 @@ async function deleteHandler(args) {
137298
137303
  return;
137299
137304
  }
137300
137305
  (0, import_assert2.default)(accountId, "Missing accountId");
137301
- const confirmed = await confirm(
137306
+ const confirmed = args.force || await confirm(
137302
137307
  `Are you sure you want to delete ${scriptName}? This action cannot be undone.`
137303
137308
  );
137304
137309
  if (confirmed) {
137310
+ const needsForceDelete = args.force || await checkAndConfirmForceDeleteIfNecessary(scriptName, accountId);
137311
+ if (needsForceDelete === null) {
137312
+ return;
137313
+ }
137305
137314
  await fetchResult(
137306
137315
  `/accounts/${accountId}/workers/services/${scriptName}`,
137307
137316
  { method: "DELETE" },
137308
- new URLSearchParams({ force: "true" })
137317
+ new URLSearchParams({ force: needsForceDelete.toString() })
137309
137318
  );
137310
137319
  await deleteSiteNamespaceIfExisting(scriptName, accountId);
137311
137320
  logger.log("Successfully deleted", scriptName);
@@ -137325,6 +137334,82 @@ async function deleteSiteNamespaceIfExisting(scriptName, accountId) {
137325
137334
  }
137326
137335
  }
137327
137336
  __name(deleteSiteNamespaceIfExisting, "deleteSiteNamespaceIfExisting");
137337
+ function renderScriptName(details) {
137338
+ let service;
137339
+ let environment;
137340
+ if ("script" in details) {
137341
+ service = details.script;
137342
+ } else {
137343
+ service = details.service;
137344
+ environment = details.environment;
137345
+ }
137346
+ return environment ? `${service} (${environment})` : service;
137347
+ }
137348
+ __name(renderScriptName, "renderScriptName");
137349
+ function isUsedAsServiceBinding(references) {
137350
+ return (references.services?.incoming.length || 0) > 0;
137351
+ }
137352
+ __name(isUsedAsServiceBinding, "isUsedAsServiceBinding");
137353
+ function isUsedAsDurableObjectNamespace(references, scriptName) {
137354
+ return (references.durable_objects?.filter((ref) => ref.service !== scriptName)?.length || 0) > 0;
137355
+ }
137356
+ __name(isUsedAsDurableObjectNamespace, "isUsedAsDurableObjectNamespace");
137357
+ function isUsedAsDispatchOutbound(references) {
137358
+ return references.dispatch_outbounds?.length || 0;
137359
+ }
137360
+ __name(isUsedAsDispatchOutbound, "isUsedAsDispatchOutbound");
137361
+ function isUsedAsTailConsumer(tailProducers) {
137362
+ return tailProducers.length > 0;
137363
+ }
137364
+ __name(isUsedAsTailConsumer, "isUsedAsTailConsumer");
137365
+ async function checkAndConfirmForceDeleteIfNecessary(scriptName, accountId) {
137366
+ const references = await fetchResult(
137367
+ `/accounts/${accountId}/workers/scripts/${scriptName}/references`
137368
+ );
137369
+ const tailProducers = await fetchResult(
137370
+ `/accounts/${accountId}/workers/tails/by-consumer/${scriptName}`
137371
+ );
137372
+ const isDependentService = isUsedAsServiceBinding(references) || isUsedAsDurableObjectNamespace(references, scriptName) || isUsedAsDispatchOutbound(references) || isUsedAsTailConsumer(tailProducers);
137373
+ if (!isDependentService)
137374
+ return false;
137375
+ const dependentMessages = [];
137376
+ for (const serviceBindingReference of references.services?.incoming || []) {
137377
+ const dependentScript = renderScriptName(serviceBindingReference);
137378
+ dependentMessages.push(
137379
+ `- Worker ${dependentScript} uses this Worker as a Service Binding`
137380
+ );
137381
+ }
137382
+ for (const implementedDOBindingReference of references.durable_objects || []) {
137383
+ if (implementedDOBindingReference.service === scriptName)
137384
+ continue;
137385
+ const dependentScript = renderScriptName(implementedDOBindingReference);
137386
+ dependentMessages.push(
137387
+ `- Worker ${dependentScript} has a binding to the Durable Object Namespace "${implementedDOBindingReference.durable_object_namespace_name}" implemented by this Worker`
137388
+ );
137389
+ }
137390
+ for (const dispatchNamespaceOutboundReference of references.dispatch_outbounds || []) {
137391
+ const dependentScript = renderScriptName(
137392
+ dispatchNamespaceOutboundReference
137393
+ );
137394
+ dependentMessages.push(
137395
+ `- Worker ${dependentScript} uses this Worker as an Outbound Worker for the Dynamic Dispatch Namespace "${dispatchNamespaceOutboundReference.namespace}"`
137396
+ );
137397
+ }
137398
+ for (const consumingTail of tailProducers) {
137399
+ const dependentScript = renderScriptName(consumingTail.producer);
137400
+ dependentMessages.push(
137401
+ `- Worker ${dependentScript} uses this Worker as a Tail Worker`
137402
+ );
137403
+ }
137404
+ const extraConfirmed = await confirm(`${scriptName} is currently in use by other Workers:
137405
+
137406
+ ${dependentMessages.join("\n")}
137407
+
137408
+ You can still delete this Worker, but doing so WILL BREAK the Workers that depend on it. This will cause unexpected failures, and cannot be undone.
137409
+ Are you sure you want to continue?`);
137410
+ return extraConfirmed ? true : null;
137411
+ }
137412
+ __name(checkAndConfirmForceDeleteIfNecessary, "checkAndConfirmForceDeleteIfNecessary");
137328
137413
 
137329
137414
  // src/deploy/index.ts
137330
137415
  init_import_meta_url();
@@ -139561,7 +139646,8 @@ async function traverseAndBuildWorkerJSDirectory({
139561
139646
  resolvedEntryPointPath: bundleResult.resolvedEntryPointPath,
139562
139647
  bundleType: bundleResult.bundleType,
139563
139648
  stop: bundleResult.stop,
139564
- sourceMapPath: bundleResult.sourceMapPath
139649
+ sourceMapPath: bundleResult.sourceMapPath,
139650
+ moduleCollector: bundleResult.moduleCollector
139565
139651
  };
139566
139652
  }
139567
139653
  __name(traverseAndBuildWorkerJSDirectory, "traverseAndBuildWorkerJSDirectory");
@@ -141468,7 +141554,8 @@ async function deploy2({
141468
141554
  dependencies: {},
141469
141555
  stop: void 0,
141470
141556
  resolvedEntryPointPath: _workerPath,
141471
- bundleType: "esm"
141557
+ bundleType: "esm",
141558
+ moduleCollector: void 0
141472
141559
  };
141473
141560
  }
141474
141561
  }
@@ -148327,17 +148414,21 @@ function useEsbuild({
148327
148414
  testScheduled,
148328
148415
  experimentalLocal
148329
148416
  }) {
148330
- const [bundle, setBundle] = (0, import_react18.useState)();
148417
+ const [bundleInfo, setBundleInfo] = (0, import_react18.useState)();
148331
148418
  const { exit } = (0, import_ink11.useApp)();
148332
148419
  (0, import_react18.useEffect)(() => {
148333
148420
  let stopWatching = void 0;
148334
148421
  function updateBundle() {
148335
- setBundle((previousBundle) => {
148422
+ setBundleInfo((previousBundle) => {
148336
148423
  (0, import_node_assert14.default)(
148337
148424
  previousBundle,
148338
148425
  "Rebuild triggered with no previous build available"
148339
148426
  );
148340
- return { ...previousBundle, id: previousBundle.id + 1 };
148427
+ previousBundle.bundle.modules = dedupeModulesByName([
148428
+ ...previousBundle.bundle.modules,
148429
+ ...previousBundle.moduleCollector?.modules ?? []
148430
+ ]);
148431
+ return { ...previousBundle, id: previousBundle.bundle.id + 1 };
148341
148432
  });
148342
148433
  }
148343
148434
  __name(updateBundle, "updateBundle");
@@ -148404,18 +148495,21 @@ function useEsbuild({
148404
148495
  void watcher.close();
148405
148496
  }, "stopWatching");
148406
148497
  }
148407
- setBundle({
148408
- id: 0,
148409
- entry,
148410
- path: bundleResult?.resolvedEntryPointPath ?? entry.file,
148411
- type: bundleResult?.bundleType ?? (entry.format === "modules" ? "esm" : "commonjs"),
148412
- modules: bundleResult ? bundleResult.modules : dedupeModulesByName([
148413
- ...traverseModuleGraphResult?.modules ?? [],
148414
- ...additionalModules
148415
- ]),
148416
- dependencies: bundleResult?.dependencies ?? {},
148417
- sourceMapPath: bundleResult?.sourceMapPath,
148418
- sourceMapMetadata: bundleResult?.sourceMapMetadata
148498
+ setBundleInfo({
148499
+ bundle: {
148500
+ id: 0,
148501
+ entry,
148502
+ path: bundleResult?.resolvedEntryPointPath ?? entry.file,
148503
+ type: bundleResult?.bundleType ?? (entry.format === "modules" ? "esm" : "commonjs"),
148504
+ modules: bundleResult ? bundleResult.modules : dedupeModulesByName([
148505
+ ...traverseModuleGraphResult?.modules ?? [],
148506
+ ...additionalModules
148507
+ ]),
148508
+ dependencies: bundleResult?.dependencies ?? {},
148509
+ sourceMapPath: bundleResult?.sourceMapPath,
148510
+ sourceMapMetadata: bundleResult?.sourceMapMetadata
148511
+ },
148512
+ moduleCollector: bundleResult?.moduleCollector
148419
148513
  });
148420
148514
  }
148421
148515
  __name(build5, "build");
@@ -148452,7 +148546,7 @@ function useEsbuild({
148452
148546
  testScheduled,
148453
148547
  experimentalLocal
148454
148548
  ]);
148455
- return bundle;
148549
+ return bundleInfo?.bundle;
148456
148550
  }
148457
148551
  __name(useEsbuild, "useEsbuild");
148458
148552