wrangler 2.6.2 → 2.7.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.
Files changed (128) hide show
  1. package/bin/wrangler.js +9 -1
  2. package/miniflare-dist/index.mjs +1 -1
  3. package/package.json +12 -10
  4. package/src/__tests__/api-dev.test.ts +65 -36
  5. package/src/__tests__/api-devregistry.test.js +14 -6
  6. package/src/__tests__/configuration.test.ts +2 -31
  7. package/src/__tests__/{d1.test.ts → d1/d1.test.ts} +48 -5
  8. package/src/__tests__/d1/splitter.test.ts +255 -0
  9. package/src/__tests__/delete.test.ts +5 -2
  10. package/src/__tests__/deployments.test.ts +20 -6
  11. package/src/__tests__/dev.test.tsx +52 -19
  12. package/src/__tests__/generate.test.ts +7 -4
  13. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  14. package/src/__tests__/helpers/mock-cfetch.ts +2 -57
  15. package/src/__tests__/helpers/mock-dialogs.ts +70 -86
  16. package/src/__tests__/helpers/mock-oauth-flow.ts +64 -49
  17. package/src/__tests__/helpers/mock-process.ts +8 -13
  18. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  19. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  20. package/src/__tests__/index.test.ts +46 -44
  21. package/src/__tests__/init.test.ts +761 -537
  22. package/src/__tests__/jest.setup.ts +20 -24
  23. package/src/__tests__/kv.test.ts +286 -173
  24. package/src/__tests__/logout.test.ts +1 -1
  25. package/src/__tests__/metrics.test.ts +5 -7
  26. package/src/__tests__/middleware.scheduled.test.ts +40 -30
  27. package/src/__tests__/middleware.test.ts +144 -120
  28. package/src/__tests__/pages.test.ts +1617 -1161
  29. package/src/__tests__/publish.test.ts +174 -125
  30. package/src/__tests__/r2.test.ts +2 -2
  31. package/src/__tests__/secret.test.ts +183 -126
  32. package/src/__tests__/tail.test.ts +6 -0
  33. package/src/__tests__/tsconfig-sanity.ts +12 -0
  34. package/src/__tests__/tsconfig.json +8 -0
  35. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  36. package/src/__tests__/whoami.test.tsx +1 -96
  37. package/src/api/dev.ts +78 -41
  38. package/src/api/index.ts +1 -1
  39. package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
  40. package/src/cfetch/index.ts +0 -2
  41. package/src/cfetch/internal.ts +6 -15
  42. package/src/cli.ts +2 -2
  43. package/src/config/validation.ts +1 -2
  44. package/src/create-worker-upload-form.ts +2 -2
  45. package/src/d1/{delete.tsx → delete.ts} +0 -0
  46. package/src/d1/execute.tsx +8 -37
  47. package/src/d1/migrations/apply.tsx +29 -19
  48. package/src/d1/migrations/{index.tsx → index.ts} +0 -0
  49. package/src/d1/splitter.ts +161 -0
  50. package/src/d1/{types.tsx → types.ts} +0 -0
  51. package/src/delete.ts +3 -8
  52. package/src/deployments.ts +6 -0
  53. package/src/deprecated/index.ts +2 -295
  54. package/src/dev/dev.tsx +2 -2
  55. package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
  56. package/src/dev/local.tsx +16 -4
  57. package/src/dev/remote.tsx +28 -1
  58. package/src/dev/start-server.ts +19 -11
  59. package/src/dev/use-esbuild.ts +1 -1
  60. package/src/{dev-registry.tsx → dev-registry.ts} +0 -0
  61. package/src/dev.tsx +21 -2
  62. package/src/dialogs.ts +136 -0
  63. package/src/dispatch-namespace.ts +1 -1
  64. package/src/docs/index.ts +3 -0
  65. package/src/environment-variables/factory.ts +88 -0
  66. package/src/environment-variables/misc-variables.ts +30 -0
  67. package/src/generate/index.ts +300 -0
  68. package/src/{index.tsx → index.ts} +10 -13
  69. package/src/init.ts +92 -52
  70. package/src/jest.d.ts +4 -0
  71. package/src/logger.ts +15 -3
  72. package/src/metrics/metrics-config.ts +1 -1
  73. package/src/miniflare-cli/assets.ts +4 -0
  74. package/src/miniflare-cli/index.ts +1 -5
  75. package/src/miniflare-cli/tsconfig.json +9 -0
  76. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  77. package/src/miniflare-cli/types.ts +11 -0
  78. package/src/pages/{build.tsx → build.ts} +0 -0
  79. package/src/pages/{deployment-tails.tsx → deployment-tails.ts} +0 -0
  80. package/src/pages/{dev.tsx → dev.ts} +53 -55
  81. package/src/pages/functions/buildWorker.ts +1 -1
  82. package/src/pages/functions/tsconfig.json +8 -0
  83. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  84. package/src/pages/{functions.tsx → functions.ts} +0 -0
  85. package/src/pages/{hash.tsx → hash.ts} +0 -0
  86. package/src/pages/{index.tsx → index.ts} +0 -0
  87. package/src/pages/projects.tsx +3 -5
  88. package/src/pages/publish.tsx +5 -4
  89. package/src/pages/upload.tsx +1 -1
  90. package/src/publish/publish.ts +9 -7
  91. package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +1 -1
  92. package/src/secret/index.ts +1 -1
  93. package/src/{sites.tsx → sites.ts} +0 -0
  94. package/src/tail/index.ts +2 -3
  95. package/src/tsconfig-sanity.ts +16 -0
  96. package/src/user/access.ts +0 -1
  97. package/src/user/auth-variables.ts +113 -0
  98. package/src/user/choose-account.tsx +1 -31
  99. package/src/user/index.ts +0 -1
  100. package/src/user/{user.tsx → user.ts} +107 -73
  101. package/src/{whoami.tsx → whoami.ts} +37 -71
  102. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  103. package/templates/__tests__/tsconfig.json +8 -0
  104. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  105. package/templates/d1-beta-facade.js +36 -0
  106. package/templates/facade.d.ts +14 -0
  107. package/templates/first-party-worker-module-facade.ts +4 -3
  108. package/templates/format-dev-errors.ts +7 -6
  109. package/templates/init-tests/test-jest-new-worker.js +3 -5
  110. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  111. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  112. package/templates/middleware/loader-modules.ts +0 -2
  113. package/templates/middleware/loader-sw.ts +6 -0
  114. package/templates/pages-dev-pipeline.ts +4 -1
  115. package/templates/pages-shim.ts +4 -1
  116. package/templates/pages-template-plugin.ts +12 -7
  117. package/templates/serve-static-assets.ts +16 -14
  118. package/templates/tsconfig-sanity.ts +11 -0
  119. package/templates/tsconfig.init.json +106 -0
  120. package/templates/tsconfig.json +5 -103
  121. package/templates/tsconfig.tsbuildinfo +1 -0
  122. package/wrangler-dist/cli.d.ts +58 -60
  123. package/wrangler-dist/cli.js +34440 -55514
  124. package/wrangler-dist/wasm-sync.wasm +0 -0
  125. package/src/__tests__/dialogs.test.tsx +0 -40
  126. package/src/dialogs.tsx +0 -168
  127. package/src/environment-variables.ts +0 -50
  128. package/src/user/env-vars.ts +0 -46
@@ -1,34 +1,52 @@
1
1
  import * as fs from "node:fs";
2
2
  import { writeFileSync } from "node:fs";
3
3
  import * as TOML from "@iarna/toml";
4
+ import { rest } from "msw";
4
5
  import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
5
- import { setMockResponse, unsetAllMocks } from "./helpers/mock-cfetch";
6
6
  import { mockConsoleMethods } from "./helpers/mock-console";
7
- import {
8
- mockConfirm,
9
- mockPrompt,
10
- clearConfirmMocks,
11
- clearPromptMocks,
12
- } from "./helpers/mock-dialogs";
13
- import {
14
- mockGetMemberships,
15
- mockGetMembershipsFail,
16
- } from "./helpers/mock-oauth-flow";
7
+ import { mockConfirm, mockPrompt, clearDialogs } from "./helpers/mock-dialogs";
8
+ import { useMockIsTTY } from "./helpers/mock-istty";
9
+
17
10
  import { useMockStdin } from "./helpers/mock-stdin";
11
+ import { msw } from "./helpers/msw";
18
12
  import { runInTempDir } from "./helpers/run-in-tmp";
19
13
  import { runWrangler } from "./helpers/run-wrangler";
20
14
 
15
+ function createFetchResult(result: unknown, success = true) {
16
+ return {
17
+ success,
18
+ errors: [],
19
+ messages: [],
20
+ result,
21
+ };
22
+ }
23
+
24
+ export function mockGetMembershipsFail() {
25
+ msw.use(
26
+ rest.get("*/memberships", (req, res, ctx) => {
27
+ return res.once(ctx.json(createFetchResult([], false)));
28
+ })
29
+ );
30
+ }
31
+
32
+ export function mockGetMemberships(
33
+ accounts: { id: string; account: { id: string; name: string } }[]
34
+ ) {
35
+ msw.use(
36
+ rest.get("*/memberships", (req, res, ctx) => {
37
+ return res.once(ctx.json(createFetchResult(accounts)));
38
+ })
39
+ );
40
+ }
41
+
21
42
  describe("wrangler secret", () => {
22
43
  const std = mockConsoleMethods();
23
-
44
+ const { setIsTTY } = useMockIsTTY();
24
45
  runInTempDir();
25
46
  mockAccountId();
26
47
  mockApiToken();
27
-
28
48
  afterEach(() => {
29
- unsetAllMocks();
30
- clearConfirmMocks();
31
- clearPromptMocks();
49
+ clearDialogs();
32
50
  });
33
51
 
34
52
  describe("put", () => {
@@ -39,34 +57,37 @@ describe("wrangler secret", () => {
39
57
  ) {
40
58
  const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
41
59
  const environment = env && !legacyEnv ? "/environments/:envName" : "";
42
- setMockResponse(
43
- `/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
44
- "PUT",
45
- ([_url, accountId, scriptName, envName], { body }) => {
46
- expect(accountId).toEqual("some-account-id");
47
- expect(scriptName).toEqual(
48
- legacyEnv && env ? `script-name-${env}` : "script-name"
49
- );
50
- if (!legacyEnv) {
51
- expect(envName).toEqual(env);
52
- }
53
- const { name, text, type } = JSON.parse(body as string);
54
- expect(type).toEqual("secret_text");
55
- expect(name).toEqual(input.name);
56
- expect(text).toEqual(input.text);
60
+ msw.use(
61
+ rest.put(
62
+ `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
63
+ async (req, res, ctx) => {
64
+ expect(req.params.accountId).toEqual("some-account-id");
65
+ expect(req.params.scriptName).toEqual(
66
+ legacyEnv && env ? `script-name-${env}` : "script-name"
67
+ );
68
+ if (!legacyEnv) {
69
+ expect(req.params.envName).toEqual(env);
70
+ }
71
+ const { name, text, type } = await req.json();
72
+ expect(type).toEqual("secret_text");
73
+ expect(name).toEqual(input.name);
74
+ expect(text).toEqual(input.text);
57
75
 
58
- return { name, type };
59
- }
76
+ return res.once(ctx.json(createFetchResult({ name, type })));
77
+ }
78
+ )
60
79
  );
61
80
  }
62
81
 
63
82
  describe("interactive", () => {
64
- useMockStdin({ isTTY: true });
83
+ beforeEach(() => {
84
+ setIsTTY(true);
85
+ });
65
86
 
66
87
  it("should trim stdin secret value", async () => {
67
88
  mockPrompt({
68
89
  text: "Enter a secret value:",
69
- type: "password",
90
+ options: { isSecret: true },
70
91
  result: `hunter2
71
92
  `,
72
93
  });
@@ -82,7 +103,7 @@ describe("wrangler secret", () => {
82
103
  it("should create a secret", async () => {
83
104
  mockPrompt({
84
105
  text: "Enter a secret value:",
85
- type: "password",
106
+ options: { isSecret: true },
86
107
  result: "the-secret",
87
108
  });
88
109
 
@@ -107,15 +128,23 @@ describe("wrangler secret", () => {
107
128
 
108
129
  // User counter to pass different secrets to the request mock
109
130
  let counter = 0;
110
- setMockResponse(
111
- `/accounts/:accountId/workers/scripts/:scriptName/secrets`,
112
- "PUT",
113
- ([_url, accountId]) => {
114
- expect(accountId).toEqual("some-account-id");
115
- counter++;
116
-
117
- return { name: `secret-name-${counter}`, type: "secret_text" };
118
- }
131
+ msw.use(
132
+ rest.put(
133
+ `*/accounts/:accountId/workers/scripts/:scriptName/secrets`,
134
+ (req, res, ctx) => {
135
+ expect(req.params.accountId).toEqual("some-account-id");
136
+ counter++;
137
+
138
+ return res(
139
+ ctx.json(
140
+ createFetchResult({
141
+ name: `secret-name-${counter}`,
142
+ type: "secret_text",
143
+ })
144
+ )
145
+ );
146
+ }
147
+ )
119
148
  );
120
149
 
121
150
  await runWrangler("secret:bulk ./secret.json --name script-name");
@@ -131,7 +160,7 @@ describe("wrangler secret", () => {
131
160
  expect(std.err).toMatchInlineSnapshot(`""`);
132
161
  });
133
162
 
134
- it("should handle failed secret:bulk", async () => {
163
+ it("should handle network failure on secret:bulk", async () => {
135
164
  writeFileSync(
136
165
  "secret.json",
137
166
  JSON.stringify({
@@ -142,17 +171,16 @@ describe("wrangler secret", () => {
142
171
 
143
172
  // User counter to pass different secrets to the request mock
144
173
  let counter = 0;
145
- setMockResponse(
146
- `/accounts/:accountId/workers/scripts/:scriptName/secrets`,
147
- "PUT",
148
- ([_url, accountId]) => {
149
- expect(accountId).toEqual("some-account-id");
150
- counter++;
151
-
152
- return Promise.reject(
153
- new Error(`Failed to create secret ${counter}`)
154
- );
155
- }
174
+ msw.use(
175
+ rest.put(
176
+ `*/accounts/:accountId/workers/scripts/:scriptName/secrets`,
177
+ (req, res) => {
178
+ expect(req.params.accountId).toEqual("some-account-id");
179
+ counter++;
180
+
181
+ return res.networkError(`Failed to create secret ${counter}`);
182
+ }
183
+ )
156
184
  );
157
185
 
158
186
  await runWrangler("secret:bulk ./secret.json --name script-name");
@@ -167,18 +195,22 @@ describe("wrangler secret", () => {
167
195
  expect(std.err).toMatchInlineSnapshot(`
168
196
  "X [ERROR] 🚨 Error uploading secret for key: secret-name-1:
169
197
 
170
- Failed to create secret 1
198
+ request to
199
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
200
+ failed, reason: Failed to create secret 1
171
201
 
172
202
 
173
203
  X [ERROR] 🚨 Error uploading secret for key: secret-name-2:
174
204
 
175
- Failed to create secret 2
205
+ request to
206
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
207
+ failed, reason: Failed to create secret 2
176
208
 
177
209
  "
178
210
  `);
179
211
  });
180
212
 
181
- it("should count success and failed secret:bulk", async () => {
213
+ it("should count success and network failure on secret:bulk", async () => {
182
214
  writeFileSync(
183
215
  "secret.json",
184
216
  JSON.stringify({
@@ -194,21 +226,27 @@ describe("wrangler secret", () => {
194
226
 
195
227
  // User counter to pass different secrets to the request mock
196
228
  let counter = 0;
197
- setMockResponse(
198
- `/accounts/:accountId/workers/scripts/:scriptName/secrets`,
199
- "PUT",
200
- ([_url, accountId]) => {
201
- expect(accountId).toEqual("some-account-id");
202
- counter++;
203
-
204
- if (counter % 2 === 0) {
205
- return { name: `secret-name-${counter}`, type: "secret_text" };
206
- } else {
207
- return Promise.reject(
208
- new Error(`Failed to create secret ${counter}`)
209
- );
229
+ msw.use(
230
+ rest.put(
231
+ `*/accounts/:accountId/workers/scripts/:scriptName/secrets`,
232
+ (req, res, ctx) => {
233
+ expect(req.params.accountId).toEqual("some-account-id");
234
+ counter++;
235
+
236
+ if (counter % 2 === 0) {
237
+ return res(
238
+ ctx.json(
239
+ createFetchResult({
240
+ name: `secret-name-${counter}`,
241
+ type: "secret_text",
242
+ })
243
+ )
244
+ );
245
+ } else {
246
+ return res.networkError(`Failed to create secret ${counter}`);
247
+ }
210
248
  }
211
- }
249
+ )
212
250
  );
213
251
 
214
252
  await runWrangler("secret:bulk ./secret.json --name script-name");
@@ -226,22 +264,30 @@ describe("wrangler secret", () => {
226
264
  expect(std.err).toMatchInlineSnapshot(`
227
265
  "X [ERROR] 🚨 Error uploading secret for key: secret-name-1:
228
266
 
229
- Failed to create secret 1
267
+ request to
268
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
269
+ failed, reason: Failed to create secret 1
230
270
 
231
271
 
232
272
  X [ERROR] 🚨 Error uploading secret for key: secret-name-3:
233
273
 
234
- Failed to create secret 3
274
+ request to
275
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
276
+ failed, reason: Failed to create secret 3
235
277
 
236
278
 
237
279
  X [ERROR] 🚨 Error uploading secret for key: secret-name-5:
238
280
 
239
- Failed to create secret 5
281
+ request to
282
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
283
+ failed, reason: Failed to create secret 5
240
284
 
241
285
 
242
286
  X [ERROR] 🚨 Error uploading secret for key: secret-name-7:
243
287
 
244
- Failed to create secret 7
288
+ request to
289
+ https://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets
290
+ failed, reason: Failed to create secret 7
245
291
 
246
292
  "
247
293
  `);
@@ -250,7 +296,7 @@ describe("wrangler secret", () => {
250
296
  it("should create a secret: legacy envs", async () => {
251
297
  mockPrompt({
252
298
  text: "Enter a secret value:",
253
- type: "password",
299
+ options: { isSecret: true },
254
300
  result: "the-secret",
255
301
  });
256
302
 
@@ -273,7 +319,7 @@ describe("wrangler secret", () => {
273
319
  it("should create a secret: service envs", async () => {
274
320
  mockPrompt({
275
321
  text: "Enter a secret value:",
276
- type: "password",
322
+ options: { isSecret: true },
277
323
  result: "the-secret",
278
324
  });
279
325
 
@@ -316,6 +362,9 @@ describe("wrangler secret", () => {
316
362
  });
317
363
 
318
364
  describe("non-interactive", () => {
365
+ beforeEach(() => {
366
+ setIsTTY(false);
367
+ });
319
368
  const mockStdIn = useMockStdin({ isTTY: false });
320
369
 
321
370
  it("should trim stdin secret value, from piped input", async () => {
@@ -381,9 +430,9 @@ describe("wrangler secret", () => {
381
430
  mockGetMemberships([]);
382
431
  await expect(runWrangler("secret put the-key --name script-name"))
383
432
  .rejects.toThrowErrorMatchingInlineSnapshot(`
384
- "Failed to automatically retrieve account IDs for the logged in user.
385
- In a non-interactive environment, it is mandatory to specify an account ID, either by assigning its value to CLOUDFLARE_ACCOUNT_ID, or as \`account_id\` in your \`wrangler.toml\` file."
386
- `);
433
+ "Failed to automatically retrieve account IDs for the logged in user.
434
+ In a non-interactive environment, it is mandatory to specify an account ID, either by assigning its value to CLOUDFLARE_ACCOUNT_ID, or as \`account_id\` in your \`wrangler.toml\` file."
435
+ `);
387
436
  });
388
437
 
389
438
  it("should use the account from wrangler.toml", async () => {
@@ -423,19 +472,22 @@ describe("wrangler secret", () => {
423
472
 
424
473
  await expect(runWrangler("secret put the-key --name script-name"))
425
474
  .rejects.toThrowErrorMatchingInlineSnapshot(`
426
- "More than one account available but unable to select one in non-interactive mode.
427
- Please set the appropriate \`account_id\` in your \`wrangler.toml\` file.
428
- Available accounts are (\\"<name>\\" - \\"<id>\\"):
429
- \\"account-name-1\\" - \\"account-id-1\\")
430
- \\"account-name-2\\" - \\"account-id-2\\")
431
- \\"account-name-3\\" - \\"account-id-3\\")"
432
- `);
475
+ "More than one account available but unable to select one in non-interactive mode.
476
+ Please set the appropriate \`account_id\` in your \`wrangler.toml\` file.
477
+ Available accounts are (\`<name>\`: \`<account_id>\`):
478
+ \`account-name-1\`: \`account-id-1\`
479
+ \`account-name-2\`: \`account-id-2\`
480
+ \`account-name-3\`: \`account-id-3\`"
481
+ `);
433
482
  });
434
483
  });
435
484
  });
436
485
  });
437
486
 
438
487
  describe("delete", () => {
488
+ beforeEach(() => {
489
+ setIsTTY(true);
490
+ });
439
491
  function mockDeleteRequest(
440
492
  input: {
441
493
  scriptName: string;
@@ -446,28 +498,25 @@ describe("wrangler secret", () => {
446
498
  ) {
447
499
  const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
448
500
  const environment = env && !legacyEnv ? "/environments/:envName" : "";
449
- setMockResponse(
450
- `/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets/:secretName`,
451
- "DELETE",
452
- ([_url, accountId, scriptName, envOrSecretName, secretName]) => {
453
- expect(accountId).toEqual("some-account-id");
454
- expect(scriptName).toEqual(
455
- legacyEnv && env ? `script-name-${env}` : "script-name"
456
- );
457
- if (!legacyEnv) {
458
- if (env) {
459
- expect(envOrSecretName).toEqual(env);
460
- expect(secretName).toEqual(input.secretName);
461
- } else {
462
- expect(envOrSecretName).toEqual(input.secretName);
501
+ msw.use(
502
+ rest.delete(
503
+ `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets/:secretName`,
504
+ (req, res, ctx) => {
505
+ expect(req.params.accountId).toEqual("some-account-id");
506
+ expect(req.params.scriptName).toEqual(
507
+ legacyEnv && env ? `script-name-${env}` : "script-name"
508
+ );
509
+ if (!legacyEnv) {
510
+ if (env) {
511
+ expect(req.params.secretName).toEqual(input.secretName);
512
+ }
463
513
  }
464
- } else {
465
- expect(envOrSecretName).toEqual(input.secretName);
514
+ return res.once(ctx.json(createFetchResult(null)));
466
515
  }
467
- return null;
468
- }
516
+ )
469
517
  );
470
518
  }
519
+
471
520
  it("should delete a secret", async () => {
472
521
  mockDeleteRequest({ scriptName: "script-name", secretName: "the-key" });
473
522
  mockConfirm({
@@ -545,6 +594,9 @@ describe("wrangler secret", () => {
545
594
  });
546
595
 
547
596
  describe("list", () => {
597
+ beforeEach(() => {
598
+ setIsTTY(true);
599
+ });
548
600
  function mockListRequest(
549
601
  input: { scriptName: string },
550
602
  env?: string,
@@ -552,25 +604,30 @@ describe("wrangler secret", () => {
552
604
  ) {
553
605
  const servicesOrScripts = env && !legacyEnv ? "services" : "scripts";
554
606
  const environment = env && !legacyEnv ? "/environments/:envName" : "";
555
- setMockResponse(
556
- `/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
557
- "GET",
558
- ([_url, accountId, scriptName, envName]) => {
559
- expect(accountId).toEqual("some-account-id");
560
- expect(scriptName).toEqual(
561
- legacyEnv && env ? `script-name-${env}` : "script-name"
562
- );
563
- if (!legacyEnv) {
564
- expect(envName).toEqual(env);
565
- }
607
+ msw.use(
608
+ rest.get(
609
+ `*/accounts/:accountId/workers/${servicesOrScripts}/:scriptName${environment}/secrets`,
610
+ (req, res, ctx) => {
611
+ expect(req.params.accountId).toEqual("some-account-id");
612
+ expect(req.params.scriptName).toEqual(
613
+ legacyEnv && env ? `script-name-${env}` : "script-name"
614
+ );
615
+ if (!legacyEnv) {
616
+ expect(req.params.envName).toEqual(env);
617
+ }
566
618
 
567
- return [
568
- {
569
- name: "the-secret-name",
570
- type: "secret_text",
571
- },
572
- ];
573
- }
619
+ return res.once(
620
+ ctx.json(
621
+ createFetchResult([
622
+ {
623
+ name: "the-secret-name",
624
+ type: "secret_text",
625
+ },
626
+ ])
627
+ )
628
+ );
629
+ }
630
+ )
574
631
  );
575
632
  }
576
633
 
@@ -3,6 +3,7 @@ import { rest } from "msw";
3
3
  import { Headers, Request } from "undici";
4
4
  import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
5
5
  import { mockConsoleMethods } from "./helpers/mock-console";
6
+ import { mockConfirm, clearDialogs } from "./helpers/mock-dialogs";
6
7
  import { useMockIsTTY } from "./helpers/mock-istty";
7
8
  import { msw, mswSucessScriptHandlers } from "./helpers/msw";
8
9
  import { runInTempDir } from "./helpers/run-in-tmp";
@@ -27,6 +28,7 @@ describe("tail", () => {
27
28
  afterEach(() => {
28
29
  mockWebSockets.forEach((ws) => ws.close());
29
30
  mockWebSockets.splice(0);
31
+ clearDialogs();
30
32
  });
31
33
 
32
34
  /**
@@ -44,6 +46,10 @@ describe("tail", () => {
44
46
  });
45
47
  it("warns about durable object restarts for tty", async () => {
46
48
  setIsTTY(true);
49
+ mockConfirm({
50
+ text: "Would you like to continue?",
51
+ result: false,
52
+ });
47
53
  const api = mockWebsocketAPIs();
48
54
  expect(api.requests.creation.length).toStrictEqual(0);
49
55
  await runWrangler("tail durable-object--websocket--response");
@@ -0,0 +1,12 @@
1
+ // `@types/node` should be included
2
+ Buffer.from("test");
3
+
4
+ // `@types/jest` should be included
5
+ test("test");
6
+
7
+ // @ts-expect-error `@cloudflare/workers-types` should NOT be included
8
+ const _handler: ExportedHandler = {};
9
+ // @ts-expect-error `@cloudflare/workers-types` should NOT be included
10
+ new HTMLRewriter();
11
+
12
+ export {};
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../tsconfig.json",
3
+ "compilerOptions": {
4
+ "types": ["node", "jest"]
5
+ },
6
+ "include": ["../*.d.ts", "**/*.ts", "**/*.tsx", "**/*.js"],
7
+ "exclude": ["../jest.d.ts"]
8
+ }