wrangler 0.0.0-e30d1013 → 0.0.0-e311bbbf
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/README.md +3 -3
- package/bin/wrangler.js +30 -10
- package/miniflare-dist/index.mjs +126 -74
- package/package.json +26 -19
- package/src/__tests__/api-dev.test.ts +65 -36
- package/src/__tests__/api-devregistry.test.ts +121 -0
- package/src/__tests__/api.test.ts +27 -5
- package/src/__tests__/configuration.test.ts +567 -39
- package/src/__tests__/d1/d1.test.ts +82 -0
- package/src/__tests__/d1/execute.test.ts +66 -0
- package/src/__tests__/d1/migrate.test.ts +157 -0
- package/src/__tests__/d1/splitter.test.ts +255 -0
- package/src/__tests__/delete.test.ts +91 -49
- package/src/__tests__/deployments.test.ts +330 -52
- package/src/__tests__/dev.test.tsx +198 -90
- package/src/__tests__/generate.test.ts +8 -5
- package/src/__tests__/guess-worker-format.test.ts +35 -0
- package/src/__tests__/helpers/end-event-loop.ts +6 -0
- package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
- package/src/__tests__/helpers/mock-console.ts +6 -0
- package/src/__tests__/helpers/mock-dialogs.ts +71 -85
- package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
- package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
- package/src/__tests__/helpers/mock-known-routes.ts +7 -2
- package/src/__tests__/helpers/mock-kv.ts +29 -16
- package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
- package/src/__tests__/helpers/mock-process.ts +8 -13
- package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
- package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
- package/src/__tests__/helpers/msw/handlers/deployments.ts +127 -26
- package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
- package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
- package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
- package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
- package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
- package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
- package/src/__tests__/helpers/msw/index.ts +32 -1
- package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
- package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
- package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
- package/src/__tests__/index.test.ts +90 -72
- package/src/__tests__/init.test.ts +927 -631
- package/src/__tests__/jest.setup.ts +19 -42
- package/src/__tests__/kv.test.ts +355 -231
- package/src/__tests__/logger.test.ts +68 -2
- package/src/__tests__/logout.test.ts +47 -0
- package/src/__tests__/metrics.test.ts +94 -51
- package/src/__tests__/middleware.scheduled.test.ts +42 -32
- package/src/__tests__/middleware.test.ts +212 -122
- package/src/__tests__/mtls-certificates.test.ts +588 -0
- package/src/__tests__/pages/deployment-list.test.ts +80 -0
- package/src/__tests__/pages/functions-build.test.ts +452 -0
- package/src/__tests__/pages/pages.test.ts +81 -0
- package/src/__tests__/pages/project-create.test.ts +63 -0
- package/src/__tests__/pages/project-list.test.ts +110 -0
- package/src/__tests__/pages/project-upload.test.ts +500 -0
- package/src/__tests__/pages/publish.test.ts +2864 -0
- package/src/__tests__/pages-deployment-tail.test.ts +955 -0
- package/src/__tests__/parse.test.ts +106 -0
- package/src/__tests__/publish.test.ts +1620 -830
- package/src/__tests__/pubsub.test.ts +226 -100
- package/src/__tests__/queues.test.ts +237 -76
- package/src/__tests__/r2.test.ts +37 -56
- package/src/__tests__/secret.test.ts +179 -130
- package/src/__tests__/tail.test.ts +267 -109
- package/src/__tests__/test-old-node-version.js +3 -3
- package/src/__tests__/traverse-module-graph.test.ts +220 -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__/type-generation.test.ts +11 -2
- package/src/__tests__/user.test.ts +35 -72
- package/src/__tests__/whoami.test.tsx +8 -114
- package/src/__tests__/worker-namespace.test.ts +83 -69
- package/src/api/dev.ts +168 -60
- package/src/api/index.ts +10 -1
- package/src/api/mtls-certificate.ts +148 -0
- package/src/api/pages/create-worker-bundle-contents.ts +76 -0
- package/src/api/pages/index.ts +5 -0
- package/src/api/pages/publish.tsx +355 -0
- package/src/bundle.ts +221 -128
- package/src/cfetch/index.ts +0 -2
- package/src/cfetch/internal.ts +16 -21
- package/src/cli.ts +4 -4
- package/src/config/config.ts +14 -7
- package/src/config/environment.ts +73 -16
- package/src/config/index.ts +99 -30
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +248 -9
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +48 -5
- package/src/d1/backups.tsx +43 -42
- package/src/d1/create.tsx +26 -21
- package/src/d1/{delete.tsx → delete.ts} +11 -14
- package/src/d1/execute.tsx +183 -170
- package/src/d1/index.ts +7 -6
- package/src/d1/list.tsx +22 -10
- package/src/d1/migrations/apply.tsx +212 -0
- package/src/d1/migrations/create.tsx +79 -0
- package/src/d1/migrations/helpers.ts +172 -0
- package/src/d1/migrations/index.ts +3 -0
- package/src/d1/migrations/list.tsx +95 -0
- package/src/d1/migrations/options.ts +23 -0
- package/src/d1/options.ts +3 -3
- package/src/d1/splitter.ts +161 -0
- package/src/d1/{types.tsx → types.ts} +1 -0
- package/src/d1/utils.ts +2 -1
- package/src/delete.ts +8 -16
- package/src/deployments.ts +333 -42
- package/src/deprecated/index.ts +8 -302
- package/src/dev/dev.tsx +57 -44
- package/src/dev/local.tsx +248 -74
- package/src/dev/remote.tsx +32 -3
- package/src/dev/start-server.ts +81 -66
- package/src/dev/use-esbuild.ts +17 -18
- package/src/dev/validate-dev-props.ts +9 -0
- package/src/{dev-registry.tsx → dev-registry.ts} +2 -1
- package/src/dev.tsx +178 -117
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +21 -17
- package/src/docs/index.ts +97 -0
- package/src/entry.ts +19 -11
- package/src/environment-variables/factory.ts +88 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +298 -0
- package/src/git-client.ts +15 -4
- package/src/{index.tsx → index.ts} +134 -59
- package/src/init.ts +249 -187
- package/src/inspect.ts +16 -1
- package/src/jest.d.ts +4 -0
- package/src/kv/index.ts +15 -17
- package/src/logger.ts +32 -5
- package/src/metrics/metrics-config.ts +3 -3
- package/src/metrics/send-event.ts +6 -1
- package/src/miniflare-cli/assets.ts +64 -28
- package/src/miniflare-cli/index.ts +4 -7
- 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/module-collection.ts +91 -25
- package/src/mtls-certificate/cli.ts +155 -0
- package/src/pages/build.ts +410 -0
- package/src/pages/buildFunctions.ts +140 -0
- package/src/pages/deployment-tails.ts +281 -0
- package/src/pages/deployments.tsx +11 -33
- package/src/pages/{dev.tsx → dev.ts} +147 -139
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +61 -54
- package/src/pages/functions/buildWorker.ts +159 -33
- package/src/pages/functions/tsconfig.json +8 -0
- package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
- package/src/pages/{functions.tsx → functions.ts} +8 -4
- package/src/pages/{index.tsx → index.ts} +11 -3
- package/src/pages/projects.tsx +12 -22
- package/src/pages/prompt-select-project.tsx +31 -0
- package/src/pages/publish.tsx +46 -225
- package/src/pages/types.ts +6 -9
- package/src/pages/upload.tsx +58 -14
- package/src/pages/utils.ts +12 -1
- package/src/parse.ts +23 -1
- package/src/paths.ts +1 -1
- package/src/proxy.ts +5 -0
- package/src/publish/index.ts +20 -16
- package/src/publish/publish.ts +71 -46
- package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
- package/src/queues/cli/commands/consumer/add.ts +24 -24
- package/src/queues/cli/commands/consumer/index.ts +3 -6
- package/src/queues/cli/commands/consumer/remove.ts +11 -18
- package/src/queues/cli/commands/create.ts +8 -8
- package/src/queues/cli/commands/delete.ts +8 -8
- package/src/queues/cli/commands/index.ts +6 -4
- package/src/queues/cli/commands/list.ts +8 -8
- package/src/queues/client.ts +1 -0
- package/src/queues/utils.ts +18 -0
- package/src/r2/helpers.ts +1 -0
- package/src/r2/index.ts +28 -28
- package/src/secret/index.ts +14 -16
- package/src/{sites.tsx → sites.ts} +1 -1
- package/src/tail/createTail.ts +94 -3
- package/src/tail/filters.ts +1 -1
- package/src/tail/index.ts +8 -11
- package/src/tail/printing.ts +15 -0
- package/src/traverse-module-graph.ts +53 -0
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +28 -20
- 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} +123 -82
- package/src/utils/render.ts +93 -0
- package/src/{whoami.tsx → whoami.ts} +37 -71
- package/src/worker.ts +30 -1
- package/src/yargs-types.ts +22 -5
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
- package/templates/checked-fetch.js +9 -3
- package/templates/d1-beta-facade.js +51 -3
- package/templates/facade.d.ts +14 -0
- package/templates/first-party-worker-module-facade.ts +4 -3
- package/templates/format-dev-errors.ts +8 -6
- package/templates/gitignore +1 -0
- 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 +2 -2
- package/templates/middleware/loader-sw.ts +51 -31
- package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
- package/templates/new-worker.ts +3 -0
- package/templates/pages-dev-pipeline.ts +4 -1
- package/templates/pages-shim.ts +4 -1
- package/templates/pages-template-plugin.ts +19 -10
- package/templates/serve-static-assets.ts +17 -14
- package/templates/service-bindings-module-facade.js +1 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +105 -0
- package/templates/tsconfig.json +5 -103
- package/templates/tsconfig.tsbuildinfo +1 -0
- package/wrangler-dist/cli.d.ts +820 -70
- package/wrangler-dist/cli.js +68161 -78780
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/api-devregistry.test.js +0 -56
- package/src/__tests__/d1.test.ts +0 -74
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- package/src/__tests__/pages.test.ts +0 -2387
- package/src/d1/migrations.tsx +0 -446
- package/src/dialogs.tsx +0 -169
- package/src/environment-variables.ts +0 -50
- package/src/pages/build.tsx +0 -270
- package/src/user/env-vars.ts +0 -46
- package/templates/experimental-local-cache-stubs.js +0 -27
- /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
- /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
- /package/src/pages/{hash.tsx → hash.ts} +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { rest } from "msw";
|
|
2
2
|
import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
|
|
3
|
-
import { setMockResponse, unsetAllMocks } from "./helpers/mock-cfetch";
|
|
4
3
|
import { mockConsoleMethods } from "./helpers/mock-console";
|
|
4
|
+
import { msw } from "./helpers/msw";
|
|
5
5
|
import { runInTempDir } from "./helpers/run-in-tmp";
|
|
6
6
|
import { runWrangler } from "./helpers/run-wrangler";
|
|
7
|
+
import type { QueueResponse, PostConsumerBody } from "../queues/client";
|
|
7
8
|
|
|
8
9
|
describe("wrangler", () => {
|
|
9
10
|
mockAccountId();
|
|
@@ -11,10 +12,6 @@ describe("wrangler", () => {
|
|
|
11
12
|
runInTempDir();
|
|
12
13
|
const std = mockConsoleMethods();
|
|
13
14
|
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
unsetAllMocks();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
15
|
describe("queues", () => {
|
|
19
16
|
it("should show the correct help text", async () => {
|
|
20
17
|
await runWrangler("queues --help");
|
|
@@ -31,25 +28,35 @@ describe("wrangler", () => {
|
|
|
31
28
|
wrangler queues consumer Configure Queue Consumers
|
|
32
29
|
|
|
33
30
|
Flags:
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
31
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
32
|
+
-c, --config Path to .toml configuration file [string]
|
|
33
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
34
|
+
-h, --help Show help [boolean]
|
|
35
|
+
-v, --version Show version number [boolean]"
|
|
38
36
|
`);
|
|
39
37
|
});
|
|
40
38
|
|
|
41
39
|
describe("list", () => {
|
|
42
40
|
function mockListRequest(queues: QueueResponse[], page: number) {
|
|
43
41
|
const requests = { count: 0 };
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
42
|
+
msw.use(
|
|
43
|
+
rest.get(
|
|
44
|
+
"*/accounts/:accountId/workers/queues?*",
|
|
45
|
+
async (request, response, context) => {
|
|
46
|
+
requests.count += 1;
|
|
47
|
+
const query = request.url.searchParams;
|
|
48
|
+
expect(Number(query.get("page"))).toEqual(page);
|
|
49
|
+
expect(await request.text()).toEqual("");
|
|
50
|
+
return response.once(
|
|
51
|
+
context.json({
|
|
52
|
+
success: true,
|
|
53
|
+
errors: [],
|
|
54
|
+
messages: [],
|
|
55
|
+
result: queues,
|
|
56
|
+
})
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
)
|
|
53
60
|
);
|
|
54
61
|
return requests;
|
|
55
62
|
}
|
|
@@ -63,10 +70,11 @@ describe("wrangler", () => {
|
|
|
63
70
|
List Queues
|
|
64
71
|
|
|
65
72
|
Flags:
|
|
66
|
-
-
|
|
67
|
-
-
|
|
68
|
-
-
|
|
69
|
-
-
|
|
73
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
74
|
+
-c, --config Path to .toml configuration file [string]
|
|
75
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
76
|
+
-h, --help Show help [boolean]
|
|
77
|
+
-v, --version Show version number [boolean]
|
|
70
78
|
|
|
71
79
|
Options:
|
|
72
80
|
--page Page number for pagination [number]"
|
|
@@ -116,15 +124,30 @@ describe("wrangler", () => {
|
|
|
116
124
|
describe("create", () => {
|
|
117
125
|
function mockCreateRequest(expectedQueueName: string) {
|
|
118
126
|
const requests = { count: 0 };
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
127
|
+
|
|
128
|
+
msw.use(
|
|
129
|
+
rest.post(
|
|
130
|
+
"*/accounts/:accountId/workers/queues",
|
|
131
|
+
async (request, response, context) => {
|
|
132
|
+
requests.count += 1;
|
|
133
|
+
const body = (await request.json()) as {
|
|
134
|
+
queue_name: string;
|
|
135
|
+
};
|
|
136
|
+
expect(body.queue_name).toEqual(expectedQueueName);
|
|
137
|
+
return response.once(
|
|
138
|
+
context.json({
|
|
139
|
+
success: true,
|
|
140
|
+
errors: [],
|
|
141
|
+
messages: [],
|
|
142
|
+
result: {
|
|
143
|
+
queue_name: expectedQueueName,
|
|
144
|
+
created_on: "01-01-2001",
|
|
145
|
+
modified_on: "01-01-2001",
|
|
146
|
+
},
|
|
147
|
+
})
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
)
|
|
128
151
|
);
|
|
129
152
|
return requests;
|
|
130
153
|
}
|
|
@@ -141,10 +164,11 @@ describe("wrangler", () => {
|
|
|
141
164
|
name The name of the queue [string] [required]
|
|
142
165
|
|
|
143
166
|
Flags:
|
|
144
|
-
-
|
|
145
|
-
-
|
|
146
|
-
-
|
|
147
|
-
-
|
|
167
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
168
|
+
-c, --config Path to .toml configuration file [string]
|
|
169
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
170
|
+
-h, --help Show help [boolean]
|
|
171
|
+
-v, --version Show version number [boolean]"
|
|
148
172
|
`);
|
|
149
173
|
});
|
|
150
174
|
|
|
@@ -157,18 +181,67 @@ describe("wrangler", () => {
|
|
|
157
181
|
`);
|
|
158
182
|
expect(requests.count).toEqual(1);
|
|
159
183
|
});
|
|
184
|
+
|
|
185
|
+
it("should show link to dash when not enabled", async () => {
|
|
186
|
+
const queueName = "testQueue";
|
|
187
|
+
msw.use(
|
|
188
|
+
rest.post(
|
|
189
|
+
"*/accounts/:accountId/workers/queues",
|
|
190
|
+
async (request, response, context) => {
|
|
191
|
+
expect(request.params.accountId).toEqual("some-account-id");
|
|
192
|
+
return response.once(
|
|
193
|
+
context.status(403),
|
|
194
|
+
context.json({
|
|
195
|
+
success: false,
|
|
196
|
+
errors: [
|
|
197
|
+
{ message: "workers.api.error.unauthorized", code: 10023 },
|
|
198
|
+
],
|
|
199
|
+
messages: [],
|
|
200
|
+
})
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
)
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
await expect(
|
|
207
|
+
runWrangler(`queues create ${queueName}`)
|
|
208
|
+
).rejects.toThrowError();
|
|
209
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
210
|
+
"Creating queue testQueue.
|
|
211
|
+
Queues is not currently enabled on this account. Go to https://dash.cloudflare.com/some-account-id/workers/queues to enable it.
|
|
212
|
+
|
|
213
|
+
[31mX [41;31m[[41;97mERROR[41;31m][0m [1mA request to the Cloudflare API (/accounts/some-account-id/workers/queues) failed.[0m
|
|
214
|
+
|
|
215
|
+
workers.api.error.unauthorized [code: 10023]
|
|
216
|
+
|
|
217
|
+
If you think this is a bug, please open an issue at:
|
|
218
|
+
[4mhttps://github.com/cloudflare/workers-sdk/issues/new/choose[0m
|
|
219
|
+
|
|
220
|
+
"
|
|
221
|
+
`);
|
|
222
|
+
});
|
|
160
223
|
});
|
|
161
224
|
|
|
162
225
|
describe("delete", () => {
|
|
163
226
|
function mockDeleteRequest(expectedQueueName: string) {
|
|
164
227
|
const requests = { count: 0 };
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
228
|
+
msw.use(
|
|
229
|
+
rest.delete(
|
|
230
|
+
"*/accounts/:accountId/workers/queues/:queueName",
|
|
231
|
+
async (request, response, context) => {
|
|
232
|
+
requests.count += 1;
|
|
233
|
+
expect(request.params.queueName).toEqual(expectedQueueName);
|
|
234
|
+
expect(request.params.accountId).toEqual("some-account-id");
|
|
235
|
+
return response.once(
|
|
236
|
+
context.json({
|
|
237
|
+
success: true,
|
|
238
|
+
errors: [],
|
|
239
|
+
messages: [],
|
|
240
|
+
result: {},
|
|
241
|
+
})
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
)
|
|
172
245
|
);
|
|
173
246
|
return requests;
|
|
174
247
|
}
|
|
@@ -185,10 +258,11 @@ describe("wrangler", () => {
|
|
|
185
258
|
name The name of the queue [string] [required]
|
|
186
259
|
|
|
187
260
|
Flags:
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
261
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
262
|
+
-c, --config Path to .toml configuration file [string]
|
|
263
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
264
|
+
-h, --help Show help [boolean]
|
|
265
|
+
-v, --version Show version number [boolean]"
|
|
192
266
|
`);
|
|
193
267
|
});
|
|
194
268
|
|
|
@@ -218,10 +292,11 @@ describe("wrangler", () => {
|
|
|
218
292
|
wrangler queues consumer remove <queue-name> <script-name> Remove a Queue Consumer
|
|
219
293
|
|
|
220
294
|
Flags:
|
|
221
|
-
-
|
|
222
|
-
-
|
|
223
|
-
-
|
|
224
|
-
-
|
|
295
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
296
|
+
-c, --config Path to .toml configuration file [string]
|
|
297
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
298
|
+
-h, --help Show help [boolean]
|
|
299
|
+
-v, --version Show version number [boolean]"
|
|
225
300
|
`);
|
|
226
301
|
});
|
|
227
302
|
|
|
@@ -231,14 +306,24 @@ describe("wrangler", () => {
|
|
|
231
306
|
expectedBody: PostConsumerBody
|
|
232
307
|
) {
|
|
233
308
|
const requests = { count: 0 };
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
309
|
+
msw.use(
|
|
310
|
+
rest.post(
|
|
311
|
+
"*/accounts/:accountId/workers/queues/:queueName/consumers",
|
|
312
|
+
async (request, response, context) => {
|
|
313
|
+
requests.count += 1;
|
|
314
|
+
expect(request.params.queueName).toEqual(expectedQueueName);
|
|
315
|
+
expect(request.params.accountId).toEqual("some-account-id");
|
|
316
|
+
expect(await request.json()).toEqual(expectedBody);
|
|
317
|
+
return response.once(
|
|
318
|
+
context.json({
|
|
319
|
+
success: true,
|
|
320
|
+
errors: [],
|
|
321
|
+
messages: [],
|
|
322
|
+
result: {},
|
|
323
|
+
})
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
)
|
|
242
327
|
);
|
|
243
328
|
return requests;
|
|
244
329
|
}
|
|
@@ -256,16 +341,18 @@ describe("wrangler", () => {
|
|
|
256
341
|
script-name Name of the consumer script [string] [required]
|
|
257
342
|
|
|
258
343
|
Flags:
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
-
|
|
262
|
-
-
|
|
344
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
345
|
+
-c, --config Path to .toml configuration file [string]
|
|
346
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
347
|
+
-h, --help Show help [boolean]
|
|
348
|
+
-v, --version Show version number [boolean]
|
|
263
349
|
|
|
264
350
|
Options:
|
|
265
351
|
--batch-size Maximum number of messages per batch [number]
|
|
266
352
|
--batch-timeout Maximum number of seconds to wait to fill a batch with messages [number]
|
|
267
353
|
--message-retries Maximum number of retries for each message [number]
|
|
268
|
-
--dead-letter-queue Queue to send messages that failed to be consumed [string]
|
|
354
|
+
--dead-letter-queue Queue to send messages that failed to be consumed [string]
|
|
355
|
+
--max-concurrency The maximum number of concurrent consumer Worker invocations. Must be a positive integer [number]"
|
|
269
356
|
`);
|
|
270
357
|
});
|
|
271
358
|
|
|
@@ -277,6 +364,7 @@ describe("wrangler", () => {
|
|
|
277
364
|
batch_size: undefined,
|
|
278
365
|
max_retries: undefined,
|
|
279
366
|
max_wait_time_ms: undefined,
|
|
367
|
+
max_concurrency: undefined,
|
|
280
368
|
},
|
|
281
369
|
dead_letter_queue: undefined,
|
|
282
370
|
};
|
|
@@ -296,19 +384,64 @@ describe("wrangler", () => {
|
|
|
296
384
|
batch_size: 20,
|
|
297
385
|
max_retries: 3,
|
|
298
386
|
max_wait_time_ms: 10 * 1000,
|
|
387
|
+
max_concurrency: 3,
|
|
299
388
|
},
|
|
300
389
|
dead_letter_queue: "myDLQ",
|
|
301
390
|
};
|
|
302
391
|
mockPostRequest("testQueue", expectedBody);
|
|
303
392
|
|
|
304
393
|
await runWrangler(
|
|
305
|
-
"queues consumer add testQueue testScript --env myEnv --batch-size 20 --batch-timeout 10 --message-retries 3 --dead-letter-queue myDLQ"
|
|
394
|
+
"queues consumer add testQueue testScript --env myEnv --batch-size 20 --batch-timeout 10 --message-retries 3 --max-concurrency 3 --dead-letter-queue myDLQ"
|
|
306
395
|
);
|
|
307
396
|
expect(std.out).toMatchInlineSnapshot(`
|
|
308
397
|
"Adding consumer to queue testQueue.
|
|
309
398
|
Added consumer to queue testQueue."
|
|
310
399
|
`);
|
|
311
400
|
});
|
|
401
|
+
|
|
402
|
+
it("should show link to dash when not enabled", async () => {
|
|
403
|
+
const queueName = "testQueue";
|
|
404
|
+
msw.use(
|
|
405
|
+
rest.post(
|
|
406
|
+
"*/accounts/:accountId/workers/queues/:queueName/consumers",
|
|
407
|
+
async (request, response, context) => {
|
|
408
|
+
expect(request.params.queueName).toEqual(queueName);
|
|
409
|
+
expect(request.params.accountId).toEqual("some-account-id");
|
|
410
|
+
return response.once(
|
|
411
|
+
context.status(403),
|
|
412
|
+
context.json({
|
|
413
|
+
success: false,
|
|
414
|
+
errors: [
|
|
415
|
+
{
|
|
416
|
+
code: 10023,
|
|
417
|
+
message: "workers.api.error.unauthorized",
|
|
418
|
+
},
|
|
419
|
+
],
|
|
420
|
+
messages: [],
|
|
421
|
+
result: {},
|
|
422
|
+
})
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
)
|
|
426
|
+
);
|
|
427
|
+
|
|
428
|
+
await expect(
|
|
429
|
+
runWrangler(`queues consumer add ${queueName} testScript`)
|
|
430
|
+
).rejects.toThrowError();
|
|
431
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
432
|
+
"Adding consumer to queue testQueue.
|
|
433
|
+
Queues is not currently enabled on this account. Go to https://dash.cloudflare.com/some-account-id/workers/queues to enable it.
|
|
434
|
+
|
|
435
|
+
[31mX [41;31m[[41;97mERROR[41;31m][0m [1mA request to the Cloudflare API (/accounts/some-account-id/workers/queues/testQueue/consumers) failed.[0m
|
|
436
|
+
|
|
437
|
+
workers.api.error.unauthorized [code: 10023]
|
|
438
|
+
|
|
439
|
+
If you think this is a bug, please open an issue at:
|
|
440
|
+
[4mhttps://github.com/cloudflare/workers-sdk/issues/new/choose[0m
|
|
441
|
+
|
|
442
|
+
"
|
|
443
|
+
`);
|
|
444
|
+
});
|
|
312
445
|
});
|
|
313
446
|
|
|
314
447
|
describe("delete", () => {
|
|
@@ -317,13 +450,32 @@ describe("wrangler", () => {
|
|
|
317
450
|
expectedScriptName: string,
|
|
318
451
|
expectedEnvName?: string
|
|
319
452
|
) {
|
|
320
|
-
|
|
453
|
+
const requests = { count: 0 };
|
|
454
|
+
let resource = `accounts/:accountId/workers/queues/:expectedQueueName/consumers/:expectedScriptName`;
|
|
321
455
|
if (expectedEnvName !== undefined) {
|
|
322
|
-
resource += `/environments
|
|
456
|
+
resource += `/environments/:expectedEnvName`;
|
|
323
457
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
458
|
+
msw.use(
|
|
459
|
+
rest.delete(`*/${resource}`, async (request, response, context) => {
|
|
460
|
+
requests.count++;
|
|
461
|
+
expect(request.params.accountId).toBe("some-account-id");
|
|
462
|
+
expect(request.params.expectedQueueName).toBe(expectedQueueName);
|
|
463
|
+
expect(request.params.expectedScriptName).toBe(
|
|
464
|
+
expectedScriptName
|
|
465
|
+
);
|
|
466
|
+
return response.once(
|
|
467
|
+
context.status(200),
|
|
468
|
+
context.json({
|
|
469
|
+
success: true,
|
|
470
|
+
errors: [],
|
|
471
|
+
messages: [],
|
|
472
|
+
result: {},
|
|
473
|
+
})
|
|
474
|
+
);
|
|
475
|
+
})
|
|
476
|
+
);
|
|
477
|
+
|
|
478
|
+
return requests;
|
|
327
479
|
}
|
|
328
480
|
|
|
329
481
|
it("should show the correct help text", async () => {
|
|
@@ -339,16 +491,19 @@ describe("wrangler", () => {
|
|
|
339
491
|
script-name Name of the consumer script [string] [required]
|
|
340
492
|
|
|
341
493
|
Flags:
|
|
342
|
-
-
|
|
343
|
-
-
|
|
344
|
-
-
|
|
345
|
-
-
|
|
494
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
495
|
+
-c, --config Path to .toml configuration file [string]
|
|
496
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
497
|
+
-h, --help Show help [boolean]
|
|
498
|
+
-v, --version Show version number [boolean]"
|
|
346
499
|
`);
|
|
347
500
|
});
|
|
348
501
|
|
|
349
502
|
it("should delete a consumer with no --env", async () => {
|
|
350
|
-
mockDeleteRequest("testQueue", "testScript");
|
|
503
|
+
const requests = mockDeleteRequest("testQueue", "testScript");
|
|
351
504
|
await runWrangler("queues consumer remove testQueue testScript");
|
|
505
|
+
|
|
506
|
+
expect(requests.count).toEqual(1);
|
|
352
507
|
expect(std.out).toMatchInlineSnapshot(`
|
|
353
508
|
"Removing consumer from queue testQueue.
|
|
354
509
|
Removed consumer from queue testQueue."
|
|
@@ -356,10 +511,16 @@ describe("wrangler", () => {
|
|
|
356
511
|
});
|
|
357
512
|
|
|
358
513
|
it("should delete a consumer with --env", async () => {
|
|
359
|
-
mockDeleteRequest(
|
|
514
|
+
const requests = mockDeleteRequest(
|
|
515
|
+
"testQueue",
|
|
516
|
+
"testScript",
|
|
517
|
+
"myEnv"
|
|
518
|
+
);
|
|
360
519
|
await runWrangler(
|
|
361
520
|
"queues consumer remove testQueue testScript --env myEnv"
|
|
362
521
|
);
|
|
522
|
+
|
|
523
|
+
expect(requests.count).toEqual(1);
|
|
363
524
|
expect(std.out).toMatchInlineSnapshot(`
|
|
364
525
|
"Removing consumer from queue testQueue.
|
|
365
526
|
Removed consumer from queue testQueue."
|
package/src/__tests__/r2.test.ts
CHANGED
|
@@ -4,7 +4,7 @@ import prettyBytes from "pretty-bytes";
|
|
|
4
4
|
import { MAX_UPLOAD_SIZE } from "../r2/constants";
|
|
5
5
|
import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
|
|
6
6
|
import { mockConsoleMethods } from "./helpers/mock-console";
|
|
7
|
-
import { msw, mswSuccessR2handlers } from "./helpers/msw";
|
|
7
|
+
import { createFetchResult, msw, mswSuccessR2handlers } from "./helpers/msw";
|
|
8
8
|
import { runInTempDir } from "./helpers/run-in-tmp";
|
|
9
9
|
import { runWrangler } from "./helpers/run-wrangler";
|
|
10
10
|
import type { R2BucketInfo } from "../r2/helpers";
|
|
@@ -39,10 +39,11 @@ describe("r2", () => {
|
|
|
39
39
|
wrangler r2 bucket delete <name> Delete an R2 bucket
|
|
40
40
|
|
|
41
41
|
Flags:
|
|
42
|
-
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
42
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
43
|
+
-c, --config Path to .toml configuration file [string]
|
|
44
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
45
|
+
-h, --help Show help [boolean]
|
|
46
|
+
-v, --version Show version number [boolean]"
|
|
46
47
|
`);
|
|
47
48
|
});
|
|
48
49
|
|
|
@@ -60,12 +61,8 @@ describe("r2", () => {
|
|
|
60
61
|
expect(accountId).toEqual("some-account-id");
|
|
61
62
|
expect(await request.text()).toEqual("");
|
|
62
63
|
return response.once(
|
|
63
|
-
context.
|
|
64
|
-
|
|
65
|
-
success: true,
|
|
66
|
-
errors: [],
|
|
67
|
-
messages: [],
|
|
68
|
-
result: {
|
|
64
|
+
context.json(
|
|
65
|
+
createFetchResult({
|
|
69
66
|
buckets: [
|
|
70
67
|
{
|
|
71
68
|
name: "bucket-1-local-once",
|
|
@@ -76,8 +73,8 @@ describe("r2", () => {
|
|
|
76
73
|
creation_date: "01-01-2001",
|
|
77
74
|
},
|
|
78
75
|
],
|
|
79
|
-
}
|
|
80
|
-
|
|
76
|
+
})
|
|
77
|
+
)
|
|
81
78
|
);
|
|
82
79
|
}
|
|
83
80
|
)
|
|
@@ -107,10 +104,11 @@ describe("r2", () => {
|
|
|
107
104
|
name The name of the new bucket [string] [required]
|
|
108
105
|
|
|
109
106
|
Flags:
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
107
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
108
|
+
-c, --config Path to .toml configuration file [string]
|
|
109
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
110
|
+
-h, --help Show help [boolean]
|
|
111
|
+
-v, --version Show version number [boolean]"
|
|
114
112
|
`);
|
|
115
113
|
expect(std.err).toMatchInlineSnapshot(`
|
|
116
114
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mNot enough non-option arguments: got 0, need at least 1[0m
|
|
@@ -135,10 +133,11 @@ describe("r2", () => {
|
|
|
135
133
|
name The name of the new bucket [string] [required]
|
|
136
134
|
|
|
137
135
|
Flags:
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
-
|
|
136
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
137
|
+
-c, --config Path to .toml configuration file [string]
|
|
138
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
139
|
+
-h, --help Show help [boolean]
|
|
140
|
+
-v, --version Show version number [boolean]"
|
|
142
141
|
`);
|
|
143
142
|
expect(std.err).toMatchInlineSnapshot(`
|
|
144
143
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mUnknown arguments: def, ghi[0m
|
|
@@ -155,15 +154,7 @@ describe("r2", () => {
|
|
|
155
154
|
const { accountId } = request.params;
|
|
156
155
|
expect(accountId).toEqual("some-account-id");
|
|
157
156
|
expect(await request.json()).toEqual({ name: "testBucket" });
|
|
158
|
-
response.once(
|
|
159
|
-
context.status(200),
|
|
160
|
-
context.json({
|
|
161
|
-
success: true,
|
|
162
|
-
errors: [],
|
|
163
|
-
messages: [],
|
|
164
|
-
result: {},
|
|
165
|
-
})
|
|
166
|
-
);
|
|
157
|
+
return response.once(context.json(createFetchResult({})));
|
|
167
158
|
}
|
|
168
159
|
)
|
|
169
160
|
);
|
|
@@ -192,10 +183,11 @@ describe("r2", () => {
|
|
|
192
183
|
name The name of the bucket to delete [string] [required]
|
|
193
184
|
|
|
194
185
|
Flags:
|
|
195
|
-
-
|
|
196
|
-
-
|
|
197
|
-
-
|
|
198
|
-
-
|
|
186
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
187
|
+
-c, --config Path to .toml configuration file [string]
|
|
188
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
189
|
+
-h, --help Show help [boolean]
|
|
190
|
+
-v, --version Show version number [boolean]"
|
|
199
191
|
`);
|
|
200
192
|
expect(std.err).toMatchInlineSnapshot(`
|
|
201
193
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mNot enough non-option arguments: got 0, need at least 1[0m
|
|
@@ -220,10 +212,11 @@ describe("r2", () => {
|
|
|
220
212
|
name The name of the bucket to delete [string] [required]
|
|
221
213
|
|
|
222
214
|
Flags:
|
|
223
|
-
-
|
|
224
|
-
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
215
|
+
-j, --experimental-json-config Experimental: Support wrangler.json [boolean]
|
|
216
|
+
-c, --config Path to .toml configuration file [string]
|
|
217
|
+
-e, --env Environment to use for operations and .env files [string]
|
|
218
|
+
-h, --help Show help [boolean]
|
|
219
|
+
-v, --version Show version number [boolean]"
|
|
227
220
|
`);
|
|
228
221
|
expect(std.err).toMatchInlineSnapshot(`
|
|
229
222
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mUnknown arguments: def, ghi[0m
|
|
@@ -245,15 +238,7 @@ describe("r2", () => {
|
|
|
245
238
|
"Bearer some-api-token"
|
|
246
239
|
);
|
|
247
240
|
|
|
248
|
-
return response.once(
|
|
249
|
-
context.status(200),
|
|
250
|
-
context.json({
|
|
251
|
-
success: true,
|
|
252
|
-
errors: [],
|
|
253
|
-
messages: [],
|
|
254
|
-
result: null,
|
|
255
|
-
})
|
|
256
|
-
);
|
|
241
|
+
return response.once(context.json(createFetchResult(null)));
|
|
257
242
|
}
|
|
258
243
|
)
|
|
259
244
|
);
|
|
@@ -332,18 +317,14 @@ describe("r2", () => {
|
|
|
332
317
|
"host": "api.cloudflare.com",
|
|
333
318
|
}
|
|
334
319
|
`);
|
|
335
|
-
response.once(
|
|
336
|
-
context.
|
|
337
|
-
|
|
338
|
-
success: true,
|
|
339
|
-
errors: [],
|
|
340
|
-
messages: [],
|
|
341
|
-
result: {
|
|
320
|
+
return response.once(
|
|
321
|
+
context.json(
|
|
322
|
+
createFetchResult({
|
|
342
323
|
accountId: "some-account-id",
|
|
343
324
|
bucketName: "bucketName-object-test",
|
|
344
325
|
objectName: "wormhole-img.png",
|
|
345
|
-
}
|
|
346
|
-
|
|
326
|
+
})
|
|
327
|
+
)
|
|
347
328
|
);
|
|
348
329
|
}
|
|
349
330
|
)
|