wrangler 0.0.0-e4047cab → 0.0.0-e4104915

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 (276) hide show
  1. package/README.md +12 -14
  2. package/bin/wrangler.js +14 -67
  3. package/package.json +213 -192
  4. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  5. package/templates/__tests__/tsconfig.json +8 -0
  6. package/templates/checked-fetch.js +19 -6
  7. package/templates/facade.d.ts +17 -0
  8. package/templates/gitignore +1 -0
  9. package/templates/init-tests/test-jest-new-worker.js +3 -5
  10. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  11. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  12. package/templates/middleware/common.ts +9 -4
  13. package/templates/middleware/loader-modules.ts +64 -11
  14. package/templates/middleware/loader-sw.ts +2 -1
  15. package/templates/middleware/middleware-d1-beta.d.ts +3 -0
  16. package/templates/middleware/middleware-miniflare3-json-error.ts +18 -5
  17. package/templates/middleware/middleware-multiworker-dev.d.ts +4 -0
  18. package/templates/middleware/middleware-multiworker-dev.ts +68 -0
  19. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  20. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  21. package/templates/modules-watch-stub.js +4 -0
  22. package/templates/new-worker-scheduled.ts +1 -1
  23. package/templates/new-worker.ts +4 -1
  24. package/templates/pages-dev-pipeline.ts +4 -1
  25. package/templates/pages-dev-util.ts +4 -1
  26. package/templates/pages-shim.ts +1 -1
  27. package/templates/pages-template-plugin.ts +31 -12
  28. package/templates/pages-template-worker.ts +11 -2
  29. package/templates/startDevWorker/InspectorProxyWorker.ts +652 -0
  30. package/templates/startDevWorker/ProxyWorker.ts +252 -0
  31. package/templates/tsconfig-sanity.ts +11 -0
  32. package/templates/tsconfig.init.json +105 -0
  33. package/templates/tsconfig.json +5 -103
  34. package/wrangler-dist/InspectorProxyWorker.js +460 -0
  35. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  36. package/wrangler-dist/ProxyWorker.js +186 -0
  37. package/wrangler-dist/ProxyWorker.js.map +6 -0
  38. package/wrangler-dist/cli.d.ts +23076 -462
  39. package/wrangler-dist/cli.js +134460 -136904
  40. package/wrangler-dist/wasm-sync.wasm +0 -0
  41. package/import_meta_url.js +0 -3
  42. package/miniflare-config-stubs/.env.empty +0 -0
  43. package/miniflare-config-stubs/package.empty.json +0 -1
  44. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  45. package/miniflare-dist/index.mjs +0 -6321
  46. package/src/__tests__/access.test.ts +0 -25
  47. package/src/__tests__/api-dev.test.ts +0 -209
  48. package/src/__tests__/api-devregistry.test.js +0 -56
  49. package/src/__tests__/api.test.ts +0 -80
  50. package/src/__tests__/config-cache-without-cache-dir.test.ts +0 -38
  51. package/src/__tests__/config-cache.test.ts +0 -42
  52. package/src/__tests__/configuration.test.ts +0 -3981
  53. package/src/__tests__/d1.test.ts +0 -80
  54. package/src/__tests__/delete.test.ts +0 -263
  55. package/src/__tests__/deployments.test.ts +0 -91
  56. package/src/__tests__/dev.test.tsx +0 -1536
  57. package/src/__tests__/dialogs.test.tsx +0 -40
  58. package/src/__tests__/generate.test.ts +0 -235
  59. package/src/__tests__/get-host-from-url.test.ts +0 -16
  60. package/src/__tests__/guess-worker-format.test.ts +0 -85
  61. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  62. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  63. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  64. package/src/__tests__/helpers/mock-bin.ts +0 -36
  65. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  66. package/src/__tests__/helpers/mock-console.ts +0 -106
  67. package/src/__tests__/helpers/mock-dialogs.ts +0 -153
  68. package/src/__tests__/helpers/mock-get-zone-from-host.ts +0 -8
  69. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  70. package/src/__tests__/helpers/mock-istty.ts +0 -74
  71. package/src/__tests__/helpers/mock-known-routes.ts +0 -7
  72. package/src/__tests__/helpers/mock-kv.ts +0 -33
  73. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -256
  74. package/src/__tests__/helpers/mock-process.ts +0 -39
  75. package/src/__tests__/helpers/mock-stdin.ts +0 -108
  76. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  77. package/src/__tests__/helpers/msw/handlers/access.ts +0 -13
  78. package/src/__tests__/helpers/msw/handlers/deployments.ts +0 -59
  79. package/src/__tests__/helpers/msw/handlers/namespaces.ts +0 -104
  80. package/src/__tests__/helpers/msw/handlers/oauth.ts +0 -31
  81. package/src/__tests__/helpers/msw/handlers/r2.ts +0 -80
  82. package/src/__tests__/helpers/msw/handlers/script.ts +0 -75
  83. package/src/__tests__/helpers/msw/handlers/user.ts +0 -63
  84. package/src/__tests__/helpers/msw/handlers/zones.ts +0 -22
  85. package/src/__tests__/helpers/msw/index.ts +0 -21
  86. package/src/__tests__/helpers/run-in-tmp.ts +0 -38
  87. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  88. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +0 -1
  89. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +0 -5
  90. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +0 -1
  91. package/src/__tests__/helpers/worker-scripts/parent-worker.js +0 -8
  92. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +0 -5
  93. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  94. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  95. package/src/__tests__/https-options.test.ts +0 -163
  96. package/src/__tests__/index.test.ts +0 -264
  97. package/src/__tests__/init.test.ts +0 -2900
  98. package/src/__tests__/jest.setup.ts +0 -202
  99. package/src/__tests__/kv.test.ts +0 -1675
  100. package/src/__tests__/logger.test.ts +0 -141
  101. package/src/__tests__/logout.test.ts +0 -47
  102. package/src/__tests__/metrics.test.ts +0 -450
  103. package/src/__tests__/middleware.scheduled.test.ts +0 -135
  104. package/src/__tests__/middleware.test.ts +0 -726
  105. package/src/__tests__/package-manager.test.ts +0 -353
  106. package/src/__tests__/pages-deployment-tail.test.ts +0 -820
  107. package/src/__tests__/pages.test.ts +0 -2442
  108. package/src/__tests__/parse.test.ts +0 -330
  109. package/src/__tests__/paths.test.ts +0 -39
  110. package/src/__tests__/publish.test.ts +0 -7633
  111. package/src/__tests__/pubsub.test.ts +0 -370
  112. package/src/__tests__/queues.test.ts +0 -522
  113. package/src/__tests__/r2.test.ts +0 -393
  114. package/src/__tests__/route.test.ts +0 -45
  115. package/src/__tests__/secret.test.ts +0 -644
  116. package/src/__tests__/tail.test.ts +0 -899
  117. package/src/__tests__/test-old-node-version.js +0 -31
  118. package/src/__tests__/type-generation.test.ts +0 -226
  119. package/src/__tests__/user.test.ts +0 -129
  120. package/src/__tests__/utils-collectKeyValues.test.ts +0 -47
  121. package/src/__tests__/validate-dev-props.test.ts +0 -56
  122. package/src/__tests__/version.test.ts +0 -35
  123. package/src/__tests__/whoami.test.tsx +0 -278
  124. package/src/__tests__/worker-namespace.test.ts +0 -326
  125. package/src/abort.d.ts +0 -3
  126. package/src/api/dev.ts +0 -210
  127. package/src/api/index.ts +0 -2
  128. package/src/bundle-reporter.tsx +0 -68
  129. package/src/bundle.ts +0 -823
  130. package/src/cfetch/index.ts +0 -160
  131. package/src/cfetch/internal.ts +0 -263
  132. package/src/cli.ts +0 -28
  133. package/src/config/README.md +0 -107
  134. package/src/config/config.ts +0 -275
  135. package/src/config/diagnostics.ts +0 -80
  136. package/src/config/environment.ts +0 -561
  137. package/src/config/index.ts +0 -334
  138. package/src/config/validation-helpers.ts +0 -597
  139. package/src/config/validation.ts +0 -2103
  140. package/src/config-cache.ts +0 -85
  141. package/src/create-worker-preview.ts +0 -282
  142. package/src/create-worker-upload-form.ts +0 -316
  143. package/src/d1/backups.tsx +0 -223
  144. package/src/d1/constants.ts +0 -2
  145. package/src/d1/create.tsx +0 -63
  146. package/src/d1/delete.tsx +0 -56
  147. package/src/d1/execute.tsx +0 -352
  148. package/src/d1/formatTimeAgo.ts +0 -14
  149. package/src/d1/index.ts +0 -101
  150. package/src/d1/list.tsx +0 -48
  151. package/src/d1/migrations/apply.tsx +0 -184
  152. package/src/d1/migrations/create.tsx +0 -77
  153. package/src/d1/migrations/helpers.ts +0 -147
  154. package/src/d1/migrations/index.tsx +0 -3
  155. package/src/d1/migrations/list.tsx +0 -79
  156. package/src/d1/migrations/options.ts +0 -18
  157. package/src/d1/options.ts +0 -22
  158. package/src/d1/types.tsx +0 -24
  159. package/src/d1/utils.ts +0 -48
  160. package/src/delete.ts +0 -108
  161. package/src/deployments.ts +0 -77
  162. package/src/deprecated/index.ts +0 -438
  163. package/src/dev/dev-vars.ts +0 -39
  164. package/src/dev/dev.tsx +0 -614
  165. package/src/dev/get-local-persistence-path.tsx +0 -31
  166. package/src/dev/local.tsx +0 -890
  167. package/src/dev/remote.tsx +0 -603
  168. package/src/dev/start-server.ts +0 -539
  169. package/src/dev/use-esbuild.ts +0 -204
  170. package/src/dev/validate-dev-props.ts +0 -31
  171. package/src/dev-registry.tsx +0 -201
  172. package/src/dev.tsx +0 -904
  173. package/src/dialogs.tsx +0 -168
  174. package/src/dispatch-namespace.ts +0 -207
  175. package/src/durable.ts +0 -102
  176. package/src/entry.ts +0 -329
  177. package/src/environment-variables.ts +0 -50
  178. package/src/errors.ts +0 -11
  179. package/src/git-client.ts +0 -124
  180. package/src/global-wrangler-config-path.ts +0 -26
  181. package/src/https-options.ts +0 -127
  182. package/src/index.tsx +0 -687
  183. package/src/init.ts +0 -970
  184. package/src/inspect.ts +0 -767
  185. package/src/intl-polyfill.d.ts +0 -139
  186. package/src/is-ci.ts +0 -14
  187. package/src/is-interactive.ts +0 -16
  188. package/src/kv/helpers.ts +0 -430
  189. package/src/kv/index.ts +0 -596
  190. package/src/logger.ts +0 -92
  191. package/src/metrics/index.ts +0 -5
  192. package/src/metrics/metrics-config.ts +0 -239
  193. package/src/metrics/metrics-dispatcher.ts +0 -96
  194. package/src/metrics/metrics-usage-headers.ts +0 -24
  195. package/src/metrics/send-event.ts +0 -96
  196. package/src/miniflare-cli/README.md +0 -30
  197. package/src/miniflare-cli/assets.ts +0 -220
  198. package/src/miniflare-cli/index.ts +0 -213
  199. package/src/miniflare-cli/request-context.ts +0 -40
  200. package/src/module-collection.ts +0 -267
  201. package/src/open-in-browser.ts +0 -17
  202. package/src/package-manager.ts +0 -219
  203. package/src/pages/build.tsx +0 -270
  204. package/src/pages/constants.ts +0 -18
  205. package/src/pages/deployment-tails.tsx +0 -284
  206. package/src/pages/deployments.tsx +0 -84
  207. package/src/pages/dev.tsx +0 -706
  208. package/src/pages/errors.ts +0 -66
  209. package/src/pages/functions/buildPlugin.ts +0 -107
  210. package/src/pages/functions/buildWorker.ts +0 -166
  211. package/src/pages/functions/filepath-routing.test.ts +0 -234
  212. package/src/pages/functions/filepath-routing.ts +0 -189
  213. package/src/pages/functions/identifiers.ts +0 -78
  214. package/src/pages/functions/routes-consolidation.test.ts +0 -250
  215. package/src/pages/functions/routes-consolidation.ts +0 -73
  216. package/src/pages/functions/routes-transformation.test.ts +0 -282
  217. package/src/pages/functions/routes-transformation.ts +0 -115
  218. package/src/pages/functions/routes-validation.test.ts +0 -403
  219. package/src/pages/functions/routes-validation.ts +0 -202
  220. package/src/pages/functions/routes.ts +0 -151
  221. package/src/pages/functions.tsx +0 -82
  222. package/src/pages/hash.tsx +0 -13
  223. package/src/pages/index.tsx +0 -102
  224. package/src/pages/projects.tsx +0 -169
  225. package/src/pages/prompt-select-project.tsx +0 -31
  226. package/src/pages/publish.tsx +0 -451
  227. package/src/pages/types.ts +0 -41
  228. package/src/pages/upload.tsx +0 -426
  229. package/src/pages/utils.ts +0 -23
  230. package/src/parse.ts +0 -286
  231. package/src/paths.ts +0 -71
  232. package/src/proxy.ts +0 -694
  233. package/src/publish/index.ts +0 -270
  234. package/src/publish/publish.ts +0 -1035
  235. package/src/pubsub/index.ts +0 -286
  236. package/src/pubsub/pubsub-commands.tsx +0 -624
  237. package/src/queues/cli/commands/consumer/add.ts +0 -71
  238. package/src/queues/cli/commands/consumer/index.ts +0 -22
  239. package/src/queues/cli/commands/consumer/remove.ts +0 -38
  240. package/src/queues/cli/commands/create.ts +0 -25
  241. package/src/queues/cli/commands/delete.ts +0 -26
  242. package/src/queues/cli/commands/index.ts +0 -36
  243. package/src/queues/cli/commands/list.ts +0 -25
  244. package/src/queues/client.ts +0 -135
  245. package/src/queues/utils.ts +0 -18
  246. package/src/r2/constants.ts +0 -4
  247. package/src/r2/helpers.ts +0 -131
  248. package/src/r2/index.ts +0 -289
  249. package/src/routes.ts +0 -140
  250. package/src/secret/index.ts +0 -378
  251. package/src/selfsigned.d.ts +0 -29
  252. package/src/sites.tsx +0 -372
  253. package/src/tail/createTail.ts +0 -379
  254. package/src/tail/filters.ts +0 -277
  255. package/src/tail/index.ts +0 -214
  256. package/src/tail/printing.ts +0 -107
  257. package/src/type-generation.ts +0 -173
  258. package/src/update-check.ts +0 -19
  259. package/src/user/access.ts +0 -69
  260. package/src/user/choose-account.tsx +0 -69
  261. package/src/user/env-vars.ts +0 -46
  262. package/src/user/generate-auth-url.ts +0 -33
  263. package/src/user/generate-random-state.ts +0 -16
  264. package/src/user/index.ts +0 -3
  265. package/src/user/user.tsx +0 -1198
  266. package/src/utils/collectKeyValues.ts +0 -14
  267. package/src/whoami.tsx +0 -169
  268. package/src/worker.ts +0 -245
  269. package/src/yargs-types.ts +0 -24
  270. package/src/zones.ts +0 -191
  271. package/templates/d1-beta-facade.js +0 -205
  272. package/templates/first-party-worker-module-facade.ts +0 -18
  273. package/templates/format-dev-errors.ts +0 -32
  274. package/templates/serve-static-assets.ts +0 -63
  275. package/templates/service-bindings-module-facade.js +0 -54
  276. package/templates/service-bindings-sw-facade.js +0 -42
@@ -0,0 +1,252 @@
1
+ import assert from "node:assert";
2
+ import type {
3
+ ProxyWorkerIncomingRequestBody,
4
+ ProxyWorkerOutgoingRequestBody,
5
+ ProxyData,
6
+ } from "../../src/api/startDevWorker/events";
7
+ import {
8
+ DeferredPromise,
9
+ createDeferred,
10
+ } from "../../src/api/startDevWorker/utils";
11
+
12
+ interface Env {
13
+ PROXY_CONTROLLER: Fetcher;
14
+ PROXY_CONTROLLER_AUTH_SECRET: string;
15
+ DURABLE_OBJECT: DurableObjectNamespace;
16
+ }
17
+
18
+ // request.cf.hostMetadata is verbose to type using the workers-types Request -- this allows us to have Request correctly typed in this scope
19
+ type Request = Parameters<
20
+ NonNullable<
21
+ ExportedHandler<Env, unknown, ProxyWorkerIncomingRequestBody>["fetch"]
22
+ >
23
+ >[0];
24
+
25
+ const LIVE_RELOAD_PROTOCOL = "WRANGLER_PROXYWORKER_LIVE_RELOAD_PROTOCOL";
26
+ export default {
27
+ fetch(req, env) {
28
+ const singleton = env.DURABLE_OBJECT.idFromName("");
29
+ const inspectorProxy = env.DURABLE_OBJECT.get(singleton);
30
+
31
+ return inspectorProxy.fetch(req);
32
+ },
33
+ } as ExportedHandler<Env, unknown, ProxyWorkerIncomingRequestBody>;
34
+
35
+ export class ProxyWorker implements DurableObject {
36
+ constructor(readonly state: DurableObjectState, readonly env: Env) {}
37
+
38
+ proxyData?: ProxyData;
39
+ requestQueue = new Map<Request, DeferredPromise<Response>>();
40
+
41
+ fetch(request: Request) {
42
+ if (isRequestForLiveReloadWebsocket(request)) {
43
+ // requests for live-reload websocket
44
+
45
+ return this.handleLiveReloadWebSocket(request);
46
+ }
47
+
48
+ if (isRequestFromProxyController(request, this.env)) {
49
+ // requests from ProxyController
50
+
51
+ return this.processProxyControllerRequest(request);
52
+ }
53
+
54
+ // regular requests to be proxied
55
+ const deferred = createDeferred<Response>();
56
+
57
+ this.requestQueue.set(request, deferred);
58
+ this.processQueue();
59
+
60
+ return deferred.promise;
61
+ }
62
+
63
+ handleLiveReloadWebSocket(request: Request) {
64
+ const { 0: response, 1: liveReload } = new WebSocketPair();
65
+ const websocketProtocol =
66
+ request.headers.get("Sec-WebSocket-Protocol") ?? "";
67
+
68
+ this.state.acceptWebSocket(liveReload, ["live-reload"]);
69
+
70
+ return new Response(null, {
71
+ status: 101,
72
+ webSocket: response,
73
+ headers: { "Sec-WebSocket-Protocol": websocketProtocol },
74
+ });
75
+ }
76
+
77
+ processProxyControllerRequest(request: Request) {
78
+ const event = request.cf?.hostMetadata;
79
+ switch (event?.type) {
80
+ case "pause":
81
+ this.proxyData = undefined;
82
+ break;
83
+
84
+ case "play":
85
+ this.proxyData = event.proxyData;
86
+ this.processQueue();
87
+ this.state
88
+ .getWebSockets("live-reload")
89
+ .forEach((ws) => ws.send("reload"));
90
+
91
+ break;
92
+ }
93
+
94
+ return new Response(null, { status: 204 });
95
+ }
96
+
97
+ processQueue() {
98
+ const { proxyData } = this; // destructuring is required to keep the type-narrowing (not undefined) in the .then callback and to ensure the same proxyData is used throughout each request
99
+ if (proxyData === undefined) return;
100
+
101
+ for (const [request, deferredResponse] of this.requestQueue) {
102
+ this.requestQueue.delete(request);
103
+
104
+ const userWorkerUrl = new URL(request.url);
105
+ const headers = new Headers(request.headers);
106
+
107
+ // override url parts for proxying
108
+ Object.assign(userWorkerUrl, proxyData.userWorkerUrl);
109
+
110
+ // set request.url in the UserWorker
111
+ const innerUrl = new URL(request.url);
112
+ Object.assign(innerUrl, proxyData.userWorkerInnerUrlOverrides);
113
+ headers.set("MF-Original-URL", innerUrl.href);
114
+ headers.set("MF-Disable-Pretty-Error", "true"); // disables the UserWorker miniflare instance from rendering the pretty error -- instead the ProxyWorker miniflare instance will intercept the json error response and render the pretty error page
115
+
116
+ // merge proxyData headers with the request headers
117
+ for (const [key, value] of Object.entries(proxyData.headers ?? {})) {
118
+ if (key.toLowerCase() === "cookie") {
119
+ const existing = request.headers.get("cookie") ?? "";
120
+ headers.set("cookie", `${existing};${value}`);
121
+ } else {
122
+ headers.set(key, value);
123
+ }
124
+ }
125
+
126
+ // explicitly NOT await-ing this promise, we are in a loop and want to process the whole queue quickly
127
+ // if we decide to await, we should include a timeout (~100ms) in case the user worker has long-running/parellel requests
128
+ void fetch(userWorkerUrl, new Request(request, { headers }))
129
+ .then((res) => {
130
+ if (isHtmlResponse(res)) {
131
+ res = insertLiveReloadScript(request, res, this.env, proxyData);
132
+ }
133
+
134
+ deferredResponse.resolve(res);
135
+ })
136
+ .catch((error: Error) => {
137
+ // errors here are network errors or from response post-processing
138
+ // to catch only network errors, use the 2nd param of the fetch.then()
139
+
140
+ void sendMessageToProxyController(this.env, {
141
+ type: "error",
142
+ error: {
143
+ name: error.name,
144
+ message: error.message,
145
+ stack: error.stack,
146
+ cause: error.cause,
147
+ },
148
+ });
149
+
150
+ deferredResponse.reject(error);
151
+ });
152
+ }
153
+ }
154
+ }
155
+
156
+ function isRequestFromProxyController(req: Request, env: Env): boolean {
157
+ return req.headers.get("Authorization") === env.PROXY_CONTROLLER_AUTH_SECRET;
158
+ }
159
+ function isHtmlResponse(res: Response): boolean {
160
+ return res.headers.get("content-type")?.startsWith("text/html") ?? false;
161
+ }
162
+ function isRequestForLiveReloadWebsocket(req: Request): boolean {
163
+ const websocketProtocol = req.headers.get("Sec-WebSocket-Protocol");
164
+ const isWebSocketUpgrade = req.headers.get("Upgrade") === "websocket";
165
+
166
+ return isWebSocketUpgrade && websocketProtocol === LIVE_RELOAD_PROTOCOL;
167
+ }
168
+
169
+ async function sendMessageToProxyController(
170
+ env: Env,
171
+ message: ProxyWorkerOutgoingRequestBody,
172
+ retries = 3
173
+ ) {
174
+ try {
175
+ await env.PROXY_CONTROLLER.fetch("http://dummy", {
176
+ method: "POST",
177
+ body: JSON.stringify(message),
178
+ });
179
+ } catch (cause) {
180
+ if (retries > 0) {
181
+ return sendMessageToProxyController(env, message, retries - 1);
182
+ }
183
+
184
+ // no point sending an error message if we can't send this message
185
+
186
+ throw cause;
187
+ }
188
+ }
189
+
190
+ function insertLiveReloadScript(
191
+ request: Request,
192
+ response: Response,
193
+ env: Env,
194
+ proxyData: ProxyData
195
+ ) {
196
+ const htmlRewriter = new HTMLRewriter();
197
+
198
+ // if preview-token-expired response, errorDetails will contain "Invalid Workers Preview configuration"
199
+ let errorDetails = "";
200
+ htmlRewriter.on("#cf-error-details", {
201
+ text(element) {
202
+ errorDetails += element.text;
203
+ },
204
+ });
205
+
206
+ htmlRewriter.onDocument({
207
+ end(end) {
208
+ if (
209
+ response.status === 400 &&
210
+ errorDetails.includes("Invalid Workers Preview configuration")
211
+ ) {
212
+ void sendMessageToProxyController(env, {
213
+ type: "previewTokenExpired",
214
+ proxyData,
215
+ });
216
+ }
217
+
218
+ // if liveReload enabled, append a script tag
219
+ // TODO: compare to existing nodejs implementation
220
+ if (proxyData.liveReload) {
221
+ const websocketUrl = new URL(request.url);
222
+ websocketUrl.protocol =
223
+ websocketUrl.protocol === "http:" ? "ws:" : "wss:";
224
+
225
+ end.append(
226
+ `
227
+ <script>
228
+ (function() {
229
+ var ws;
230
+ function recover() {
231
+ ws = null;
232
+ setTimeout(initLiveReload, 100);
233
+ }
234
+ function initLiveReload() {
235
+ if (ws) return;
236
+ var origin = (location.protocol === "http:" ? "ws://" : "wss://") + location.host;
237
+ ws = new WebSocket(origin + "/cdn-cgi/live-reload", "${LIVE_RELOAD_PROTOCOL}");
238
+ ws.onclose = recover;
239
+ ws.onerror = recover;
240
+ ws.onmessage = location.reload.bind(location);
241
+ }
242
+ })();
243
+ </script>
244
+ `,
245
+ { html: true }
246
+ );
247
+ }
248
+ },
249
+ });
250
+
251
+ return htmlRewriter.transform(response);
252
+ }
@@ -0,0 +1,11 @@
1
+ // @ts-nocheck `@types/node` should NOT be included
2
+ Buffer.from("test");
3
+
4
+ // @ts-expect-error `@types/jest` should NOT be included
5
+ test("test");
6
+
7
+ // `@cloudflare/workers-types` should be included
8
+ const _handler: ExportedHandler = {};
9
+ new HTMLRewriter();
10
+
11
+ export {};
@@ -0,0 +1,105 @@
1
+ {
2
+ "compilerOptions": {
3
+ /* Visit https://aka.ms/tsconfig.json to read more about this file */
4
+
5
+ /* Projects */
6
+ // "incremental": true, /* Enable incremental compilation */
7
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8
+ // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
9
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
10
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12
+
13
+ /* Language and Environment */
14
+ "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
15
+ "lib": [
16
+ "es2021"
17
+ ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
18
+ "jsx": "react" /* Specify what JSX code is generated. */,
19
+ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
20
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
21
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
22
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
23
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
24
+ // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
25
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
26
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
27
+
28
+ /* Modules */
29
+ "module": "es2022" /* Specify what module code is generated. */,
30
+ // "rootDir": "./", /* Specify the root folder within your source files. */
31
+ "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
32
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
33
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
34
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
35
+ // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
36
+ "types": [
37
+ "@cloudflare/workers-types"
38
+ ] /* Specify type package names to be included without being referenced in a source file. */,
39
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
40
+ "resolveJsonModule": true /* Enable importing .json files */,
41
+ // "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
42
+
43
+ /* JavaScript Support */
44
+ "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */,
45
+ "checkJs": false /* Enable error reporting in type-checked JavaScript files. */,
46
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
47
+
48
+ /* Emit */
49
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
50
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
51
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
52
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
53
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
54
+ // "outDir": "./", /* Specify an output folder for all emitted files. */
55
+ // "removeComments": true, /* Disable emitting comments. */
56
+ "noEmit": true /* Disable emitting files from a compilation. */,
57
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
58
+ // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
59
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
60
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
61
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
62
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
63
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
64
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
65
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
66
+ // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
67
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
68
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
69
+ // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
70
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
71
+ // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
72
+
73
+ /* Interop Constraints */
74
+ "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */,
75
+ "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */,
76
+ // "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
77
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
78
+ "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
79
+
80
+ /* Type Checking */
81
+ "strict": true /* Enable all strict type-checking options. */,
82
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
83
+ // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
84
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
85
+ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
86
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
87
+ // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
88
+ // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
89
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
90
+ // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
91
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
92
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
93
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
94
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
95
+ // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
96
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
97
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
98
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
99
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
100
+
101
+ /* Completeness */
102
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
103
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
104
+ }
105
+ }
@@ -1,106 +1,8 @@
1
1
  {
2
+ "extends": "@cloudflare/workers-tsconfig/tsconfig.json",
2
3
  "compilerOptions": {
3
- /* Visit https://aka.ms/tsconfig.json to read more about this file */
4
-
5
- /* Projects */
6
- // "incremental": true, /* Enable incremental compilation */
7
- // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8
- // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
9
- // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
10
- // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11
- // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12
-
13
- /* Language and Environment */
14
- "target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
15
- "lib": [
16
- "es2021"
17
- ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
18
- "jsx": "react" /* Specify what JSX code is generated. */,
19
- // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
20
- // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
21
- // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
22
- // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
23
- // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
24
- // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
25
- // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
26
- // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
27
-
28
- /* Modules */
29
- "module": "es2022" /* Specify what module code is generated. */,
30
- // "rootDir": "./", /* Specify the root folder within your source files. */
31
- "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
32
- // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
33
- // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
34
- // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
35
- // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
36
- "types": [
37
- "@cloudflare/workers-types",
38
- "jest"
39
- ] /* Specify type package names to be included without being referenced in a source file. */,
40
- // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
41
- "resolveJsonModule": true /* Enable importing .json files */,
42
- // "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
43
-
44
- /* JavaScript Support */
45
- "allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */,
46
- "checkJs": false /* Enable error reporting in type-checked JavaScript files. */,
47
- // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
48
-
49
- /* Emit */
50
- // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
51
- // "declarationMap": true, /* Create sourcemaps for d.ts files. */
52
- // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
53
- // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
54
- // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
55
- // "outDir": "./", /* Specify an output folder for all emitted files. */
56
- // "removeComments": true, /* Disable emitting comments. */
57
- "noEmit": true /* Disable emitting files from a compilation. */,
58
- // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
59
- // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
60
- // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
61
- // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
62
- // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
63
- // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
64
- // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
65
- // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
66
- // "newLine": "crlf", /* Set the newline character for emitting files. */
67
- // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
68
- // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
69
- // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
70
- // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
71
- // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
72
- // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
73
-
74
- /* Interop Constraints */
75
- "isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */,
76
- "allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */,
77
- // "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
78
- // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
79
- "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
80
-
81
- /* Type Checking */
82
- "strict": true /* Enable all strict type-checking options. */,
83
- // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
84
- // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
85
- // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
86
- // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
87
- // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
88
- // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
89
- // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
90
- // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
91
- // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
92
- // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
93
- // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
94
- // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
95
- // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
96
- // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
97
- // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
98
- // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
99
- // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
100
- // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
101
-
102
- /* Completeness */
103
- // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
104
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
105
- }
4
+ "types": ["@cloudflare/workers-types"]
5
+ },
6
+ "include": ["**/*.ts"],
7
+ "exclude": ["__tests__", "./init-tests/**"]
106
8
  }