wrangler 0.0.0-e178d6fb → 0.0.0-e19903d7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +25 -13
  2. package/bin/wrangler.js +25 -94
  3. package/config-schema.json +2947 -0
  4. package/package.json +193 -167
  5. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  6. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  7. package/templates/__tests__/tsconfig.json +8 -0
  8. package/templates/checked-fetch.js +19 -6
  9. package/templates/facade.d.ts +19 -0
  10. package/templates/gitignore +0 -4
  11. package/templates/init-tests/test-jest-new-worker.js +23 -0
  12. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  13. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  14. package/templates/middleware/common.ts +67 -0
  15. package/templates/middleware/loader-modules.ts +134 -0
  16. package/templates/middleware/loader-sw.ts +229 -0
  17. package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
  18. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  19. package/templates/middleware/middleware-pretty-error.ts +40 -0
  20. package/templates/middleware/middleware-scheduled.ts +15 -0
  21. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  22. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  23. package/templates/modules-watch-stub.js +4 -0
  24. package/templates/new-worker-scheduled.ts +1 -1
  25. package/templates/new-worker.js +1 -1
  26. package/templates/new-worker.ts +4 -1
  27. package/templates/pages-dev-pipeline.ts +32 -0
  28. package/templates/pages-dev-util.ts +55 -0
  29. package/templates/pages-shim.ts +1 -1
  30. package/templates/pages-template-plugin.ts +53 -18
  31. package/templates/pages-template-worker.ts +49 -12
  32. package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
  33. package/templates/startDevWorker/ProxyWorker.ts +334 -0
  34. package/templates/tsconfig-sanity.ts +11 -0
  35. package/templates/tsconfig.init.json +105 -0
  36. package/templates/tsconfig.json +5 -102
  37. package/wrangler-dist/InspectorProxyWorker.js +464 -0
  38. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  39. package/wrangler-dist/ProxyWorker.js +240 -0
  40. package/wrangler-dist/ProxyWorker.js.map +6 -0
  41. package/wrangler-dist/cli.d.ts +24165 -151
  42. package/wrangler-dist/cli.js +190904 -106330
  43. package/wrangler-dist/wasm-sync.wasm +0 -0
  44. package/Cloudflare_CA.pem +0 -18
  45. package/import_meta_url.js +0 -3
  46. package/miniflare-config-stubs/.env.empty +0 -0
  47. package/miniflare-config-stubs/package.empty.json +0 -1
  48. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  49. package/miniflare-dist/index.mjs +0 -5354
  50. package/src/__tests__/config-cache-without-cache-dir.test.ts +0 -38
  51. package/src/__tests__/config-cache.test.ts +0 -42
  52. package/src/__tests__/configuration.test.ts +0 -3950
  53. package/src/__tests__/dev.test.tsx +0 -1203
  54. package/src/__tests__/guess-worker-format.test.ts +0 -85
  55. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  56. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  57. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  58. package/src/__tests__/helpers/mock-bin.ts +0 -36
  59. package/src/__tests__/helpers/mock-cfetch.ts +0 -211
  60. package/src/__tests__/helpers/mock-console.ts +0 -97
  61. package/src/__tests__/helpers/mock-dialogs.ts +0 -153
  62. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  63. package/src/__tests__/helpers/mock-istty.ts +0 -74
  64. package/src/__tests__/helpers/mock-kv.ts +0 -33
  65. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -250
  66. package/src/__tests__/helpers/mock-process.ts +0 -39
  67. package/src/__tests__/helpers/mock-stdin.ts +0 -108
  68. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  69. package/src/__tests__/helpers/run-in-tmp.ts +0 -38
  70. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  71. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  72. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  73. package/src/__tests__/https-options.test.ts +0 -163
  74. package/src/__tests__/index.test.ts +0 -262
  75. package/src/__tests__/init.test.ts +0 -1992
  76. package/src/__tests__/jest.setup.ts +0 -120
  77. package/src/__tests__/kv.test.ts +0 -1671
  78. package/src/__tests__/logger.test.ts +0 -141
  79. package/src/__tests__/metrics.test.ts +0 -445
  80. package/src/__tests__/package-manager.test.ts +0 -353
  81. package/src/__tests__/pages.test.ts +0 -1261
  82. package/src/__tests__/parse.test.ts +0 -330
  83. package/src/__tests__/publish.test.ts +0 -6671
  84. package/src/__tests__/pubsub.test.ts +0 -367
  85. package/src/__tests__/r2.test.ts +0 -233
  86. package/src/__tests__/route.test.ts +0 -45
  87. package/src/__tests__/secret.test.ts +0 -492
  88. package/src/__tests__/tail.test.ts +0 -698
  89. package/src/__tests__/test-old-node-version.js +0 -31
  90. package/src/__tests__/user.test.ts +0 -143
  91. package/src/__tests__/version.test.ts +0 -35
  92. package/src/__tests__/whoami.test.tsx +0 -230
  93. package/src/__tests__/worker-namespace.test.ts +0 -327
  94. package/src/abort.d.ts +0 -3
  95. package/src/api/dev.ts +0 -86
  96. package/src/api/index.ts +0 -1
  97. package/src/bundle-reporter.tsx +0 -29
  98. package/src/bundle.ts +0 -236
  99. package/src/cfetch/index.ts +0 -121
  100. package/src/cfetch/internal.ts +0 -149
  101. package/src/cli.ts +0 -27
  102. package/src/config/README.md +0 -107
  103. package/src/config/config.ts +0 -251
  104. package/src/config/diagnostics.ts +0 -80
  105. package/src/config/environment.ts +0 -453
  106. package/src/config/index.ts +0 -238
  107. package/src/config/validation-helpers.ts +0 -584
  108. package/src/config/validation.ts +0 -1754
  109. package/src/config-cache.ts +0 -84
  110. package/src/create-worker-preview.ts +0 -257
  111. package/src/create-worker-upload-form.ts +0 -263
  112. package/src/dev/dev-vars.ts +0 -36
  113. package/src/dev/dev.tsx +0 -452
  114. package/src/dev/local.tsx +0 -373
  115. package/src/dev/remote.tsx +0 -386
  116. package/src/dev/use-esbuild.ts +0 -150
  117. package/src/dev.tsx +0 -593
  118. package/src/dialogs.tsx +0 -135
  119. package/src/durable.ts +0 -102
  120. package/src/entry.ts +0 -328
  121. package/src/environment-variables.ts +0 -35
  122. package/src/errors.ts +0 -11
  123. package/src/faye-websocket.d.ts +0 -6
  124. package/src/generate.ts +0 -33
  125. package/src/git-client.ts +0 -42
  126. package/src/global-wrangler-config-path.ts +0 -26
  127. package/src/https-options.ts +0 -127
  128. package/src/index.tsx +0 -2005
  129. package/src/init.ts +0 -549
  130. package/src/inspect.ts +0 -662
  131. package/src/intl-polyfill.d.ts +0 -139
  132. package/src/is-interactive.ts +0 -12
  133. package/src/kv.ts +0 -430
  134. package/src/logger.ts +0 -73
  135. package/src/metrics/index.ts +0 -4
  136. package/src/metrics/is-ci.ts +0 -14
  137. package/src/metrics/metrics-config.ts +0 -239
  138. package/src/metrics/metrics-dispatcher.ts +0 -95
  139. package/src/metrics/send-event.ts +0 -92
  140. package/src/miniflare-cli/README.md +0 -30
  141. package/src/miniflare-cli/assets.ts +0 -543
  142. package/src/miniflare-cli/enum-keys.ts +0 -17
  143. package/src/miniflare-cli/index.ts +0 -85
  144. package/src/miniflare-cli/request-context.ts +0 -40
  145. package/src/module-collection.ts +0 -258
  146. package/src/open-in-browser.ts +0 -17
  147. package/src/package-manager.ts +0 -219
  148. package/src/pages/build.tsx +0 -204
  149. package/src/pages/constants.ts +0 -7
  150. package/src/pages/deployments.tsx +0 -106
  151. package/src/pages/dev.tsx +0 -401
  152. package/src/pages/functions/buildPlugin.ts +0 -105
  153. package/src/pages/functions/buildWorker.ts +0 -151
  154. package/src/pages/functions/filepath-routing.test.ts +0 -234
  155. package/src/pages/functions/filepath-routing.ts +0 -189
  156. package/src/pages/functions/identifiers.ts +0 -78
  157. package/src/pages/functions/routes.ts +0 -151
  158. package/src/pages/index.tsx +0 -84
  159. package/src/pages/projects.tsx +0 -163
  160. package/src/pages/publish.tsx +0 -338
  161. package/src/pages/types.ts +0 -40
  162. package/src/pages/upload.tsx +0 -396
  163. package/src/pages/utils.ts +0 -12
  164. package/src/parse.ts +0 -286
  165. package/src/paths.ts +0 -26
  166. package/src/preview.ts +0 -31
  167. package/src/proxy.ts +0 -476
  168. package/src/publish.ts +0 -793
  169. package/src/pubsub/index.ts +0 -286
  170. package/src/pubsub/pubsub-commands.tsx +0 -623
  171. package/src/r2.ts +0 -50
  172. package/src/selfsigned.d.ts +0 -29
  173. package/src/sites.tsx +0 -372
  174. package/src/tail/filters.ts +0 -279
  175. package/src/tail/index.ts +0 -299
  176. package/src/tail/printing.ts +0 -67
  177. package/src/update-check.ts +0 -19
  178. package/src/user/choose-account.tsx +0 -69
  179. package/src/user/env-vars.ts +0 -46
  180. package/src/user/generate-auth-url.ts +0 -33
  181. package/src/user/generate-random-state.ts +0 -16
  182. package/src/user/index.ts +0 -3
  183. package/src/user/user.tsx +0 -1171
  184. package/src/whoami.tsx +0 -91
  185. package/src/worker-namespace.ts +0 -206
  186. package/src/worker.ts +0 -191
  187. package/src/zones.ts +0 -76
  188. package/templates/static-asset-facade.js +0 -49
@@ -1,327 +0,0 @@
1
- import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
2
- import { setMockResponse, unsetAllMocks } from "./helpers/mock-cfetch";
3
- import { mockConsoleMethods } from "./helpers/mock-console";
4
- import { runInTempDir } from "./helpers/run-in-tmp";
5
- import { runWrangler } from "./helpers/run-wrangler";
6
-
7
- describe("worker-namespace", () => {
8
- runInTempDir();
9
- const std = mockConsoleMethods();
10
- mockAccountId();
11
- mockApiToken();
12
-
13
- afterEach(() => {
14
- unsetAllMocks();
15
- });
16
-
17
- it("should should display a list of available subcommands, for worker-namespace with no subcommand", async () => {
18
- await runWrangler("worker-namespace");
19
-
20
- // wait a tick for the help menu to be printed
21
- await new Promise((resolve) => setImmediate(resolve));
22
-
23
- expect(std).toMatchInlineSnapshot(`
24
- Object {
25
- "debug": "",
26
- "err": "",
27
- "out": "wrangler worker-namespace
28
-
29
- 📦 Interact with a worker namespace
30
-
31
- Commands:
32
- wrangler worker-namespace list List all Worker namespaces
33
- wrangler worker-namespace get <name> Get information about a Worker namespace
34
- wrangler worker-namespace create <name> Create a Worker namespace
35
- wrangler worker-namespace delete <name> Delete a Worker namespace
36
- wrangler worker-namespace rename <old-name> <new-name> Rename a Worker namespace
37
-
38
- Flags:
39
- -c, --config Path to .toml configuration file [string]
40
- -h, --help Show help [boolean]
41
- -v, --version Show version number [boolean]",
42
- "warn": "",
43
- }
44
- `);
45
- });
46
-
47
- describe("create namespace", () => {
48
- function mockCreateRequest(expectedName: string) {
49
- const requests = { count: 0 };
50
- setMockResponse(
51
- "/accounts/:accountId/workers/dispatch/namespaces",
52
- ([_url], init) => {
53
- requests.count += 1;
54
-
55
- const incomingText = init.body?.toString() || "";
56
- const { name: namespace_name } = JSON.parse(incomingText);
57
-
58
- expect(init.method).toBe("POST");
59
- expect(namespace_name).toEqual(expectedName);
60
-
61
- return {
62
- namespace_id: "some-namespace-id",
63
- namespace_name: "namespace-name",
64
- created_on: "2022-06-29T14:30:08.16152Z",
65
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
66
- modified_on: "2022-06-29T14:30:08.16152Z",
67
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
68
- };
69
- }
70
- );
71
- return requests;
72
- }
73
-
74
- it("should display help for create", async () => {
75
- await expect(
76
- runWrangler("worker-namespace create")
77
- ).rejects.toThrowErrorMatchingInlineSnapshot(
78
- `"Not enough non-option arguments: got 0, need at least 1"`
79
- );
80
-
81
- expect(std.out).toMatchInlineSnapshot(`
82
- "
83
- wrangler worker-namespace create <name>
84
-
85
- Create a Worker namespace
86
-
87
- Positionals:
88
- name Name of the Worker namespace [string] [required]
89
-
90
- Flags:
91
- -c, --config Path to .toml configuration file [string]
92
- -h, --help Show help [boolean]
93
- -v, --version Show version number [boolean]"
94
- `);
95
- });
96
-
97
- it("should attempt to create the given namespace", async () => {
98
- const namespaceName = "my-namespace";
99
- const requests = mockCreateRequest(namespaceName);
100
- await runWrangler(`worker-namespace create ${namespaceName}`);
101
- expect(requests.count).toEqual(1);
102
-
103
- expect(std.out).toMatchInlineSnapshot(
104
- `"Created Worker namespace \\"my-namespace\\" with ID \\"some-namespace-id\\""`
105
- );
106
- });
107
- });
108
-
109
- describe("delete namespace", () => {
110
- function mockDeleteRequest(expectedName: string) {
111
- const requests = { count: 0 };
112
- setMockResponse(
113
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceName",
114
- ([_url, _, namespaceName], init) => {
115
- requests.count += 1;
116
-
117
- expect(init.method).toBe("DELETE");
118
- expect(namespaceName).toEqual(expectedName);
119
-
120
- return null;
121
- }
122
- );
123
- return requests;
124
- }
125
-
126
- it("should display help for delete", async () => {
127
- await expect(
128
- runWrangler("worker-namespace create")
129
- ).rejects.toThrowErrorMatchingInlineSnapshot(
130
- `"Not enough non-option arguments: got 0, need at least 1"`
131
- );
132
-
133
- expect(std.out).toMatchInlineSnapshot(`
134
- "
135
- wrangler worker-namespace create <name>
136
-
137
- Create a Worker namespace
138
-
139
- Positionals:
140
- name Name of the Worker namespace [string] [required]
141
-
142
- Flags:
143
- -c, --config Path to .toml configuration file [string]
144
- -h, --help Show help [boolean]
145
- -v, --version Show version number [boolean]"
146
- `);
147
- });
148
-
149
- it("should try to delete the given namespace", async () => {
150
- const namespaceName = "my-namespace";
151
- const requests = mockDeleteRequest(namespaceName);
152
- await runWrangler(`worker-namespace delete ${namespaceName}`);
153
- expect(requests.count).toBe(1);
154
-
155
- expect(std.out).toMatchInlineSnapshot(
156
- `"Deleted Worker namespace \\"my-namespace\\""`
157
- );
158
- });
159
- });
160
-
161
- describe("get namespace", () => {
162
- function mockInfoRequest(expectedName: string) {
163
- const requests = { count: 0 };
164
- setMockResponse(
165
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceName",
166
- ([_url, _, namespaceName], _init) => {
167
- requests.count += 1;
168
-
169
- expect(namespaceName).toEqual(expectedName);
170
-
171
- return {
172
- namespace_id: "some-namespace-id",
173
- namespace_name: "namespace-name",
174
- created_on: "2022-06-29T14:30:08.16152Z",
175
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
176
- modified_on: "2022-06-29T14:30:08.16152Z",
177
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
178
- };
179
- }
180
- );
181
- return requests;
182
- }
183
-
184
- it("should display help for get", async () => {
185
- await expect(
186
- runWrangler("worker-namespace get")
187
- ).rejects.toThrowErrorMatchingInlineSnapshot(
188
- `"Not enough non-option arguments: got 0, need at least 1"`
189
- );
190
-
191
- expect(std.out).toMatchInlineSnapshot(`
192
- "
193
- wrangler worker-namespace get <name>
194
-
195
- Get information about a Worker namespace
196
-
197
- Positionals:
198
- name Name of the Worker namespace [string] [required]
199
-
200
- Flags:
201
- -c, --config Path to .toml configuration file [string]
202
- -h, --help Show help [boolean]
203
- -v, --version Show version number [boolean]"
204
- `);
205
- });
206
-
207
- it("should attempt to get info for the given namespace", async () => {
208
- const namespaceName = "my-namespace";
209
- const requests = mockInfoRequest(namespaceName);
210
- await runWrangler(`worker-namespace get ${namespaceName}`);
211
- expect(requests.count).toBe(1);
212
-
213
- expect(std.out).toMatchInlineSnapshot(`
214
- "{
215
- namespace_id: 'some-namespace-id',
216
- namespace_name: 'namespace-name',
217
- created_on: '2022-06-29T14:30:08.16152Z',
218
- created_by: '1fc1df98cc4420fe00367c3ab68c1639',
219
- modified_on: '2022-06-29T14:30:08.16152Z',
220
- modified_by: '1fc1df98cc4420fe00367c3ab68c1639'
221
- }"
222
- `);
223
- });
224
- });
225
-
226
- describe("list namespaces", () => {
227
- function mockListRequest() {
228
- const requests = { count: 0 };
229
- setMockResponse(
230
- "/accounts/:accountId/workers/dispatch/namespaces",
231
- ([_url, _, _page, _perPage], _init) => {
232
- requests.count += 1;
233
-
234
- return [
235
- {
236
- namespace_id: "some-namespace-id",
237
- namespace_name: "namespace-name",
238
- created_on: "2022-06-29T14:30:08.16152Z",
239
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
240
- modified_on: "2022-06-29T14:30:08.16152Z",
241
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
242
- },
243
- ];
244
- }
245
- );
246
- return requests;
247
- }
248
-
249
- it("should list all namespaces", async () => {
250
- const requests = mockListRequest();
251
- await runWrangler("worker-namespace list");
252
- expect(requests.count).toBe(1);
253
- expect(std.out).toMatchInlineSnapshot(`
254
- "[
255
- {
256
- namespace_id: 'some-namespace-id',
257
- namespace_name: 'namespace-name',
258
- created_on: '2022-06-29T14:30:08.16152Z',
259
- created_by: '1fc1df98cc4420fe00367c3ab68c1639',
260
- modified_on: '2022-06-29T14:30:08.16152Z',
261
- modified_by: '1fc1df98cc4420fe00367c3ab68c1639'
262
- }
263
- ]"
264
- `);
265
- });
266
- });
267
-
268
- describe("rename namespace", () => {
269
- function mockRenameRequest(expectedName: string) {
270
- const requests = { count: 0 };
271
- setMockResponse(
272
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceName",
273
- ([_url, _, namespaceName], init) => {
274
- requests.count += 1;
275
-
276
- expect(init.method).toEqual("PUT");
277
- expect(namespaceName).toEqual(expectedName);
278
-
279
- return {
280
- namespace_id: "some-namespace-id",
281
- namespace_name: "namespace-name",
282
- created_on: "2022-06-29T14:30:08.16152Z",
283
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
284
- modified_on: "2022-06-29T14:30:08.16152Z",
285
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
286
- };
287
- }
288
- );
289
- return requests;
290
- }
291
-
292
- it("should display help for rename", async () => {
293
- await expect(
294
- runWrangler("worker-namespace rename")
295
- ).rejects.toThrowErrorMatchingInlineSnapshot(
296
- `"Not enough non-option arguments: got 0, need at least 2"`
297
- );
298
-
299
- expect(std.out).toMatchInlineSnapshot(`
300
- "
301
- wrangler worker-namespace rename <old-name> <new-name>
302
-
303
- Rename a Worker namespace
304
-
305
- Positionals:
306
- old-name Name of the Worker namespace [string] [required]
307
- new-name New name of the Worker namespace [string] [required]
308
-
309
- Flags:
310
- -c, --config Path to .toml configuration file [string]
311
- -h, --help Show help [boolean]
312
- -v, --version Show version number [boolean]"
313
- `);
314
- });
315
-
316
- it("should attempt to rename the given namespace", async () => {
317
- const namespaceName = "my-namespace";
318
- const newName = "new-namespace";
319
- const requests = mockRenameRequest(namespaceName);
320
- await runWrangler(`worker-namespace rename ${namespaceName} ${newName}`);
321
- expect(requests.count).toBe(1);
322
- expect(std.out).toMatchInlineSnapshot(
323
- `"Renamed Worker namespace \\"my-namespace\\" to \\"new-namespace\\""`
324
- );
325
- });
326
- });
327
- });
package/src/abort.d.ts DELETED
@@ -1,3 +0,0 @@
1
- declare interface AbortSignal {
2
- addEventListener(event: "abort", handler: () => void);
3
- }
package/src/api/dev.ts DELETED
@@ -1,86 +0,0 @@
1
- import { startDev } from "../dev";
2
- import { logger } from "../logger";
3
-
4
- import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli";
5
- import type { RequestInit, Response } from "undici";
6
-
7
- interface DevOptions {
8
- env?: string;
9
- ip?: string;
10
- port?: number;
11
- localProtocol?: "http" | "https";
12
- assets?: string;
13
- site?: string;
14
- siteInclude?: string[];
15
- siteExclude?: string[];
16
- nodeCompat?: boolean;
17
- compatibilityDate?: string;
18
- experimentalEnableLocalPersistence?: boolean;
19
- liveReload?: boolean;
20
- watch?: boolean;
21
- vars: {
22
- [key: string]: unknown;
23
- };
24
- kv?: {
25
- binding: string;
26
- id: string;
27
- preview_id?: string;
28
- }[];
29
- durableObjects?: {
30
- name: string;
31
- class_name: string;
32
- script_name?: string | undefined;
33
- environment?: string | undefined;
34
- }[];
35
- showInteractiveDevSession?: boolean;
36
- logLevel?: "none" | "error" | "log" | "warn" | "debug";
37
- logPrefix?: string;
38
- inspect?: boolean;
39
- forceLocal?: boolean;
40
- enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
41
- _?: (string | number)[]; //yargs wants this
42
- $0?: string; //yargs wants this
43
- }
44
- /**
45
- * unstable_dev starts a wrangler dev server, and returns a promise that resolves with utility functions to interact with it.
46
- * @param {string} script
47
- * @param {DevOptions} options
48
- */
49
- export async function unstable_dev(
50
- script: string,
51
- options: DevOptions,
52
- disableExperimentalWarning?: boolean
53
- ) {
54
- if (!disableExperimentalWarning) {
55
- logger.warn(
56
- `unstable_dev() is experimental\nunstable_dev()'s behaviour will likely change in future releases`
57
- );
58
- }
59
-
60
- return new Promise<{
61
- stop: () => void;
62
- fetch: (init?: RequestInit) => Promise<Response | undefined>;
63
- waitUntilExit: () => Promise<void>;
64
- }>((resolve) => {
65
- //lmao
66
- return new Promise<Awaited<ReturnType<typeof startDev>>>((ready) => {
67
- const devServer = startDev({
68
- script: script,
69
- inspect: false,
70
- logLevel: "none",
71
- showInteractiveDevSession: false,
72
- _: [],
73
- $0: "",
74
- ...options,
75
- local: true,
76
- onReady: () => ready(devServer),
77
- });
78
- }).then((devServer) => {
79
- resolve({
80
- stop: devServer.stop,
81
- fetch: devServer.fetch,
82
- waitUntilExit: devServer.devReactElement.waitUntilExit,
83
- });
84
- });
85
- });
86
- }
package/src/api/index.ts DELETED
@@ -1 +0,0 @@
1
- export { unstable_dev } from "./dev";
@@ -1,29 +0,0 @@
1
- import { Blob } from "node:buffer";
2
- import { gzipSync } from "node:zlib";
3
- import { logger } from "./logger";
4
- import type { CfModule } from "./worker";
5
-
6
- async function getSize(modules: CfModule[]) {
7
- const gzipSize = gzipSync(
8
- await new Blob(modules.map((file) => file.content)).arrayBuffer()
9
- ).byteLength;
10
- const aggregateSize = new Blob(modules.map((file) => file.content)).size;
11
-
12
- return { size: aggregateSize, gzipSize };
13
- }
14
-
15
- export async function printBundleSize(
16
- main: {
17
- name: string;
18
- content: string;
19
- },
20
- modules: CfModule[]
21
- ) {
22
- const { size, gzipSize } = await getSize([...modules, main]);
23
-
24
- const bundleReport = `${(size / 1024).toFixed(2)} KiB / gzip: ${(
25
- gzipSize / 1024
26
- ).toFixed(2)} KiB`;
27
-
28
- logger.log(`Total Upload: ${bundleReport}`);
29
- }
package/src/bundle.ts DELETED
@@ -1,236 +0,0 @@
1
- import assert from "node:assert";
2
- import * as fs from "node:fs";
3
- import { builtinModules } from "node:module";
4
- import * as path from "node:path";
5
- import NodeGlobalsPolyfills from "@esbuild-plugins/node-globals-polyfill";
6
- import NodeModulesPolyfills from "@esbuild-plugins/node-modules-polyfill";
7
- import * as esbuild from "esbuild";
8
- import createModuleCollector from "./module-collection";
9
- import type { Config } from "./config";
10
- import type { Entry } from "./entry";
11
- import type { CfModule } from "./worker";
12
-
13
- type BundleResult = {
14
- modules: CfModule[];
15
- resolvedEntryPointPath: string;
16
- bundleType: "esm" | "commonjs";
17
- stop: (() => void) | undefined;
18
- };
19
-
20
- /**
21
- * Searches for any uses of node's builtin modules, and throws an error if it
22
- * finds anything. This plugin is only used when nodeCompat is not enabled.
23
- * Supports both regular node builtins, and the new "node:<MODULE>" format.
24
- */
25
- const checkForNodeBuiltinsPlugin = {
26
- name: "checkForNodeBuiltins",
27
- setup(build: esbuild.PluginBuild) {
28
- build.onResolve(
29
- {
30
- filter: new RegExp(
31
- "^(" +
32
- builtinModules.join("|") +
33
- "|" +
34
- builtinModules.map((module) => "node:" + module).join("|") +
35
- ")$"
36
- ),
37
- },
38
- () => {
39
- throw new Error(
40
- `Detected a Node builtin module import while Node compatibility is disabled.\nAdd node_compat = true to your wrangler.toml file to enable Node compatibility.`
41
- );
42
- }
43
- );
44
- },
45
- };
46
-
47
- /**
48
- * Generate a bundle for the worker identified by the arguments passed in.
49
- */
50
- export async function bundleWorker(
51
- entry: Entry,
52
- destination: string,
53
- options: {
54
- serveAssetsFromWorker: boolean;
55
- jsxFactory: string | undefined;
56
- jsxFragment: string | undefined;
57
- rules: Config["rules"];
58
- watch?: esbuild.WatchMode;
59
- tsconfig: string | undefined;
60
- minify: boolean | undefined;
61
- nodeCompat: boolean | undefined;
62
- define: Config["define"];
63
- checkFetch: boolean;
64
- }
65
- ): Promise<BundleResult> {
66
- const {
67
- serveAssetsFromWorker,
68
- jsxFactory,
69
- jsxFragment,
70
- rules,
71
- watch,
72
- tsconfig,
73
- minify,
74
- nodeCompat,
75
- checkFetch,
76
- } = options;
77
- const entryDirectory = path.dirname(entry.file);
78
- const moduleCollector = createModuleCollector({
79
- wrangler1xlegacyModuleReferences: {
80
- rootDirectory: entryDirectory,
81
- fileNames: new Set(
82
- fs
83
- .readdirSync(entryDirectory, { withFileTypes: true })
84
- .filter(
85
- (dirEntry) =>
86
- dirEntry.isFile() && dirEntry.name !== path.basename(entry.file)
87
- )
88
- .map((dirEnt) => dirEnt.name)
89
- ),
90
- },
91
- format: entry.format,
92
- rules,
93
- });
94
-
95
- // In dev, we want to patch `fetch()` with a special version that looks
96
- // for bad usages and can warn the user about them; so we inject
97
- // `checked-fetch.js` to do so. However, with yarn 3 style pnp,
98
- // we need to extract that file to an accessible place before injecting
99
- // it in, hence this code here.
100
- const checkedFetchFileToInject = path.join(
101
- destination,
102
- "--temp-wrangler-files--",
103
- "checked-fetch.js"
104
- );
105
-
106
- if (checkFetch) {
107
- fs.mkdirSync(path.join(destination, "--temp-wrangler-files--"), {
108
- recursive: true,
109
- });
110
- fs.writeFileSync(
111
- checkedFetchFileToInject,
112
- fs.readFileSync(path.resolve(__dirname, "../templates/checked-fetch.js"))
113
- );
114
- }
115
- // TODO: we need to have similar logic like above for other files
116
- // like the static asset facade, and other middleware that we
117
- // plan on injecting/referencing.
118
-
119
- const result = await esbuild.build({
120
- ...getEntryPoint(entry.file, serveAssetsFromWorker),
121
- bundle: true,
122
- absWorkingDir: entry.directory,
123
- outdir: destination,
124
- inject: checkFetch ? [checkedFetchFileToInject] : [],
125
- external: ["__STATIC_CONTENT_MANIFEST"],
126
- format: entry.format === "modules" ? "esm" : "iife",
127
- target: "es2020",
128
- sourcemap: true,
129
- minify,
130
- metafile: true,
131
- conditions: ["worker", "browser"],
132
- ...(process.env.NODE_ENV && {
133
- define: {
134
- // use process.env["NODE_ENV" + ""] so that esbuild doesn't replace it
135
- // when we do a build of wrangler. (re: https://github.com/cloudflare/wrangler2/issues/1477)
136
- "process.env.NODE_ENV": `"${process.env["NODE_ENV" + ""]}"`,
137
- ...(nodeCompat ? { global: "globalThis" } : {}),
138
- ...(checkFetch ? { fetch: "checkedFetch" } : {}),
139
- ...options.define,
140
- },
141
- }),
142
- loader: {
143
- ".js": "jsx",
144
- ".mjs": "jsx",
145
- ".cjs": "jsx",
146
- },
147
- plugins: [
148
- moduleCollector.plugin,
149
- ...(nodeCompat
150
- ? [NodeGlobalsPolyfills({ buffer: true }), NodeModulesPolyfills()]
151
- : // we use checkForNodeBuiltinsPlugin to throw a nicer error
152
- // if we find node builtins when nodeCompat isn't turned on
153
- [checkForNodeBuiltinsPlugin]),
154
- ],
155
- ...(jsxFactory && { jsxFactory }),
156
- ...(jsxFragment && { jsxFragment }),
157
- ...(tsconfig && { tsconfig }),
158
- watch,
159
- });
160
-
161
- const entryPointOutputs = Object.entries(result.metafile.outputs).filter(
162
- ([_path, output]) => output.entryPoint !== undefined
163
- );
164
- assert(
165
- entryPointOutputs.length > 0,
166
- `Cannot find entry-point "${entry.file}" in generated bundle.` +
167
- listEntryPoints(entryPointOutputs)
168
- );
169
- assert(
170
- entryPointOutputs.length < 2,
171
- "More than one entry-point found for generated bundle." +
172
- listEntryPoints(entryPointOutputs)
173
- );
174
-
175
- const entryPointExports = entryPointOutputs[0][1].exports;
176
- const bundleType = entryPointExports.length > 0 ? "esm" : "commonjs";
177
-
178
- return {
179
- modules: moduleCollector.modules,
180
- resolvedEntryPointPath: path.resolve(
181
- entry.directory,
182
- entryPointOutputs[0][0]
183
- ),
184
- bundleType,
185
- stop: result.stop,
186
- };
187
- }
188
-
189
- type EntryPoint = { stdin: esbuild.StdinOptions } | { entryPoints: string[] };
190
-
191
- /**
192
- * Create an object that describes the entry point for esbuild.
193
- *
194
- * If we are using the experimental asset handling, then the entry point is
195
- * actually a shim worker that will either return an asset from a KV store,
196
- * or delegate to the actual worker.
197
- */
198
- function getEntryPoint(
199
- entryFile: string,
200
- serveAssetsFromWorker: boolean
201
- ): EntryPoint {
202
- if (serveAssetsFromWorker) {
203
- return {
204
- stdin: {
205
- contents: fs
206
- .readFileSync(
207
- path.join(__dirname, "../templates/static-asset-facade.js"),
208
- "utf8"
209
- )
210
- // on windows, escape backslashes in the path (`\`)
211
- .replace("__ENTRY_POINT__", entryFile.replaceAll("\\", "\\\\"))
212
- .replace(
213
- "__KV_ASSET_HANDLER__",
214
- path
215
- .join(__dirname, "../kv-asset-handler.js")
216
- .replaceAll("\\", "\\\\")
217
- ),
218
- sourcefile: "static-asset-facade.js",
219
- resolveDir: path.dirname(entryFile),
220
- },
221
- };
222
- } else {
223
- return { entryPoints: [entryFile] };
224
- }
225
- }
226
-
227
- /**
228
- * Generate a string that describes the entry-points that were identified by esbuild.
229
- */
230
- function listEntryPoints(
231
- outputs: [string, ValueOf<esbuild.Metafile["outputs"]>][]
232
- ): string {
233
- return outputs.map(([_input, output]) => output.entryPoint).join("\n");
234
- }
235
-
236
- type ValueOf<T> = T[keyof T];