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,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,28 @@ 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 { Rule } from "../config/environment";
7
+ import type { EnablePagesAssetsServiceBindingOptions } from "../miniflare-cli/types";
8
+ import type { CfModule } from "../worker";
7
9
  import type { RequestInit, Response, RequestInfo } from "undici";
8
10
 
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;
11
+ export interface UnstableDevOptions {
12
+ config?: string; // Path to .toml configuration file, relative to cwd
13
+ env?: string; // Environment to use for operations and .env files
14
+ ip?: string; // IP address to listen on
15
+ port?: number; // Port to listen on
16
+ bundle?: boolean; // Set to false to skip internal build steps and directly publish script
17
+ inspectorPort?: number; // Port for devtools to connect to
18
+ localProtocol?: "http" | "https"; // Protocol to listen to requests on, defaults to http.
19
+ assets?: string; // Static assets to be served
20
+ site?: string; // Root folder of static assets for Workers Sites
21
+ siteInclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
22
+ siteExclude?: string[]; // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
23
+ nodeCompat?: boolean; // Enable Node.js compatibility
24
+ compatibilityDate?: string; // Date to use for compatibility checks
25
+ compatibilityFlags?: string[]; // Flags to use for compatibility checks
26
+ persist?: boolean; // Enable persistence for local mode, using default path: .wrangler/state
27
+ persistTo?: string; // Specify directory to use for local persistence (implies --persist)
28
28
  vars?: {
29
29
  [key: string]: unknown;
30
30
  };
@@ -44,23 +44,28 @@ interface DevOptions {
44
44
  bucket_name: string;
45
45
  preview_bucket_name?: string;
46
46
  }[];
47
- d1Databases?: Environment["d1_databases"];
48
- showInteractiveDevSession?: boolean;
49
- logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug";
50
- logPrefix?: string;
47
+ moduleRoot?: string;
48
+ rules?: Rule[];
49
+ logLevel?: "none" | "info" | "error" | "log" | "warn" | "debug"; // Specify logging level [choices: "debug", "info", "log", "warn", "error", "none"] [default: "log"]
51
50
  inspect?: boolean;
52
51
  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;
52
+ accountId?: string;
53
+ experimental?: {
54
+ processEntrypoint?: boolean;
55
+ additionalModules?: CfModule[];
56
+ d1Databases?: Environment["d1_databases"];
57
+ disableExperimentalWarning?: boolean; // Disables wrangler's warning when unstable APIs are used.
58
+ disableDevRegistry?: boolean; // Disables wrangler's support multi-worker setups. May reduce flakiness when used in tests in CI.
59
+ enablePagesAssetsServiceBinding?: EnablePagesAssetsServiceBindingOptions;
60
+ experimentalLocal?: boolean; // Use Miniflare 3 instead of Miniflare 2
61
+ experimentalLocalRemoteKv?: boolean;
62
+ forceLocal?: boolean;
63
+ liveReload?: boolean; // Auto reload HTML pages when change is detected in local mode
64
+ showInteractiveDevSession?: boolean;
65
+ testMode?: boolean; // This option shouldn't be used - We plan on removing it eventually
66
+ testScheduled?: boolean; // Test scheduled events by visiting /__scheduled in browser
67
+ watch?: boolean; // unstable_dev doesn't support watch-mode yet in testMode
68
+ };
64
69
  }
65
70
 
66
71
  export interface UnstableDevWorker {
@@ -75,11 +80,46 @@ export interface UnstableDevWorker {
75
80
  */
76
81
  export async function unstable_dev(
77
82
  script: string,
78
- options?: DevOptions,
79
- apiOptions?: DevApiOptions
83
+ options?: UnstableDevOptions,
84
+ apiOptions?: unknown
80
85
  ): Promise<UnstableDevWorker> {
81
- const { testMode = true, disableExperimentalWarning = false } =
82
- apiOptions || {};
86
+ // 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.
87
+
88
+ const experimentalOptions = {
89
+ // Defaults for "experimental" options
90
+ disableDevRegistry: false,
91
+ disableExperimentalWarning: false,
92
+ showInteractiveDevSession: false,
93
+ testMode: true,
94
+ // Override all options, including overwriting with "undefined"
95
+ ...options?.experimental,
96
+ };
97
+
98
+ const {
99
+ // there are two types of "experimental" options:
100
+ // 1. options to unstable_dev that we're still testing or are unsure of
101
+ processEntrypoint = false,
102
+ additionalModules,
103
+ disableDevRegistry,
104
+ disableExperimentalWarning,
105
+ forceLocal,
106
+ liveReload,
107
+ showInteractiveDevSession,
108
+ testMode,
109
+ testScheduled,
110
+ // 2. options for alpha/beta products/libs
111
+ d1Databases,
112
+ experimentalLocal,
113
+ experimentalLocalRemoteKv,
114
+ enablePagesAssetsServiceBinding,
115
+ } = experimentalOptions;
116
+
117
+ if (apiOptions) {
118
+ logger.error(
119
+ "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: {...}});`"
120
+ );
121
+ }
122
+
83
123
  if (!disableExperimentalWarning) {
84
124
  logger.warn(
85
125
  `unstable_dev() is experimental\nunstable_dev()'s behaviour will likely change in future releases`
@@ -99,17 +139,61 @@ export async function unstable_dev(
99
139
  script: script,
100
140
  inspect: false,
101
141
  logLevel: "none",
102
- showInteractiveDevSession: false,
103
142
  _: [],
104
143
  $0: "",
105
144
  port: options?.port ?? 0,
106
145
  local: true,
107
- ...options,
146
+ d1Databases,
147
+ disableDevRegistry,
148
+ testScheduled: testScheduled ?? false,
149
+ experimentalLocal: experimentalLocal ?? false,
150
+ experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
151
+ enablePagesAssetsServiceBinding,
152
+ liveReload,
153
+ showInteractiveDevSession,
108
154
  onReady: (address, port) => {
109
155
  readyPort = port;
110
156
  readyAddress = address;
111
157
  ready(devServer);
112
158
  },
159
+ config: options?.config,
160
+ env: options?.env,
161
+ processEntrypoint,
162
+ additionalModules,
163
+ bundle: options?.bundle,
164
+ compatibilityDate: options?.compatibilityDate,
165
+ compatibilityFlags: options?.compatibilityFlags,
166
+ ip: options?.ip,
167
+ inspectorPort: options?.inspectorPort,
168
+ v: undefined,
169
+ localProtocol: options?.localProtocol,
170
+ assets: options?.assets,
171
+ site: options?.site, // Root folder of static assets for Workers Sites
172
+ siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
173
+ siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
174
+ nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
175
+ persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
176
+ persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
177
+ experimentalJsonConfig: undefined,
178
+ name: undefined,
179
+ noBundle: false,
180
+ format: undefined,
181
+ latest: false,
182
+ routes: undefined,
183
+ host: undefined,
184
+ localUpstream: undefined,
185
+ experimentalPublic: undefined,
186
+ upstreamProtocol: undefined,
187
+ var: undefined,
188
+ define: undefined,
189
+ jsxFactory: undefined,
190
+ jsxFragment: undefined,
191
+ tsconfig: undefined,
192
+ minify: undefined,
193
+ experimentalEnableLocalPersistence: undefined,
194
+ legacyEnv: undefined,
195
+ public: undefined,
196
+ ...options,
113
197
  });
114
198
  }).then((devServer) => {
115
199
  // now that the inner promise has resolved, we can resolve the outer promise
@@ -145,16 +229,63 @@ export async function unstable_dev(
145
229
  const devServer = startDev({
146
230
  script: script,
147
231
  inspect: false,
148
- showInteractiveDevSession: false,
149
232
  _: [],
150
233
  $0: "",
234
+ logLevel: options?.logLevel ?? "log",
235
+ port: options?.port ?? 0,
151
236
  local: true,
152
- ...options,
237
+ showInteractiveDevSession,
238
+ d1Databases,
239
+ disableDevRegistry,
240
+ testScheduled: testScheduled ?? false,
241
+ experimentalLocal: experimentalLocal ?? false,
242
+ experimentalLocalRemoteKv: experimentalLocalRemoteKv ?? false,
243
+ enablePagesAssetsServiceBinding,
244
+ forceLocal,
245
+ liveReload,
153
246
  onReady: (address, port) => {
154
247
  readyPort = port;
155
248
  readyAddress = address;
156
249
  ready(devServer);
157
250
  },
251
+ config: options?.config,
252
+ env: options?.env,
253
+ processEntrypoint,
254
+ additionalModules,
255
+ bundle: options?.bundle,
256
+ compatibilityDate: options?.compatibilityDate,
257
+ compatibilityFlags: options?.compatibilityFlags,
258
+ ip: options?.ip,
259
+ inspectorPort: options?.inspectorPort,
260
+ v: undefined,
261
+ localProtocol: options?.localProtocol,
262
+ assets: options?.assets,
263
+ site: options?.site, // Root folder of static assets for Workers Sites
264
+ siteInclude: options?.siteInclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Only matched items will be uploaded.
265
+ siteExclude: options?.siteExclude, // Array of .gitignore-style patterns that match file or directory names from the sites directory. Matched items will not be uploaded.
266
+ nodeCompat: options?.nodeCompat, // Enable Node.js compatibility
267
+ persist: options?.persist, // Enable persistence for local mode, using default path: .wrangler/state
268
+ persistTo: options?.persistTo, // Specify directory to use for local persistence (implies --persist)
269
+ experimentalJsonConfig: undefined,
270
+ name: undefined,
271
+ noBundle: false,
272
+ format: undefined,
273
+ latest: false,
274
+ routes: undefined,
275
+ host: undefined,
276
+ localUpstream: undefined,
277
+ experimentalPublic: undefined,
278
+ upstreamProtocol: undefined,
279
+ var: undefined,
280
+ define: undefined,
281
+ jsxFactory: undefined,
282
+ jsxFragment: undefined,
283
+ tsconfig: undefined,
284
+ minify: undefined,
285
+ experimentalEnableLocalPersistence: undefined,
286
+ legacyEnv: undefined,
287
+ public: undefined,
288
+ ...options,
158
289
  });
159
290
  }).then((devServer) => {
160
291
  resolve({
@@ -182,27 +313,16 @@ export async function unstable_dev(
182
313
  export function parseRequestInput(
183
314
  readyAddress: string,
184
315
  readyPort: number,
185
- input?: RequestInfo,
316
+ input: RequestInfo = "/",
186
317
  init?: RequestInit,
187
318
  protocol: "http" | "https" = "http"
188
319
  ): [RequestInfo, RequestInit | undefined] {
189
320
  if (input instanceof Request) {
190
321
  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
322
  }
206
-
207
- return [input, init];
323
+ const url = new URL(`${input}`, `${protocol}://${readyAddress}:${readyPort}`);
324
+ url.protocol = protocol;
325
+ url.hostname = readyAddress;
326
+ url.port = readyPort.toString();
327
+ return [url, init];
208
328
  }
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";