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.
- package/bin/wrangler.js +9 -1
- package/miniflare-dist/index.mjs +1 -1
- package/package.json +12 -10
- package/src/__tests__/api-dev.test.ts +65 -36
- package/src/__tests__/api-devregistry.test.js +14 -6
- package/src/__tests__/configuration.test.ts +2 -31
- package/src/__tests__/{d1.test.ts → d1/d1.test.ts} +48 -5
- package/src/__tests__/d1/splitter.test.ts +255 -0
- package/src/__tests__/delete.test.ts +5 -2
- package/src/__tests__/deployments.test.ts +20 -6
- package/src/__tests__/dev.test.tsx +52 -19
- package/src/__tests__/generate.test.ts +7 -4
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-cfetch.ts +2 -57
- package/src/__tests__/helpers/mock-dialogs.ts +70 -86
- package/src/__tests__/helpers/mock-oauth-flow.ts +64 -49
- package/src/__tests__/helpers/mock-process.ts +8 -13
- package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
- package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
- package/src/__tests__/index.test.ts +46 -44
- package/src/__tests__/init.test.ts +761 -537
- package/src/__tests__/jest.setup.ts +20 -24
- package/src/__tests__/kv.test.ts +286 -173
- package/src/__tests__/logout.test.ts +1 -1
- package/src/__tests__/metrics.test.ts +5 -7
- package/src/__tests__/middleware.scheduled.test.ts +40 -30
- package/src/__tests__/middleware.test.ts +144 -120
- package/src/__tests__/pages.test.ts +1617 -1161
- package/src/__tests__/publish.test.ts +174 -125
- package/src/__tests__/r2.test.ts +2 -2
- package/src/__tests__/secret.test.ts +183 -126
- package/src/__tests__/tail.test.ts +6 -0
- package/src/__tests__/tsconfig-sanity.ts +12 -0
- package/src/__tests__/tsconfig.json +8 -0
- package/src/__tests__/tsconfig.tsbuildinfo +1 -0
- package/src/__tests__/whoami.test.tsx +1 -96
- package/src/api/dev.ts +78 -41
- package/src/api/index.ts +1 -1
- package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
- package/src/cfetch/index.ts +0 -2
- package/src/cfetch/internal.ts +6 -15
- package/src/cli.ts +2 -2
- package/src/config/validation.ts +1 -2
- package/src/create-worker-upload-form.ts +2 -2
- package/src/d1/{delete.tsx → delete.ts} +0 -0
- package/src/d1/execute.tsx +8 -37
- package/src/d1/migrations/apply.tsx +29 -19
- package/src/d1/migrations/{index.tsx → index.ts} +0 -0
- package/src/d1/splitter.ts +161 -0
- package/src/d1/{types.tsx → types.ts} +0 -0
- package/src/delete.ts +3 -8
- package/src/deployments.ts +6 -0
- package/src/deprecated/index.ts +2 -295
- package/src/dev/dev.tsx +2 -2
- package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
- package/src/dev/local.tsx +16 -4
- package/src/dev/remote.tsx +28 -1
- package/src/dev/start-server.ts +19 -11
- package/src/dev/use-esbuild.ts +1 -1
- package/src/{dev-registry.tsx → dev-registry.ts} +0 -0
- package/src/dev.tsx +21 -2
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +1 -1
- package/src/docs/index.ts +3 -0
- package/src/environment-variables/factory.ts +88 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +300 -0
- package/src/{index.tsx → index.ts} +10 -13
- package/src/init.ts +92 -52
- package/src/jest.d.ts +4 -0
- package/src/logger.ts +15 -3
- package/src/metrics/metrics-config.ts +1 -1
- package/src/miniflare-cli/assets.ts +4 -0
- package/src/miniflare-cli/index.ts +1 -5
- package/src/miniflare-cli/tsconfig.json +9 -0
- package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
- package/src/miniflare-cli/types.ts +11 -0
- package/src/pages/{build.tsx → build.ts} +0 -0
- package/src/pages/{deployment-tails.tsx → deployment-tails.ts} +0 -0
- package/src/pages/{dev.tsx → dev.ts} +53 -55
- package/src/pages/functions/buildWorker.ts +1 -1
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/{functions.tsx → functions.ts} +0 -0
- package/src/pages/{hash.tsx → hash.ts} +0 -0
- package/src/pages/{index.tsx → index.ts} +0 -0
- package/src/pages/projects.tsx +3 -5
- package/src/pages/publish.tsx +5 -4
- package/src/pages/upload.tsx +1 -1
- package/src/publish/publish.ts +9 -7
- package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +1 -1
- package/src/secret/index.ts +1 -1
- package/src/{sites.tsx → sites.ts} +0 -0
- package/src/tail/index.ts +2 -3
- package/src/tsconfig-sanity.ts +16 -0
- package/src/user/access.ts +0 -1
- package/src/user/auth-variables.ts +113 -0
- package/src/user/choose-account.tsx +1 -31
- package/src/user/index.ts +0 -1
- package/src/user/{user.tsx → user.ts} +107 -73
- package/src/{whoami.tsx → whoami.ts} +37 -71
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/d1-beta-facade.js +36 -0
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +4 -3
- package/templates/format-dev-errors.ts +7 -6
- package/templates/init-tests/test-jest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.js +3 -5
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/loader-modules.ts +0 -2
- package/templates/middleware/loader-sw.ts +6 -0
- package/templates/pages-dev-pipeline.ts +4 -1
- package/templates/pages-shim.ts +4 -1
- package/templates/pages-template-plugin.ts +12 -7
- package/templates/serve-static-assets.ts +16 -14
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +106 -0
- package/templates/tsconfig.json +5 -103
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +58 -60
- package/wrangler-dist/cli.js +34440 -55514
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/dialogs.tsx +0 -168
- package/src/environment-variables.ts +0 -50
- 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
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
59
|
-
|
|
76
|
+
return res.once(ctx.json(createFetchResult({ name, type })));
|
|
77
|
+
}
|
|
78
|
+
)
|
|
60
79
|
);
|
|
61
80
|
}
|
|
62
81
|
|
|
63
82
|
describe("interactive", () => {
|
|
64
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-1:[0m
|
|
169
197
|
|
|
170
|
-
|
|
198
|
+
request to
|
|
199
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
200
|
+
failed, reason: Failed to create secret 1
|
|
171
201
|
|
|
172
202
|
|
|
173
203
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-2:[0m
|
|
174
204
|
|
|
175
|
-
|
|
205
|
+
request to
|
|
206
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
207
|
+
failed, reason: Failed to create secret 2
|
|
176
208
|
|
|
177
209
|
"
|
|
178
210
|
`);
|
|
179
211
|
});
|
|
180
212
|
|
|
181
|
-
it("should count success and
|
|
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
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-1:[0m
|
|
228
266
|
|
|
229
|
-
|
|
267
|
+
request to
|
|
268
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
269
|
+
failed, reason: Failed to create secret 1
|
|
230
270
|
|
|
231
271
|
|
|
232
272
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-3:[0m
|
|
233
273
|
|
|
234
|
-
|
|
274
|
+
request to
|
|
275
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
276
|
+
failed, reason: Failed to create secret 3
|
|
235
277
|
|
|
236
278
|
|
|
237
279
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-5:[0m
|
|
238
280
|
|
|
239
|
-
|
|
281
|
+
request to
|
|
282
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
283
|
+
failed, reason: Failed to create secret 5
|
|
240
284
|
|
|
241
285
|
|
|
242
286
|
[31mX [41;31m[[41;97mERROR[41;31m][0m [1m🚨 Error uploading secret for key: secret-name-7:[0m
|
|
243
287
|
|
|
244
|
-
|
|
288
|
+
request to
|
|
289
|
+
[4mhttps://api.cloudflare.com/client/v4/accounts/some-account-id/workers/scripts/script-name/secrets[0m
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
385
|
-
|
|
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
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
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
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
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
|
-
|
|
465
|
-
expect(envOrSecretName).toEqual(input.secretName);
|
|
514
|
+
return res.once(ctx.json(createFetchResult(null)));
|
|
466
515
|
}
|
|
467
|
-
|
|
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
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
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
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
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 {};
|