wrangler 0.0.0-e64812e → 0.0.0-e8e684c7

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 (214) hide show
  1. package/README.md +27 -3
  2. package/bin/wrangler.js +150 -62
  3. package/kv-asset-handler.js +1 -0
  4. package/miniflare-dist/index.mjs +663 -7
  5. package/package.json +173 -152
  6. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  7. package/src/__tests__/config-cache.test.ts +30 -24
  8. package/src/__tests__/configuration.test.ts +4015 -3363
  9. package/src/__tests__/dev.test.tsx +1290 -952
  10. package/src/__tests__/generate.test.ts +91 -0
  11. package/src/__tests__/guess-worker-format.test.ts +68 -68
  12. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  13. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  14. package/src/__tests__/helpers/mock-bin.ts +20 -20
  15. package/src/__tests__/helpers/mock-cfetch.ts +179 -94
  16. package/src/__tests__/helpers/mock-console.ts +49 -39
  17. package/src/__tests__/helpers/mock-dialogs.ts +94 -71
  18. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  19. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  20. package/src/__tests__/helpers/mock-istty.ts +65 -18
  21. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  22. package/src/__tests__/helpers/mock-kv.ts +26 -26
  23. package/src/__tests__/helpers/mock-oauth-flow.ts +223 -228
  24. package/src/__tests__/helpers/mock-process.ts +39 -0
  25. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  26. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  27. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  28. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  29. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  30. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  31. package/src/__tests__/https-options.test.ts +142 -109
  32. package/src/__tests__/index.test.ts +222 -233
  33. package/src/__tests__/init.test.ts +2139 -1603
  34. package/src/__tests__/jest.setup.ts +114 -34
  35. package/src/__tests__/kv.test.ts +1222 -1032
  36. package/src/__tests__/logger.test.ts +100 -74
  37. package/src/__tests__/metrics.test.ts +450 -0
  38. package/src/__tests__/package-manager.test.ts +303 -303
  39. package/src/__tests__/pages.test.ts +1173 -652
  40. package/src/__tests__/parse.test.ts +252 -252
  41. package/src/__tests__/publish.test.ts +6788 -5301
  42. package/src/__tests__/pubsub.test.ts +367 -0
  43. package/src/__tests__/r2.test.ts +328 -225
  44. package/src/__tests__/route.test.ts +18 -18
  45. package/src/__tests__/secret.test.ts +470 -459
  46. package/src/__tests__/tail.test.ts +676 -564
  47. package/src/__tests__/test-old-node-version.js +31 -0
  48. package/src/__tests__/user.test.ts +136 -112
  49. package/src/__tests__/validate-dev-props.test.ts +56 -0
  50. package/src/__tests__/version.test.ts +35 -0
  51. package/src/__tests__/whoami.test.tsx +267 -83
  52. package/src/__tests__/worker-namespace.test.ts +329 -0
  53. package/src/abort.d.ts +1 -1
  54. package/src/api/dev.ts +93 -0
  55. package/src/api/index.ts +1 -0
  56. package/src/bundle-reporter.tsx +29 -0
  57. package/src/bundle.ts +430 -157
  58. package/src/cfetch/index.ts +80 -80
  59. package/src/cfetch/internal.ts +244 -91
  60. package/src/cli.ts +21 -7
  61. package/src/config/config.ts +224 -195
  62. package/src/config/diagnostics.ts +61 -61
  63. package/src/config/environment.ts +422 -357
  64. package/src/config/index.ts +219 -193
  65. package/src/config/validation-helpers.ts +379 -357
  66. package/src/config/validation.ts +1690 -1367
  67. package/src/config-cache.ts +81 -41
  68. package/src/create-worker-preview.ts +208 -136
  69. package/src/create-worker-upload-form.ts +275 -238
  70. package/src/dev/dev-vars.ts +13 -13
  71. package/src/dev/dev.tsx +477 -351
  72. package/src/dev/local.tsx +426 -295
  73. package/src/dev/remote.tsx +406 -211
  74. package/src/dev/use-esbuild.ts +154 -94
  75. package/src/dev/validate-dev-props.ts +31 -0
  76. package/src/dev-registry.tsx +160 -0
  77. package/src/dev.tsx +696 -0
  78. package/src/dialogs.tsx +97 -97
  79. package/src/dispatch-namespace.ts +206 -0
  80. package/src/durable.ts +87 -87
  81. package/src/entry.ts +234 -228
  82. package/src/environment-variables.ts +23 -23
  83. package/src/errors.ts +6 -6
  84. package/src/faye-websocket.d.ts +6 -0
  85. package/src/generate.ts +131 -0
  86. package/src/git-client.ts +42 -0
  87. package/src/global-wrangler-config-path.ts +26 -0
  88. package/src/https-options.ts +84 -80
  89. package/src/index.tsx +2164 -2768
  90. package/src/init.ts +622 -0
  91. package/src/inspect.ts +678 -593
  92. package/src/intl-polyfill.d.ts +123 -123
  93. package/src/is-ci.ts +14 -0
  94. package/src/is-interactive.ts +12 -0
  95. package/src/kv.ts +299 -277
  96. package/src/logger.ts +46 -39
  97. package/src/metrics/index.ts +5 -0
  98. package/src/metrics/metrics-config.ts +239 -0
  99. package/src/metrics/metrics-dispatcher.ts +96 -0
  100. package/src/metrics/metrics-usage-headers.ts +24 -0
  101. package/src/metrics/send-event.ts +92 -0
  102. package/src/miniflare-cli/assets.ts +554 -0
  103. package/src/miniflare-cli/enum-keys.ts +8 -8
  104. package/src/miniflare-cli/index.ts +198 -32
  105. package/src/miniflare-cli/request-context.ts +18 -18
  106. package/src/module-collection.ts +212 -212
  107. package/src/open-in-browser.ts +4 -6
  108. package/src/package-manager.ts +173 -128
  109. package/src/pages/build.tsx +238 -0
  110. package/src/pages/constants.ts +12 -0
  111. package/src/pages/deployments.tsx +106 -0
  112. package/src/pages/dev.tsx +528 -0
  113. package/src/pages/errors.ts +22 -0
  114. package/src/pages/functions/buildPlugin.ts +109 -0
  115. package/src/pages/functions/buildWorker.ts +155 -0
  116. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  117. package/src/pages/functions/filepath-routing.ts +189 -0
  118. package/src/pages/functions/identifiers.ts +78 -0
  119. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  120. package/src/pages/functions/routes-consolidation.ts +73 -0
  121. package/src/pages/functions/routes-transformation.test.ts +271 -0
  122. package/src/pages/functions/routes-transformation.ts +122 -0
  123. package/src/pages/functions/routes.ts +151 -0
  124. package/src/pages/functions.tsx +96 -0
  125. package/src/pages/index.tsx +94 -0
  126. package/src/pages/projects.tsx +169 -0
  127. package/src/pages/publish.tsx +391 -0
  128. package/src/pages/types.ts +49 -0
  129. package/src/pages/upload.tsx +413 -0
  130. package/src/pages/utils.ts +12 -0
  131. package/src/parse.ts +209 -125
  132. package/src/paths.ts +6 -6
  133. package/src/preview.ts +31 -0
  134. package/src/proxy.ts +410 -389
  135. package/src/publish.ts +773 -534
  136. package/src/pubsub/index.ts +286 -0
  137. package/src/pubsub/pubsub-commands.tsx +623 -0
  138. package/src/r2.ts +100 -19
  139. package/src/selfsigned.d.ts +23 -23
  140. package/src/sites.tsx +278 -201
  141. package/src/tail/filters.ts +111 -109
  142. package/src/tail/index.ts +230 -217
  143. package/src/tail/printing.ts +86 -46
  144. package/src/update-check.ts +11 -11
  145. package/src/user/choose-account.tsx +69 -0
  146. package/src/user/env-vars.ts +46 -0
  147. package/src/user/generate-auth-url.ts +33 -0
  148. package/src/user/generate-random-state.ts +16 -0
  149. package/src/user/index.ts +3 -0
  150. package/src/user/user.tsx +1191 -0
  151. package/src/whoami.tsx +141 -42
  152. package/src/worker.ts +123 -99
  153. package/src/zones.ts +167 -0
  154. package/templates/checked-fetch.js +17 -0
  155. package/templates/first-party-worker-module-facade.ts +18 -0
  156. package/templates/format-dev-errors.ts +32 -0
  157. package/templates/new-worker-scheduled.js +3 -3
  158. package/templates/new-worker-scheduled.ts +15 -15
  159. package/templates/new-worker.js +3 -3
  160. package/templates/new-worker.ts +15 -15
  161. package/templates/no-op-worker.js +10 -0
  162. package/templates/pages-shim.ts +9 -0
  163. package/templates/pages-template-plugin.ts +167 -0
  164. package/templates/pages-template-worker.ts +172 -0
  165. package/templates/serve-static-assets.ts +63 -0
  166. package/templates/service-bindings-module-facade.js +54 -0
  167. package/templates/service-bindings-sw-facade.js +42 -0
  168. package/templates/tsconfig.json +95 -95
  169. package/wrangler-dist/cli.d.ts +338 -0
  170. package/wrangler-dist/cli.js +95449 -67524
  171. package/pages/functions/buildPlugin.ts +0 -105
  172. package/pages/functions/buildWorker.ts +0 -151
  173. package/pages/functions/filepath-routing.ts +0 -189
  174. package/pages/functions/identifiers.ts +0 -78
  175. package/pages/functions/routes.ts +0 -156
  176. package/pages/functions/template-plugin.ts +0 -147
  177. package/pages/functions/template-worker.ts +0 -143
  178. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  179. package/src/pages.tsx +0 -2038
  180. package/src/user.tsx +0 -1203
  181. package/templates/static-asset-facade.js +0 -47
  182. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  183. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  184. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  185. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  186. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  187. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  188. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  189. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  190. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  191. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  192. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  193. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  194. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  195. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  196. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  197. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  198. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  199. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  200. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  201. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  202. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  203. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  204. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  205. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  206. package/vendor/wrangler-mime/LICENSE +0 -21
  207. package/vendor/wrangler-mime/Mime.js +0 -97
  208. package/vendor/wrangler-mime/README.md +0 -187
  209. package/vendor/wrangler-mime/cli.js +0 -46
  210. package/vendor/wrangler-mime/index.js +0 -4
  211. package/vendor/wrangler-mime/lite.js +0 -4
  212. package/vendor/wrangler-mime/package.json +0 -52
  213. package/vendor/wrangler-mime/types/other.js +0 -1
  214. package/vendor/wrangler-mime/types/standard.js +0 -1
@@ -1,41 +1,207 @@
1
- import { Log, LogLevel, Miniflare } from "miniflare";
1
+ import { fetch } from "@miniflare/core";
2
+ import {
3
+ DurableObjectNamespace,
4
+ DurableObjectStub,
5
+ } from "@miniflare/durable-objects";
6
+ import {
7
+ Log,
8
+ LogLevel,
9
+ Miniflare,
10
+ Response as MiniflareResponse,
11
+ Request as MiniflareRequest,
12
+ } from "miniflare";
2
13
  import yargs from "yargs";
3
14
  import { hideBin } from "yargs/helpers";
15
+ import { FatalError } from "../errors";
16
+ import generateASSETSBinding from "./assets";
4
17
  import { enumKeys } from "./enum-keys";
5
18
  import { getRequestContextCheckOptions } from "./request-context";
19
+ import type { Options } from "./assets";
20
+ import type { AddressInfo } from "net";
21
+
22
+ export interface EnablePagesAssetsServiceBindingOptions {
23
+ proxyPort?: number;
24
+ directory?: string;
25
+ }
26
+
27
+ // miniflare defines this but importing it throws:
28
+ // Dynamic require of "path" is not supported
29
+ class NoOpLog extends Log {
30
+ log(): void {}
31
+
32
+ error(message: Error): void {
33
+ throw message;
34
+ }
35
+ }
6
36
 
7
37
  async function main() {
8
- const args = await yargs(hideBin(process.argv))
9
- .help(false)
10
- .version(false)
11
- .option("log", {
12
- choices: enumKeys(LogLevel),
13
- }).argv;
14
-
15
- const logLevel = LogLevel[args.log ?? "INFO"];
16
- const requestContextCheckOptions = await getRequestContextCheckOptions();
17
- const config = {
18
- ...JSON.parse((args._[0] as string) ?? "{}"),
19
- ...requestContextCheckOptions,
20
- log: new Log(logLevel),
21
- };
22
-
23
- if (logLevel > LogLevel.INFO) {
24
- console.log("OPTIONS:\n", JSON.stringify(config, null, 2));
25
- }
26
-
27
- const mf = new Miniflare(config);
28
-
29
- try {
30
- // Start Miniflare development server
31
- await mf.startServer();
32
- await mf.startScheduler();
33
- } catch (e) {
34
- mf.log.error(e as Error);
35
- process.exitCode = 1;
36
- // Unmount any mounted workers
37
- await mf.dispose();
38
- }
38
+ const args = await yargs(hideBin(process.argv))
39
+ .help(false)
40
+ .version(false)
41
+ .option("log", {
42
+ choices: enumKeys(LogLevel),
43
+ }).argv;
44
+
45
+ const logLevel = LogLevel[args.log ?? "INFO"];
46
+ const requestContextCheckOptions = await getRequestContextCheckOptions();
47
+ const config = {
48
+ ...JSON.parse((args._[0] as string) ?? "{}"),
49
+ ...requestContextCheckOptions,
50
+ };
51
+ //miniflare's logLevel 0 still logs routes, so lets override the logger
52
+ config.log = config.disableLogs
53
+ ? new NoOpLog()
54
+ : new Log(logLevel, config.logOptions);
55
+
56
+ if (logLevel > LogLevel.INFO) {
57
+ console.log("OPTIONS:\n", JSON.stringify(config, null, 2));
58
+ }
59
+
60
+ config.bindings = {
61
+ ...config.bindings,
62
+ ...Object.fromEntries(
63
+ Object.entries(
64
+ config.externalDurableObjects as Record<
65
+ string,
66
+ { name: string; host: string; port: number }
67
+ >
68
+ ).map(([binding, { name, host, port }]) => {
69
+ const factory = () => {
70
+ throw new FatalError(
71
+ "An external Durable Object instance's state has somehow been attempted to be accessed.",
72
+ 1
73
+ );
74
+ };
75
+ const namespace = new DurableObjectNamespace(name as string, factory);
76
+ namespace.get = (id) => {
77
+ const stub = new DurableObjectStub(factory, id);
78
+ stub.fetch = (...reqArgs) => {
79
+ const requestFromArgs = new MiniflareRequest(...reqArgs);
80
+ const url = new URL(requestFromArgs.url);
81
+ url.host = host;
82
+ if (port !== undefined) url.port = port.toString();
83
+ const request = new MiniflareRequest(
84
+ url.toString(),
85
+ requestFromArgs
86
+ );
87
+ request.headers.set("x-miniflare-durable-object-name", name);
88
+ request.headers.set("x-miniflare-durable-object-id", id.toString());
89
+
90
+ return fetch(request);
91
+ };
92
+ return stub;
93
+ };
94
+ return [binding, namespace];
95
+ })
96
+ ),
97
+ };
98
+
99
+ let mf: Miniflare | undefined;
100
+ let durableObjectsMf: Miniflare | undefined = undefined;
101
+ let durableObjectsMfPort: number | undefined = undefined;
102
+
103
+ try {
104
+ if (args._[1]) {
105
+ const opts: EnablePagesAssetsServiceBindingOptions = JSON.parse(
106
+ args._[1] as string
107
+ );
108
+
109
+ if (isNaN(opts.proxyPort || NaN) && !opts.directory) {
110
+ throw new Error(
111
+ "MiniflareCLIOptions: built in service bindings set to true, but no port or directory provided"
112
+ );
113
+ }
114
+
115
+ const options: Options = {
116
+ log: config.log,
117
+ proxyPort: opts.proxyPort,
118
+ directory: opts.directory,
119
+ };
120
+
121
+ config.serviceBindings = {
122
+ ...config.serviceBindings,
123
+ ASSETS: await generateASSETSBinding(options),
124
+ };
125
+ }
126
+ mf = new Miniflare(config);
127
+ // Start Miniflare development server
128
+ await mf.startServer();
129
+ await mf.startScheduler();
130
+
131
+ const internalDurableObjectClassNames = Object.values(
132
+ config.durableObjects as Record<string, string>
133
+ );
134
+
135
+ if (internalDurableObjectClassNames.length > 0) {
136
+ durableObjectsMf = new Miniflare({
137
+ host: config.host,
138
+ port: 0,
139
+ script: `
140
+ export default {
141
+ fetch(request, env) {
142
+ return env.DO.fetch(request)
143
+ }
144
+ }`,
145
+ serviceBindings: {
146
+ DO: async (request: MiniflareRequest) => {
147
+ request = new MiniflareRequest(request);
148
+
149
+ const name = request.headers.get("x-miniflare-durable-object-name");
150
+ const idString = request.headers.get(
151
+ "x-miniflare-durable-object-id"
152
+ );
153
+ request.headers.delete("x-miniflare-durable-object-name");
154
+ request.headers.delete("x-miniflare-durable-object-id");
155
+
156
+ if (!name || !idString) {
157
+ return new MiniflareResponse(
158
+ "[durable-object-proxy-err] Missing `x-miniflare-durable-object-name` or `x-miniflare-durable-object-id` headers.",
159
+ { status: 400 }
160
+ );
161
+ }
162
+
163
+ const namespace = await mf?.getDurableObjectNamespace(name);
164
+ const id = namespace?.idFromString(idString);
165
+
166
+ if (!id) {
167
+ return new MiniflareResponse(
168
+ "[durable-object-proxy-err] Could not generate an ID. Possibly due to a mismatched DO name and ID?",
169
+ { status: 500 }
170
+ );
171
+ }
172
+
173
+ const stub = namespace?.get(id);
174
+
175
+ if (!stub) {
176
+ return new MiniflareResponse(
177
+ "[durable-object-proxy-err] Could not generate a stub. Possibly due to a mismatched DO name and ID?",
178
+ { status: 500 }
179
+ );
180
+ }
181
+
182
+ return stub.fetch(request);
183
+ },
184
+ },
185
+ modules: true,
186
+ });
187
+ const server = await durableObjectsMf.startServer();
188
+ durableObjectsMfPort = (server.address() as AddressInfo).port;
189
+ }
190
+
191
+ process.send &&
192
+ process.send(
193
+ JSON.stringify({
194
+ ready: true,
195
+ durableObjectsPort: durableObjectsMfPort,
196
+ })
197
+ );
198
+ } catch (e) {
199
+ mf?.log.error(e as Error);
200
+ process.exitCode = 1;
201
+ // Unmount any mounted workers
202
+ await mf?.dispose();
203
+ await durableObjectsMf?.dispose();
204
+ }
39
205
  }
40
206
 
41
207
  await main();
@@ -16,25 +16,25 @@ import type { MiniflareOptions } from "miniflare";
16
16
  * that indicate to miniflare whether to run the checks or not.
17
17
  */
18
18
  export const getRequestContextCheckOptions = async (): Promise<
19
- Pick<MiniflareOptions, "globalAsyncIO" | "globalTimers" | "globalRandom">
19
+ Pick<MiniflareOptions, "globalAsyncIO" | "globalTimers" | "globalRandom">
20
20
  > => {
21
- // check that there's an implementation of AsyncLocalStorage
22
- let hasAsyncLocalStorage = true;
23
- try {
24
- // ripped from the example here https://nodejs.org/api/async_context.html#class-asynclocalstorage
25
- const { AsyncLocalStorage } = await import("node:async_hooks");
26
- const storage = new AsyncLocalStorage<string>();
21
+ // check that there's an implementation of AsyncLocalStorage
22
+ let hasAsyncLocalStorage = true;
23
+ try {
24
+ // ripped from the example here https://nodejs.org/api/async_context.html#class-asynclocalstorage
25
+ const { AsyncLocalStorage } = await import("node:async_hooks");
26
+ const storage = new AsyncLocalStorage<string>();
27
27
 
28
- hasAsyncLocalStorage = storage.run("some-value", () => {
29
- return storage.getStore() === "some-value";
30
- });
31
- } catch (e) {
32
- hasAsyncLocalStorage = false;
33
- }
28
+ hasAsyncLocalStorage = storage.run("some-value", () => {
29
+ return storage.getStore() === "some-value";
30
+ });
31
+ } catch (e) {
32
+ hasAsyncLocalStorage = false;
33
+ }
34
34
 
35
- return {
36
- globalAsyncIO: hasAsyncLocalStorage,
37
- globalRandom: hasAsyncLocalStorage,
38
- globalTimers: hasAsyncLocalStorage,
39
- };
35
+ return {
36
+ globalAsyncIO: hasAsyncLocalStorage,
37
+ globalRandom: hasAsyncLocalStorage,
38
+ globalTimers: hasAsyncLocalStorage,
39
+ };
40
40
  };