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.
Files changed (255) hide show
  1. package/README.md +3 -3
  2. package/bin/wrangler.js +30 -10
  3. package/miniflare-dist/index.mjs +254 -128
  4. package/package.json +27 -19
  5. package/src/__tests__/api-dev.test.ts +65 -36
  6. package/src/__tests__/api-devregistry.test.ts +121 -0
  7. package/src/__tests__/api.test.ts +27 -5
  8. package/src/__tests__/configuration.test.ts +797 -98
  9. package/src/__tests__/constellation.test.ts +371 -0
  10. package/src/__tests__/d1/d1.test.ts +82 -0
  11. package/src/__tests__/d1/execute.test.ts +66 -0
  12. package/src/__tests__/d1/migrate.test.ts +257 -0
  13. package/src/__tests__/d1/splitter.test.ts +255 -0
  14. package/src/__tests__/delete.test.ts +91 -49
  15. package/src/__tests__/deployments.test.ts +330 -56
  16. package/src/__tests__/dev.test.tsx +198 -90
  17. package/src/__tests__/generate.test.ts +12 -10
  18. package/src/__tests__/guess-worker-format.test.ts +35 -0
  19. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  20. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  21. package/src/__tests__/helpers/mock-console.ts +6 -0
  22. package/src/__tests__/helpers/mock-dialogs.ts +71 -85
  23. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  24. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
  25. package/src/__tests__/helpers/mock-known-routes.ts +7 -2
  26. package/src/__tests__/helpers/mock-kv.ts +29 -16
  27. package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
  28. package/src/__tests__/helpers/mock-process.ts +8 -13
  29. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  30. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  31. package/src/__tests__/helpers/msw/handlers/deployments.ts +128 -27
  32. package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
  33. package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
  34. package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
  35. package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
  36. package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
  37. package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
  38. package/src/__tests__/helpers/msw/index.ts +32 -1
  39. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  40. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  41. package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
  42. package/src/__tests__/index.test.ts +92 -72
  43. package/src/__tests__/init.test.ts +1033 -631
  44. package/src/__tests__/jest.setup.ts +19 -42
  45. package/src/__tests__/kv.test.ts +355 -231
  46. package/src/__tests__/logger.test.ts +68 -2
  47. package/src/__tests__/logout.test.ts +47 -0
  48. package/src/__tests__/metrics.test.ts +94 -51
  49. package/src/__tests__/middleware.scheduled.test.ts +42 -32
  50. package/src/__tests__/middleware.test.ts +212 -122
  51. package/src/__tests__/mtls-certificates.test.ts +589 -0
  52. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  53. package/src/__tests__/pages/functions-build.test.ts +529 -0
  54. package/src/__tests__/pages/pages.test.ts +81 -0
  55. package/src/__tests__/pages/project-create.test.ts +63 -0
  56. package/src/__tests__/pages/project-list.test.ts +110 -0
  57. package/src/__tests__/pages/project-upload.test.ts +500 -0
  58. package/src/__tests__/pages/publish.test.ts +2864 -0
  59. package/src/__tests__/pages-deployment-tail.test.ts +957 -0
  60. package/src/__tests__/parse.test.ts +106 -0
  61. package/src/__tests__/publish.test.ts +2227 -1005
  62. package/src/__tests__/pubsub.test.ts +226 -100
  63. package/src/__tests__/queues.test.ts +238 -77
  64. package/src/__tests__/r2.test.ts +55 -57
  65. package/src/__tests__/secret.test.ts +179 -130
  66. package/src/__tests__/tail.test.ts +313 -113
  67. package/src/__tests__/test-old-node-version.js +3 -3
  68. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  69. package/src/__tests__/tsconfig-sanity.ts +12 -0
  70. package/src/__tests__/tsconfig.json +8 -0
  71. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  72. package/src/__tests__/type-generation.test.ts +43 -26
  73. package/src/__tests__/unstableDev.test.ts +61 -0
  74. package/src/__tests__/user.test.ts +35 -72
  75. package/src/__tests__/whoami.test.tsx +8 -114
  76. package/src/__tests__/worker-namespace.test.ts +83 -69
  77. package/src/api/dev.ts +180 -60
  78. package/src/api/index.ts +10 -1
  79. package/src/api/mtls-certificate.ts +148 -0
  80. package/src/api/pages/create-worker-bundle-contents.ts +80 -0
  81. package/src/api/pages/index.ts +5 -0
  82. package/src/api/pages/publish.tsx +371 -0
  83. package/src/bundle.ts +315 -148
  84. package/src/cfetch/index.ts +0 -2
  85. package/src/cfetch/internal.ts +33 -33
  86. package/src/cli.ts +4 -4
  87. package/src/config/config.ts +14 -7
  88. package/src/config/environment.ts +120 -24
  89. package/src/config/index.ts +117 -35
  90. package/src/config/validation-helpers.ts +1 -1
  91. package/src/config/validation.ts +430 -19
  92. package/src/constellation/createProject.tsx +51 -0
  93. package/src/constellation/deleteProject.ts +51 -0
  94. package/src/constellation/deleteProjectModel.ts +76 -0
  95. package/src/constellation/index.ts +75 -0
  96. package/src/constellation/listCatalog.tsx +35 -0
  97. package/src/constellation/listModel.tsx +49 -0
  98. package/src/constellation/listProject.tsx +28 -0
  99. package/src/constellation/listRuntime.tsx +28 -0
  100. package/src/constellation/options.ts +17 -0
  101. package/src/constellation/types.ts +17 -0
  102. package/src/constellation/uploadModel.tsx +84 -0
  103. package/src/constellation/utils.ts +90 -0
  104. package/src/create-worker-preview.ts +19 -8
  105. package/src/create-worker-upload-form.ts +81 -18
  106. package/src/d1/backups.tsx +47 -46
  107. package/src/d1/constants.ts +5 -0
  108. package/src/d1/create.tsx +85 -37
  109. package/src/d1/{delete.tsx → delete.ts} +12 -15
  110. package/src/d1/execute.tsx +228 -156
  111. package/src/d1/index.ts +31 -7
  112. package/src/d1/list.tsx +27 -13
  113. package/src/d1/migrations/apply.tsx +235 -0
  114. package/src/d1/migrations/create.tsx +79 -0
  115. package/src/d1/migrations/helpers.ts +171 -0
  116. package/src/d1/migrations/index.ts +3 -0
  117. package/src/d1/migrations/list.tsx +95 -0
  118. package/src/d1/migrations/options.ts +23 -0
  119. package/src/d1/options.ts +12 -2
  120. package/src/d1/splitter.ts +161 -0
  121. package/src/d1/types.ts +32 -0
  122. package/src/d1/utils.ts +12 -2
  123. package/src/delete.ts +8 -16
  124. package/src/deployments.ts +340 -46
  125. package/src/deprecated/index.ts +8 -302
  126. package/src/dev/dev.tsx +66 -46
  127. package/src/dev/local.tsx +339 -104
  128. package/src/dev/remote.tsx +36 -3
  129. package/src/dev/start-server.ts +146 -101
  130. package/src/dev/use-esbuild.ts +82 -56
  131. package/src/dev/validate-dev-props.ts +9 -0
  132. package/src/{dev-registry.tsx → dev-registry.ts} +13 -1
  133. package/src/dev.tsx +202 -125
  134. package/src/dialogs.ts +136 -0
  135. package/src/dispatch-namespace.ts +21 -17
  136. package/src/docs/helpers.ts +50 -0
  137. package/src/docs/index.ts +54 -0
  138. package/src/entry.ts +26 -11
  139. package/src/environment-variables/factory.ts +89 -0
  140. package/src/environment-variables/misc-variables.ts +30 -0
  141. package/src/generate/index.ts +303 -0
  142. package/src/git-client.ts +15 -4
  143. package/src/{index.tsx → index.ts} +148 -63
  144. package/src/init.ts +301 -197
  145. package/src/inspect.ts +122 -6
  146. package/src/jest.d.ts +4 -0
  147. package/src/kv/helpers.ts +7 -4
  148. package/src/kv/index.ts +15 -17
  149. package/src/logger.ts +36 -5
  150. package/src/metrics/metrics-config.ts +3 -3
  151. package/src/metrics/send-event.ts +6 -1
  152. package/src/miniflare-cli/assets.ts +64 -28
  153. package/src/miniflare-cli/index.ts +6 -9
  154. package/src/miniflare-cli/tsconfig.json +9 -0
  155. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  156. package/src/miniflare-cli/types.ts +11 -0
  157. package/src/module-collection.ts +92 -26
  158. package/src/mtls-certificate/cli.ts +155 -0
  159. package/src/pages/build.ts +423 -0
  160. package/src/pages/buildFunctions.ts +140 -0
  161. package/src/pages/deployment-tails.ts +281 -0
  162. package/src/pages/deployments.tsx +11 -33
  163. package/src/pages/{dev.tsx → dev.ts} +192 -126
  164. package/src/pages/errors.ts +1 -0
  165. package/src/pages/functions/buildPlugin.ts +73 -69
  166. package/src/pages/functions/buildWorker.ts +342 -117
  167. package/src/pages/functions/tsconfig.json +8 -0
  168. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  169. package/src/pages/{functions.tsx → functions.ts} +8 -4
  170. package/src/pages/{index.tsx → index.ts} +11 -3
  171. package/src/pages/projects.tsx +12 -22
  172. package/src/pages/prompt-select-project.tsx +31 -0
  173. package/src/pages/publish.tsx +45 -214
  174. package/src/pages/types.ts +6 -9
  175. package/src/pages/upload.tsx +58 -14
  176. package/src/pages/utils.ts +14 -3
  177. package/src/parse.ts +23 -1
  178. package/src/paths.ts +1 -1
  179. package/src/proxy.ts +5 -0
  180. package/src/publish/index.ts +20 -16
  181. package/src/publish/publish.ts +81 -48
  182. package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
  183. package/src/queues/cli/commands/consumer/add.ts +24 -24
  184. package/src/queues/cli/commands/consumer/index.ts +3 -6
  185. package/src/queues/cli/commands/consumer/remove.ts +11 -18
  186. package/src/queues/cli/commands/create.ts +8 -8
  187. package/src/queues/cli/commands/delete.ts +8 -8
  188. package/src/queues/cli/commands/index.ts +6 -4
  189. package/src/queues/cli/commands/list.ts +8 -8
  190. package/src/queues/client.ts +1 -0
  191. package/src/queues/utils.ts +18 -0
  192. package/src/r2/constants.ts +4 -0
  193. package/src/r2/helpers.ts +1 -0
  194. package/src/r2/index.ts +40 -28
  195. package/src/secret/index.ts +18 -17
  196. package/src/{sites.tsx → sites.ts} +165 -53
  197. package/src/tail/createTail.ts +103 -3
  198. package/src/tail/filters.ts +1 -1
  199. package/src/tail/index.ts +8 -11
  200. package/src/tail/printing.ts +27 -0
  201. package/src/traverse-module-graph.ts +54 -0
  202. package/src/tsconfig-sanity.ts +16 -0
  203. package/src/type-generation.ts +85 -57
  204. package/src/user/access.ts +0 -1
  205. package/src/user/auth-variables.ts +113 -0
  206. package/src/user/choose-account.tsx +1 -31
  207. package/src/user/index.ts +0 -1
  208. package/src/user/{user.tsx → user.ts} +124 -82
  209. package/src/utils/render.ts +93 -0
  210. package/src/{whoami.tsx → whoami.ts} +37 -71
  211. package/src/worker.ts +61 -3
  212. package/src/yargs-types.ts +22 -5
  213. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  214. package/templates/__tests__/tsconfig.json +8 -0
  215. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  216. package/templates/checked-fetch.js +9 -3
  217. package/templates/d1-beta-facade.js +95 -25
  218. package/templates/facade.d.ts +14 -0
  219. package/templates/first-party-worker-module-facade.ts +4 -3
  220. package/templates/format-dev-errors.ts +8 -6
  221. package/templates/gitignore +1 -0
  222. package/templates/init-tests/test-jest-new-worker.js +3 -5
  223. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  224. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  225. package/templates/middleware/loader-modules.ts +2 -2
  226. package/templates/middleware/loader-sw.ts +51 -31
  227. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  228. package/templates/new-worker.ts +3 -0
  229. package/templates/pages-dev-pipeline.ts +4 -1
  230. package/templates/pages-dev-util.ts +4 -1
  231. package/templates/pages-shim.ts +4 -1
  232. package/templates/pages-template-plugin.ts +19 -10
  233. package/templates/serve-static-assets.ts +17 -14
  234. package/templates/service-bindings-module-facade.js +1 -0
  235. package/templates/tsconfig-sanity.ts +11 -0
  236. package/templates/tsconfig.init.json +105 -0
  237. package/templates/tsconfig.json +5 -103
  238. package/templates/tsconfig.tsbuildinfo +1 -0
  239. package/wrangler-dist/cli.d.ts +902 -77
  240. package/wrangler-dist/cli.js +131685 -140615
  241. package/wrangler-dist/wasm-sync.wasm +0 -0
  242. package/src/__tests__/api-devregistry.test.js +0 -57
  243. package/src/__tests__/d1.test.ts +0 -72
  244. package/src/__tests__/dialogs.test.tsx +0 -40
  245. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  246. package/src/__tests__/pages.test.ts +0 -2223
  247. package/src/d1/types.tsx +0 -14
  248. package/src/dialogs.tsx +0 -163
  249. package/src/environment-variables.ts +0 -50
  250. package/src/pages/build.tsx +0 -238
  251. package/src/user/env-vars.ts +0 -46
  252. package/templates/experimental-local-cache-stubs.js +0 -27
  253. /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
  254. /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
  255. /package/src/pages/{hash.tsx → hash.ts} +0 -0
@@ -1,22 +1,14 @@
1
1
  import assert from "node:assert";
2
2
  import { fetch, File, Headers } from "undici";
3
+ import { Response } from "undici";
3
4
  import { version as wranglerVersion } from "../../package.json";
4
- import { getEnvironmentVariableFactory } from "../environment-variables";
5
+ import { getCloudflareApiBaseUrl } from "../environment-variables/misc-variables";
5
6
  import { logger } from "../logger";
6
7
  import { ParseError, parseJSON } from "../parse";
7
8
  import { loginOrRefreshIfRequired, requireApiToken } from "../user";
8
9
  import type { ApiCredentials } from "../user";
9
10
  import type { URLSearchParams } from "node:url";
10
- import type { RequestInit, HeadersInit, Response } from "undici";
11
-
12
- /**
13
- * Get the URL to use to access the Cloudflare API.
14
- */
15
- export const getCloudflareAPIBaseURL = getEnvironmentVariableFactory({
16
- variableName: "CLOUDFLARE_API_BASE_URL",
17
- deprecatedName: "CF_API_BASE_URL",
18
- defaultValue: "https://api.cloudflare.com/client/v4",
19
- });
11
+ import type { RequestInit, HeadersInit } from "undici";
20
12
 
21
13
  /*
22
14
  * performApiFetch does everything required to make a CF API request,
@@ -42,12 +34,17 @@ export async function performApiFetch(
42
34
 
43
35
  const queryString = queryParams ? `?${queryParams.toString()}` : "";
44
36
  logger.debug(
45
- `-- START CF API REQUEST: ${method} ${getCloudflareAPIBaseURL()}${resource}${queryString}`
37
+ `-- START CF API REQUEST: ${method} ${getCloudflareApiBaseUrl()}${resource}${queryString}`
38
+ );
39
+ const logHeaders = cloneHeaders(headers);
40
+ delete logHeaders["Authorization"];
41
+ logger.debug("HEADERS:", JSON.stringify(logHeaders, null, 2));
42
+ logger.debug(
43
+ "INIT:",
44
+ JSON.stringify({ ...init, headers: logHeaders }, null, 2)
46
45
  );
47
- logger.debug("HEADERS:", JSON.stringify(headers, null, 2));
48
- logger.debug("INIT:", JSON.stringify(init, null, 2));
49
46
  logger.debug("-- END CF API REQUEST");
50
- return await fetch(`${getCloudflareAPIBaseURL()}${resource}${queryString}`, {
47
+ return await fetch(`${getCloudflareApiBaseUrl()}${resource}${queryString}`, {
51
48
  method,
52
49
  ...init,
53
50
  headers,
@@ -83,7 +80,9 @@ export async function fetchInternal<ResponseType>(
83
80
  response.statusText,
84
81
  response.status
85
82
  );
86
- logger.debug("HEADERS:", JSON.stringify(response.headers, null, 2));
83
+ const logHeaders = cloneHeaders(response.headers);
84
+ delete logHeaders["Authorization"];
85
+ logger.debug("HEADERS:", JSON.stringify(logHeaders, null, 2));
87
86
  logger.debug("RESPONSE:", jsonText);
88
87
  logger.debug("-- END CF API RESPONSE");
89
88
 
@@ -166,7 +165,7 @@ export async function fetchKVGetValue(
166
165
  const auth = requireApiToken();
167
166
  const headers: Record<string, string> = {};
168
167
  addAuthorizationHeaderIfUnspecified(headers, auth);
169
- const resource = `${getCloudflareAPIBaseURL()}/accounts/${accountId}/storage/kv/namespaces/${namespaceId}/values/${key}`;
168
+ const resource = `${getCloudflareApiBaseUrl()}/accounts/${accountId}/storage/kv/namespaces/${namespaceId}/values/${key}`;
170
169
  const response = await fetch(resource, {
171
170
  method: "GET",
172
171
  headers,
@@ -199,7 +198,7 @@ export async function fetchR2Objects(
199
198
  addAuthorizationHeaderIfUnspecified(headers, auth);
200
199
  addUserAgent(headers);
201
200
 
202
- const response = await fetch(`${getCloudflareAPIBaseURL()}${resource}`, {
201
+ const response = await fetch(`${getCloudflareApiBaseUrl()}${resource}`, {
203
202
  ...bodyInit,
204
203
  headers,
205
204
  });
@@ -219,19 +218,20 @@ export async function fetchR2Objects(
219
218
  export async function fetchDashboardScript(
220
219
  resource: string,
221
220
  bodyInit: RequestInit = {}
222
- ): Promise<string> {
221
+ ): Promise<File[]> {
223
222
  await requireLoggedIn();
224
223
  const auth = requireApiToken();
225
224
  const headers = cloneHeaders(bodyInit.headers);
226
225
  addAuthorizationHeaderIfUnspecified(headers, auth);
227
226
  addUserAgent(headers);
228
227
 
229
- const response = await fetch(`${getCloudflareAPIBaseURL()}${resource}`, {
228
+ let response = await fetch(`${getCloudflareApiBaseUrl()}${resource}`, {
230
229
  ...bodyInit,
231
230
  headers,
232
231
  });
233
232
 
234
233
  if (!response.ok || !response.body) {
234
+ console.error(response.ok, response.body);
235
235
  throw new Error(
236
236
  `Failed to fetch ${resource} - ${response.status}: ${response.statusText});`
237
237
  );
@@ -242,22 +242,22 @@ export async function fetchDashboardScript(
242
242
  ?.startsWith("multipart");
243
243
 
244
244
  if (usesModules) {
245
- // Response from edge contains generic "name = worker.js" for dashboard created scripts
246
- const form = await response.formData();
247
- const entries = Array.from(form.entries());
248
- if (entries.length > 1)
249
- throw new RangeError("Expected only one entry in multipart response");
250
- const [_, file] = entries[0];
251
-
252
- if (file instanceof File) {
253
- return await file.text();
245
+ // For testing purposes only, sorry not sorry -- msw doesn't implement Response#formData
246
+ if (!response.formData) {
247
+ response = new Response(await response.text(), response);
254
248
  }
255
249
 
256
- return file ?? "";
250
+ const form = await response.formData();
251
+ const files = Array.from(form.entries()).map(([filename, contents]) =>
252
+ contents instanceof File ? contents : new File([contents], filename)
253
+ );
257
254
 
258
- // Follow up on issue in Undici about multipart/form-data support & replace the workaround: https://github.com/nodejs/undici/issues/974
259
- // This should be using a builtin formData() parser pattern.
255
+ return files;
260
256
  } else {
261
- return response.text();
257
+ const contents = await response.text();
258
+ const filename = response.headers.get("cf-entrypoint") ?? "index.js";
259
+ const file = new File([contents], filename, { type: "text" });
260
+
261
+ return [file];
262
262
  }
263
263
  }
package/src/cli.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import process from "process";
2
2
  import { hideBin } from "yargs/helpers";
3
- import { unstable_dev } from "./api";
3
+ import { unstable_dev, unstable_pages } from "./api";
4
4
  import { FatalError } from "./errors";
5
5
  import { main } from ".";
6
6
 
7
- import type { UnstableDevWorker } from "./api";
7
+ import type { UnstableDevWorker, UnstableDevOptions } from "./api";
8
8
  /**
9
9
  * The main entrypoint for the CLI.
10
10
  * main only gets called when the script is run directly, not when it's imported as a module.
@@ -24,5 +24,5 @@ if (typeof jest === "undefined" && require.main === module) {
24
24
  * It makes it possible to import wrangler from 'wrangler',
25
25
  * and call wrangler.unstable_dev().
26
26
  */
27
- export { unstable_dev };
28
- export type { UnstableDevWorker };
27
+ export { unstable_dev, unstable_pages };
28
+ export type { UnstableDevWorker, UnstableDevOptions };
@@ -1,4 +1,5 @@
1
1
  import type { Environment, RawEnvironment } from "./environment";
2
+ import type { CamelCaseKey } from "yargs";
2
3
 
3
4
  /**
4
5
  * This is the static type definition for the configuration object.
@@ -17,7 +18,7 @@ import type { Environment, RawEnvironment } from "./environment";
17
18
  *
18
19
  * Legend for the annotations:
19
20
  *
20
- * - `@breaking`: the deprecation/optionality is a breaking change from wrangler 1.
21
+ * - `@breaking`: the deprecation/optionality is a breaking change from Wrangler v1.
21
22
  * - `@todo`: there's more work to be done (with details attached).
22
23
  */
23
24
  export type Config = ConfigFields<DevConfig> & Environment;
@@ -31,7 +32,7 @@ export interface ConfigFields<Dev extends RawDevConfig> {
31
32
  configPath: string | undefined;
32
33
 
33
34
  /**
34
- * A boolean to enable "legacy" style wrangler environments (from wrangler 1).
35
+ * A boolean to enable "legacy" style wrangler environments (from Wrangler v1).
35
36
  * These have been superseded by Services, but there may be projects that won't
36
37
  * (or can't) use them. If you're using a legacy environment, you can set this
37
38
  * to `true` to enable it.
@@ -95,7 +96,7 @@ export interface ConfigFields<Dev extends RawDevConfig> {
95
96
  /**
96
97
  * The location of your Worker script.
97
98
  *
98
- * @deprecated DO NOT use this (it's a holdover from wrangler 1.x). Either use the top level `main` field, or pass the path to your entry file as a command line argument.
99
+ * @deprecated DO NOT use this (it's a holdover from Wrangler v1.x). Either use the top level `main` field, or pass the path to your entry file as a command line argument.
99
100
  * @breaking
100
101
  */
101
102
  "entry-point"?: string;
@@ -215,10 +216,10 @@ export interface DevConfig {
215
216
  * Protocol that wrangler dev forwards requests on
216
217
  *
217
218
  * Setting this to `http` is not currently implemented.
218
- * See https://github.com/cloudflare/wrangler2/issues/583
219
+ * See https://github.com/cloudflare/workers-sdk/issues/583
219
220
  *
220
221
  * @default `https`
221
- * @todo this needs to be implemented https://github.com/cloudflare/wrangler2/issues/583
222
+ * @todo this needs to be implemented https://github.com/cloudflare/workers-sdk/issues/583
222
223
  */
223
224
  upstream_protocol: "https" | "http";
224
225
 
@@ -232,7 +233,7 @@ export type RawDevConfig = Partial<DevConfig>;
232
233
 
233
234
  export interface DeprecatedConfigFields {
234
235
  /**
235
- * The project "type". A holdover from wrangler 1.x.
236
+ * The project "type". A holdover from Wrangler v1.x.
236
237
  * Valid values were "webpack", "javascript", and "rust".
237
238
  *
238
239
  * @deprecated DO NOT USE THIS. Most common features now work out of the box with wrangler, including modules, jsx, typescript, etc. If you need anything more, use a custom build.
@@ -242,7 +243,7 @@ export interface DeprecatedConfigFields {
242
243
 
243
244
  /**
244
245
  * Path to the webpack config to use when building your worker.
245
- * A holdover from wrangler 1.x, used with `type: "webpack"`.
246
+ * A holdover from Wrangler v1.x, used with `type: "webpack"`.
246
247
  *
247
248
  * @deprecated DO NOT USE THIS. Most common features now work out of the box with wrangler, including modules, jsx, typescript, etc. If you need anything more, use a custom build.
248
249
  * @breaking
@@ -273,3 +274,9 @@ interface EnvironmentMap {
273
274
  [envName: string]: RawEnvironment;
274
275
  };
275
276
  }
277
+
278
+ // API dev only passes in camel-cased versions of keys, so ensure
279
+ // only camel-cased keys are used
280
+ export type OnlyCamelCase<T = Record<string, never>> = {
281
+ [key in keyof T as CamelCaseKey<key>]: T[key];
282
+ };
@@ -74,11 +74,17 @@ interface EnvironmentInheritable {
74
74
  */
75
75
  main: string | undefined;
76
76
 
77
+ /**
78
+ * The directory in which module rules should be evaluated in a `--no-bundle` worker
79
+ * This defaults to dirname(main) when left undefined
80
+ */
81
+ base_dir: string | undefined;
82
+
77
83
  /**
78
84
  * Whether we use <name>.<subdomain>.workers.dev to
79
85
  * test and deploy your worker.
80
86
  *
81
- * @default `true` (This is a breaking change from wrangler 1)
87
+ * @default `true` (This is a breaking change from Wrangler v1)
82
88
  * @breaking
83
89
  * @inheritable
84
90
  */
@@ -259,8 +265,26 @@ interface EnvironmentInheritable {
259
265
  * @inheritable
260
266
  */
261
267
  logpush: boolean | undefined;
268
+
269
+ /**
270
+ * Specify how the worker should be located to minimize round-trip time.
271
+ *
272
+ * More details: https://developers.cloudflare.com/workers/platform/smart-placement/
273
+ */
274
+ placement: { mode: "off" | "smart" } | undefined;
262
275
  }
263
276
 
277
+ export type DurableObjectBindings = {
278
+ /** The name of the binding used to refer to the Durable Object */
279
+ name: string;
280
+ /** The exported class name of the Durable Object */
281
+ class_name: string;
282
+ /** The script where the Durable Object is defined (if it's external to this worker) */
283
+ script_name?: string;
284
+ /** The service environment of the script_name to bind to */
285
+ environment?: string;
286
+ }[];
287
+
264
288
  /**
265
289
  * The `EnvironmentNonInheritable` interface declares all the configuration fields for an environment
266
290
  * that cannot be inherited from the top-level environment, and must be defined specifically.
@@ -290,14 +314,6 @@ interface EnvironmentNonInheritable {
290
314
  */
291
315
  vars: { [key: string]: unknown };
292
316
 
293
- /**
294
- * Specifies namespace binding that is bound to this Worker environment.
295
- * It allows for access at runtime to the Workers metadata.
296
- * @default `undefined`
297
- * @nonInheritable
298
- **/
299
- metadata_binding: string | undefined;
300
-
301
317
  /**
302
318
  * A list of durable objects that your worker should be bound to.
303
319
  *
@@ -311,16 +327,7 @@ interface EnvironmentNonInheritable {
311
327
  * @nonInheritable
312
328
  */
313
329
  durable_objects: {
314
- bindings: {
315
- /** The name of the binding used to refer to the Durable Object */
316
- name: string;
317
- /** The exported class name of the Durable Object */
318
- class_name: string;
319
- /** The script where the Durable Object is defined (if it's external to this worker) */
320
- script_name?: string;
321
- /** The service environment of the script_name to bind to */
322
- environment?: string;
323
- }[];
330
+ bindings: DurableObjectBindings;
324
331
  };
325
332
 
326
333
  /**
@@ -345,6 +352,24 @@ interface EnvironmentNonInheritable {
345
352
  preview_id?: string;
346
353
  }[];
347
354
 
355
+ /**
356
+ * These specify bindings to send email from inside your Worker.
357
+ *
358
+ * NOTE: This field is not automatically inherited from the top level environment,
359
+ * and so must be specified in every named environment.
360
+ *
361
+ * @default `[]`
362
+ * @nonInheritable
363
+ */
364
+ send_email: {
365
+ /** The binding name used to refer to the this binding */
366
+ name: string;
367
+ /** If this binding should be restricted to a specific verified address */
368
+ destination_address?: string;
369
+ /** If this binding should be restricted to a set of verified addresses */
370
+ allowed_destination_addresses?: string[];
371
+ }[];
372
+
348
373
  /**
349
374
  * Specifies Queues that are bound to this Worker environment.
350
375
  *
@@ -380,6 +405,9 @@ interface EnvironmentNonInheritable {
380
405
 
381
406
  /** The queue to send messages that failed to be consumed. */
382
407
  dead_letter_queue?: string;
408
+
409
+ /** The maximum number of concurrent consumer Worker invocations. Leaving this unset will allow your consumer to scale to the maximum concurrency needed to keep up with the message backlog. */
410
+ max_concurrency?: number | null;
383
411
  }[];
384
412
  };
385
413
 
@@ -419,6 +447,28 @@ interface EnvironmentNonInheritable {
419
447
  database_id: string;
420
448
  /** The UUID of this D1 database for Wrangler Dev (if specified). */
421
449
  preview_database_id?: string;
450
+ /** The name of the migrations table for this D1 database (defaults to 'd1_migrations'). */
451
+ migrations_table?: string;
452
+ /** The path to the directory of migrations for this D1 database (defaults to './migrations'). */
453
+ migrations_dir?: string;
454
+ /** Internal use only. */
455
+ database_internal_env?: string;
456
+ }[];
457
+
458
+ /**
459
+ * Specifies Constellation projects that are bound to this Worker environment.
460
+ *
461
+ * NOTE: This field is not automatically inherited from the top level environment,
462
+ * and so must be specified in every named environment.
463
+ *
464
+ * @default `[]`
465
+ * @nonInheritable
466
+ */
467
+ constellation: {
468
+ /** The binding name used to refer to the project in the worker. */
469
+ binding: string;
470
+ /** The id of the project. */
471
+ project_id: string;
422
472
  }[];
423
473
 
424
474
  /**
@@ -441,13 +491,37 @@ interface EnvironmentNonInheritable {
441
491
  }[]
442
492
  | undefined;
443
493
 
494
+ /**
495
+ * Specifies analytics engine datasets that are bound to this Worker environment.
496
+ *
497
+ * NOTE: This field is not automatically inherited from the top level environment,
498
+ * and so must be specified in every named environment.
499
+ *
500
+ * @default `[]`
501
+ * @nonInheritable
502
+ */
503
+ analytics_engine_datasets: {
504
+ /** The binding name used to refer to the dataset in the worker. */
505
+ binding: string;
506
+ /** The name of this dataset to write to. */
507
+ dataset?: string;
508
+ }[];
509
+
510
+ /**
511
+ * A browser that will be usable from the worker.
512
+ */
513
+ browser:
514
+ | {
515
+ binding: string;
516
+ }
517
+ | undefined;
518
+
444
519
  /**
445
520
  * "Unsafe" tables for features that aren't directly supported by wrangler.
446
521
  *
447
522
  * NOTE: This field is not automatically inherited from the top level environment,
448
523
  * and so must be specified in every named environment.
449
524
  *
450
- * @default `{ bindings: [] }`
451
525
  * @nonInheritable
452
526
  */
453
527
  unsafe: {
@@ -455,15 +529,30 @@ interface EnvironmentNonInheritable {
455
529
  * A set of bindings that should be put into a Worker's upload metadata without changes. These
456
530
  * can be used to implement bindings for features that haven't released and aren't supported
457
531
  * directly by wrangler or miniflare.
458
- *
459
- * @default []
460
532
  */
461
- bindings: {
533
+ bindings?: {
462
534
  name: string;
463
535
  type: string;
464
536
  [key: string]: unknown;
465
537
  }[];
538
+
539
+ /**
540
+ * Arbitrary key/value pairs that will be included in the uploaded metadata. Values specified
541
+ * here will always be applied to metadata last, so can add new or override existing fields.
542
+ */
543
+ metadata?: {
544
+ [key: string]: string;
545
+ };
466
546
  };
547
+
548
+ mtls_certificates: {
549
+ /** The binding name used to refer to the certificate in the worker */
550
+ binding: string;
551
+ /** The uuid of the uploaded mTLS certificate */
552
+ certificate_id: string;
553
+ }[];
554
+
555
+ tail_consumers?: TailConsumer[];
467
556
  }
468
557
 
469
558
  /**
@@ -481,7 +570,7 @@ interface EnvironmentDeprecated {
481
570
  /**
482
571
  * Legacy way of defining KVNamespaces that is no longer supported.
483
572
  *
484
- * @deprecated DO NOT USE. This was a legacy bug from wrangler 1, that we do not want to support.
573
+ * @deprecated DO NOT USE. This was a legacy bug from Wrangler v1, that we do not want to support.
485
574
  */
486
575
  "kv-namespaces"?: string;
487
576
 
@@ -561,3 +650,10 @@ export type ConfigModuleRuleType =
561
650
  | "CompiledWasm"
562
651
  | "Text"
563
652
  | "Data";
653
+
654
+ export type TailConsumer = {
655
+ /** The name of the service tail events will be forwarded to. */
656
+ service: string;
657
+ /** (Optional) The environt of the service. */
658
+ environment?: string;
659
+ };