wrangler 0.0.0-e7a0cd5b → 0.0.0-e7cf0caa

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 (237) hide show
  1. package/README.md +3 -3
  2. package/bin/wrangler.js +30 -10
  3. package/miniflare-dist/index.mjs +126 -74
  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 +567 -86
  9. package/src/__tests__/d1/d1.test.ts +82 -0
  10. package/src/__tests__/d1/execute.test.ts +66 -0
  11. package/src/__tests__/d1/migrate.test.ts +157 -0
  12. package/src/__tests__/d1/splitter.test.ts +255 -0
  13. package/src/__tests__/delete.test.ts +91 -49
  14. package/src/__tests__/deployments.test.ts +330 -56
  15. package/src/__tests__/dev.test.tsx +198 -90
  16. package/src/__tests__/generate.test.ts +12 -10
  17. package/src/__tests__/guess-worker-format.test.ts +35 -0
  18. package/src/__tests__/helpers/end-event-loop.ts +6 -0
  19. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  20. package/src/__tests__/helpers/mock-console.ts +6 -0
  21. package/src/__tests__/helpers/mock-dialogs.ts +71 -85
  22. package/src/__tests__/helpers/mock-get-pages-upload-token.ts +25 -0
  23. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -5
  24. package/src/__tests__/helpers/mock-known-routes.ts +7 -2
  25. package/src/__tests__/helpers/mock-kv.ts +29 -16
  26. package/src/__tests__/helpers/mock-oauth-flow.ts +103 -92
  27. package/src/__tests__/helpers/mock-process.ts +8 -13
  28. package/src/__tests__/helpers/mock-set-timeout.ts +16 -0
  29. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  30. package/src/__tests__/helpers/msw/handlers/deployments.ts +128 -27
  31. package/src/__tests__/helpers/msw/handlers/namespaces.ts +18 -41
  32. package/src/__tests__/helpers/msw/handlers/oauth.ts +13 -18
  33. package/src/__tests__/helpers/msw/handlers/r2.ts +14 -34
  34. package/src/__tests__/helpers/msw/handlers/script.ts +9 -28
  35. package/src/__tests__/helpers/msw/handlers/user.ts +13 -24
  36. package/src/__tests__/helpers/msw/handlers/zones.ts +6 -8
  37. package/src/__tests__/helpers/msw/index.ts +32 -1
  38. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  39. package/src/__tests__/helpers/string-dynamic-values-matcher.ts +28 -0
  40. package/src/__tests__/helpers/worker-scripts/parent-worker.js +4 -1
  41. package/src/__tests__/index.test.ts +90 -72
  42. package/src/__tests__/init.test.ts +927 -631
  43. package/src/__tests__/jest.setup.ts +19 -42
  44. package/src/__tests__/kv.test.ts +355 -231
  45. package/src/__tests__/logger.test.ts +68 -2
  46. package/src/__tests__/logout.test.ts +47 -0
  47. package/src/__tests__/metrics.test.ts +94 -51
  48. package/src/__tests__/middleware.scheduled.test.ts +42 -32
  49. package/src/__tests__/middleware.test.ts +212 -122
  50. package/src/__tests__/mtls-certificates.test.ts +588 -0
  51. package/src/__tests__/pages/deployment-list.test.ts +80 -0
  52. package/src/__tests__/pages/functions-build.test.ts +452 -0
  53. package/src/__tests__/pages/pages.test.ts +81 -0
  54. package/src/__tests__/pages/project-create.test.ts +63 -0
  55. package/src/__tests__/pages/project-list.test.ts +110 -0
  56. package/src/__tests__/pages/project-upload.test.ts +500 -0
  57. package/src/__tests__/pages/publish.test.ts +2864 -0
  58. package/src/__tests__/pages-deployment-tail.test.ts +955 -0
  59. package/src/__tests__/parse.test.ts +106 -0
  60. package/src/__tests__/publish.test.ts +1615 -852
  61. package/src/__tests__/pubsub.test.ts +226 -100
  62. package/src/__tests__/queues.test.ts +238 -77
  63. package/src/__tests__/r2.test.ts +55 -57
  64. package/src/__tests__/secret.test.ts +179 -130
  65. package/src/__tests__/tail.test.ts +267 -109
  66. package/src/__tests__/test-old-node-version.js +3 -3
  67. package/src/__tests__/traverse-module-graph.test.ts +220 -0
  68. package/src/__tests__/tsconfig-sanity.ts +12 -0
  69. package/src/__tests__/tsconfig.json +8 -0
  70. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  71. package/src/__tests__/type-generation.test.ts +43 -26
  72. package/src/__tests__/user.test.ts +35 -72
  73. package/src/__tests__/whoami.test.tsx +8 -114
  74. package/src/__tests__/worker-namespace.test.ts +83 -69
  75. package/src/api/dev.ts +168 -60
  76. package/src/api/index.ts +10 -1
  77. package/src/api/mtls-certificate.ts +148 -0
  78. package/src/api/pages/create-worker-bundle-contents.ts +76 -0
  79. package/src/api/pages/index.ts +5 -0
  80. package/src/api/pages/publish.tsx +355 -0
  81. package/src/bundle.ts +263 -140
  82. package/src/cfetch/index.ts +0 -2
  83. package/src/cfetch/internal.ts +16 -21
  84. package/src/cli.ts +4 -4
  85. package/src/config/config.ts +14 -7
  86. package/src/config/environment.ts +79 -24
  87. package/src/config/index.ts +99 -38
  88. package/src/config/validation-helpers.ts +1 -1
  89. package/src/config/validation.ts +248 -19
  90. package/src/create-worker-preview.ts +19 -8
  91. package/src/create-worker-upload-form.ts +60 -22
  92. package/src/d1/backups.tsx +43 -42
  93. package/src/d1/constants.ts +2 -0
  94. package/src/d1/create.tsx +44 -30
  95. package/src/d1/{delete.tsx → delete.ts} +11 -14
  96. package/src/d1/execute.tsx +209 -151
  97. package/src/d1/index.ts +31 -7
  98. package/src/d1/list.tsx +22 -10
  99. package/src/d1/migrations/apply.tsx +212 -0
  100. package/src/d1/migrations/create.tsx +79 -0
  101. package/src/d1/migrations/helpers.ts +172 -0
  102. package/src/d1/migrations/index.ts +3 -0
  103. package/src/d1/migrations/list.tsx +95 -0
  104. package/src/d1/migrations/options.ts +23 -0
  105. package/src/d1/options.ts +12 -2
  106. package/src/d1/splitter.ts +161 -0
  107. package/src/d1/{types.tsx → types.ts} +11 -0
  108. package/src/d1/utils.ts +12 -2
  109. package/src/delete.ts +8 -16
  110. package/src/deployments.ts +340 -46
  111. package/src/deprecated/index.ts +8 -302
  112. package/src/dev/dev.tsx +57 -44
  113. package/src/dev/local.tsx +294 -91
  114. package/src/dev/remote.tsx +32 -3
  115. package/src/dev/start-server.ts +89 -68
  116. package/src/dev/use-esbuild.ts +17 -18
  117. package/src/dev/validate-dev-props.ts +9 -0
  118. package/src/{dev-registry.tsx → dev-registry.ts} +2 -1
  119. package/src/dev.tsx +178 -118
  120. package/src/dialogs.ts +136 -0
  121. package/src/dispatch-namespace.ts +21 -17
  122. package/src/docs/index.ts +97 -0
  123. package/src/entry.ts +19 -11
  124. package/src/environment-variables/factory.ts +88 -0
  125. package/src/environment-variables/misc-variables.ts +30 -0
  126. package/src/generate/index.ts +298 -0
  127. package/src/git-client.ts +15 -4
  128. package/src/{index.tsx → index.ts} +137 -63
  129. package/src/init.ts +249 -187
  130. package/src/inspect.ts +16 -1
  131. package/src/jest.d.ts +4 -0
  132. package/src/kv/index.ts +15 -17
  133. package/src/logger.ts +32 -5
  134. package/src/metrics/metrics-config.ts +3 -3
  135. package/src/metrics/send-event.ts +6 -1
  136. package/src/miniflare-cli/assets.ts +64 -28
  137. package/src/miniflare-cli/index.ts +4 -7
  138. package/src/miniflare-cli/tsconfig.json +9 -0
  139. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  140. package/src/miniflare-cli/types.ts +11 -0
  141. package/src/module-collection.ts +91 -25
  142. package/src/mtls-certificate/cli.ts +155 -0
  143. package/src/pages/build.ts +410 -0
  144. package/src/pages/buildFunctions.ts +140 -0
  145. package/src/pages/deployment-tails.ts +281 -0
  146. package/src/pages/deployments.tsx +11 -33
  147. package/src/pages/{dev.tsx → dev.ts} +147 -124
  148. package/src/pages/errors.ts +1 -0
  149. package/src/pages/functions/buildPlugin.ts +72 -69
  150. package/src/pages/functions/buildWorker.ts +249 -114
  151. package/src/pages/functions/tsconfig.json +8 -0
  152. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  153. package/src/pages/{functions.tsx → functions.ts} +8 -4
  154. package/src/pages/{index.tsx → index.ts} +11 -3
  155. package/src/pages/projects.tsx +12 -22
  156. package/src/pages/prompt-select-project.tsx +31 -0
  157. package/src/pages/publish.tsx +45 -214
  158. package/src/pages/types.ts +6 -9
  159. package/src/pages/upload.tsx +58 -14
  160. package/src/pages/utils.ts +14 -3
  161. package/src/parse.ts +23 -1
  162. package/src/paths.ts +1 -1
  163. package/src/proxy.ts +5 -0
  164. package/src/publish/index.ts +20 -16
  165. package/src/publish/publish.ts +72 -47
  166. package/src/pubsub/{pubsub-commands.tsx → pubsub-commands.ts} +19 -20
  167. package/src/queues/cli/commands/consumer/add.ts +24 -24
  168. package/src/queues/cli/commands/consumer/index.ts +3 -6
  169. package/src/queues/cli/commands/consumer/remove.ts +11 -18
  170. package/src/queues/cli/commands/create.ts +8 -8
  171. package/src/queues/cli/commands/delete.ts +8 -8
  172. package/src/queues/cli/commands/index.ts +6 -4
  173. package/src/queues/cli/commands/list.ts +8 -8
  174. package/src/queues/client.ts +1 -0
  175. package/src/queues/utils.ts +18 -0
  176. package/src/r2/constants.ts +4 -0
  177. package/src/r2/helpers.ts +1 -0
  178. package/src/r2/index.ts +40 -28
  179. package/src/secret/index.ts +14 -17
  180. package/src/{sites.tsx → sites.ts} +1 -1
  181. package/src/tail/createTail.ts +94 -3
  182. package/src/tail/filters.ts +1 -1
  183. package/src/tail/index.ts +8 -11
  184. package/src/tail/printing.ts +15 -0
  185. package/src/traverse-module-graph.ts +53 -0
  186. package/src/tsconfig-sanity.ts +16 -0
  187. package/src/type-generation.ts +79 -57
  188. package/src/user/access.ts +0 -1
  189. package/src/user/auth-variables.ts +113 -0
  190. package/src/user/choose-account.tsx +1 -31
  191. package/src/user/index.ts +0 -1
  192. package/src/user/{user.tsx → user.ts} +123 -82
  193. package/src/utils/render.ts +93 -0
  194. package/src/{whoami.tsx → whoami.ts} +37 -71
  195. package/src/worker.ts +35 -3
  196. package/src/yargs-types.ts +22 -5
  197. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  198. package/templates/__tests__/tsconfig.json +8 -0
  199. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  200. package/templates/checked-fetch.js +9 -3
  201. package/templates/d1-beta-facade.js +95 -25
  202. package/templates/facade.d.ts +14 -0
  203. package/templates/first-party-worker-module-facade.ts +4 -3
  204. package/templates/format-dev-errors.ts +8 -6
  205. package/templates/gitignore +1 -0
  206. package/templates/init-tests/test-jest-new-worker.js +3 -5
  207. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  208. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  209. package/templates/middleware/loader-modules.ts +2 -2
  210. package/templates/middleware/loader-sw.ts +51 -31
  211. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  212. package/templates/new-worker.ts +3 -0
  213. package/templates/pages-dev-pipeline.ts +4 -1
  214. package/templates/pages-shim.ts +4 -1
  215. package/templates/pages-template-plugin.ts +19 -10
  216. package/templates/serve-static-assets.ts +17 -14
  217. package/templates/service-bindings-module-facade.js +1 -0
  218. package/templates/tsconfig-sanity.ts +11 -0
  219. package/templates/tsconfig.init.json +105 -0
  220. package/templates/tsconfig.json +5 -103
  221. package/templates/tsconfig.tsbuildinfo +1 -0
  222. package/wrangler-dist/cli.d.ts +826 -77
  223. package/wrangler-dist/cli.js +130734 -140838
  224. package/wrangler-dist/wasm-sync.wasm +0 -0
  225. package/src/__tests__/api-devregistry.test.js +0 -57
  226. package/src/__tests__/d1.test.ts +0 -72
  227. package/src/__tests__/dialogs.test.tsx +0 -40
  228. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  229. package/src/__tests__/pages.test.ts +0 -2223
  230. package/src/dialogs.tsx +0 -163
  231. package/src/environment-variables.ts +0 -50
  232. package/src/pages/build.tsx +0 -238
  233. package/src/user/env-vars.ts +0 -46
  234. package/templates/experimental-local-cache-stubs.js +0 -27
  235. /package/src/{bundle-reporter.tsx → bundle-reporter.ts} +0 -0
  236. /package/src/dev/{get-local-persistence-path.tsx → get-local-persistence-path.ts} +0 -0
  237. /package/src/pages/{hash.tsx → hash.ts} +0 -0
@@ -1,7 +1,11 @@
1
1
  import { rest } from "msw";
2
2
  import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
3
3
  import { mockConsoleMethods } from "./helpers/mock-console";
4
- import { msw, mswSuccessNamespacesHandlers } from "./helpers/msw";
4
+ import {
5
+ createFetchResult,
6
+ msw,
7
+ mswSuccessNamespacesHandlers,
8
+ } from "./helpers/msw";
5
9
  import { runInTempDir } from "./helpers/run-in-tmp";
6
10
  import { runWrangler } from "./helpers/run-wrangler";
7
11
 
@@ -13,7 +17,7 @@ describe("dispatch-namespace", () => {
13
17
  mockAccountId();
14
18
  mockApiToken();
15
19
 
16
- it("should should display a list of available subcommands, for dispatch-namespace with no subcommand", async () => {
20
+ it("should display a list of available subcommands, for dispatch-namespace with no subcommand", async () => {
17
21
  await runWrangler("dispatch-namespace");
18
22
 
19
23
  // wait a tick for the help menu to be printed
@@ -23,6 +27,7 @@ describe("dispatch-namespace", () => {
23
27
  Object {
24
28
  "debug": "",
25
29
  "err": "",
30
+ "info": "",
26
31
  "out": "wrangler dispatch-namespace
27
32
 
28
33
  📦 Interact with a dispatch namespace
@@ -35,10 +40,11 @@ describe("dispatch-namespace", () => {
35
40
  wrangler dispatch-namespace rename <old-name> <new-name> Rename a dispatch namespace
36
41
 
37
42
  Flags:
38
- -c, --config Path to .toml configuration file [string]
39
- -e, --env Environment to use for operations and .env files [string]
40
- -h, --help Show help [boolean]
41
- -v, --version Show version number [boolean]",
43
+ -j, --experimental-json-config Experimental: Support wrangler.json [boolean]
44
+ -c, --config Path to .toml configuration file [string]
45
+ -e, --env Environment to use for operations and .env files [string]
46
+ -h, --help Show help [boolean]
47
+ -v, --version Show version number [boolean]",
42
48
  "warn": "",
43
49
  }
44
50
  `);
@@ -49,22 +55,23 @@ describe("dispatch-namespace", () => {
49
55
  let counter = 0;
50
56
  msw.use(
51
57
  rest.post(
52
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
53
- (req, res, cxt) => {
58
+ "*/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
59
+ (req, res, ctx) => {
54
60
  counter++;
55
61
  const { namespaceNameParam } = req.params;
56
62
  expect(counter).toBe(1);
57
63
  expect(namespaceNameParam).toBe(namespaceName);
58
64
  return res.once(
59
- cxt.status(200),
60
- cxt.json({
61
- namespace_id: "some-namespace-id",
62
- namespace_name: "namespace-name",
63
- created_on: "2022-06-29T14:30:08.16152Z",
64
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
65
- modified_on: "2022-06-29T14:30:08.16152Z",
66
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
67
- })
65
+ ctx.json(
66
+ createFetchResult({
67
+ namespace_id: "some-namespace-id",
68
+ namespace_name: "namespace-name",
69
+ created_on: "2022-06-29T14:30:08.16152Z",
70
+ created_by: "1fc1df98cc4420fe00367c3ab68c1639",
71
+ modified_on: "2022-06-29T14:30:08.16152Z",
72
+ modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
73
+ })
74
+ )
68
75
  );
69
76
  }
70
77
  )
@@ -87,10 +94,11 @@ describe("dispatch-namespace", () => {
87
94
  name Name of the dispatch namespace [string] [required]
88
95
 
89
96
  Flags:
90
- -c, --config Path to .toml configuration file [string]
91
- -e, --env Environment to use for operations and .env files [string]
92
- -h, --help Show help [boolean]
93
- -v, --version Show version number [boolean]"
97
+ -j, --experimental-json-config Experimental: Support wrangler.json [boolean]
98
+ -c, --config Path to .toml configuration file [string]
99
+ -e, --env Environment to use for operations and .env files [string]
100
+ -h, --help Show help [boolean]
101
+ -v, --version Show version number [boolean]"
94
102
  `);
95
103
  });
96
104
 
@@ -108,13 +116,13 @@ describe("dispatch-namespace", () => {
108
116
  let counter = 0;
109
117
  msw.use(
110
118
  rest.delete(
111
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
112
- (req, res, cxt) => {
119
+ "*/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
120
+ (req, res, ctx) => {
113
121
  counter++;
114
122
  const { namespaceNameParam } = req.params;
115
123
  expect(counter).toBe(1);
116
124
  expect(namespaceNameParam).toBe(namespaceName);
117
- return res.once(cxt.status(200), cxt.json(null));
125
+ return res.once(ctx.json(null));
118
126
  }
119
127
  )
120
128
  );
@@ -136,10 +144,11 @@ describe("dispatch-namespace", () => {
136
144
  name Name of the dispatch namespace [string] [required]
137
145
 
138
146
  Flags:
139
- -c, --config Path to .toml configuration file [string]
140
- -e, --env Environment to use for operations and .env files [string]
141
- -h, --help Show help [boolean]
142
- -v, --version Show version number [boolean]"
147
+ -j, --experimental-json-config Experimental: Support wrangler.json [boolean]
148
+ -c, --config Path to .toml configuration file [string]
149
+ -e, --env Environment to use for operations and .env files [string]
150
+ -h, --help Show help [boolean]
151
+ -v, --version Show version number [boolean]"
143
152
  `);
144
153
  });
145
154
 
@@ -157,22 +166,23 @@ describe("dispatch-namespace", () => {
157
166
  let counter = 0;
158
167
  msw.use(
159
168
  rest.get(
160
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
161
- (req, res, cxt) => {
169
+ "*/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
170
+ (req, res, ctx) => {
162
171
  counter++;
163
172
  const { namespaceNameParam } = req.params;
164
173
  expect(counter).toBe(1);
165
174
  expect(namespaceNameParam).toBe(namespaceName);
166
175
  return res.once(
167
- cxt.status(200),
168
- cxt.json({
169
- namespace_id: "some-namespace-id",
170
- namespace_name: "namespace-name",
171
- created_on: "2022-06-29T14:30:08.16152Z",
172
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
173
- modified_on: "2022-06-29T14:30:08.16152Z",
174
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
175
- })
176
+ ctx.json(
177
+ createFetchResult({
178
+ namespace_id: "some-namespace-id",
179
+ namespace_name: "namespace-name",
180
+ created_on: "2022-06-29T14:30:08.16152Z",
181
+ created_by: "1fc1df98cc4420fe00367c3ab68c1639",
182
+ modified_on: "2022-06-29T14:30:08.16152Z",
183
+ modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
184
+ })
185
+ )
176
186
  );
177
187
  }
178
188
  )
@@ -195,10 +205,11 @@ describe("dispatch-namespace", () => {
195
205
  name Name of the dispatch namespace [string] [required]
196
206
 
197
207
  Flags:
198
- -c, --config Path to .toml configuration file [string]
199
- -e, --env Environment to use for operations and .env files [string]
200
- -h, --help Show help [boolean]
201
- -v, --version Show version number [boolean]"
208
+ -j, --experimental-json-config Experimental: Support wrangler.json [boolean]
209
+ -c, --config Path to .toml configuration file [string]
210
+ -e, --env Environment to use for operations and .env files [string]
211
+ -h, --help Show help [boolean]
212
+ -v, --version Show version number [boolean]"
202
213
  `);
203
214
  });
204
215
 
@@ -223,22 +234,23 @@ describe("dispatch-namespace", () => {
223
234
  let counter = 0;
224
235
  msw.use(
225
236
  rest.get(
226
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
227
- (req, res, cxt) => {
237
+ "*/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
238
+ (req, res, ctx) => {
228
239
  counter++;
229
240
  const { namespaceNameParam } = req.params;
230
241
  expect(counter).toBe(1);
231
242
  expect(namespaceNameParam).toBe(namespaceName);
232
243
  return res.once(
233
- cxt.status(200),
234
- cxt.json({
235
- namespace_id: "some-namespace-id",
236
- namespace_name: "namespace-name",
237
- created_on: "2022-06-29T14:30:08.16152Z",
238
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
239
- modified_on: "2022-06-29T14:30:08.16152Z",
240
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
241
- })
244
+ ctx.json(
245
+ createFetchResult({
246
+ namespace_id: "some-namespace-id",
247
+ namespace_name: "namespace-name",
248
+ created_on: "2022-06-29T14:30:08.16152Z",
249
+ created_by: "1fc1df98cc4420fe00367c3ab68c1639",
250
+ modified_on: "2022-06-29T14:30:08.16152Z",
251
+ modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
252
+ })
253
+ )
242
254
  );
243
255
  }
244
256
  )
@@ -266,22 +278,23 @@ describe("dispatch-namespace", () => {
266
278
  let counter = 0;
267
279
  msw.use(
268
280
  rest.put(
269
- "/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
270
- (req, res, cxt) => {
281
+ "*/accounts/:accountId/workers/dispatch/namespaces/:namespaceNameParam",
282
+ (req, res, ctx) => {
271
283
  counter++;
272
284
  const { namespaceNameParam } = req.params;
273
285
  expect(counter).toBe(1);
274
286
  expect(namespaceNameParam).toBe(namespaceName);
275
287
  return res.once(
276
- cxt.status(200),
277
- cxt.json({
278
- namespace_id: "some-namespace-id",
279
- namespace_name: "namespace-name",
280
- created_on: "2022-06-29T14:30:08.16152Z",
281
- created_by: "1fc1df98cc4420fe00367c3ab68c1639",
282
- modified_on: "2022-06-29T14:30:08.16152Z",
283
- modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
284
- })
288
+ ctx.json(
289
+ createFetchResult({
290
+ namespace_id: "some-namespace-id",
291
+ namespace_name: "namespace-name",
292
+ created_on: "2022-06-29T14:30:08.16152Z",
293
+ created_by: "1fc1df98cc4420fe00367c3ab68c1639",
294
+ modified_on: "2022-06-29T14:30:08.16152Z",
295
+ modified_by: "1fc1df98cc4420fe00367c3ab68c1639",
296
+ })
297
+ )
285
298
  );
286
299
  }
287
300
  )
@@ -305,10 +318,11 @@ describe("dispatch-namespace", () => {
305
318
  new-name New name of the dispatch namespace [string] [required]
306
319
 
307
320
  Flags:
308
- -c, --config Path to .toml configuration file [string]
309
- -e, --env Environment to use for operations and .env files [string]
310
- -h, --help Show help [boolean]
311
- -v, --version Show version number [boolean]"
321
+ -j, --experimental-json-config Experimental: Support wrangler.json [boolean]
322
+ -c, --config Path to .toml configuration file [string]
323
+ -e, --env Environment to use for operations and .env files [string]
324
+ -h, --help Show help [boolean]
325
+ -v, --version Show version number [boolean]"
312
326
  `);
313
327
  });
314
328
 
package/src/api/dev.ts CHANGED
@@ -3,28 +3,26 @@ import { startApiDev, startDev } from "../dev";
3
3
  import { logger } from "../logger";
4
4
 
5
5
  import type { Environment } from "../config";
6
- import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli";
6
+ import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli/types";
7
7
  import type { RequestInit, Response, RequestInfo } from "undici";
8
8
 
9
- interface DevOptions {
10
- config?: string;
11
- env?: string;
12
- ip?: string;
13
- port?: number;
14
- bundle?: boolean;
15
- inspectorPort?: number;
16
- localProtocol?: "http" | "https";
17
- assets?: string;
18
- site?: string;
19
- siteInclude?: string[];
20
- siteExclude?: string[];
21
- nodeCompat?: boolean;
22
- compatibilityDate?: string;
23
- compatibilityFlags?: string[];
24
- persist?: boolean;
25
- persistTo?: string;
26
- liveReload?: boolean;
27
- watch?: boolean;
9
+ export interface UnstableDevOptions {
10
+ config?: string; // Path to .toml configuration file, relative to cwd
11
+ env?: string; // Environment to use for operations and .env files
12
+ ip?: string; // IP address to listen on
13
+ port?: number; // Port to listen on
14
+ bundle?: boolean; // Set to false to skip internal build steps and directly publish script
15
+ inspectorPort?: number; // Port for devtools to connect to
16
+ localProtocol?: "http" | "https"; // Protocol to listen to requests on, defaults to http.
17
+ assets?: string; // Static assets to be served
18
+ site?: string; // Root folder of static assets for Workers Sites
19
+ siteInclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
20
+ siteExclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
21
+ nodeCompat?: boolean; // Enable Node.js compatibility
22
+ compatibilityDate?: string; // Date to use for compatibility checks
23
+ compatibilityFlags?: string[]; // Flags to use for compatibility checks
24
+ persist?: boolean; // Enable persistence for local mode, using default path: .wrangler/state
25
+ persistTo?: string; // Specify directory to use for local persistence (implies --persist)
28
26
  vars?: {
29
27
  [key: string]: unknown;
30
28
  };
@@ -44,23 +42,24 @@ interface DevOptions {
44
42
  bucket_name: string;
45
43
  preview_bucket_name?: string;
46
44
  }[];
47
- d1Databases?: Environment["d1_databases"];
48
- showInteractiveDevSession?: boolean;
49
- logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug";
50
- logPrefix?: string;
45
+ logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug"; // Specify logging level [choices: "debug", "info", "log", "warn", "error", "none"] [default: "log"]
51
46
  inspect?: boolean;
52
47
  local?: boolean;
53
- forceLocal?: boolean;
54
- enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
55
- _?: (string | number)[]; //yargs wants this
56
- $0?: string; //yargs wants this
57
- testScheduled?: boolean;
58
- experimentalLocal?: boolean;
59
- }
60
-
61
- interface DevApiOptions {
62
- testMode?: boolean;
63
- disableExperimentalWarning?: boolean;
48
+ accountId?: string;
49
+ experimental?: {
50
+ d1Databases?: Environment["d1_databases"];
51
+ disableExperimentalWarning?: boolean; // Disables wrangler's warning when unstable APIs are used.
52
+ disableDevRegistry?: boolean; // Disables wrangler's support multi-worker setups. May reduce flakiness when used in tests in CI.
53
+ enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
54
+ experimentalLocal?: boolean; // Use Miniflare 3 instead of Miniflare 2
55
+ experimentalLocalRemoteKv?: boolean;
56
+ forceLocal?: boolean;
57
+ liveReload?: boolean; // Auto reload HTML pages when change is detected in local mode
58
+ showInteractiveDevSession?: boolean;
59
+ testMode?: boolean; // This option shouldn't be used - We plan on removing it eventually
60
+ testScheduled?: boolean; // Test scheduled events by visiting /__scheduled in browser
61
+ watch?: boolean; // unstable_dev doesn't support watch-mode yet in testMode
62
+ };
64
63
  }
65
64
 
66
65
  export interface UnstableDevWorker {
@@ -75,11 +74,44 @@ export interface UnstableDevWorker {
75
74
  */
76
75
  export async function unstable_dev(
77
76
  script: string,
78
- options?: DevOptions,
79
- apiOptions?: DevApiOptions
77
+ options?: UnstableDevOptions,
78
+ apiOptions?: unknown
80
79
  ): Promise<UnstableDevWorker> {
81
- const { testMode = true, disableExperimentalWarning = false } =
82
- apiOptions || {};
80
+ // Note that not every experimental option is passed directly through to the underlying dev API - experimental options can be used here in unstable_dev. Otherwise we could just pass experimental down to dev blindly.
81
+
82
+ const experimentalOptions = {
83
+ // Defaults for "experimental" options
84
+ disableDevRegistry: false,
85
+ disableExperimentalWarning: false,
86
+ showInteractiveDevSession: false,
87
+ testMode: true,
88
+ // Override all options, including overwriting with "undefined"
89
+ ...options?.experimental,
90
+ };
91
+
92
+ const {
93
+ // there are two types of "experimental" options:
94
+ // 1. options to unstable_dev that we're still testing or are unsure of
95
+ disableDevRegistry,
96
+ disableExperimentalWarning,
97
+ forceLocal,
98
+ liveReload,
99
+ showInteractiveDevSession,
100
+ testMode,
101
+ testScheduled,
102
+ // 2. options for alpha/beta products/libs
103
+ d1Databases,
104
+ experimentalLocal,
105
+ experimentalLocalRemoteKv,
106
+ enablePagesAssetsServiceBinding,
107
+ } = experimentalOptions;
108
+
109
+ if (apiOptions) {
110
+ logger.error(
111
+ "unstable_dev's third argument (apiOptions) has been deprecated in favor of an `experimental` property within the second argument (options).\nPlease update your code from:\n`await unstable_dev('...', {...}, {...});`\nto:\n`await unstable_dev('...', {..., experimental: {...}});`"
112
+ );
113
+ }
114
+
83
115
  if (!disableExperimentalWarning) {
84
116
  logger.warn(
85
117
  `unstable_dev() is experimental\nunstable_dev()'s behaviour will likely change in future releases`
@@ -99,17 +131,59 @@ export async function unstable_dev(
99
131
  script: script,
100
132
  inspect: false,
101
133
  logLevel: "none",
102
- showInteractiveDevSession: false,
103
134
  _: [],
104
135
  $0: "",
105
136
  port: options?.port ?? 0,
106
137
  local: true,
107
- ...options,
138
+ d1Databases,
139
+ disableDevRegistry,
140
+ testScheduled: testScheduled ?? false,
141
+ experimentalLocal: experimentalLocal ?? false,
142
+ experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
143
+ enablePagesAssetsServiceBinding,
144
+ liveReload,
145
+ showInteractiveDevSession,
108
146
  onReady: (address, port) => {
109
147
  readyPort = port;
110
148
  readyAddress = address;
111
149
  ready(devServer);
112
150
  },
151
+ config: options?.config,
152
+ env: options?.env,
153
+ bundle: options?.bundle,
154
+ compatibilityDate: options?.compatibilityDate,
155
+ compatibilityFlags: options?.compatibilityFlags,
156
+ ip: options?.ip,
157
+ inspectorPort: options?.inspectorPort,
158
+ v: undefined,
159
+ localProtocol: options?.localProtocol,
160
+ assets: options?.assets,
161
+ site: options?.site, // Root folder of static assets for Workers Sites
162
+ siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
163
+ siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
164
+ nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
165
+ persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
166
+ persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
167
+ experimentalJsonConfig: undefined,
168
+ name: undefined,
169
+ noBundle: false,
170
+ format: undefined,
171
+ latest: false,
172
+ routes: undefined,
173
+ host: undefined,
174
+ localUpstream: undefined,
175
+ experimentalPublic: undefined,
176
+ upstreamProtocol: undefined,
177
+ var: undefined,
178
+ define: undefined,
179
+ jsxFactory: undefined,
180
+ jsxFragment: undefined,
181
+ tsconfig: undefined,
182
+ minify: undefined,
183
+ experimentalEnableLocalPersistence: undefined,
184
+ legacyEnv: undefined,
185
+ public: undefined,
186
+ ...options,
113
187
  });
114
188
  }).then((devServer) => {
115
189
  // now that the inner promise has resolved, we can resolve the outer promise
@@ -145,16 +219,61 @@ export async function unstable_dev(
145
219
  const devServer = startDev({
146
220
  script: script,
147
221
  inspect: false,
148
- showInteractiveDevSession: false,
149
222
  _: [],
150
223
  $0: "",
224
+ logLevel: options?.logLevel ?? "log",
225
+ port: options?.port ?? 0,
151
226
  local: true,
152
- ...options,
227
+ showInteractiveDevSession,
228
+ d1Databases,
229
+ disableDevRegistry,
230
+ testScheduled: testScheduled ?? false,
231
+ experimentalLocal: experimentalLocal ?? false,
232
+ experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
233
+ enablePagesAssetsServiceBinding,
234
+ forceLocal,
235
+ liveReload,
153
236
  onReady: (address, port) => {
154
237
  readyPort = port;
155
238
  readyAddress = address;
156
239
  ready(devServer);
157
240
  },
241
+ config: options?.config,
242
+ env: options?.env,
243
+ bundle: options?.bundle,
244
+ compatibilityDate: options?.compatibilityDate,
245
+ compatibilityFlags: options?.compatibilityFlags,
246
+ ip: options?.ip,
247
+ inspectorPort: options?.inspectorPort,
248
+ v: undefined,
249
+ localProtocol: options?.localProtocol,
250
+ assets: options?.assets,
251
+ site: options?.site, // Root folder of static assets for Workers Sites
252
+ siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
253
+ siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
254
+ nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
255
+ persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
256
+ persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
257
+ experimentalJsonConfig: undefined,
258
+ name: undefined,
259
+ noBundle: false,
260
+ format: undefined,
261
+ latest: false,
262
+ routes: undefined,
263
+ host: undefined,
264
+ localUpstream: undefined,
265
+ experimentalPublic: undefined,
266
+ upstreamProtocol: undefined,
267
+ var: undefined,
268
+ define: undefined,
269
+ jsxFactory: undefined,
270
+ jsxFragment: undefined,
271
+ tsconfig: undefined,
272
+ minify: undefined,
273
+ experimentalEnableLocalPersistence: undefined,
274
+ legacyEnv: undefined,
275
+ public: undefined,
276
+ ...options,
158
277
  });
159
278
  }).then((devServer) => {
160
279
  resolve({
@@ -182,27 +301,16 @@ export async function unstable_dev(
182
301
  export function parseRequestInput(
183
302
  readyAddress: string,
184
303
  readyPort: number,
185
- input?: RequestInfo,
304
+ input: RequestInfo = "/",
186
305
  init?: RequestInit,
187
306
  protocol: "http" | "https" = "http"
188
307
  ): [RequestInfo, RequestInit | undefined] {
189
308
  if (input instanceof Request) {
190
309
  return [input, undefined];
191
- } else if (input instanceof URL) {
192
- input = `${protocol}://${readyAddress}:${readyPort}${input.pathname}`;
193
- } else if (typeof input === "string") {
194
- try {
195
- // Want to strip the URL to only get the pathname, but the user could pass in only the pathname
196
- // Will error if we try and pass "/something" into new URL("/something")
197
- input = `${protocol}://${readyAddress}:${readyPort}${
198
- new URL(input).pathname
199
- }`;
200
- } catch {
201
- input = `${protocol}://${readyAddress}:${readyPort}${input}`;
202
- }
203
- } else {
204
- input = `${protocol}://${readyAddress}:${readyPort}`;
205
310
  }
206
-
207
- return [input, init];
311
+ const url = new URL(`${input}`, `${protocol}://${readyAddress}:${readyPort}`);
312
+ url.protocol = protocol;
313
+ url.hostname = readyAddress;
314
+ url.port = readyPort.toString();
315
+ return [url, init];
208
316
  }
package/src/api/index.ts CHANGED
@@ -1,2 +1,11 @@
1
1
  export { unstable_dev } from "./dev";
2
- export type { UnstableDevWorker } from "./dev";
2
+ export type { UnstableDevWorker, UnstableDevOptions } from "./dev";
3
+ export { unstable_pages } from "./pages";
4
+ export {
5
+ uploadMTlsCertificate,
6
+ uploadMTlsCertificateFromFs,
7
+ listMTlsCertificates,
8
+ getMTlsCertificate,
9
+ getMTlsCertificateByName,
10
+ deleteMTlsCertificate,
11
+ } from "./mtls-certificate";