wrangler 0.0.0-e61fba8 → 0.0.0-e62b097bb

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 (155) hide show
  1. package/README.md +42 -36
  2. package/bin/wrangler.js +86 -67
  3. package/config-schema.json +3370 -0
  4. package/package.json +132 -103
  5. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  6. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  7. package/templates/__tests__/tsconfig.json +8 -0
  8. package/templates/checked-fetch.js +30 -0
  9. package/templates/facade.d.ts +19 -0
  10. package/templates/gitignore +2 -3
  11. package/templates/init-tests/test-jest-new-worker.js +23 -0
  12. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  13. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  14. package/templates/middleware/common.ts +67 -0
  15. package/templates/middleware/loader-modules.ts +134 -0
  16. package/templates/middleware/loader-sw.ts +229 -0
  17. package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
  18. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  19. package/templates/middleware/middleware-mock-analytics-engine.d.ts +3 -0
  20. package/templates/middleware/middleware-mock-analytics-engine.ts +30 -0
  21. package/templates/middleware/middleware-patch-console-prefix.d.ts +3 -0
  22. package/templates/middleware/middleware-patch-console-prefix.ts +21 -0
  23. package/templates/middleware/middleware-pretty-error.ts +40 -0
  24. package/templates/middleware/middleware-scheduled.ts +29 -0
  25. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  26. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  27. package/templates/modules-watch-stub.js +4 -0
  28. package/templates/new-worker-scheduled.js +3 -3
  29. package/templates/new-worker-scheduled.ts +16 -16
  30. package/templates/new-worker.js +3 -3
  31. package/templates/new-worker.ts +19 -16
  32. package/templates/no-op-worker.js +10 -0
  33. package/templates/pages-dev-pipeline.ts +32 -0
  34. package/templates/pages-dev-util.ts +55 -0
  35. package/templates/pages-shim.ts +9 -0
  36. package/templates/pages-template-plugin.ts +190 -0
  37. package/templates/pages-template-worker.ts +198 -0
  38. package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
  39. package/templates/startDevWorker/ProxyWorker.ts +336 -0
  40. package/templates/tsconfig-sanity.ts +11 -0
  41. package/templates/tsconfig.init.json +22 -0
  42. package/templates/tsconfig.json +6 -103
  43. package/wrangler-dist/InspectorProxyWorker.js +464 -0
  44. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  45. package/wrangler-dist/ProxyWorker.js +241 -0
  46. package/wrangler-dist/ProxyWorker.js.map +6 -0
  47. package/wrangler-dist/cli.d.ts +26730 -0
  48. package/wrangler-dist/cli.js +165991 -119517
  49. package/Cloudflare_CA.pem +0 -18
  50. package/import_meta_url.js +0 -3
  51. package/miniflare-config-stubs/.env.empty +0 -0
  52. package/miniflare-config-stubs/package.empty.json +0 -1
  53. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  54. package/miniflare-dist/index.mjs +0 -4886
  55. package/pages/functions/buildPlugin.ts +0 -105
  56. package/pages/functions/buildWorker.ts +0 -151
  57. package/pages/functions/filepath-routing.test.ts +0 -234
  58. package/pages/functions/filepath-routing.ts +0 -189
  59. package/pages/functions/identifiers.ts +0 -78
  60. package/pages/functions/routes.ts +0 -156
  61. package/pages/functions/template-plugin.ts +0 -147
  62. package/pages/functions/template-worker.ts +0 -143
  63. package/src/__tests__/config-cache.test.ts +0 -36
  64. package/src/__tests__/configuration.test.ts +0 -3487
  65. package/src/__tests__/dev.test.tsx +0 -1010
  66. package/src/__tests__/guess-worker-format.test.ts +0 -85
  67. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  68. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  69. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  70. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  71. package/src/__tests__/helpers/mock-bin.ts +0 -36
  72. package/src/__tests__/helpers/mock-cfetch.ts +0 -211
  73. package/src/__tests__/helpers/mock-console.ts +0 -87
  74. package/src/__tests__/helpers/mock-dialogs.ts +0 -130
  75. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  76. package/src/__tests__/helpers/mock-istty.ts +0 -27
  77. package/src/__tests__/helpers/mock-kv.ts +0 -33
  78. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -255
  79. package/src/__tests__/helpers/mock-stdin.ts +0 -103
  80. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  81. package/src/__tests__/helpers/run-in-tmp.ts +0 -39
  82. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  83. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  84. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  85. package/src/__tests__/https-options.test.ts +0 -130
  86. package/src/__tests__/index.test.ts +0 -257
  87. package/src/__tests__/init.test.ts +0 -1637
  88. package/src/__tests__/jest.setup.ts +0 -77
  89. package/src/__tests__/kv.test.ts +0 -1502
  90. package/src/__tests__/logger.test.ts +0 -115
  91. package/src/__tests__/package-manager.test.ts +0 -353
  92. package/src/__tests__/pages.test.ts +0 -754
  93. package/src/__tests__/parse.test.ts +0 -330
  94. package/src/__tests__/publish.test.ts +0 -5820
  95. package/src/__tests__/r2.test.ts +0 -233
  96. package/src/__tests__/route.test.ts +0 -45
  97. package/src/__tests__/secret.test.ts +0 -481
  98. package/src/__tests__/tail.test.ts +0 -690
  99. package/src/__tests__/user.test.ts +0 -131
  100. package/src/__tests__/whoami.test.tsx +0 -139
  101. package/src/abort.d.ts +0 -3
  102. package/src/bundle.ts +0 -204
  103. package/src/cfetch/index.ts +0 -121
  104. package/src/cfetch/internal.ts +0 -142
  105. package/src/cli.ts +0 -13
  106. package/src/config/README.md +0 -107
  107. package/src/config/config.ts +0 -234
  108. package/src/config/diagnostics.ts +0 -80
  109. package/src/config/environment.ts +0 -420
  110. package/src/config/index.ts +0 -225
  111. package/src/config/validation-helpers.ts +0 -584
  112. package/src/config/validation.ts +0 -1548
  113. package/src/config-cache.ts +0 -45
  114. package/src/create-worker-preview.ts +0 -185
  115. package/src/create-worker-upload-form.ts +0 -254
  116. package/src/dev/dev-vars.ts +0 -36
  117. package/src/dev/dev.tsx +0 -395
  118. package/src/dev/local.tsx +0 -321
  119. package/src/dev/remote.tsx +0 -240
  120. package/src/dev/use-esbuild.ts +0 -115
  121. package/src/dialogs.tsx +0 -135
  122. package/src/durable.ts +0 -102
  123. package/src/entry.ts +0 -322
  124. package/src/environment-variables.ts +0 -35
  125. package/src/errors.ts +0 -11
  126. package/src/https-options.ts +0 -123
  127. package/src/index.tsx +0 -2859
  128. package/src/inspect.ts +0 -662
  129. package/src/intl-polyfill.d.ts +0 -139
  130. package/src/kv.ts +0 -408
  131. package/src/logger.ts +0 -66
  132. package/src/miniflare-cli/README.md +0 -30
  133. package/src/miniflare-cli/enum-keys.ts +0 -17
  134. package/src/miniflare-cli/index.ts +0 -41
  135. package/src/miniflare-cli/request-context.ts +0 -40
  136. package/src/module-collection.ts +0 -258
  137. package/src/open-in-browser.ts +0 -19
  138. package/src/package-manager.ts +0 -174
  139. package/src/pages.tsx +0 -2093
  140. package/src/parse.ts +0 -222
  141. package/src/paths.ts +0 -26
  142. package/src/proxy.ts +0 -478
  143. package/src/publish.ts +0 -721
  144. package/src/r2.ts +0 -50
  145. package/src/selfsigned.d.ts +0 -29
  146. package/src/sites.tsx +0 -326
  147. package/src/tail/filters.ts +0 -279
  148. package/src/tail/index.ts +0 -299
  149. package/src/tail/printing.ts +0 -67
  150. package/src/update-check.ts +0 -19
  151. package/src/user.tsx +0 -1214
  152. package/src/whoami.tsx +0 -71
  153. package/src/worker.ts +0 -181
  154. package/src/zones.ts +0 -73
  155. package/templates/static-asset-facade.js +0 -43
@@ -0,0 +1,241 @@
1
+ // src/api/startDevWorker/utils.ts
2
+ import assert from "node:assert";
3
+ function createDeferred(previousDeferred) {
4
+ let resolve, reject;
5
+ const newPromise = new Promise((_resolve, _reject) => {
6
+ resolve = _resolve;
7
+ reject = _reject;
8
+ });
9
+ assert(resolve);
10
+ assert(reject);
11
+ previousDeferred?.resolve(newPromise);
12
+ return {
13
+ promise: newPromise,
14
+ resolve,
15
+ reject
16
+ };
17
+ }
18
+ function urlFromParts(parts, base = "http://localhost") {
19
+ const url = new URL(base);
20
+ Object.assign(url, parts);
21
+ return url;
22
+ }
23
+
24
+ // templates/startDevWorker/ProxyWorker.ts
25
+ var LIVE_RELOAD_PROTOCOL = "WRANGLER_PROXYWORKER_LIVE_RELOAD_PROTOCOL";
26
+ var ProxyWorker_default = {
27
+ fetch(req, env) {
28
+ const singleton = env.DURABLE_OBJECT.idFromName("");
29
+ const inspectorProxy = env.DURABLE_OBJECT.get(singleton);
30
+ return inspectorProxy.fetch(req);
31
+ }
32
+ };
33
+ var ProxyWorker = class {
34
+ constructor(state, env) {
35
+ this.state = state;
36
+ this.env = env;
37
+ }
38
+ proxyData;
39
+ requestQueue = /* @__PURE__ */ new Map();
40
+ requestRetryQueue = /* @__PURE__ */ new Map();
41
+ fetch(request) {
42
+ if (isRequestForLiveReloadWebsocket(request)) {
43
+ return this.handleLiveReloadWebSocket(request);
44
+ }
45
+ if (isRequestFromProxyController(request, this.env)) {
46
+ return this.processProxyControllerRequest(request);
47
+ }
48
+ const deferred = createDeferred();
49
+ this.requestQueue.set(request, deferred);
50
+ this.processQueue();
51
+ return deferred.promise;
52
+ }
53
+ handleLiveReloadWebSocket(request) {
54
+ const { 0: response, 1: liveReload } = new WebSocketPair();
55
+ const websocketProtocol = request.headers.get("Sec-WebSocket-Protocol") ?? "";
56
+ this.state.acceptWebSocket(liveReload, ["live-reload"]);
57
+ return new Response(null, {
58
+ status: 101,
59
+ webSocket: response,
60
+ headers: { "Sec-WebSocket-Protocol": websocketProtocol }
61
+ });
62
+ }
63
+ processProxyControllerRequest(request) {
64
+ const event = request.cf?.hostMetadata;
65
+ switch (event?.type) {
66
+ case "pause":
67
+ this.proxyData = void 0;
68
+ break;
69
+ case "play":
70
+ this.proxyData = event.proxyData;
71
+ this.processQueue();
72
+ this.state.getWebSockets("live-reload").forEach((ws) => ws.send("reload"));
73
+ break;
74
+ }
75
+ return new Response(null, { status: 204 });
76
+ }
77
+ /**
78
+ * Process requests that are being retried first, then process newer requests.
79
+ * Requests that are being retried are, by definition, older than requests which haven't been processed yet.
80
+ * We don't need to be more accurate than this re ordering, since the requests are being fired off synchronously.
81
+ */
82
+ *getOrderedQueue() {
83
+ yield* this.requestRetryQueue;
84
+ yield* this.requestQueue;
85
+ }
86
+ processQueue() {
87
+ const { proxyData } = this;
88
+ if (proxyData === void 0)
89
+ return;
90
+ for (const [request, deferredResponse] of this.getOrderedQueue()) {
91
+ this.requestRetryQueue.delete(request);
92
+ this.requestQueue.delete(request);
93
+ const outerUrl = new URL(request.url);
94
+ const headers = new Headers(request.headers);
95
+ const userWorkerUrl = new URL(request.url);
96
+ Object.assign(userWorkerUrl, proxyData.userWorkerUrl);
97
+ const innerUrl = urlFromParts(
98
+ proxyData.userWorkerInnerUrlOverrides ?? {},
99
+ request.url
100
+ );
101
+ headers.set("MF-Original-URL", innerUrl.href);
102
+ headers.set("MF-Disable-Pretty-Error", "true");
103
+ const encoding = request.cf?.clientAcceptEncoding;
104
+ if (encoding !== void 0)
105
+ headers.set("Accept-Encoding", encoding);
106
+ rewriteUrlRelatedHeaders(headers, outerUrl, innerUrl);
107
+ for (const [key, value] of Object.entries(proxyData.headers ?? {})) {
108
+ if (value === void 0)
109
+ continue;
110
+ if (key.toLowerCase() === "cookie") {
111
+ const existing = request.headers.get("cookie") ?? "";
112
+ headers.set("cookie", `${existing};${value}`);
113
+ } else {
114
+ headers.set(key, value);
115
+ }
116
+ }
117
+ void fetch(userWorkerUrl, new Request(request, { headers })).then((res) => {
118
+ res = new Response(res.body, res);
119
+ rewriteUrlRelatedHeaders(res.headers, innerUrl, outerUrl);
120
+ if (isHtmlResponse(res)) {
121
+ res = insertLiveReloadScript(request, res, this.env, proxyData);
122
+ }
123
+ deferredResponse.resolve(res);
124
+ }).catch((error) => {
125
+ const newUserWorkerUrl = this.proxyData && urlFromParts(this.proxyData.userWorkerUrl);
126
+ if (userWorkerUrl.href === newUserWorkerUrl?.href) {
127
+ void sendMessageToProxyController(this.env, {
128
+ type: "error",
129
+ error: {
130
+ name: error.name,
131
+ message: error.message,
132
+ stack: error.stack,
133
+ cause: error.cause
134
+ }
135
+ });
136
+ deferredResponse.reject(error);
137
+ } else if (request.method === "GET" || request.method === "HEAD") {
138
+ this.requestRetryQueue.set(request, deferredResponse);
139
+ } else {
140
+ deferredResponse.resolve(
141
+ new Response(
142
+ "Your worker restarted mid-request. Please try sending the request again. Only GET or HEAD requests are retried automatically.",
143
+ {
144
+ status: 503,
145
+ headers: { "Retry-After": "0" }
146
+ }
147
+ )
148
+ );
149
+ }
150
+ });
151
+ }
152
+ }
153
+ };
154
+ function isRequestFromProxyController(req, env) {
155
+ return req.headers.get("Authorization") === env.PROXY_CONTROLLER_AUTH_SECRET;
156
+ }
157
+ function isHtmlResponse(res) {
158
+ return res.headers.get("content-type")?.startsWith("text/html") ?? false;
159
+ }
160
+ function isRequestForLiveReloadWebsocket(req) {
161
+ const websocketProtocol = req.headers.get("Sec-WebSocket-Protocol");
162
+ const isWebSocketUpgrade = req.headers.get("Upgrade") === "websocket";
163
+ return isWebSocketUpgrade && websocketProtocol === LIVE_RELOAD_PROTOCOL;
164
+ }
165
+ function sendMessageToProxyController(env, message) {
166
+ return env.PROXY_CONTROLLER.fetch("http://dummy", {
167
+ method: "POST",
168
+ body: JSON.stringify(message)
169
+ });
170
+ }
171
+ function insertLiveReloadScript(request, response, env, proxyData) {
172
+ const htmlRewriter = new HTMLRewriter();
173
+ let errorDetails = "";
174
+ htmlRewriter.on("#cf-error-details", {
175
+ text(element) {
176
+ errorDetails += element.text;
177
+ }
178
+ });
179
+ htmlRewriter.onDocument({
180
+ end(end) {
181
+ if (response.status === 400 && errorDetails.includes("Invalid Workers Preview configuration")) {
182
+ void sendMessageToProxyController(env, {
183
+ type: "previewTokenExpired",
184
+ proxyData
185
+ });
186
+ }
187
+ if (proxyData.liveReload) {
188
+ const websocketUrl = new URL(request.url);
189
+ websocketUrl.protocol = websocketUrl.protocol === "http:" ? "ws:" : "wss:";
190
+ end.append(liveReloadScript, { html: true });
191
+ }
192
+ }
193
+ });
194
+ return htmlRewriter.transform(response);
195
+ }
196
+ var liveReloadScript = `
197
+ <script defer type="application/javascript">
198
+ (function() {
199
+ var ws;
200
+ function recover() {
201
+ ws = null;
202
+ setTimeout(initLiveReload, 100);
203
+ }
204
+ function initLiveReload() {
205
+ if (ws) return;
206
+ var origin = (location.protocol === "http:" ? "ws://" : "wss://") + location.host;
207
+ ws = new WebSocket(origin + "/cdn-cgi/live-reload", "${LIVE_RELOAD_PROTOCOL}");
208
+ ws.onclose = recover;
209
+ ws.onerror = recover;
210
+ ws.onmessage = location.reload.bind(location);
211
+ }
212
+ initLiveReload();
213
+ })();
214
+ </script>
215
+ `;
216
+ function rewriteUrlRelatedHeaders(headers, from, to) {
217
+ const setCookie = headers.getAll("Set-Cookie");
218
+ headers.delete("Set-Cookie");
219
+ headers.forEach((value, key) => {
220
+ if (typeof value === "string" && value.includes(from.host)) {
221
+ headers.set(
222
+ key,
223
+ value.replaceAll(from.origin, to.origin).replaceAll(from.host, to.host)
224
+ );
225
+ }
226
+ });
227
+ for (const cookie of setCookie) {
228
+ headers.append(
229
+ "Set-Cookie",
230
+ cookie.replace(
231
+ new RegExp(`Domain=${from.hostname}($|;|,)`),
232
+ `Domain=${to.hostname}$1`
233
+ )
234
+ );
235
+ }
236
+ }
237
+ export {
238
+ ProxyWorker,
239
+ ProxyWorker_default as default
240
+ };
241
+ //# sourceMappingURL=ProxyWorker.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/api/startDevWorker/utils.ts", "../templates/startDevWorker/ProxyWorker.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }