wrangler 0.0.0-fa8e5232 → 0.0.0-fb0db827

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.
Files changed (106) hide show
  1. package/bin/wrangler.js +1 -1
  2. package/miniflare-dist/index.mjs +96 -52
  3. package/package.json +15 -10
  4. package/src/__tests__/api-devregistry.test.ts +121 -0
  5. package/src/__tests__/api.test.ts +27 -5
  6. package/src/__tests__/configuration.test.ts +294 -18
  7. package/src/__tests__/d1/execute.test.ts +3 -1
  8. package/src/__tests__/d1/migrate.test.ts +2 -0
  9. package/src/__tests__/delete.test.ts +6 -0
  10. package/src/__tests__/deployments.test.ts +335 -95
  11. package/src/__tests__/dev.test.tsx +87 -57
  12. package/src/__tests__/generate.test.ts +3 -4
  13. package/src/__tests__/guess-worker-format.test.ts +35 -0
  14. package/src/__tests__/helpers/mock-console.ts +6 -0
  15. package/src/__tests__/helpers/msw/handlers/deployments.ts +70 -3
  16. package/src/__tests__/helpers/msw/index.ts +4 -2
  17. package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
  18. package/src/__tests__/index.test.ts +10 -4
  19. package/src/__tests__/init.test.ts +136 -104
  20. package/src/__tests__/jest.setup.ts +4 -0
  21. package/src/__tests__/kv.test.ts +9 -9
  22. package/src/__tests__/logger.test.ts +68 -2
  23. package/src/__tests__/middleware.scheduled.test.ts +2 -2
  24. package/src/__tests__/middleware.test.ts +4 -3
  25. package/src/__tests__/mtls-certificates.test.ts +5 -2
  26. package/src/__tests__/pages/deployment-list.test.ts +2 -0
  27. package/src/__tests__/pages/functions-build.test.ts +91 -41
  28. package/src/__tests__/pages/project-list.test.ts +2 -0
  29. package/src/__tests__/pages/project-upload.test.ts +43 -24
  30. package/src/__tests__/pages/publish.test.ts +267 -148
  31. package/src/__tests__/publish.test.ts +420 -164
  32. package/src/__tests__/pubsub.test.ts +3 -0
  33. package/src/__tests__/queues.test.ts +5 -2
  34. package/src/__tests__/test-old-node-version.js +3 -3
  35. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  36. package/src/__tests__/tsconfig.tsbuildinfo +1 -1
  37. package/src/__tests__/type-generation.test.ts +1 -0
  38. package/src/__tests__/user.test.ts +1 -1
  39. package/src/__tests__/worker-namespace.test.ts +1 -0
  40. package/src/api/dev.ts +10 -22
  41. package/src/api/pages/create-worker-bundle-contents.ts +1 -0
  42. package/src/api/pages/publish.tsx +38 -51
  43. package/src/bundle.ts +44 -13
  44. package/src/config/environment.ts +36 -4
  45. package/src/config/index.ts +30 -2
  46. package/src/config/validation-helpers.ts +1 -1
  47. package/src/config/validation.ts +149 -5
  48. package/src/create-worker-upload-form.ts +28 -3
  49. package/src/d1/backups.tsx +15 -11
  50. package/src/d1/create.tsx +20 -16
  51. package/src/d1/execute.tsx +22 -19
  52. package/src/d1/list.tsx +2 -2
  53. package/src/d1/migrations/apply.tsx +35 -29
  54. package/src/d1/migrations/create.tsx +15 -12
  55. package/src/d1/migrations/list.tsx +10 -7
  56. package/src/deployments.ts +260 -8
  57. package/src/dev/dev.tsx +4 -4
  58. package/src/dev/local.tsx +18 -21
  59. package/src/dev/start-server.ts +12 -16
  60. package/src/dev/use-esbuild.ts +11 -13
  61. package/src/dev/validate-dev-props.ts +9 -0
  62. package/src/dev-registry.ts +2 -1
  63. package/src/dev.tsx +28 -13
  64. package/src/entry.ts +18 -9
  65. package/src/generate/index.ts +2 -2
  66. package/src/index.ts +76 -23
  67. package/src/init.ts +144 -134
  68. package/src/inspect.ts +4 -1
  69. package/src/logger.ts +18 -3
  70. package/src/metrics/send-event.ts +2 -1
  71. package/src/miniflare-cli/assets.ts +8 -7
  72. package/src/miniflare-cli/index.ts +3 -3
  73. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -1
  74. package/src/module-collection.ts +92 -26
  75. package/src/pages/build.ts +277 -99
  76. package/src/pages/buildFunctions.ts +20 -10
  77. package/src/pages/deployments.tsx +3 -5
  78. package/src/pages/dev.ts +21 -21
  79. package/src/pages/errors.ts +1 -0
  80. package/src/pages/functions/buildPlugin.ts +57 -34
  81. package/src/pages/functions/buildWorker.ts +34 -31
  82. package/src/pages/functions/tsconfig.tsbuildinfo +1 -1
  83. package/src/pages/projects.tsx +2 -5
  84. package/src/pages/publish.tsx +1 -10
  85. package/src/pages/upload.tsx +29 -9
  86. package/src/paths.ts +1 -1
  87. package/src/publish/index.ts +1 -1
  88. package/src/publish/publish.ts +29 -34
  89. package/src/queues/cli/commands/consumer/add.ts +6 -0
  90. package/src/queues/client.ts +1 -0
  91. package/src/r2/helpers.ts +1 -0
  92. package/src/secret/index.ts +2 -1
  93. package/src/traverse-module-graph.ts +53 -0
  94. package/src/type-generation.ts +1 -1
  95. package/src/user/user.ts +1 -1
  96. package/src/utils/render.ts +93 -0
  97. package/src/worker.ts +18 -1
  98. package/templates/d1-beta-facade.js +5 -2
  99. package/templates/gitignore +1 -0
  100. package/templates/middleware/middleware-miniflare3-json-error.ts +17 -5
  101. package/templates/pages-template-plugin.ts +7 -3
  102. package/templates/tsconfig.init.json +1 -2
  103. package/templates/tsconfig.tsbuildinfo +1 -1
  104. package/wrangler-dist/cli.d.ts +547 -14
  105. package/wrangler-dist/cli.js +27524 -20087
  106. package/src/__tests__/api-devregistry.test.js +0 -64
package/bin/wrangler.js CHANGED
@@ -20,7 +20,7 @@ function runWrangler() {
20
20
  // Note Volta and nvm are also recommended in the official docs:
21
21
  // https://developers.cloudflare.com/workers/get-started/guide#2-install-the-workers-cli
22
22
  console.error(
23
- `Wrangler requires at least node.js v${MIN_NODE_VERSION}. You are using v${process.versions.node}. Please update your version of node.js.
23
+ `Wrangler requires at least Node.js v${MIN_NODE_VERSION}. You are using v${process.versions.node}. Please update your version of Node.js.
24
24
 
25
25
  Consider using a Node.js version manager such as https://volta.sh/ or https://github.com/nvm-sh/nvm.`
26
26
  );
@@ -783,11 +783,11 @@ var init_handler = __esm({
783
783
  });
784
784
 
785
785
  // src/miniflare-cli/index.ts
786
- import { fetch } from "@miniflare/core";
787
786
  import {
788
787
  DurableObjectNamespace,
789
788
  DurableObjectStub
790
789
  } from "@miniflare/durable-objects";
790
+ import { upgradingFetch } from "@miniflare/web-sockets";
791
791
  import {
792
792
  Log as MiniflareLog,
793
793
  LogLevel as MiniflareLogLevel,
@@ -799,7 +799,7 @@ import {
799
799
  // ../../node_modules/yargs/lib/platform-shims/esm.mjs
800
800
  import { notStrictEqual, strictEqual } from "assert";
801
801
 
802
- // ../../node_modules/cliui/build/lib/index.js
802
+ // ../../node_modules/yargs/node_modules/cliui/build/lib/index.js
803
803
  var align = {
804
804
  right: alignRight,
805
805
  center: alignCenter
@@ -810,9 +810,9 @@ var bottom = 2;
810
810
  var left = 3;
811
811
  var UI = class {
812
812
  constructor(opts) {
813
- var _a;
813
+ var _a2;
814
814
  this.width = opts.width;
815
- this.wrap = (_a = opts.wrap) !== null && _a !== void 0 ? _a : true;
815
+ this.wrap = (_a2 = opts.wrap) !== null && _a2 !== void 0 ? _a2 : true;
816
816
  this.rows = [];
817
817
  }
818
818
  span(...args) {
@@ -1053,7 +1053,7 @@ function cliui(opts, _mixin) {
1053
1053
  });
1054
1054
  }
1055
1055
 
1056
- // ../../node_modules/cliui/build/lib/string-utils.js
1056
+ // ../../node_modules/yargs/node_modules/cliui/build/lib/string-utils.js
1057
1057
  var ansi = new RegExp("\x1B(?:\\[(?:\\d+[ABCDEFGJKSTm]|\\d+;\\d+[Hfm]|\\d+;\\d+;\\d+m|6n|s|u|\\?25[lh])|\\w)", "g");
1058
1058
  function stripAnsi(str) {
1059
1059
  return str.replace(ansi, "");
@@ -1074,7 +1074,7 @@ function wrap(str, width) {
1074
1074
  return wrapped;
1075
1075
  }
1076
1076
 
1077
- // ../../node_modules/cliui/index.mjs
1077
+ // ../../node_modules/yargs/node_modules/cliui/index.mjs
1078
1078
  function ui(opts) {
1079
1079
  return cliui(opts, {
1080
1080
  stringWidth: (str) => {
@@ -1365,9 +1365,9 @@ var YargsParser = class {
1365
1365
  let m;
1366
1366
  let next;
1367
1367
  let value;
1368
- if (arg !== "--" && isUnknownOptionAsArg(arg)) {
1368
+ if (arg !== "--" && /^-/.test(arg) && isUnknownOptionAsArg(arg)) {
1369
1369
  pushPositional(arg);
1370
- } else if (truncatedArg.match(/---+(=|$)/)) {
1370
+ } else if (truncatedArg.match(/^---+(=|$)/)) {
1371
1371
  pushPositional(arg);
1372
1372
  continue;
1373
1373
  } else if (arg.match(/^--.+=/) || !configuration["short-option-groups"] && arg.match(/^-.+=/)) {
@@ -2050,9 +2050,13 @@ function stripQuotes(val) {
2050
2050
 
2051
2051
  // ../../node_modules/yargs/node_modules/yargs-parser/build/lib/index.js
2052
2052
  import { readFileSync } from "fs";
2053
+ var _a;
2054
+ var _b;
2055
+ var _c;
2053
2056
  var minNodeVersion = process && process.env && process.env.YARGS_MIN_NODE_VERSION ? Number(process.env.YARGS_MIN_NODE_VERSION) : 12;
2054
- if (process && process.version) {
2055
- const major = Number(process.version.match(/v([^.]+)/)[1]);
2057
+ var nodeVersion = (_b = (_a = process === null || process === void 0 ? void 0 : process.versions) === null || _a === void 0 ? void 0 : _a.node) !== null && _b !== void 0 ? _b : (_c = process === null || process === void 0 ? void 0 : process.version) === null || _c === void 0 ? void 0 : _c.slice(1);
2058
+ if (nodeVersion) {
2059
+ const major = Number(nodeVersion.match(/^([^.]+)/)[1]);
2056
2060
  if (major < minNodeVersion) {
2057
2061
  throw Error(`yargs parser supports a minimum Node.js version of ${minNodeVersion}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`);
2058
2062
  }
@@ -2115,7 +2119,9 @@ var YError = class extends Error {
2115
2119
  constructor(msg) {
2116
2120
  super(msg || "yargs error");
2117
2121
  this.name = "YError";
2118
- Error.captureStackTrace(this, YError);
2122
+ if (Error.captureStackTrace) {
2123
+ Error.captureStackTrace(this, YError);
2124
+ }
2119
2125
  }
2120
2126
  };
2121
2127
 
@@ -2315,7 +2321,7 @@ try {
2315
2321
  } catch (e) {
2316
2322
  __dirname = process.cwd();
2317
2323
  }
2318
- var mainFilename = __dirname.split("node_modules")[0];
2324
+ var mainFilename = __dirname.substring(0, __dirname.lastIndexOf("node_modules"));
2319
2325
  var esm_default = {
2320
2326
  assert: {
2321
2327
  notStrictEqual,
@@ -2700,6 +2706,7 @@ var CommandInstance = class {
2700
2706
  const builder = commandHandler.builder;
2701
2707
  let innerYargs = yargs;
2702
2708
  if (isCommandBuilderCallback(builder)) {
2709
+ yargs.getInternalMethods().getUsageInstance().freeze();
2703
2710
  const builderOutput = builder(yargs.getInternalMethods().reset(aliases), helpOrVersionSet);
2704
2711
  if (isPromise(builderOutput)) {
2705
2712
  return builderOutput.then((output) => {
@@ -2708,6 +2715,7 @@ var CommandInstance = class {
2708
2715
  });
2709
2716
  }
2710
2717
  } else if (isCommandBuilderOptionDefinitions(builder)) {
2718
+ yargs.getInternalMethods().getUsageInstance().freeze();
2711
2719
  innerYargs = yargs.getInternalMethods().reset(aliases);
2712
2720
  Object.keys(commandHandler.builder).forEach((key) => {
2713
2721
  innerYargs.option(key, builder[key]);
@@ -2741,15 +2749,7 @@ var CommandInstance = class {
2741
2749
  pc.push(c);
2742
2750
  return `$0 ${pc.join(" ")}`;
2743
2751
  }
2744
- applyMiddlewareAndGetResult(isDefaultCommand, commandHandler, innerArgv, currentContext, helpOnly, aliases, yargs) {
2745
- let positionalMap = {};
2746
- if (helpOnly)
2747
- return innerArgv;
2748
- if (!yargs.getInternalMethods().getHasOutput()) {
2749
- positionalMap = this.populatePositionals(commandHandler, innerArgv, currentContext, yargs);
2750
- }
2751
- const middlewares = this.globalMiddleware.getMiddleware().slice(0).concat(commandHandler.middlewares);
2752
- innerArgv = applyMiddleware(innerArgv, yargs, middlewares, true);
2752
+ handleValidationAndGetResult(isDefaultCommand, commandHandler, innerArgv, currentContext, aliases, yargs, middlewares, positionalMap) {
2753
2753
  if (!yargs.getInternalMethods().getHasOutput()) {
2754
2754
  const validation2 = yargs.getInternalMethods().runValidation(aliases, positionalMap, yargs.parsed.error, isDefaultCommand);
2755
2755
  innerArgv = maybeAsyncResult(innerArgv, (result) => {
@@ -2784,6 +2784,17 @@ var CommandInstance = class {
2784
2784
  }
2785
2785
  return innerArgv;
2786
2786
  }
2787
+ applyMiddlewareAndGetResult(isDefaultCommand, commandHandler, innerArgv, currentContext, helpOnly, aliases, yargs) {
2788
+ let positionalMap = {};
2789
+ if (helpOnly)
2790
+ return innerArgv;
2791
+ if (!yargs.getInternalMethods().getHasOutput()) {
2792
+ positionalMap = this.populatePositionals(commandHandler, innerArgv, currentContext, yargs);
2793
+ }
2794
+ const middlewares = this.globalMiddleware.getMiddleware().slice(0).concat(commandHandler.middlewares);
2795
+ const maybePromiseArgv = applyMiddleware(innerArgv, yargs, middlewares, true);
2796
+ return isPromise(maybePromiseArgv) ? maybePromiseArgv.then((resolvedInnerArgv) => this.handleValidationAndGetResult(isDefaultCommand, commandHandler, resolvedInnerArgv, currentContext, aliases, yargs, middlewares, positionalMap)) : this.handleValidationAndGetResult(isDefaultCommand, commandHandler, maybePromiseArgv, currentContext, aliases, yargs, middlewares, positionalMap);
2797
+ }
2787
2798
  populatePositionals(commandHandler, argv, context, yargs) {
2788
2799
  argv._ = argv._.slice(context.commands.length);
2789
2800
  const demanded = commandHandler.demanded.slice(0);
@@ -2870,12 +2881,11 @@ var CommandInstance = class {
2870
2881
  Object.keys(positionalMap).forEach((key) => {
2871
2882
  positionalKeys.push(...parsed.aliases[key]);
2872
2883
  });
2873
- const defaults = yargs.getOptions().default;
2874
2884
  Object.keys(parsed.argv).forEach((key) => {
2875
2885
  if (positionalKeys.includes(key)) {
2876
2886
  if (!positionalMap[key])
2877
2887
  positionalMap[key] = parsed.argv[key];
2878
- if (!Object.hasOwnProperty.call(defaults, key) && Object.hasOwnProperty.call(argv, key) && Object.hasOwnProperty.call(parsed.argv, key) && (Array.isArray(argv[key]) || Array.isArray(parsed.argv[key]))) {
2888
+ if (!this.isInConfigs(yargs, key) && !this.isDefaulted(yargs, key) && Object.prototype.hasOwnProperty.call(argv, key) && Object.prototype.hasOwnProperty.call(parsed.argv, key) && (Array.isArray(argv[key]) || Array.isArray(parsed.argv[key]))) {
2879
2889
  argv[key] = [].concat(argv[key], parsed.argv[key]);
2880
2890
  } else {
2881
2891
  argv[key] = parsed.argv[key];
@@ -2884,6 +2894,14 @@ var CommandInstance = class {
2884
2894
  });
2885
2895
  }
2886
2896
  }
2897
+ isDefaulted(yargs, key) {
2898
+ const { default: defaults } = yargs.getOptions();
2899
+ return Object.prototype.hasOwnProperty.call(defaults, key) || Object.prototype.hasOwnProperty.call(defaults, this.shim.Parser.camelCase(key));
2900
+ }
2901
+ isInConfigs(yargs, key) {
2902
+ const { configObjects } = yargs.getOptions();
2903
+ return configObjects.some((c) => Object.prototype.hasOwnProperty.call(c, key)) || configObjects.some((c) => Object.prototype.hasOwnProperty.call(c, this.shim.Parser.camelCase(key)));
2904
+ }
2887
2905
  runDefaultBuilderOn(yargs) {
2888
2906
  if (!this.defaultCommand)
2889
2907
  return;
@@ -3111,13 +3129,16 @@ function usage(yargs, shim3) {
3111
3129
  wrapSet = true;
3112
3130
  wrap2 = cols;
3113
3131
  };
3114
- function getWrap() {
3132
+ self.getWrap = () => {
3133
+ if (shim3.getEnv("YARGS_DISABLE_WRAP")) {
3134
+ return null;
3135
+ }
3115
3136
  if (!wrapSet) {
3116
3137
  wrap2 = windowWidth();
3117
3138
  wrapSet = true;
3118
3139
  }
3119
3140
  return wrap2;
3120
- }
3141
+ };
3121
3142
  const deferY18nLookupPrefix = "__yargsString__:";
3122
3143
  self.deferY18nLookup = (str) => deferY18nLookupPrefix + str;
3123
3144
  self.help = function help() {
@@ -3141,7 +3162,7 @@ function usage(yargs, shim3) {
3141
3162
  acc[key] = true;
3142
3163
  return acc;
3143
3164
  }, {}));
3144
- const theWrap = getWrap();
3165
+ const theWrap = self.getWrap();
3145
3166
  const ui2 = shim3.cliui({
3146
3167
  width: theWrap,
3147
3168
  wrap: !!theWrap
@@ -3281,7 +3302,8 @@ function usage(yargs, shim3) {
3281
3302
  padding: [0, 2, 0, 2 + getIndentation(kswitch)],
3282
3303
  width: maxWidth(switches, theWrap) + 4
3283
3304
  }, desc);
3284
- if (extra)
3305
+ const shouldHideOptionExtras = yargs.getInternalMethods().getUsageConfiguration()["hide-types"] === true;
3306
+ if (extra && !shouldHideOptionExtras)
3285
3307
  ui2.div({ text: extra, padding: [0, 0, 0, 2], align: "right" });
3286
3308
  else
3287
3309
  ui2.div();
@@ -3542,7 +3564,7 @@ var completionZshTemplate = `#compdef {{app_name}}
3542
3564
  # yargs command completion script
3543
3565
  #
3544
3566
  # Installation: {{app_path}} {{completion_command}} >> ~/.zshrc
3545
- # or {{app_path}} {{completion_command}} >> ~/.zsh_profile on OSX.
3567
+ # or {{app_path}} {{completion_command}} >> ~/.zprofile on OSX.
3546
3568
  #
3547
3569
  _{{app_name}}_yargs_completions()
3548
3570
  {
@@ -3560,7 +3582,7 @@ compdef _{{app_name}}_yargs_completions {{app_name}}
3560
3582
  // ../../node_modules/yargs/build/lib/completion.js
3561
3583
  var Completion = class {
3562
3584
  constructor(yargs, usage2, command2, shim3) {
3563
- var _a, _b, _c;
3585
+ var _a2, _b2, _c2;
3564
3586
  this.yargs = yargs;
3565
3587
  this.usage = usage2;
3566
3588
  this.command = command2;
@@ -3569,7 +3591,7 @@ var Completion = class {
3569
3591
  this.aliases = null;
3570
3592
  this.customCompletionFunction = null;
3571
3593
  this.indexAfterLastReset = 0;
3572
- this.zshShell = (_c = ((_a = this.shim.getEnv("SHELL")) === null || _a === void 0 ? void 0 : _a.includes("zsh")) || ((_b = this.shim.getEnv("ZSH_NAME")) === null || _b === void 0 ? void 0 : _b.includes("zsh"))) !== null && _c !== void 0 ? _c : false;
3594
+ this.zshShell = (_c2 = ((_a2 = this.shim.getEnv("SHELL")) === null || _a2 === void 0 ? void 0 : _a2.includes("zsh")) || ((_b2 = this.shim.getEnv("ZSH_NAME")) === null || _b2 === void 0 ? void 0 : _b2.includes("zsh"))) !== null && _c2 !== void 0 ? _c2 : false;
3573
3595
  }
3574
3596
  defaultCompletion(args, argv, current, done) {
3575
3597
  const handlers = this.command.getCommandHandlers();
@@ -3614,7 +3636,7 @@ var Completion = class {
3614
3636
  Object.keys(options.key).forEach((key) => {
3615
3637
  const negable = !!options.configuration["boolean-negation"] && options.boolean.includes(key);
3616
3638
  const isPositionalKey = positionalKeys.includes(key);
3617
- if (!isPositionalKey && !options.hiddenOptions.includes(key) && !this.argsContainKey(args, argv, key, negable)) {
3639
+ if (!isPositionalKey && !options.hiddenOptions.includes(key) && !this.argsContainKey(args, key, negable)) {
3618
3640
  this.completeOptionKey(key, completions, current);
3619
3641
  if (negable && !!options.default[key])
3620
3642
  this.completeOptionKey(`no-${key}`, completions, current);
@@ -3679,20 +3701,22 @@ var Completion = class {
3679
3701
  const choices = this.getPreviousArgChoices(args);
3680
3702
  return choices !== void 0 && choices.length > 0;
3681
3703
  }
3682
- argsContainKey(args, argv, key, negable) {
3683
- if (args.indexOf(`--${key}`) !== -1)
3704
+ argsContainKey(args, key, negable) {
3705
+ const argsContains = (s) => args.indexOf((/^[^0-9]$/.test(s) ? "-" : "--") + s) !== -1;
3706
+ if (argsContains(key))
3684
3707
  return true;
3685
- if (negable && args.indexOf(`--no-${key}`) !== -1)
3708
+ if (negable && argsContains(`no-${key}`))
3686
3709
  return true;
3687
3710
  if (this.aliases) {
3688
3711
  for (const alias of this.aliases[key]) {
3689
- if (argv[alias] !== void 0)
3712
+ if (argsContains(alias))
3690
3713
  return true;
3691
3714
  }
3692
3715
  }
3693
3716
  return false;
3694
3717
  }
3695
3718
  completeOptionKey(key, completions, current) {
3719
+ var _a2, _b2, _c2;
3696
3720
  const descs = this.usage.getDescriptions();
3697
3721
  const startsByTwoDashes = (s) => /^--/.test(s);
3698
3722
  const isShortOption = (s) => /^[^0-9]$/.test(s);
@@ -3700,8 +3724,13 @@ var Completion = class {
3700
3724
  if (!this.zshShell) {
3701
3725
  completions.push(dashes + key);
3702
3726
  } else {
3703
- const desc = descs[key] || "";
3704
- completions.push(dashes + `${key.replace(/:/g, "\\:")}:${desc.replace("__yargsString__:", "")}`);
3727
+ const aliasKey = (_a2 = this === null || this === void 0 ? void 0 : this.aliases) === null || _a2 === void 0 ? void 0 : _a2[key].find((alias) => {
3728
+ const desc2 = descs[alias];
3729
+ return typeof desc2 === "string" && desc2.length > 0;
3730
+ });
3731
+ const descFromAlias = aliasKey ? descs[aliasKey] : void 0;
3732
+ const desc = (_c2 = (_b2 = descs[key]) !== null && _b2 !== void 0 ? _b2 : descFromAlias) !== null && _c2 !== void 0 ? _c2 : "";
3733
+ completions.push(dashes + `${key.replace(/:/g, "\\:")}:${desc.replace("__yargsString__:", "").replace(/(\r\n|\n|\r)/gm, " ")}`);
3705
3734
  }
3706
3735
  }
3707
3736
  customCompletion(args, argv, current, done) {
@@ -3846,7 +3875,7 @@ ${customMsgs.join("\n")}` : "";
3846
3875
  }
3847
3876
  };
3848
3877
  self.unknownArguments = function unknownArguments(argv, aliases, positionalMap, isDefaultCommand, checkPositionals = true) {
3849
- var _a;
3878
+ var _a2;
3850
3879
  const commandKeys = yargs.getInternalMethods().getCommandInstance().getCommands();
3851
3880
  const unknown = [];
3852
3881
  const currentContext = yargs.getInternalMethods().getContext();
@@ -3864,7 +3893,7 @@ ${customMsgs.join("\n")}` : "";
3864
3893
  }
3865
3894
  if (checkPositionals) {
3866
3895
  const demandedCommands = yargs.getDemandedCommands();
3867
- const maxNonOptDemanded = ((_a = demandedCommands._) === null || _a === void 0 ? void 0 : _a.max) || 0;
3896
+ const maxNonOptDemanded = ((_a2 = demandedCommands._) === null || _a2 === void 0 ? void 0 : _a2.max) || 0;
3868
3897
  const expected = currentContext.commands.length + maxNonOptDemanded;
3869
3898
  if (expected < argv._.length) {
3870
3899
  argv._.slice(expected).forEach((key) => {
@@ -4164,6 +4193,7 @@ var _YargsInstance_strict;
4164
4193
  var _YargsInstance_strictCommands;
4165
4194
  var _YargsInstance_strictOptions;
4166
4195
  var _YargsInstance_usage;
4196
+ var _YargsInstance_usageConfig;
4167
4197
  var _YargsInstance_versionOpt;
4168
4198
  var _YargsInstance_validation;
4169
4199
  function YargsFactory(_shim) {
@@ -4187,6 +4217,7 @@ var kEmitWarning = Symbol("emitWarning");
4187
4217
  var kFreeze = Symbol("freeze");
4188
4218
  var kGetDollarZero = Symbol("getDollarZero");
4189
4219
  var kGetParserConfiguration = Symbol("getParserConfiguration");
4220
+ var kGetUsageConfiguration = Symbol("getUsageConfiguration");
4190
4221
  var kGuessLocale = Symbol("guessLocale");
4191
4222
  var kGuessVersion = Symbol("guessVersion");
4192
4223
  var kParsePositionalNumbers = Symbol("parsePositionalNumbers");
@@ -4251,6 +4282,7 @@ var YargsInstance = class {
4251
4282
  _YargsInstance_strictCommands.set(this, false);
4252
4283
  _YargsInstance_strictOptions.set(this, false);
4253
4284
  _YargsInstance_usage.set(this, void 0);
4285
+ _YargsInstance_usageConfig.set(this, {});
4254
4286
  _YargsInstance_versionOpt.set(this, null);
4255
4287
  _YargsInstance_validation.set(this, void 0);
4256
4288
  __classPrivateFieldSet(this, _YargsInstance_shim, shim3, "f");
@@ -4360,7 +4392,7 @@ var YargsInstance = class {
4360
4392
  __classPrivateFieldGet(this, _YargsInstance_options, "f").key[keys] = true;
4361
4393
  __classPrivateFieldGet(this, _YargsInstance_globalMiddleware, "f").addCoerceMiddleware((argv, yargs) => {
4362
4394
  let aliases;
4363
- const shouldCoerce = Object.hasOwnProperty.call(argv, keys);
4395
+ const shouldCoerce = Object.prototype.hasOwnProperty.call(argv, keys);
4364
4396
  if (!shouldCoerce) {
4365
4397
  return argv;
4366
4398
  }
@@ -4675,7 +4707,7 @@ var YargsInstance = class {
4675
4707
  }
4676
4708
  locale(locale) {
4677
4709
  argsert("[string]", [locale], arguments.length);
4678
- if (!locale) {
4710
+ if (locale === void 0) {
4679
4711
  this[kGuessLocale]();
4680
4712
  return __classPrivateFieldGet(this, _YargsInstance_shim, "f").y18n.getLocale();
4681
4713
  }
@@ -4797,7 +4829,10 @@ var YargsInstance = class {
4797
4829
  this.skipValidation(key);
4798
4830
  }
4799
4831
  const desc = opt.describe || opt.description || opt.desc;
4800
- this.describe(key, desc);
4832
+ const descriptions = __classPrivateFieldGet(this, _YargsInstance_usage, "f").getDescriptions();
4833
+ if (!Object.prototype.hasOwnProperty.call(descriptions, key) || typeof desc === "string") {
4834
+ this.describe(key, desc);
4835
+ }
4801
4836
  if (opt.hidden) {
4802
4837
  this.hide(key);
4803
4838
  }
@@ -5038,6 +5073,11 @@ var YargsInstance = class {
5038
5073
  return this;
5039
5074
  }
5040
5075
  }
5076
+ usageConfiguration(config) {
5077
+ argsert("<object>", [config], arguments.length);
5078
+ __classPrivateFieldSet(this, _YargsInstance_usageConfig, config, "f");
5079
+ return this;
5080
+ }
5041
5081
  version(opt, msg, ver) {
5042
5082
  const defaultVersionOpt = "version";
5043
5083
  argsert("[boolean|string] [string] [string]", [opt, msg, ver], arguments.length);
@@ -5071,7 +5111,7 @@ var YargsInstance = class {
5071
5111
  __classPrivateFieldGet(this, _YargsInstance_usage, "f").wrap(cols);
5072
5112
  return this;
5073
5113
  }
5074
- [(_YargsInstance_command = /* @__PURE__ */ new WeakMap(), _YargsInstance_cwd = /* @__PURE__ */ new WeakMap(), _YargsInstance_context = /* @__PURE__ */ new WeakMap(), _YargsInstance_completion = /* @__PURE__ */ new WeakMap(), _YargsInstance_completionCommand = /* @__PURE__ */ new WeakMap(), _YargsInstance_defaultShowHiddenOpt = /* @__PURE__ */ new WeakMap(), _YargsInstance_exitError = /* @__PURE__ */ new WeakMap(), _YargsInstance_detectLocale = /* @__PURE__ */ new WeakMap(), _YargsInstance_emittedWarnings = /* @__PURE__ */ new WeakMap(), _YargsInstance_exitProcess = /* @__PURE__ */ new WeakMap(), _YargsInstance_frozens = /* @__PURE__ */ new WeakMap(), _YargsInstance_globalMiddleware = /* @__PURE__ */ new WeakMap(), _YargsInstance_groups = /* @__PURE__ */ new WeakMap(), _YargsInstance_hasOutput = /* @__PURE__ */ new WeakMap(), _YargsInstance_helpOpt = /* @__PURE__ */ new WeakMap(), _YargsInstance_isGlobalContext = /* @__PURE__ */ new WeakMap(), _YargsInstance_logger = /* @__PURE__ */ new WeakMap(), _YargsInstance_output = /* @__PURE__ */ new WeakMap(), _YargsInstance_options = /* @__PURE__ */ new WeakMap(), _YargsInstance_parentRequire = /* @__PURE__ */ new WeakMap(), _YargsInstance_parserConfig = /* @__PURE__ */ new WeakMap(), _YargsInstance_parseFn = /* @__PURE__ */ new WeakMap(), _YargsInstance_parseContext = /* @__PURE__ */ new WeakMap(), _YargsInstance_pkgs = /* @__PURE__ */ new WeakMap(), _YargsInstance_preservedGroups = /* @__PURE__ */ new WeakMap(), _YargsInstance_processArgs = /* @__PURE__ */ new WeakMap(), _YargsInstance_recommendCommands = /* @__PURE__ */ new WeakMap(), _YargsInstance_shim = /* @__PURE__ */ new WeakMap(), _YargsInstance_strict = /* @__PURE__ */ new WeakMap(), _YargsInstance_strictCommands = /* @__PURE__ */ new WeakMap(), _YargsInstance_strictOptions = /* @__PURE__ */ new WeakMap(), _YargsInstance_usage = /* @__PURE__ */ new WeakMap(), _YargsInstance_versionOpt = /* @__PURE__ */ new WeakMap(), _YargsInstance_validation = /* @__PURE__ */ new WeakMap(), kCopyDoubleDash)](argv) {
5114
+ [(_YargsInstance_command = /* @__PURE__ */ new WeakMap(), _YargsInstance_cwd = /* @__PURE__ */ new WeakMap(), _YargsInstance_context = /* @__PURE__ */ new WeakMap(), _YargsInstance_completion = /* @__PURE__ */ new WeakMap(), _YargsInstance_completionCommand = /* @__PURE__ */ new WeakMap(), _YargsInstance_defaultShowHiddenOpt = /* @__PURE__ */ new WeakMap(), _YargsInstance_exitError = /* @__PURE__ */ new WeakMap(), _YargsInstance_detectLocale = /* @__PURE__ */ new WeakMap(), _YargsInstance_emittedWarnings = /* @__PURE__ */ new WeakMap(), _YargsInstance_exitProcess = /* @__PURE__ */ new WeakMap(), _YargsInstance_frozens = /* @__PURE__ */ new WeakMap(), _YargsInstance_globalMiddleware = /* @__PURE__ */ new WeakMap(), _YargsInstance_groups = /* @__PURE__ */ new WeakMap(), _YargsInstance_hasOutput = /* @__PURE__ */ new WeakMap(), _YargsInstance_helpOpt = /* @__PURE__ */ new WeakMap(), _YargsInstance_isGlobalContext = /* @__PURE__ */ new WeakMap(), _YargsInstance_logger = /* @__PURE__ */ new WeakMap(), _YargsInstance_output = /* @__PURE__ */ new WeakMap(), _YargsInstance_options = /* @__PURE__ */ new WeakMap(), _YargsInstance_parentRequire = /* @__PURE__ */ new WeakMap(), _YargsInstance_parserConfig = /* @__PURE__ */ new WeakMap(), _YargsInstance_parseFn = /* @__PURE__ */ new WeakMap(), _YargsInstance_parseContext = /* @__PURE__ */ new WeakMap(), _YargsInstance_pkgs = /* @__PURE__ */ new WeakMap(), _YargsInstance_preservedGroups = /* @__PURE__ */ new WeakMap(), _YargsInstance_processArgs = /* @__PURE__ */ new WeakMap(), _YargsInstance_recommendCommands = /* @__PURE__ */ new WeakMap(), _YargsInstance_shim = /* @__PURE__ */ new WeakMap(), _YargsInstance_strict = /* @__PURE__ */ new WeakMap(), _YargsInstance_strictCommands = /* @__PURE__ */ new WeakMap(), _YargsInstance_strictOptions = /* @__PURE__ */ new WeakMap(), _YargsInstance_usage = /* @__PURE__ */ new WeakMap(), _YargsInstance_usageConfig = /* @__PURE__ */ new WeakMap(), _YargsInstance_versionOpt = /* @__PURE__ */ new WeakMap(), _YargsInstance_validation = /* @__PURE__ */ new WeakMap(), kCopyDoubleDash)](argv) {
5075
5115
  if (!argv._ || !argv["--"])
5076
5116
  return argv;
5077
5117
  argv._.push.apply(argv._, argv["--"]);
@@ -5163,6 +5203,9 @@ var YargsInstance = class {
5163
5203
  [kGetParserConfiguration]() {
5164
5204
  return __classPrivateFieldGet(this, _YargsInstance_parserConfig, "f");
5165
5205
  }
5206
+ [kGetUsageConfiguration]() {
5207
+ return __classPrivateFieldGet(this, _YargsInstance_usageConfig, "f");
5208
+ }
5166
5209
  [kGuessLocale]() {
5167
5210
  if (!__classPrivateFieldGet(this, _YargsInstance_detectLocale, "f"))
5168
5211
  return;
@@ -5246,20 +5289,20 @@ var YargsInstance = class {
5246
5289
  return this;
5247
5290
  }
5248
5291
  [kUnfreeze]() {
5249
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
5292
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _j, _k, _l, _m;
5250
5293
  const frozen = __classPrivateFieldGet(this, _YargsInstance_frozens, "f").pop();
5251
5294
  assertNotStrictEqual(frozen, void 0, __classPrivateFieldGet(this, _YargsInstance_shim, "f"));
5252
5295
  let configObjects;
5253
- _a = this, _b = this, _c = this, _d = this, _e = this, _f = this, _g = this, _h = this, _j = this, _k = this, _l = this, _m = this, {
5296
+ _a2 = this, _b2 = this, _c2 = this, _d = this, _e = this, _f = this, _g = this, _h = this, _j = this, _k = this, _l = this, _m = this, {
5254
5297
  options: { set value(_o) {
5255
- __classPrivateFieldSet(_a, _YargsInstance_options, _o, "f");
5298
+ __classPrivateFieldSet(_a2, _YargsInstance_options, _o, "f");
5256
5299
  } }.value,
5257
5300
  configObjects,
5258
5301
  exitProcess: { set value(_o) {
5259
- __classPrivateFieldSet(_b, _YargsInstance_exitProcess, _o, "f");
5302
+ __classPrivateFieldSet(_b2, _YargsInstance_exitProcess, _o, "f");
5260
5303
  } }.value,
5261
5304
  groups: { set value(_o) {
5262
- __classPrivateFieldSet(_c, _YargsInstance_groups, _o, "f");
5305
+ __classPrivateFieldSet(_c2, _YargsInstance_groups, _o, "f");
5263
5306
  } }.value,
5264
5307
  output: { set value(_o) {
5265
5308
  __classPrivateFieldSet(_d, _YargsInstance_output, _o, "f");
@@ -5310,6 +5353,7 @@ var YargsInstance = class {
5310
5353
  getLoggerInstance: this[kGetLoggerInstance].bind(this),
5311
5354
  getParseContext: this[kGetParseContext].bind(this),
5312
5355
  getParserConfiguration: this[kGetParserConfiguration].bind(this),
5356
+ getUsageConfiguration: this[kGetUsageConfiguration].bind(this),
5313
5357
  getUsageInstance: this[kGetUsageInstance].bind(this),
5314
5358
  getValidationInstance: this[kGetValidationInstance].bind(this),
5315
5359
  hasParseCallback: this[kHasParseCallback].bind(this),
@@ -6053,7 +6097,7 @@ async function generateASSETSBinding(options) {
6053
6097
  const miniflare = options.tre ? await import("@miniflare/tre") : await import("@miniflare/core");
6054
6098
  const Request = miniflare.Request;
6055
6099
  const Response2 = miniflare.Response;
6056
- const fetch2 = options.tre ? miniflare.fetch : (await import("@miniflare/web-sockets")).upgradingFetch;
6100
+ const fetch = options.tre ? miniflare.fetch : (await import("@miniflare/web-sockets")).upgradingFetch;
6057
6101
  return async function(miniflareRequest) {
6058
6102
  if (options.proxyPort) {
6059
6103
  try {
@@ -6064,7 +6108,7 @@ async function generateASSETSBinding(options) {
6064
6108
  proxyRequest.headers.delete("Sec-WebSocket-Accept");
6065
6109
  proxyRequest.headers.delete("Sec-WebSocket-Key");
6066
6110
  }
6067
- return await fetch2(proxyRequest);
6111
+ return await fetch(proxyRequest);
6068
6112
  } catch (thrown) {
6069
6113
  options.log.error(new Error(`Could not proxy request: ${thrown}`));
6070
6114
  return new Response2(`[wrangler] Could not proxy request: ${thrown}`, {
@@ -6230,7 +6274,7 @@ async function main() {
6230
6274
  if (logLevelString === "LOG")
6231
6275
  logLevelString = "INFO";
6232
6276
  const logLevel = MiniflareLogLevel[logLevelString];
6233
- config.log = logLevel === MiniflareLogLevel.NONE ? new MiniflareNoOpLog() : new MiniflareLog(logLevel, config.logOptions);
6277
+ config.log = logLevel === MiniflareLogLevel.NONE ? new MiniflareNoOpLog() : new MiniflareLog(logLevel);
6234
6278
  if (logLevel === MiniflareLogLevel.DEBUG) {
6235
6279
  console.log("MINIFLARE OPTIONS:\n", JSON.stringify(config, null, 2));
6236
6280
  }
@@ -6264,7 +6308,7 @@ async function main() {
6264
6308
  "x-miniflare-durable-object-id",
6265
6309
  id.toString()
6266
6310
  );
6267
- return fetch(request);
6311
+ return upgradingFetch(request);
6268
6312
  };
6269
6313
  return stub;
6270
6314
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "0.0.0-fa8e5232",
3
+ "version": "0.0.0-fb0db827",
4
4
  "description": "Command-line interface for all things Cloudflare Workers",
5
5
  "keywords": [
6
6
  "wrangler",
@@ -63,9 +63,11 @@
63
63
  "emit-types": "tsc -p tsconfig.emit.json && node -r esbuild-register scripts/emit-types.ts",
64
64
  "prepublishOnly": "SOURCEMAPS=false npm run build",
65
65
  "start": "npm run bundle && cross-env NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
66
- "test": "npm run assert-git-version && jest --silent=false --verbose=true --forceExit",
66
+ "test": "npm run assert-git-version && jest",
67
67
  "test-watch": "npm run test -- --runInBand --testTimeout=50000 --watch",
68
- "test:ci": "npm run test -- --verbose=true --coverage"
68
+ "test:ci": "npm run test -- --coverage",
69
+ "test:debug": "npm run test -- --silent=false --verbose=true",
70
+ "test:e2e": "vitest --no-threads ./e2e"
69
71
  },
70
72
  "jest": {
71
73
  "coverageReporters": [
@@ -82,7 +84,7 @@
82
84
  "setupFilesAfterEnv": [
83
85
  "<rootDir>/src/__tests__/jest.setup.ts"
84
86
  ],
85
- "testRegex": ".*.(test|spec)\\.[jt]sx?$",
87
+ "testRegex": "src/__tests__/.*\\.(test|spec)\\.[jt]sx?$",
86
88
  "testTimeout": 30000,
87
89
  "transform": {
88
90
  "^.+\\.c?(t|j)sx?$": [
@@ -100,13 +102,13 @@
100
102
  "@cloudflare/kv-asset-handler": "^0.2.0",
101
103
  "@esbuild-plugins/node-globals-polyfill": "^0.1.1",
102
104
  "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
103
- "@miniflare/core": "2.12.0",
104
- "@miniflare/d1": "2.12.0",
105
- "@miniflare/durable-objects": "2.12.0",
105
+ "@miniflare/core": "2.13.0",
106
+ "@miniflare/d1": "2.13.0",
107
+ "@miniflare/durable-objects": "2.13.0",
106
108
  "blake3-wasm": "^2.1.5",
107
109
  "chokidar": "^3.5.3",
108
110
  "esbuild": "0.16.3",
109
- "miniflare": "2.12.0",
111
+ "miniflare": "2.13.0",
110
112
  "nanoid": "^3.3.3",
111
113
  "path-to-regexp": "^6.2.0",
112
114
  "selfsigned": "^2.0.1",
@@ -118,7 +120,7 @@
118
120
  "@cloudflare/workers-types": "^4.20221111.1",
119
121
  "@iarna/toml": "^3.0.0",
120
122
  "@microsoft/api-extractor": "^7.28.3",
121
- "@miniflare/tre": "^3.0.0-next.8",
123
+ "@miniflare/tre": "3.0.0-next.12",
122
124
  "@types/better-sqlite3": "^7.6.0",
123
125
  "@types/busboy": "^1.5.0",
124
126
  "@types/command-exists": "^1.2.0",
@@ -174,13 +176,16 @@
174
176
  "remove-accents-esm": "^0.0.1",
175
177
  "semiver": "^1.1.0",
176
178
  "serve-static": "^1.15.0",
179
+ "shellac": "^0.7.3",
177
180
  "signal-exit": "^3.0.7",
181
+ "strip-ansi": "^7.0.1",
178
182
  "supports-color": "^9.2.2",
179
183
  "timeago.js": "^4.0.2",
180
184
  "tmp-promise": "^3.0.3",
181
185
  "ts-dedent": "^2.2.0",
182
- "undici": "5.11.0",
186
+ "undici": "5.20.0",
183
187
  "update-check": "^1.5.4",
188
+ "vitest": "^0.29.2",
184
189
  "ws": "^8.5.0",
185
190
  "xdg-app-paths": "^7.3.0",
186
191
  "yargs": "^17.4.1",
@@ -0,0 +1,121 @@
1
+ import { fetch } from "undici";
2
+ import { unstable_dev } from "../api";
3
+
4
+ jest.unmock("undici");
5
+
6
+ /**
7
+ * a huge caveat to how testing multi-worker scripts works:
8
+ * you can't shutdown the first worker you spun up, or it'll kill the devRegistry
9
+ */
10
+ describe("multi-worker testing", () => {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ let childWorker: any;
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+ let parentWorker: any;
15
+
16
+ beforeAll(async () => {
17
+ childWorker = await unstable_dev(
18
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
19
+ {
20
+ config: "src/__tests__/helpers/worker-scripts/child-wrangler.toml",
21
+ experimental: {
22
+ disableExperimentalWarning: true,
23
+ },
24
+ }
25
+ );
26
+ parentWorker = await unstable_dev(
27
+ "src/__tests__/helpers/worker-scripts/parent-worker.js",
28
+ {
29
+ config: "src/__tests__/helpers/worker-scripts/parent-wrangler.toml",
30
+ experimental: {
31
+ disableExperimentalWarning: true,
32
+ },
33
+ }
34
+ );
35
+ });
36
+
37
+ afterAll(async () => {
38
+ await childWorker.stop();
39
+ await parentWorker.stop();
40
+ });
41
+
42
+ it("parentWorker and childWorker should be added devRegistry", async () => {
43
+ const resp = await fetch("http://localhost:6284/workers");
44
+ if (resp) {
45
+ const parsedResp = (await resp.json()) as {
46
+ parent: unknown;
47
+ child: unknown;
48
+ };
49
+ expect(parsedResp.parent).toBeTruthy();
50
+ expect(parsedResp.child).toBeTruthy();
51
+ }
52
+ });
53
+
54
+ it("childWorker should return Hello World itself", async () => {
55
+ const resp = await childWorker.fetch();
56
+ if (resp) {
57
+ const text = await resp.text();
58
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
59
+ }
60
+ });
61
+
62
+ it("parentWorker should return Hello World by invoking the child worker", async () => {
63
+ const resp = await parentWorker.fetch();
64
+ if (resp) {
65
+ const parsedResp = await resp.text();
66
+ expect(parsedResp).toEqual("Parent worker sees: Hello World!");
67
+ }
68
+ });
69
+
70
+ it("should be able to stop and start the server with no warning logs", async () => {
71
+ // Spy on all the console methods
72
+ let logs = "";
73
+ (["debug", "info", "log", "warn", "error"] as const).forEach((method) =>
74
+ jest
75
+ .spyOn(console, method)
76
+ .mockImplementation((...args: unknown[]) => (logs += `\n${args}`))
77
+ );
78
+
79
+ // Spy on the std out that is written to by Miniflare 2
80
+ jest
81
+ .spyOn(process.stdout, "write")
82
+ .mockImplementation((chunk: unknown) => ((logs += `\n${chunk}`), true));
83
+
84
+ async function startWorker() {
85
+ return await unstable_dev(
86
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
87
+ {
88
+ // We need the wrangler.toml config to specify a Worker name
89
+ // otherwise unstable_dev will not register the worker with the DevRegistry
90
+ config: "src/__tests__/helpers/worker-scripts/child-wrangler.toml",
91
+ // We need debug logs because this is where the message is written if registering the worker fails.
92
+ logLevel: "debug",
93
+ experimental: {
94
+ disableExperimentalWarning: true,
95
+ },
96
+ }
97
+ );
98
+ }
99
+
100
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
101
+ let worker: any;
102
+ try {
103
+ worker = await startWorker();
104
+
105
+ // Stop the worker and start it again
106
+ await worker.stop();
107
+ await new Promise((r) => setTimeout(r, 2000));
108
+
109
+ worker = await startWorker();
110
+
111
+ const resp = await worker.fetch();
112
+ expect(resp).not.toBe(undefined);
113
+
114
+ expect(logs).not.toMatch(
115
+ /Failed to register worker in local service registry/
116
+ );
117
+ } finally {
118
+ await worker?.stop();
119
+ }
120
+ }, 10000);
121
+ });