wrangler 0.0.0-e7a0cd5b → 0.0.0-e87ad068
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 +254 -128
- package/package.json +27 -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 +797 -98
- package/src/__tests__/constellation.test.ts +371 -0
- 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 +257 -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 -56
- package/src/__tests__/dev.test.tsx +198 -90
- package/src/__tests__/generate.test.ts +12 -10
- 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 +128 -27
- 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 +92 -72
- package/src/__tests__/init.test.ts +1033 -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 +589 -0
- package/src/__tests__/pages/deployment-list.test.ts +80 -0
- package/src/__tests__/pages/functions-build.test.ts +529 -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 +957 -0
- package/src/__tests__/parse.test.ts +106 -0
- package/src/__tests__/publish.test.ts +2227 -1005
- package/src/__tests__/pubsub.test.ts +226 -100
- package/src/__tests__/queues.test.ts +238 -77
- package/src/__tests__/r2.test.ts +55 -57
- package/src/__tests__/secret.test.ts +179 -130
- package/src/__tests__/tail.test.ts +313 -113
- 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 +43 -26
- package/src/__tests__/unstableDev.test.ts +61 -0
- 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 +180 -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 +80 -0
- package/src/api/pages/index.ts +5 -0
- package/src/api/pages/publish.tsx +371 -0
- package/src/bundle.ts +315 -148
- package/src/cfetch/index.ts +0 -2
- package/src/cfetch/internal.ts +33 -33
- package/src/cli.ts +4 -4
- package/src/config/config.ts +14 -7
- package/src/config/environment.ts +120 -24
- package/src/config/index.ts +117 -35
- package/src/config/validation-helpers.ts +1 -1
- package/src/config/validation.ts +430 -19
- package/src/constellation/createProject.tsx +51 -0
- package/src/constellation/deleteProject.ts +51 -0
- package/src/constellation/deleteProjectModel.ts +76 -0
- package/src/constellation/index.ts +75 -0
- package/src/constellation/listCatalog.tsx +35 -0
- package/src/constellation/listModel.tsx +49 -0
- package/src/constellation/listProject.tsx +28 -0
- package/src/constellation/listRuntime.tsx +28 -0
- package/src/constellation/options.ts +17 -0
- package/src/constellation/types.ts +17 -0
- package/src/constellation/uploadModel.tsx +84 -0
- package/src/constellation/utils.ts +90 -0
- package/src/create-worker-preview.ts +19 -8
- package/src/create-worker-upload-form.ts +81 -18
- package/src/d1/backups.tsx +47 -46
- package/src/d1/constants.ts +5 -0
- package/src/d1/create.tsx +85 -37
- package/src/d1/{delete.tsx → delete.ts} +12 -15
- package/src/d1/execute.tsx +228 -156
- package/src/d1/index.ts +31 -7
- package/src/d1/list.tsx +27 -13
- package/src/d1/migrations/apply.tsx +235 -0
- package/src/d1/migrations/create.tsx +79 -0
- package/src/d1/migrations/helpers.ts +171 -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 +12 -2
- package/src/d1/splitter.ts +161 -0
- package/src/d1/types.ts +32 -0
- package/src/d1/utils.ts +12 -2
- package/src/delete.ts +8 -16
- package/src/deployments.ts +340 -46
- package/src/deprecated/index.ts +8 -302
- package/src/dev/dev.tsx +66 -46
- package/src/dev/local.tsx +339 -104
- package/src/dev/remote.tsx +36 -3
- package/src/dev/start-server.ts +146 -101
- package/src/dev/use-esbuild.ts +82 -56
- package/src/dev/validate-dev-props.ts +9 -0
- package/src/{dev-registry.tsx → dev-registry.ts} +13 -1
- package/src/dev.tsx +202 -125
- package/src/dialogs.ts +136 -0
- package/src/dispatch-namespace.ts +21 -17
- package/src/docs/helpers.ts +50 -0
- package/src/docs/index.ts +54 -0
- package/src/entry.ts +26 -11
- package/src/environment-variables/factory.ts +89 -0
- package/src/environment-variables/misc-variables.ts +30 -0
- package/src/generate/index.ts +303 -0
- package/src/git-client.ts +15 -4
- package/src/{index.tsx → index.ts} +148 -63
- package/src/init.ts +301 -197
- package/src/inspect.ts +122 -6
- package/src/jest.d.ts +4 -0
- package/src/kv/helpers.ts +7 -4
- package/src/kv/index.ts +15 -17
- package/src/logger.ts +36 -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 +6 -9
- 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 +92 -26
- package/src/mtls-certificate/cli.ts +155 -0
- package/src/pages/build.ts +423 -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} +192 -126
- package/src/pages/errors.ts +1 -0
- package/src/pages/functions/buildPlugin.ts +73 -69
- package/src/pages/functions/buildWorker.ts +342 -117
- 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 +45 -214
- package/src/pages/types.ts +6 -9
- package/src/pages/upload.tsx +58 -14
- package/src/pages/utils.ts +14 -3
- 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 +81 -48
- 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/constants.ts +4 -0
- package/src/r2/helpers.ts +1 -0
- package/src/r2/index.ts +40 -28
- package/src/secret/index.ts +18 -17
- package/src/{sites.tsx → sites.ts} +165 -53
- package/src/tail/createTail.ts +103 -3
- package/src/tail/filters.ts +1 -1
- package/src/tail/index.ts +8 -11
- package/src/tail/printing.ts +27 -0
- package/src/traverse-module-graph.ts +54 -0
- package/src/tsconfig-sanity.ts +16 -0
- package/src/type-generation.ts +85 -57
- 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} +124 -82
- package/src/utils/render.ts +93 -0
- package/src/{whoami.tsx → whoami.ts} +37 -71
- package/src/worker.ts +61 -3
- 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 +95 -25
- 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-dev-util.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 +902 -77
- package/wrangler-dist/cli.js +131685 -140615
- package/wrangler-dist/wasm-sync.wasm +0 -0
- package/src/__tests__/api-devregistry.test.js +0 -57
- package/src/__tests__/d1.test.ts +0 -72
- package/src/__tests__/dialogs.test.tsx +0 -40
- package/src/__tests__/helpers/mock-cfetch.ts +0 -333
- package/src/__tests__/pages.test.ts +0 -2223
- package/src/d1/types.tsx +0 -14
- package/src/dialogs.tsx +0 -163
- package/src/environment-variables.ts +0 -50
- package/src/pages/build.tsx +0 -238
- 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");
|
|
@@ -22,7 +19,7 @@ describe("wrangler", () => {
|
|
|
22
19
|
expect(std.out).toMatchInlineSnapshot(`
|
|
23
20
|
"wrangler queues
|
|
24
21
|
|
|
25
|
-
|
|
22
|
+
🇶 Configure Workers Queues
|
|
26
23
|
|
|
27
24
|
Commands:
|
|
28
25
|
wrangler queues list List Queues
|
|
@@ -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
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import { rest } from "msw";
|
|
3
|
+
import prettyBytes from "pretty-bytes";
|
|
4
|
+
import { MAX_UPLOAD_SIZE } from "../r2/constants";
|
|
3
5
|
import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
|
|
4
6
|
import { mockConsoleMethods } from "./helpers/mock-console";
|
|
5
|
-
import { msw, mswSuccessR2handlers } from "./helpers/msw";
|
|
7
|
+
import { createFetchResult, msw, mswSuccessR2handlers } from "./helpers/msw";
|
|
6
8
|
import { runInTempDir } from "./helpers/run-in-tmp";
|
|
7
9
|
import { runWrangler } from "./helpers/run-wrangler";
|
|
8
10
|
import type { R2BucketInfo } from "../r2/helpers";
|
|
@@ -37,10 +39,11 @@ describe("r2", () => {
|
|
|
37
39
|
wrangler r2 bucket delete <name> Delete an R2 bucket
|
|
38
40
|
|
|
39
41
|
Flags:
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
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]"
|
|
44
47
|
`);
|
|
45
48
|
});
|
|
46
49
|
|
|
@@ -58,12 +61,8 @@ describe("r2", () => {
|
|
|
58
61
|
expect(accountId).toEqual("some-account-id");
|
|
59
62
|
expect(await request.text()).toEqual("");
|
|
60
63
|
return response.once(
|
|
61
|
-
context.
|
|
62
|
-
|
|
63
|
-
success: true,
|
|
64
|
-
errors: [],
|
|
65
|
-
messages: [],
|
|
66
|
-
result: {
|
|
64
|
+
context.json(
|
|
65
|
+
createFetchResult({
|
|
67
66
|
buckets: [
|
|
68
67
|
{
|
|
69
68
|
name: "bucket-1-local-once",
|
|
@@ -74,8 +73,8 @@ describe("r2", () => {
|
|
|
74
73
|
creation_date: "01-01-2001",
|
|
75
74
|
},
|
|
76
75
|
],
|
|
77
|
-
}
|
|
78
|
-
|
|
76
|
+
})
|
|
77
|
+
)
|
|
79
78
|
);
|
|
80
79
|
}
|
|
81
80
|
)
|
|
@@ -105,10 +104,11 @@ describe("r2", () => {
|
|
|
105
104
|
name The name of the new bucket [string] [required]
|
|
106
105
|
|
|
107
106
|
Flags:
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
111
|
-
-
|
|
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]"
|
|
112
112
|
`);
|
|
113
113
|
expect(std.err).toMatchInlineSnapshot(`
|
|
114
114
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mNot enough non-option arguments: got 0, need at least 1[0m
|
|
@@ -133,10 +133,11 @@ describe("r2", () => {
|
|
|
133
133
|
name The name of the new bucket [string] [required]
|
|
134
134
|
|
|
135
135
|
Flags:
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
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]"
|
|
140
141
|
`);
|
|
141
142
|
expect(std.err).toMatchInlineSnapshot(`
|
|
142
143
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mUnknown arguments: def, ghi[0m
|
|
@@ -153,15 +154,7 @@ describe("r2", () => {
|
|
|
153
154
|
const { accountId } = request.params;
|
|
154
155
|
expect(accountId).toEqual("some-account-id");
|
|
155
156
|
expect(await request.json()).toEqual({ name: "testBucket" });
|
|
156
|
-
response.once(
|
|
157
|
-
context.status(200),
|
|
158
|
-
context.json({
|
|
159
|
-
success: true,
|
|
160
|
-
errors: [],
|
|
161
|
-
messages: [],
|
|
162
|
-
result: {},
|
|
163
|
-
})
|
|
164
|
-
);
|
|
157
|
+
return response.once(context.json(createFetchResult({})));
|
|
165
158
|
}
|
|
166
159
|
)
|
|
167
160
|
);
|
|
@@ -190,10 +183,11 @@ describe("r2", () => {
|
|
|
190
183
|
name The name of the bucket to delete [string] [required]
|
|
191
184
|
|
|
192
185
|
Flags:
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
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]"
|
|
197
191
|
`);
|
|
198
192
|
expect(std.err).toMatchInlineSnapshot(`
|
|
199
193
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mNot enough non-option arguments: got 0, need at least 1[0m
|
|
@@ -218,10 +212,11 @@ describe("r2", () => {
|
|
|
218
212
|
name The name of the bucket to delete [string] [required]
|
|
219
213
|
|
|
220
214
|
Flags:
|
|
221
|
-
-
|
|
222
|
-
-
|
|
223
|
-
-
|
|
224
|
-
-
|
|
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]"
|
|
225
220
|
`);
|
|
226
221
|
expect(std.err).toMatchInlineSnapshot(`
|
|
227
222
|
"[31mX [41;31m[[41;97mERROR[41;31m][0m [1mUnknown arguments: def, ghi[0m
|
|
@@ -243,15 +238,7 @@ describe("r2", () => {
|
|
|
243
238
|
"Bearer some-api-token"
|
|
244
239
|
);
|
|
245
240
|
|
|
246
|
-
return response.once(
|
|
247
|
-
context.status(200),
|
|
248
|
-
context.json({
|
|
249
|
-
success: true,
|
|
250
|
-
errors: [],
|
|
251
|
-
messages: [],
|
|
252
|
-
result: null,
|
|
253
|
-
})
|
|
254
|
-
);
|
|
241
|
+
return response.once(context.json(createFetchResult(null)));
|
|
255
242
|
}
|
|
256
243
|
)
|
|
257
244
|
);
|
|
@@ -276,7 +263,7 @@ describe("r2", () => {
|
|
|
276
263
|
`);
|
|
277
264
|
});
|
|
278
265
|
|
|
279
|
-
it("should upload R2 object
|
|
266
|
+
it("should upload R2 object to bucket", async () => {
|
|
280
267
|
fs.writeFileSync("wormhole-img.png", "passageway");
|
|
281
268
|
await runWrangler(
|
|
282
269
|
`r2 object put bucketName-object-test/wormhole-img.png --file ./wormhole-img.png`
|
|
@@ -288,6 +275,21 @@ describe("r2", () => {
|
|
|
288
275
|
`);
|
|
289
276
|
});
|
|
290
277
|
|
|
278
|
+
it("should fail to upload R2 object to bucket if too large", async () => {
|
|
279
|
+
const TOO_BIG_FILE_SIZE = MAX_UPLOAD_SIZE + 1024 * 1024;
|
|
280
|
+
fs.writeFileSync("wormhole-img.png", Buffer.alloc(TOO_BIG_FILE_SIZE));
|
|
281
|
+
await expect(
|
|
282
|
+
runWrangler(
|
|
283
|
+
`r2 object put bucketName-object-test/wormhole-img.png --file ./wormhole-img.png`
|
|
284
|
+
)
|
|
285
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(`
|
|
286
|
+
"Error: Wrangler only supports uploading files up to ${prettyBytes(
|
|
287
|
+
MAX_UPLOAD_SIZE
|
|
288
|
+
)} in size
|
|
289
|
+
wormhole-img.png is ${prettyBytes(TOO_BIG_FILE_SIZE)} in size"
|
|
290
|
+
`);
|
|
291
|
+
});
|
|
292
|
+
|
|
291
293
|
it("should pass all fetch option flags into requestInit & check request inputs", async () => {
|
|
292
294
|
msw.use(
|
|
293
295
|
rest.put(
|
|
@@ -315,18 +317,14 @@ describe("r2", () => {
|
|
|
315
317
|
"host": "api.cloudflare.com",
|
|
316
318
|
}
|
|
317
319
|
`);
|
|
318
|
-
response.once(
|
|
319
|
-
context.
|
|
320
|
-
|
|
321
|
-
success: true,
|
|
322
|
-
errors: [],
|
|
323
|
-
messages: [],
|
|
324
|
-
result: {
|
|
320
|
+
return response.once(
|
|
321
|
+
context.json(
|
|
322
|
+
createFetchResult({
|
|
325
323
|
accountId: "some-account-id",
|
|
326
324
|
bucketName: "bucketName-object-test",
|
|
327
325
|
objectName: "wormhole-img.png",
|
|
328
|
-
}
|
|
329
|
-
|
|
326
|
+
})
|
|
327
|
+
)
|
|
330
328
|
);
|
|
331
329
|
}
|
|
332
330
|
)
|