wrangler 0.0.0-e5d3690 → 0.0.0-e88a54e
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 +2 -2
- package/miniflare-dist/index.mjs +79 -0
- package/miniflare-dist/index.mjs.map +7 -0
- package/package.json +32 -16
- package/pages/functions/buildWorker.ts +1 -1
- package/pages/functions/filepath-routing.test.ts +212 -28
- package/pages/functions/filepath-routing.ts +83 -130
- package/pages/functions/routes.ts +11 -18
- package/pages/functions/template-worker.ts +3 -9
- package/src/__tests__/configuration.test.ts +2796 -0
- package/src/__tests__/dev.test.tsx +488 -59
- package/src/__tests__/dev2.test.tsx +154 -0
- package/src/__tests__/guess-worker-format.test.ts +58 -0
- package/src/__tests__/{clipboardy-mock.js → helpers/clipboardy-mock.js} +0 -0
- package/src/__tests__/helpers/cmd-shim.d.ts +11 -0
- package/src/__tests__/helpers/faye-websocket.d.ts +6 -0
- package/src/__tests__/helpers/mock-account-id.ts +48 -0
- package/src/__tests__/helpers/mock-bin.ts +36 -0
- package/src/__tests__/{mock-cfetch.ts → helpers/mock-cfetch.ts} +48 -14
- package/src/__tests__/helpers/mock-console.ts +70 -0
- package/src/__tests__/{mock-dialogs.ts → helpers/mock-dialogs.ts} +1 -1
- package/src/__tests__/helpers/mock-kv.ts +33 -0
- package/src/__tests__/helpers/mock-stdin.ts +103 -0
- package/src/__tests__/helpers/mock-web-socket.ts +29 -0
- package/src/__tests__/helpers/run-in-tmp.ts +32 -0
- package/src/__tests__/helpers/run-wrangler.ts +16 -0
- package/src/__tests__/helpers/write-wrangler-toml.ts +17 -0
- package/src/__tests__/https-options.test.ts +127 -0
- package/src/__tests__/index.test.ts +777 -75
- package/src/__tests__/jest.setup.ts +53 -6
- package/src/__tests__/kv.test.ts +674 -491
- package/src/__tests__/logout.test.ts +52 -0
- package/src/__tests__/package-manager.test.ts +206 -0
- package/src/__tests__/pages.test.ts +44 -0
- package/src/__tests__/parse.test.ts +322 -0
- package/src/__tests__/publish.test.ts +2327 -295
- package/src/__tests__/r2.test.ts +198 -0
- package/src/__tests__/route.test.ts +45 -0
- package/src/__tests__/secret.test.ts +425 -0
- package/src/__tests__/sentry.test.ts +146 -0
- package/src/__tests__/tail.test.ts +564 -0
- package/src/__tests__/whoami.test.tsx +26 -56
- package/src/bundle.ts +142 -0
- package/src/cfetch/index.ts +13 -19
- package/src/cfetch/internal.ts +91 -23
- package/src/cli.ts +10 -0
- package/src/config/README.md +107 -0
- package/src/config/config.ts +218 -0
- package/src/config/diagnostics.ts +80 -0
- package/src/config/environment.ts +366 -0
- package/src/config/index.ts +62 -0
- package/src/config/validation-helpers.ts +486 -0
- package/src/config/validation.ts +1090 -0
- package/src/{api/preview.ts → create-worker-preview.ts} +61 -23
- package/src/create-worker-upload-form.ts +217 -0
- package/src/dev/dev.tsx +364 -0
- package/src/dev/local.tsx +232 -0
- package/src/dev/remote.tsx +203 -0
- package/src/dev/use-esbuild.ts +100 -0
- package/src/dialogs.tsx +2 -2
- package/src/entry.ts +208 -0
- package/src/environment-variables.ts +33 -0
- package/src/https-options.ts +122 -0
- package/src/index.tsx +1175 -777
- package/src/inspect.ts +95 -21
- package/src/{kv.tsx → kv.ts} +104 -61
- package/src/miniflare-cli/README.md +30 -0
- package/src/miniflare-cli/enum-keys.ts +17 -0
- package/src/miniflare-cli/index.ts +37 -0
- package/src/module-collection.ts +229 -35
- package/src/open-in-browser.ts +25 -0
- package/src/package-manager.ts +126 -0
- package/src/pages.tsx +39 -32
- package/src/parse.ts +183 -0
- package/src/paths.ts +26 -0
- package/src/proxy.ts +177 -39
- package/src/publish.ts +274 -309
- package/src/r2.ts +50 -0
- package/src/reporting.ts +131 -0
- package/src/selfsigned.d.ts +29 -0
- package/src/sites.tsx +95 -58
- package/src/tail/filters.ts +279 -0
- package/src/tail/index.ts +299 -0
- package/src/tail/printing.ts +62 -0
- package/src/user.tsx +233 -134
- package/src/{api/worker.ts → worker.ts} +45 -37
- package/templates/new-worker.js +15 -0
- package/templates/new-worker.ts +15 -0
- package/{static-asset-facade.js → templates/static-asset-facade.js} +0 -0
- package/templates/tsconfig.json +105 -0
- package/wrangler-dist/cli.js +130352 -112740
- package/wrangler-dist/cli.js.map +3 -3
- package/src/__tests__/run-in-tmp.ts +0 -19
- package/src/__tests__/run-wrangler.ts +0 -32
- package/src/api/form_data.ts +0 -131
- package/src/config.ts +0 -646
- package/src/dev.tsx +0 -779
- package/src/tail.tsx +0 -73
|
@@ -1,78 +1,96 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
1
2
|
import * as fsp from "node:fs/promises";
|
|
2
3
|
import * as TOML from "@iarna/toml";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
4
|
+
import { parseConfigFileTextToJson } from "typescript";
|
|
5
|
+
import { version as wranglerVersion } from "../../package.json";
|
|
6
|
+
import { getPackageManager } from "../package-manager";
|
|
7
|
+
import { mockConsoleMethods } from "./helpers/mock-console";
|
|
8
|
+
import { mockConfirm } from "./helpers/mock-dialogs";
|
|
9
|
+
import { runInTempDir } from "./helpers/run-in-tmp";
|
|
10
|
+
import { runWrangler } from "./helpers/run-wrangler";
|
|
11
|
+
import type { PackageManager } from "../package-manager";
|
|
7
12
|
|
|
8
13
|
describe("wrangler", () => {
|
|
14
|
+
let mockPackageManager: PackageManager;
|
|
9
15
|
runInTempDir();
|
|
10
16
|
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
mockPackageManager = {
|
|
19
|
+
cwd: process.cwd(),
|
|
20
|
+
// @ts-expect-error we're making a fake package manager here
|
|
21
|
+
type: "mockpm",
|
|
22
|
+
addDevDeps: jest.fn(),
|
|
23
|
+
install: jest.fn(),
|
|
24
|
+
};
|
|
25
|
+
(getPackageManager as jest.Mock).mockResolvedValue(mockPackageManager);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const std = mockConsoleMethods();
|
|
29
|
+
|
|
11
30
|
describe("no command", () => {
|
|
12
31
|
it("should display a list of available commands", async () => {
|
|
13
|
-
|
|
32
|
+
await runWrangler();
|
|
14
33
|
|
|
15
|
-
expect(
|
|
34
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
16
35
|
"wrangler
|
|
17
36
|
|
|
18
37
|
Commands:
|
|
19
38
|
wrangler init [name] 📥 Create a wrangler.toml configuration file
|
|
20
39
|
wrangler whoami 🕵️ Retrieve your user info and test your auth config
|
|
21
|
-
wrangler dev
|
|
40
|
+
wrangler dev [script] 👂 Start a local server for developing your worker
|
|
22
41
|
wrangler publish [script] 🆙 Publish your Worker to Cloudflare.
|
|
23
|
-
wrangler tail [name] 🦚 Starts a log tailing session for a
|
|
42
|
+
wrangler tail [name] 🦚 Starts a log tailing session for a published Worker.
|
|
24
43
|
wrangler secret 🤫 Generate a secret that can be referenced in the worker script
|
|
25
44
|
wrangler kv:namespace 🗂️ Interact with your Workers KV Namespaces
|
|
26
45
|
wrangler kv:key 🔑 Individually manage Workers KV key-value pairs
|
|
27
46
|
wrangler kv:bulk 💪 Interact with multiple Workers KV key-value pairs at once
|
|
28
47
|
wrangler pages ⚡️ Configure Cloudflare Pages
|
|
48
|
+
wrangler r2 📦 Interact with an R2 store
|
|
29
49
|
|
|
30
50
|
Flags:
|
|
31
|
-
-c, --config
|
|
32
|
-
-h, --help
|
|
33
|
-
-v, --version
|
|
34
|
-
|
|
35
|
-
Options:
|
|
36
|
-
-l, --local Run on my machine [boolean] [default: false]"
|
|
51
|
+
-c, --config Path to .toml configuration file [string]
|
|
52
|
+
-h, --help Show help [boolean]
|
|
53
|
+
-v, --version Show version number [boolean]
|
|
54
|
+
--legacy-env Use legacy environments [boolean]"
|
|
37
55
|
`);
|
|
38
56
|
|
|
39
|
-
expect(
|
|
57
|
+
expect(std.err).toMatchInlineSnapshot(`""`);
|
|
40
58
|
});
|
|
41
59
|
});
|
|
42
60
|
|
|
43
61
|
describe("invalid command", () => {
|
|
44
62
|
it("should display an error", async () => {
|
|
45
|
-
|
|
63
|
+
await expect(
|
|
64
|
+
runWrangler("invalid-command")
|
|
65
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
66
|
+
`"Unknown command: invalid-command."`
|
|
67
|
+
);
|
|
46
68
|
|
|
47
|
-
expect(
|
|
48
|
-
expect(
|
|
69
|
+
expect(std.out).toMatchInlineSnapshot(`""`);
|
|
70
|
+
expect(std.err).toMatchInlineSnapshot(`
|
|
49
71
|
"wrangler
|
|
50
72
|
|
|
51
73
|
Commands:
|
|
52
74
|
wrangler init [name] 📥 Create a wrangler.toml configuration file
|
|
53
75
|
wrangler whoami 🕵️ Retrieve your user info and test your auth config
|
|
54
|
-
wrangler dev
|
|
76
|
+
wrangler dev [script] 👂 Start a local server for developing your worker
|
|
55
77
|
wrangler publish [script] 🆙 Publish your Worker to Cloudflare.
|
|
56
|
-
wrangler tail [name] 🦚 Starts a log tailing session for a
|
|
78
|
+
wrangler tail [name] 🦚 Starts a log tailing session for a published Worker.
|
|
57
79
|
wrangler secret 🤫 Generate a secret that can be referenced in the worker script
|
|
58
80
|
wrangler kv:namespace 🗂️ Interact with your Workers KV Namespaces
|
|
59
81
|
wrangler kv:key 🔑 Individually manage Workers KV key-value pairs
|
|
60
82
|
wrangler kv:bulk 💪 Interact with multiple Workers KV key-value pairs at once
|
|
61
83
|
wrangler pages ⚡️ Configure Cloudflare Pages
|
|
84
|
+
wrangler r2 📦 Interact with an R2 store
|
|
62
85
|
|
|
63
86
|
Flags:
|
|
64
|
-
-c, --config
|
|
65
|
-
-h, --help
|
|
66
|
-
-v, --version
|
|
67
|
-
|
|
68
|
-
Options:
|
|
69
|
-
-l, --local Run on my machine [boolean] [default: false]
|
|
87
|
+
-c, --config Path to .toml configuration file [string]
|
|
88
|
+
-h, --help Show help [boolean]
|
|
89
|
+
-v, --version Show version number [boolean]
|
|
90
|
+
--legacy-env Use legacy environments [boolean]
|
|
70
91
|
|
|
71
92
|
Unknown command: invalid-command."
|
|
72
93
|
`);
|
|
73
|
-
expect(error).toMatchInlineSnapshot(
|
|
74
|
-
`[Error: Unknown command: invalid-command.]`
|
|
75
|
-
);
|
|
76
94
|
});
|
|
77
95
|
});
|
|
78
96
|
|
|
@@ -85,24 +103,79 @@ describe("wrangler", () => {
|
|
|
85
103
|
await runWrangler("init");
|
|
86
104
|
const parsed = TOML.parse(await fsp.readFile("./wrangler.toml", "utf-8"));
|
|
87
105
|
expect(typeof parsed.compatibility_date).toBe("string");
|
|
106
|
+
expect(parsed.name).toContain("wrangler-tests");
|
|
88
107
|
expect(fs.existsSync("./package.json")).toBe(false);
|
|
89
108
|
expect(fs.existsSync("./tsconfig.json")).toBe(false);
|
|
90
109
|
});
|
|
91
110
|
|
|
111
|
+
it("should create a wrangler.toml and a directory for a named Worker ", async () => {
|
|
112
|
+
mockConfirm({
|
|
113
|
+
text: "No package.json found. Would you like to create one?",
|
|
114
|
+
result: false,
|
|
115
|
+
});
|
|
116
|
+
await runWrangler("init my-worker");
|
|
117
|
+
const parsed = TOML.parse(
|
|
118
|
+
await fsp.readFile("./my-worker/wrangler.toml", "utf-8")
|
|
119
|
+
);
|
|
120
|
+
expect(typeof parsed.compatibility_date).toBe("string");
|
|
121
|
+
expect(parsed.name).toBe("my-worker");
|
|
122
|
+
expect(fs.existsSync("./my-worker/package.json")).toBe(false);
|
|
123
|
+
expect(fs.existsSync("./my-worker/tsconfig.json")).toBe(false);
|
|
124
|
+
});
|
|
125
|
+
|
|
92
126
|
it("should display warning when wrangler.toml already exists, and exit if user does not want to carry on", async () => {
|
|
93
|
-
fs.writeFileSync(
|
|
127
|
+
fs.writeFileSync(
|
|
128
|
+
"./wrangler.toml",
|
|
129
|
+
'compatibility_date="something-else"', // use a fake value to make sure the file is not overwritten
|
|
130
|
+
"utf-8"
|
|
131
|
+
);
|
|
94
132
|
mockConfirm({
|
|
95
133
|
text: "Do you want to continue initializing this project?",
|
|
96
134
|
result: false,
|
|
97
135
|
});
|
|
98
|
-
|
|
99
|
-
expect(
|
|
136
|
+
await runWrangler("init");
|
|
137
|
+
expect(std.warn).toContain("wrangler.toml file already exists!");
|
|
100
138
|
const parsed = TOML.parse(await fsp.readFile("./wrangler.toml", "utf-8"));
|
|
101
|
-
expect(
|
|
139
|
+
expect(parsed.compatibility_date).toBe("something-else");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("should not overwrite an existing wrangler.toml, after agreeing to other prompts", async () => {
|
|
143
|
+
fs.writeFileSync(
|
|
144
|
+
"./wrangler.toml",
|
|
145
|
+
'compatibility_date="something-else"', // use a fake value to make sure the file is not overwritten
|
|
146
|
+
"utf-8"
|
|
147
|
+
);
|
|
148
|
+
mockConfirm(
|
|
149
|
+
{
|
|
150
|
+
text: "Do you want to continue initializing this project?",
|
|
151
|
+
result: true,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
text: "No package.json found. Would you like to create one?",
|
|
155
|
+
result: true,
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
text: "Would you like to use TypeScript?",
|
|
159
|
+
result: true,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
text: "Would you like to create a Worker at src/index.ts?",
|
|
163
|
+
result: true,
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
await runWrangler("init");
|
|
168
|
+
expect(fs.readFileSync("./wrangler.toml", "utf-8")).toMatchInlineSnapshot(
|
|
169
|
+
`"compatibility_date=\\"something-else\\""`
|
|
170
|
+
);
|
|
102
171
|
});
|
|
103
172
|
|
|
104
173
|
it("should display warning when wrangler.toml already exists, but continue if user does want to carry on", async () => {
|
|
105
|
-
fs.writeFileSync(
|
|
174
|
+
fs.writeFileSync(
|
|
175
|
+
"./wrangler.toml",
|
|
176
|
+
`compatibility_date="something-else"`,
|
|
177
|
+
"utf-8"
|
|
178
|
+
);
|
|
106
179
|
mockConfirm(
|
|
107
180
|
{
|
|
108
181
|
text: "Do you want to continue initializing this project?",
|
|
@@ -113,10 +186,10 @@ describe("wrangler", () => {
|
|
|
113
186
|
result: false,
|
|
114
187
|
}
|
|
115
188
|
);
|
|
116
|
-
|
|
117
|
-
expect(
|
|
189
|
+
await runWrangler("init");
|
|
190
|
+
expect(std.warn).toContain("wrangler.toml file already exists!");
|
|
118
191
|
const parsed = TOML.parse(await fsp.readFile("./wrangler.toml", "utf-8"));
|
|
119
|
-
expect(
|
|
192
|
+
expect(parsed.compatibility_date).toBe("something-else");
|
|
120
193
|
});
|
|
121
194
|
|
|
122
195
|
it("should create a package.json if none is found and user confirms", async () => {
|
|
@@ -126,7 +199,11 @@ describe("wrangler", () => {
|
|
|
126
199
|
result: true,
|
|
127
200
|
},
|
|
128
201
|
{
|
|
129
|
-
text: "Would you like to use
|
|
202
|
+
text: "Would you like to use TypeScript?",
|
|
203
|
+
result: false,
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
130
207
|
result: false,
|
|
131
208
|
}
|
|
132
209
|
);
|
|
@@ -135,16 +212,82 @@ describe("wrangler", () => {
|
|
|
135
212
|
const packageJson = JSON.parse(
|
|
136
213
|
fs.readFileSync("./package.json", "utf-8")
|
|
137
214
|
);
|
|
138
|
-
expect(packageJson.name).
|
|
139
|
-
expect(packageJson.version).toEqual("0.0.
|
|
215
|
+
expect(packageJson.name).toContain("wrangler-tests");
|
|
216
|
+
expect(packageJson.version).toEqual("0.0.0");
|
|
217
|
+
expect(packageJson.devDependencies).toEqual({
|
|
218
|
+
wrangler: expect.any(String),
|
|
219
|
+
});
|
|
140
220
|
expect(fs.existsSync("./tsconfig.json")).toBe(false);
|
|
221
|
+
expect(mockPackageManager.install).toHaveBeenCalled();
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("should create a package.json, with the specified name, if none is found and user confirms", async () => {
|
|
225
|
+
mockConfirm(
|
|
226
|
+
{
|
|
227
|
+
text: "No package.json found. Would you like to create one?",
|
|
228
|
+
result: true,
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
text: "Would you like to use TypeScript?",
|
|
232
|
+
result: false,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
236
|
+
result: false,
|
|
237
|
+
}
|
|
238
|
+
);
|
|
239
|
+
await runWrangler("init my-worker");
|
|
240
|
+
const packageJson = JSON.parse(
|
|
241
|
+
fs.readFileSync("./my-worker/package.json", "utf-8")
|
|
242
|
+
);
|
|
243
|
+
expect(packageJson.name).toBe("my-worker");
|
|
141
244
|
});
|
|
142
245
|
|
|
143
246
|
it("should not touch an existing package.json in the same directory", async () => {
|
|
144
|
-
mockConfirm(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
247
|
+
mockConfirm(
|
|
248
|
+
{
|
|
249
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
250
|
+
result: false,
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
text: "Would you like to use TypeScript?",
|
|
254
|
+
result: false,
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
258
|
+
result: false,
|
|
259
|
+
}
|
|
260
|
+
);
|
|
261
|
+
|
|
262
|
+
fs.writeFileSync(
|
|
263
|
+
"./package.json",
|
|
264
|
+
JSON.stringify({ name: "test", version: "1.0.0" }),
|
|
265
|
+
"utf-8"
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
await runWrangler("init");
|
|
269
|
+
const packageJson = JSON.parse(
|
|
270
|
+
fs.readFileSync("./package.json", "utf-8")
|
|
271
|
+
);
|
|
272
|
+
expect(packageJson.name).toEqual("test");
|
|
273
|
+
expect(packageJson.version).toEqual("1.0.0");
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
it("should offer to install wrangler into an existing package.json", async () => {
|
|
277
|
+
mockConfirm(
|
|
278
|
+
{
|
|
279
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
280
|
+
result: true,
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
text: "Would you like to use TypeScript?",
|
|
284
|
+
result: false,
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
288
|
+
result: false,
|
|
289
|
+
}
|
|
290
|
+
);
|
|
148
291
|
|
|
149
292
|
fs.writeFileSync(
|
|
150
293
|
"./package.json",
|
|
@@ -158,13 +301,26 @@ describe("wrangler", () => {
|
|
|
158
301
|
);
|
|
159
302
|
expect(packageJson.name).toEqual("test");
|
|
160
303
|
expect(packageJson.version).toEqual("1.0.0");
|
|
304
|
+
expect(mockPackageManager.addDevDeps).toHaveBeenCalledWith(
|
|
305
|
+
`wrangler@${wranglerVersion}`
|
|
306
|
+
);
|
|
161
307
|
});
|
|
162
308
|
|
|
163
309
|
it("should not touch an existing package.json in an ancestor directory", async () => {
|
|
164
|
-
mockConfirm(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
310
|
+
mockConfirm(
|
|
311
|
+
{
|
|
312
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
313
|
+
result: false,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
text: "Would you like to use TypeScript?",
|
|
317
|
+
result: false,
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
321
|
+
result: false,
|
|
322
|
+
}
|
|
323
|
+
);
|
|
168
324
|
|
|
169
325
|
fs.writeFileSync(
|
|
170
326
|
"./package.json",
|
|
@@ -182,8 +338,292 @@ describe("wrangler", () => {
|
|
|
182
338
|
const packageJson = JSON.parse(
|
|
183
339
|
fs.readFileSync("../../package.json", "utf-8")
|
|
184
340
|
);
|
|
185
|
-
expect(packageJson
|
|
186
|
-
|
|
341
|
+
expect(packageJson).toMatchInlineSnapshot(`
|
|
342
|
+
Object {
|
|
343
|
+
"name": "test",
|
|
344
|
+
"version": "1.0.0",
|
|
345
|
+
}
|
|
346
|
+
`);
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it("should offer to create a worker in a non-typescript project", async () => {
|
|
350
|
+
mockConfirm(
|
|
351
|
+
{
|
|
352
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
353
|
+
result: false,
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
text: "Would you like to use TypeScript?",
|
|
357
|
+
result: false,
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
361
|
+
result: true,
|
|
362
|
+
}
|
|
363
|
+
);
|
|
364
|
+
|
|
365
|
+
fs.writeFileSync(
|
|
366
|
+
"./package.json",
|
|
367
|
+
JSON.stringify({ name: "test", version: "1.0.0" }),
|
|
368
|
+
"utf-8"
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
await runWrangler("init");
|
|
372
|
+
expect(fs.existsSync("./src/index.js")).toBe(true);
|
|
373
|
+
expect(fs.existsSync("./src/index.ts")).toBe(false);
|
|
374
|
+
});
|
|
375
|
+
|
|
376
|
+
it("should offer to create a worker in a typescript project", async () => {
|
|
377
|
+
mockConfirm(
|
|
378
|
+
{
|
|
379
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
380
|
+
result: false,
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
text: "Would you like to use TypeScript?",
|
|
384
|
+
result: true,
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
text: "Would you like to create a Worker at src/index.ts?",
|
|
388
|
+
result: true,
|
|
389
|
+
}
|
|
390
|
+
);
|
|
391
|
+
|
|
392
|
+
fs.writeFileSync(
|
|
393
|
+
"./package.json",
|
|
394
|
+
JSON.stringify({ name: "test", version: "1.0.0" }),
|
|
395
|
+
"utf-8"
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
await runWrangler("init");
|
|
399
|
+
expect(fs.existsSync("./src/index.js")).toBe(false);
|
|
400
|
+
expect(fs.existsSync("./src/index.ts")).toBe(true);
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
it("should add scripts for a typescript project with .ts extension", async () => {
|
|
404
|
+
mockConfirm(
|
|
405
|
+
{
|
|
406
|
+
text: "No package.json found. Would you like to create one?",
|
|
407
|
+
result: true,
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
411
|
+
result: false,
|
|
412
|
+
},
|
|
413
|
+
{
|
|
414
|
+
text: "Would you like to use TypeScript?",
|
|
415
|
+
result: true,
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
text: "Would you like to create a Worker at src/index.ts?",
|
|
419
|
+
result: true,
|
|
420
|
+
}
|
|
421
|
+
);
|
|
422
|
+
await runWrangler("init");
|
|
423
|
+
|
|
424
|
+
expect(fs.existsSync("./package.json")).toBe(true);
|
|
425
|
+
const packageJson = JSON.parse(
|
|
426
|
+
fs.readFileSync("./package.json", "utf-8")
|
|
427
|
+
);
|
|
428
|
+
|
|
429
|
+
expect(fs.existsSync("./src/index.js")).toBe(false);
|
|
430
|
+
expect(fs.existsSync("./src/index.ts")).toBe(true);
|
|
431
|
+
|
|
432
|
+
expect(packageJson.scripts.start).toBe("wrangler dev");
|
|
433
|
+
expect(packageJson.scripts.publish).toBe("wrangler publish");
|
|
434
|
+
expect(packageJson.name).toContain("wrangler-tests");
|
|
435
|
+
expect(packageJson.version).toEqual("0.0.0");
|
|
436
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
437
|
+
"✨ Successfully created wrangler.toml
|
|
438
|
+
✨ Created package.json
|
|
439
|
+
✨ Created tsconfig.json, installed @cloudflare/workers-types into devDependencies
|
|
440
|
+
✨ Created src/index.ts
|
|
441
|
+
|
|
442
|
+
To start developing your Worker, run \`npm start\`
|
|
443
|
+
To publish your Worker to the Internet, run \`npm run publish\`"
|
|
444
|
+
`);
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
it("should not overwrite package.json scripts for a typescript project", async () => {
|
|
448
|
+
mockConfirm(
|
|
449
|
+
{
|
|
450
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
451
|
+
result: false,
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
text: "Would you like to use TypeScript?",
|
|
455
|
+
result: true,
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
text: "Would you like to create a Worker at src/index.ts?",
|
|
459
|
+
result: true,
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
await fsp.writeFile(
|
|
463
|
+
"./package.json",
|
|
464
|
+
JSON.stringify({
|
|
465
|
+
scripts: {
|
|
466
|
+
start: "test-start",
|
|
467
|
+
publish: "test-publish",
|
|
468
|
+
},
|
|
469
|
+
})
|
|
470
|
+
);
|
|
471
|
+
const packageJson = JSON.parse(
|
|
472
|
+
fs.readFileSync("./package.json", "utf-8")
|
|
473
|
+
);
|
|
474
|
+
await runWrangler("init");
|
|
475
|
+
|
|
476
|
+
expect(fs.existsSync("./src/index.js")).toBe(false);
|
|
477
|
+
expect(fs.existsSync("./src/index.ts")).toBe(true);
|
|
478
|
+
|
|
479
|
+
expect(packageJson.scripts.start).toBe("test-start");
|
|
480
|
+
expect(packageJson.scripts.publish).toBe("test-publish");
|
|
481
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
482
|
+
"✨ Successfully created wrangler.toml
|
|
483
|
+
✨ Created tsconfig.json, installed @cloudflare/workers-types into devDependencies
|
|
484
|
+
✨ Created src/index.ts
|
|
485
|
+
|
|
486
|
+
To start developing your Worker, run \`npx wrangler dev\`
|
|
487
|
+
To publish your Worker to the Internet, run \`npx wrangler publish\`"
|
|
488
|
+
`);
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
it("should add missing scripts for a non-ts project with .js extension", async () => {
|
|
492
|
+
mockConfirm(
|
|
493
|
+
{
|
|
494
|
+
text: "No package.json found. Would you like to create one?",
|
|
495
|
+
result: true,
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
499
|
+
result: false,
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
text: "Would you like to use TypeScript?",
|
|
503
|
+
result: false,
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
507
|
+
result: true,
|
|
508
|
+
}
|
|
509
|
+
);
|
|
510
|
+
await runWrangler("init");
|
|
511
|
+
|
|
512
|
+
expect(fs.existsSync("./package.json")).toBe(true);
|
|
513
|
+
const packageJson = JSON.parse(
|
|
514
|
+
fs.readFileSync("./package.json", "utf-8")
|
|
515
|
+
);
|
|
516
|
+
|
|
517
|
+
expect(fs.existsSync("./src/index.js")).toBe(true);
|
|
518
|
+
expect(fs.existsSync("./src/index.ts")).toBe(false);
|
|
519
|
+
|
|
520
|
+
expect(packageJson.scripts.start).toBe("wrangler dev");
|
|
521
|
+
expect(packageJson.scripts.publish).toBe("wrangler publish");
|
|
522
|
+
expect(packageJson.name).toContain("wrangler-tests");
|
|
523
|
+
expect(packageJson.version).toEqual("0.0.0");
|
|
524
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
525
|
+
"✨ Successfully created wrangler.toml
|
|
526
|
+
✨ Created package.json
|
|
527
|
+
✨ Created src/index.js
|
|
528
|
+
|
|
529
|
+
To start developing your Worker, run \`npm start\`
|
|
530
|
+
To publish your Worker to the Internet, run \`npm run publish\`"
|
|
531
|
+
`);
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
it("should not overwrite package.json scripts for a non-ts project with .js extension", async () => {
|
|
535
|
+
mockConfirm(
|
|
536
|
+
{
|
|
537
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
538
|
+
result: false,
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
text: "Would you like to use TypeScript?",
|
|
542
|
+
result: false,
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
text: "Would you like to create a Worker at src/index.js?",
|
|
546
|
+
result: true,
|
|
547
|
+
}
|
|
548
|
+
);
|
|
549
|
+
await fsp.writeFile(
|
|
550
|
+
"./package.json",
|
|
551
|
+
JSON.stringify({
|
|
552
|
+
scripts: {
|
|
553
|
+
start: "test-start",
|
|
554
|
+
publish: "test-publish",
|
|
555
|
+
},
|
|
556
|
+
})
|
|
557
|
+
);
|
|
558
|
+
const packageJson = JSON.parse(
|
|
559
|
+
fs.readFileSync("./package.json", "utf-8")
|
|
560
|
+
);
|
|
561
|
+
await runWrangler("init");
|
|
562
|
+
|
|
563
|
+
expect(fs.existsSync("./src/index.js")).toBe(true);
|
|
564
|
+
expect(fs.existsSync("./src/index.ts")).toBe(false);
|
|
565
|
+
|
|
566
|
+
expect(packageJson.scripts.start).toBe("test-start");
|
|
567
|
+
expect(packageJson.scripts.publish).toBe("test-publish");
|
|
568
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
569
|
+
"✨ Successfully created wrangler.toml
|
|
570
|
+
✨ Created src/index.js
|
|
571
|
+
|
|
572
|
+
To start developing your Worker, run \`npx wrangler dev\`
|
|
573
|
+
To publish your Worker to the Internet, run \`npx wrangler publish\`"
|
|
574
|
+
`);
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
it("should not offer to create a worker in a non-ts project if a file already exists at the location", async () => {
|
|
578
|
+
mockConfirm(
|
|
579
|
+
{
|
|
580
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
581
|
+
result: false,
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
text: "Would you like to use TypeScript?",
|
|
585
|
+
result: false,
|
|
586
|
+
}
|
|
587
|
+
);
|
|
588
|
+
|
|
589
|
+
fs.writeFileSync(
|
|
590
|
+
"./package.json",
|
|
591
|
+
JSON.stringify({ name: "test", version: "1.0.0" }),
|
|
592
|
+
"utf-8"
|
|
593
|
+
);
|
|
594
|
+
fs.mkdirSync("./src", { recursive: true });
|
|
595
|
+
const PLACEHOLDER = "/* placeholder text */";
|
|
596
|
+
fs.writeFileSync("./src/index.js", PLACEHOLDER, "utf-8");
|
|
597
|
+
|
|
598
|
+
await runWrangler("init");
|
|
599
|
+
expect(fs.readFileSync("./src/index.js", "utf-8")).toBe(PLACEHOLDER);
|
|
600
|
+
expect(fs.existsSync("./src/index.ts")).toBe(false);
|
|
601
|
+
});
|
|
602
|
+
|
|
603
|
+
it("should not offer to create a worker in a ts project if a file already exists at the location", async () => {
|
|
604
|
+
mockConfirm(
|
|
605
|
+
{
|
|
606
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
607
|
+
result: false,
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
text: "Would you like to use TypeScript?",
|
|
611
|
+
result: true,
|
|
612
|
+
}
|
|
613
|
+
);
|
|
614
|
+
|
|
615
|
+
fs.writeFileSync(
|
|
616
|
+
"./package.json",
|
|
617
|
+
JSON.stringify({ name: "test", version: "1.0.0" }),
|
|
618
|
+
"utf-8"
|
|
619
|
+
);
|
|
620
|
+
fs.mkdirSync("./src", { recursive: true });
|
|
621
|
+
const PLACEHOLDER = "/* placeholder text */";
|
|
622
|
+
fs.writeFileSync("./src/index.ts", PLACEHOLDER, "utf-8");
|
|
623
|
+
|
|
624
|
+
await runWrangler("init");
|
|
625
|
+
expect(fs.existsSync("./src/index.js")).toBe(false);
|
|
626
|
+
expect(fs.readFileSync("./src/index.ts", "utf-8")).toBe(PLACEHOLDER);
|
|
187
627
|
});
|
|
188
628
|
|
|
189
629
|
it("should create a tsconfig.json and install `workers-types` if none is found and user confirms", async () => {
|
|
@@ -193,30 +633,42 @@ describe("wrangler", () => {
|
|
|
193
633
|
result: true,
|
|
194
634
|
},
|
|
195
635
|
{
|
|
196
|
-
text: "Would you like to use
|
|
636
|
+
text: "Would you like to use TypeScript?",
|
|
197
637
|
result: true,
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
text: "Would you like to create a Worker at src/index.ts?",
|
|
641
|
+
result: false,
|
|
198
642
|
}
|
|
199
643
|
);
|
|
200
644
|
await runWrangler("init");
|
|
201
645
|
expect(fs.existsSync("./tsconfig.json")).toBe(true);
|
|
202
|
-
const tsconfigJson =
|
|
203
|
-
|
|
204
|
-
|
|
646
|
+
const { config: tsconfigJson, error: tsConfigParseError } =
|
|
647
|
+
parseConfigFileTextToJson(
|
|
648
|
+
"./tsconfig.json",
|
|
649
|
+
fs.readFileSync("./tsconfig.json", "utf-8")
|
|
650
|
+
);
|
|
651
|
+
expect(tsConfigParseError).toBeUndefined();
|
|
205
652
|
expect(tsconfigJson.compilerOptions.types).toEqual([
|
|
206
653
|
"@cloudflare/workers-types",
|
|
207
654
|
]);
|
|
208
|
-
|
|
209
|
-
|
|
655
|
+
expect(mockPackageManager.addDevDeps).toHaveBeenCalledWith(
|
|
656
|
+
"@cloudflare/workers-types",
|
|
657
|
+
"typescript"
|
|
210
658
|
);
|
|
211
|
-
expect(packageJson.devDependencies).toEqual({
|
|
212
|
-
"@cloudflare/workers-types": expect.any(String),
|
|
213
|
-
});
|
|
214
659
|
});
|
|
215
660
|
|
|
216
661
|
it("should not touch an existing tsconfig.json in the same directory", async () => {
|
|
217
662
|
fs.writeFileSync(
|
|
218
663
|
"./package.json",
|
|
219
|
-
JSON.stringify({
|
|
664
|
+
JSON.stringify({
|
|
665
|
+
name: "test",
|
|
666
|
+
version: "1.0.0",
|
|
667
|
+
devDependencies: {
|
|
668
|
+
wrangler: "0.0.0",
|
|
669
|
+
"@cloudflare/workers-types": "0.0.0",
|
|
670
|
+
},
|
|
671
|
+
}),
|
|
220
672
|
"utf-8"
|
|
221
673
|
);
|
|
222
674
|
fs.writeFileSync(
|
|
@@ -232,10 +684,57 @@ describe("wrangler", () => {
|
|
|
232
684
|
expect(tsconfigJson.compilerOptions).toEqual({});
|
|
233
685
|
});
|
|
234
686
|
|
|
235
|
-
it("should
|
|
687
|
+
it("should offer to install type definitions in an existing typescript project", async () => {
|
|
688
|
+
mockConfirm(
|
|
689
|
+
{
|
|
690
|
+
text: "Would you like to install wrangler into your package.json?",
|
|
691
|
+
result: false,
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
text: "Would you like to install the type definitions for Workers into your package.json?",
|
|
695
|
+
result: true,
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
text: "Would you like to create a Worker at src/index.ts?",
|
|
699
|
+
result: false,
|
|
700
|
+
}
|
|
701
|
+
);
|
|
236
702
|
fs.writeFileSync(
|
|
237
703
|
"./package.json",
|
|
238
|
-
JSON.stringify({
|
|
704
|
+
JSON.stringify({
|
|
705
|
+
name: "test",
|
|
706
|
+
version: "1.0.0",
|
|
707
|
+
}),
|
|
708
|
+
"utf-8"
|
|
709
|
+
);
|
|
710
|
+
fs.writeFileSync(
|
|
711
|
+
"./tsconfig.json",
|
|
712
|
+
JSON.stringify({ compilerOptions: {} }),
|
|
713
|
+
"utf-8"
|
|
714
|
+
);
|
|
715
|
+
|
|
716
|
+
await runWrangler("init");
|
|
717
|
+
const tsconfigJson = JSON.parse(
|
|
718
|
+
fs.readFileSync("./tsconfig.json", "utf-8")
|
|
719
|
+
);
|
|
720
|
+
// unchanged tsconfig
|
|
721
|
+
expect(tsconfigJson.compilerOptions).toEqual({});
|
|
722
|
+
expect(mockPackageManager.addDevDeps).toHaveBeenCalledWith(
|
|
723
|
+
"@cloudflare/workers-types"
|
|
724
|
+
);
|
|
725
|
+
});
|
|
726
|
+
|
|
727
|
+
it("should not touch an existing tsconfig.json in an ancestor directory", async () => {
|
|
728
|
+
fs.writeFileSync(
|
|
729
|
+
"./package.json",
|
|
730
|
+
JSON.stringify({
|
|
731
|
+
name: "test",
|
|
732
|
+
version: "1.0.0",
|
|
733
|
+
devDependencies: {
|
|
734
|
+
wrangler: "0.0.0",
|
|
735
|
+
"@cloudflare/workers-types": "0.0.0",
|
|
736
|
+
},
|
|
737
|
+
}),
|
|
239
738
|
"utf-8"
|
|
240
739
|
);
|
|
241
740
|
fs.writeFileSync(
|
|
@@ -257,33 +756,236 @@ describe("wrangler", () => {
|
|
|
257
756
|
expect(tsconfigJson.compilerOptions).toEqual({});
|
|
258
757
|
});
|
|
259
758
|
|
|
759
|
+
it("should initialize with no interactive prompts if `--yes` is used", async () => {
|
|
760
|
+
await runWrangler("init --yes");
|
|
761
|
+
|
|
762
|
+
expect(fs.existsSync("./src/index.js")).toBe(false);
|
|
763
|
+
expect(fs.existsSync("./src/index.ts")).toBe(true);
|
|
764
|
+
expect(fs.existsSync("./tsconfig.json")).toBe(true);
|
|
765
|
+
expect(fs.existsSync("./package.json")).toBe(true);
|
|
766
|
+
expect(fs.existsSync("./wrangler.toml")).toBe(true);
|
|
767
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
768
|
+
"✨ Successfully created wrangler.toml
|
|
769
|
+
✨ Created package.json
|
|
770
|
+
✨ Created tsconfig.json, installed @cloudflare/workers-types into devDependencies
|
|
771
|
+
✨ Created src/index.ts
|
|
772
|
+
|
|
773
|
+
To start developing your Worker, run \`npm start\`
|
|
774
|
+
To publish your Worker to the Internet, run \`npm run publish\`"
|
|
775
|
+
`);
|
|
776
|
+
expect(std.err).toMatchInlineSnapshot(`""`);
|
|
777
|
+
expect(std.warn).toMatchInlineSnapshot(`""`);
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
it("should initialize with no interactive prompts if `--yes` is used (named worker)", async () => {
|
|
781
|
+
await runWrangler("init my-worker --yes");
|
|
782
|
+
|
|
783
|
+
expect(fs.existsSync("./my-worker/src/index.js")).toBe(false);
|
|
784
|
+
expect(fs.existsSync("./my-worker/src/index.ts")).toBe(true);
|
|
785
|
+
expect(fs.existsSync("./my-worker/tsconfig.json")).toBe(true);
|
|
786
|
+
expect(fs.existsSync("./my-worker/package.json")).toBe(true);
|
|
787
|
+
expect(fs.existsSync("./my-worker/wrangler.toml")).toBe(true);
|
|
788
|
+
const parsedWranglerToml = TOML.parse(
|
|
789
|
+
fs.readFileSync("./my-worker/wrangler.toml", "utf-8")
|
|
790
|
+
);
|
|
791
|
+
expect(parsedWranglerToml.main).toEqual("src/index.ts");
|
|
792
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
793
|
+
"✨ Successfully created wrangler.toml
|
|
794
|
+
✨ Created package.json
|
|
795
|
+
✨ Created tsconfig.json, installed @cloudflare/workers-types into devDependencies
|
|
796
|
+
✨ Created src/index.ts
|
|
797
|
+
|
|
798
|
+
To start developing your Worker, run \`cd my-worker && npm start\`
|
|
799
|
+
To publish your Worker to the Internet, run \`npm run publish\`"
|
|
800
|
+
`);
|
|
801
|
+
expect(std.err).toMatchInlineSnapshot(`""`);
|
|
802
|
+
expect(std.warn).toMatchInlineSnapshot(`""`);
|
|
803
|
+
});
|
|
804
|
+
|
|
805
|
+
it("should initialize with no interactive prompts if `-y` is used", async () => {
|
|
806
|
+
await runWrangler("init -y");
|
|
807
|
+
|
|
808
|
+
expect(fs.existsSync("./src/index.js")).toBe(false);
|
|
809
|
+
expect(fs.existsSync("./src/index.ts")).toBe(true);
|
|
810
|
+
expect(fs.existsSync("./tsconfig.json")).toBe(true);
|
|
811
|
+
expect(fs.existsSync("./package.json")).toBe(true);
|
|
812
|
+
expect(fs.existsSync("./wrangler.toml")).toBe(true);
|
|
813
|
+
});
|
|
814
|
+
|
|
260
815
|
it("should error if `--type` is used", async () => {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
816
|
+
await expect(
|
|
817
|
+
runWrangler("init --type")
|
|
818
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
819
|
+
`"The --type option is no longer supported."`
|
|
264
820
|
);
|
|
265
821
|
});
|
|
266
822
|
|
|
267
823
|
it("should error if `--type javascript` is used", async () => {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
824
|
+
await expect(
|
|
825
|
+
runWrangler("init --type javascript")
|
|
826
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
827
|
+
`"The --type option is no longer supported."`
|
|
271
828
|
);
|
|
272
829
|
});
|
|
273
830
|
|
|
274
831
|
it("should error if `--type rust` is used", async () => {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
832
|
+
await expect(
|
|
833
|
+
runWrangler("init --type rust")
|
|
834
|
+
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
835
|
+
`"The --type option is no longer supported."`
|
|
278
836
|
);
|
|
279
837
|
});
|
|
280
838
|
|
|
281
839
|
it("should error if `--type webpack` is used", async () => {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
840
|
+
await expect(runWrangler("init --type webpack")).rejects
|
|
841
|
+
.toThrowErrorMatchingInlineSnapshot(`
|
|
842
|
+
"The --type option is no longer supported.
|
|
843
|
+
If you wish to use webpack then you will need to create a custom build."
|
|
844
|
+
`);
|
|
845
|
+
});
|
|
846
|
+
});
|
|
847
|
+
|
|
848
|
+
describe("preview", () => {
|
|
849
|
+
it("should throw an error if the deprecated command is used with positional arguments", async () => {
|
|
850
|
+
await expect(runWrangler("preview GET")).rejects
|
|
851
|
+
.toThrowErrorMatchingInlineSnapshot(`
|
|
852
|
+
"DEPRECATION WARNING:
|
|
853
|
+
The \`wrangler preview\` command has been deprecated.
|
|
854
|
+
Try using \`wrangler dev\` to to try out a worker during development.
|
|
855
|
+
"
|
|
856
|
+
`);
|
|
857
|
+
await expect(runWrangler("preview GET 'Some Body'")).rejects
|
|
858
|
+
.toThrowErrorMatchingInlineSnapshot(`
|
|
859
|
+
"DEPRECATION WARNING:
|
|
860
|
+
The \`wrangler preview\` command has been deprecated.
|
|
861
|
+
Try using \`wrangler dev\` to to try out a worker during development.
|
|
862
|
+
"
|
|
863
|
+
`);
|
|
864
|
+
});
|
|
865
|
+
});
|
|
866
|
+
|
|
867
|
+
describe("subcommand implicit help ran on imcomplete command execution", () => {
|
|
868
|
+
function endEventLoop() {
|
|
869
|
+
return new Promise((resolve) => setImmediate(resolve));
|
|
870
|
+
}
|
|
871
|
+
it("no subcommand for 'secret' should display a list of available subcommands", async () => {
|
|
872
|
+
await runWrangler("secret");
|
|
873
|
+
await endEventLoop();
|
|
874
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
875
|
+
"wrangler secret
|
|
876
|
+
|
|
877
|
+
🤫 Generate a secret that can be referenced in the worker script
|
|
878
|
+
|
|
879
|
+
Commands:
|
|
880
|
+
wrangler secret put <key> Create or update a secret variable for a script
|
|
881
|
+
wrangler secret delete <key> Delete a secret variable from a script
|
|
882
|
+
wrangler secret list List all secrets for a script
|
|
883
|
+
|
|
884
|
+
Flags:
|
|
885
|
+
-c, --config Path to .toml configuration file [string]
|
|
886
|
+
-h, --help Show help [boolean]
|
|
887
|
+
-v, --version Show version number [boolean]
|
|
888
|
+
--legacy-env Use legacy environments [boolean]"
|
|
889
|
+
`);
|
|
890
|
+
});
|
|
891
|
+
|
|
892
|
+
it("no subcommand 'kv:namespace' should display a list of available subcommands", async () => {
|
|
893
|
+
await runWrangler("kv:namespace");
|
|
894
|
+
await endEventLoop();
|
|
895
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
896
|
+
"wrangler kv:namespace
|
|
897
|
+
|
|
898
|
+
🗂️ Interact with your Workers KV Namespaces
|
|
899
|
+
|
|
900
|
+
Commands:
|
|
901
|
+
wrangler kv:namespace create <namespace> Create a new namespace
|
|
902
|
+
wrangler kv:namespace list Outputs a list of all KV namespaces associated with your account id.
|
|
903
|
+
wrangler kv:namespace delete Deletes a given namespace.
|
|
904
|
+
|
|
905
|
+
Flags:
|
|
906
|
+
-c, --config Path to .toml configuration file [string]
|
|
907
|
+
-h, --help Show help [boolean]
|
|
908
|
+
-v, --version Show version number [boolean]
|
|
909
|
+
--legacy-env Use legacy environments [boolean]"
|
|
286
910
|
`);
|
|
287
911
|
});
|
|
912
|
+
|
|
913
|
+
it("no subcommand 'kv:key' should display a list of available subcommands", async () => {
|
|
914
|
+
await runWrangler("kv:key");
|
|
915
|
+
await endEventLoop();
|
|
916
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
917
|
+
"wrangler kv:key
|
|
918
|
+
|
|
919
|
+
🔑 Individually manage Workers KV key-value pairs
|
|
920
|
+
|
|
921
|
+
Commands:
|
|
922
|
+
wrangler kv:key put <key> [value] Writes a single key/value pair to the given namespace.
|
|
923
|
+
wrangler kv:key list Outputs a list of all keys in a given namespace.
|
|
924
|
+
wrangler kv:key get <key> Reads a single value by key from the given namespace.
|
|
925
|
+
wrangler kv:key delete <key> Removes a single key value pair from the given namespace.
|
|
926
|
+
|
|
927
|
+
Flags:
|
|
928
|
+
-c, --config Path to .toml configuration file [string]
|
|
929
|
+
-h, --help Show help [boolean]
|
|
930
|
+
-v, --version Show version number [boolean]
|
|
931
|
+
--legacy-env Use legacy environments [boolean]"
|
|
932
|
+
`);
|
|
933
|
+
});
|
|
934
|
+
|
|
935
|
+
it("no subcommand 'kv:bulk' should display a list of available subcommands", async () => {
|
|
936
|
+
await runWrangler("kv:bulk");
|
|
937
|
+
await endEventLoop();
|
|
938
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
939
|
+
"wrangler kv:bulk
|
|
940
|
+
|
|
941
|
+
💪 Interact with multiple Workers KV key-value pairs at once
|
|
942
|
+
|
|
943
|
+
Commands:
|
|
944
|
+
wrangler kv:bulk put <filename> Upload multiple key-value pairs to a namespace
|
|
945
|
+
wrangler kv:bulk delete <filename> Delete multiple key-value pairs from a namespace
|
|
946
|
+
|
|
947
|
+
Flags:
|
|
948
|
+
-c, --config Path to .toml configuration file [string]
|
|
949
|
+
-h, --help Show help [boolean]
|
|
950
|
+
-v, --version Show version number [boolean]
|
|
951
|
+
--legacy-env Use legacy environments [boolean]"
|
|
952
|
+
`);
|
|
953
|
+
});
|
|
954
|
+
it("no subcommand 'r2' should display a list of available subcommands", async () => {
|
|
955
|
+
await runWrangler("r2");
|
|
956
|
+
await endEventLoop();
|
|
957
|
+
expect(std.out).toMatchInlineSnapshot(`
|
|
958
|
+
"wrangler r2
|
|
959
|
+
|
|
960
|
+
📦 Interact with an R2 store
|
|
961
|
+
|
|
962
|
+
Commands:
|
|
963
|
+
wrangler r2 bucket Manage R2 buckets
|
|
964
|
+
|
|
965
|
+
Flags:
|
|
966
|
+
-c, --config Path to .toml configuration file [string]
|
|
967
|
+
-h, --help Show help [boolean]
|
|
968
|
+
-v, --version Show version number [boolean]
|
|
969
|
+
--legacy-env Use legacy environments [boolean]"
|
|
970
|
+
`);
|
|
971
|
+
});
|
|
972
|
+
});
|
|
973
|
+
describe("Deprecated commands", () => {
|
|
974
|
+
it("should print a deprecation message for 'generate'", async () => {
|
|
975
|
+
await runWrangler("generate").catch((err) => {
|
|
976
|
+
expect(err.message).toMatchInlineSnapshot(`
|
|
977
|
+
"DEPRECATION WARNING:
|
|
978
|
+
\`wrangler generate\` has been deprecated, please refer to https://github.com/cloudflare/wrangler2/blob/main/docs/deprecations.md#generate for alternatives"
|
|
979
|
+
`);
|
|
980
|
+
});
|
|
981
|
+
});
|
|
982
|
+
it("should print a deprecation message for 'build'", async () => {
|
|
983
|
+
await runWrangler("build").catch((err) => {
|
|
984
|
+
expect(err.message).toMatchInlineSnapshot(`
|
|
985
|
+
"DEPRECATION WARNING:
|
|
986
|
+
\`wrangler build\` has been deprecated, please refer to https://github.com/cloudflare/wrangler2/blob/main/docs/deprecations.md#build for alternatives"
|
|
987
|
+
`);
|
|
988
|
+
});
|
|
989
|
+
});
|
|
288
990
|
});
|
|
289
991
|
});
|