wrangler 0.0.0-e043479 → 0.0.0-e0489587

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 (159) hide show
  1. package/README.md +47 -16
  2. package/bin/wrangler.js +95 -32
  3. package/config-schema.json +3059 -0
  4. package/kv-asset-handler.js +1 -0
  5. package/package.json +148 -89
  6. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  7. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  8. package/templates/__tests__/tsconfig.json +8 -0
  9. package/templates/checked-fetch.js +30 -0
  10. package/templates/facade.d.ts +19 -0
  11. package/templates/gitignore +170 -0
  12. package/templates/init-tests/test-jest-new-worker.js +23 -0
  13. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  14. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  15. package/templates/middleware/common.ts +67 -0
  16. package/templates/middleware/loader-modules.ts +134 -0
  17. package/templates/middleware/loader-sw.ts +229 -0
  18. package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
  19. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  20. package/templates/middleware/middleware-pretty-error.ts +40 -0
  21. package/templates/middleware/middleware-scheduled.ts +15 -0
  22. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  23. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  24. package/templates/modules-watch-stub.js +4 -0
  25. package/templates/new-worker-scheduled.js +17 -0
  26. package/templates/new-worker-scheduled.ts +32 -0
  27. package/templates/new-worker.js +3 -3
  28. package/templates/new-worker.ts +22 -4
  29. package/templates/no-op-worker.js +10 -0
  30. package/templates/pages-dev-pipeline.ts +32 -0
  31. package/templates/pages-dev-util.ts +55 -0
  32. package/templates/pages-shim.ts +9 -0
  33. package/templates/pages-template-plugin.ts +190 -0
  34. package/templates/pages-template-worker.ts +198 -0
  35. package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
  36. package/templates/startDevWorker/ProxyWorker.ts +334 -0
  37. package/templates/tsconfig-sanity.ts +11 -0
  38. package/templates/tsconfig.init.json +105 -0
  39. package/templates/tsconfig.json +6 -103
  40. package/wrangler-dist/InspectorProxyWorker.js +464 -0
  41. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  42. package/wrangler-dist/ProxyWorker.js +240 -0
  43. package/wrangler-dist/ProxyWorker.js.map +6 -0
  44. package/wrangler-dist/cli.d.ts +26375 -0
  45. package/wrangler-dist/cli.js +202160 -132057
  46. package/wrangler-dist/wasm-sync.wasm +0 -0
  47. package/import_meta_url.js +0 -3
  48. package/miniflare-config-stubs/.env.empty +0 -0
  49. package/miniflare-config-stubs/package.empty.json +0 -1
  50. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  51. package/pages/functions/buildWorker.ts +0 -62
  52. package/pages/functions/filepath-routing.test.ts +0 -123
  53. package/pages/functions/filepath-routing.ts +0 -178
  54. package/pages/functions/identifiers.ts +0 -78
  55. package/pages/functions/routes.ts +0 -151
  56. package/pages/functions/template-worker.ts +0 -130
  57. package/src/__tests__/configuration.test.ts +0 -2186
  58. package/src/__tests__/dev.test.tsx +0 -247
  59. package/src/__tests__/guess-worker-format.test.ts +0 -66
  60. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  61. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  62. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  63. package/src/__tests__/helpers/mock-account-id.ts +0 -44
  64. package/src/__tests__/helpers/mock-bin.ts +0 -36
  65. package/src/__tests__/helpers/mock-cfetch.ts +0 -207
  66. package/src/__tests__/helpers/mock-console.ts +0 -70
  67. package/src/__tests__/helpers/mock-dialogs.ts +0 -65
  68. package/src/__tests__/helpers/mock-kv.ts +0 -40
  69. package/src/__tests__/helpers/mock-stdin.ts +0 -103
  70. package/src/__tests__/helpers/mock-user.ts +0 -27
  71. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  72. package/src/__tests__/helpers/run-in-tmp.ts +0 -29
  73. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  74. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  75. package/src/__tests__/index.test.ts +0 -866
  76. package/src/__tests__/jest.setup.ts +0 -69
  77. package/src/__tests__/kv.test.ts +0 -1408
  78. package/src/__tests__/logout.test.ts +0 -50
  79. package/src/__tests__/package-manager.test.ts +0 -206
  80. package/src/__tests__/parse.test.ts +0 -322
  81. package/src/__tests__/publish.test.ts +0 -2139
  82. package/src/__tests__/r2.test.ts +0 -198
  83. package/src/__tests__/secret.test.ts +0 -425
  84. package/src/__tests__/sentry.test.ts +0 -146
  85. package/src/__tests__/tail.test.ts +0 -564
  86. package/src/__tests__/whoami.test.tsx +0 -86
  87. package/src/api/form_data.ts +0 -217
  88. package/src/api/preview.ts +0 -147
  89. package/src/api/worker.ts +0 -186
  90. package/src/bundle.ts +0 -133
  91. package/src/cfetch/index.ts +0 -104
  92. package/src/cfetch/internal.ts +0 -133
  93. package/src/cli.ts +0 -19
  94. package/src/config/README.md +0 -107
  95. package/src/config/config.ts +0 -270
  96. package/src/config/diagnostics.ts +0 -80
  97. package/src/config/environment.ts +0 -305
  98. package/src/config/index.ts +0 -52
  99. package/src/config/validation-helpers.ts +0 -370
  100. package/src/config/validation.ts +0 -1019
  101. package/src/dev.tsx +0 -960
  102. package/src/dialogs.tsx +0 -77
  103. package/src/entry.ts +0 -57
  104. package/src/environment-variables.ts +0 -33
  105. package/src/guess-worker-format.ts +0 -68
  106. package/src/index.tsx +0 -2302
  107. package/src/inspect.ts +0 -609
  108. package/src/kv.tsx +0 -339
  109. package/src/module-collection.ts +0 -170
  110. package/src/open-in-browser.ts +0 -13
  111. package/src/package-manager.ts +0 -126
  112. package/src/pages.tsx +0 -1045
  113. package/src/parse.ts +0 -183
  114. package/src/paths.ts +0 -26
  115. package/src/proxy.ts +0 -376
  116. package/src/publish.ts +0 -363
  117. package/src/r2.ts +0 -50
  118. package/src/reporting.ts +0 -115
  119. package/src/sites.tsx +0 -238
  120. package/src/tail/filters.ts +0 -279
  121. package/src/tail/index.ts +0 -299
  122. package/src/tail/printing.ts +0 -62
  123. package/src/user.tsx +0 -1063
  124. package/src/whoami.tsx +0 -69
  125. package/templates/static-asset-facade.js +0 -47
  126. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  127. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  128. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  129. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  130. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  131. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  132. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  133. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  134. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  135. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  136. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  137. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  138. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  139. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  140. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  141. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  142. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  143. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  144. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  145. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  146. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  147. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  148. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  149. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  150. package/vendor/wrangler-mime/LICENSE +0 -21
  151. package/vendor/wrangler-mime/Mime.js +0 -97
  152. package/vendor/wrangler-mime/README.md +0 -187
  153. package/vendor/wrangler-mime/cli.js +0 -46
  154. package/vendor/wrangler-mime/index.js +0 -4
  155. package/vendor/wrangler-mime/lite.js +0 -4
  156. package/vendor/wrangler-mime/package.json +0 -52
  157. package/vendor/wrangler-mime/types/other.js +0 -1
  158. package/vendor/wrangler-mime/types/standard.js +0 -1
  159. package/wrangler-dist/cli.js.map +0 -7
@@ -0,0 +1,240 @@
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 = new URL(request.url);
98
+ Object.assign(innerUrl, proxyData.userWorkerInnerUrlOverrides);
99
+ headers.set("MF-Original-URL", innerUrl.href);
100
+ headers.set("MF-Disable-Pretty-Error", "true");
101
+ const encoding = request.cf?.clientAcceptEncoding;
102
+ if (encoding !== void 0)
103
+ headers.set("Accept-Encoding", encoding);
104
+ rewriteUrlRelatedHeaders(headers, outerUrl, innerUrl);
105
+ for (const [key, value] of Object.entries(proxyData.headers ?? {})) {
106
+ if (value === void 0)
107
+ continue;
108
+ if (key.toLowerCase() === "cookie") {
109
+ const existing = request.headers.get("cookie") ?? "";
110
+ headers.set("cookie", `${existing};${value}`);
111
+ } else {
112
+ headers.set(key, value);
113
+ }
114
+ }
115
+ void fetch(userWorkerUrl, new Request(request, { headers })).then((res) => {
116
+ res = new Response(res.body, res);
117
+ rewriteUrlRelatedHeaders(res.headers, innerUrl, outerUrl);
118
+ if (isHtmlResponse(res)) {
119
+ res = insertLiveReloadScript(request, res, this.env, proxyData);
120
+ }
121
+ deferredResponse.resolve(res);
122
+ }).catch((error) => {
123
+ const newUserWorkerUrl = this.proxyData && urlFromParts(this.proxyData.userWorkerUrl);
124
+ if (userWorkerUrl.href === newUserWorkerUrl?.href) {
125
+ void sendMessageToProxyController(this.env, {
126
+ type: "error",
127
+ error: {
128
+ name: error.name,
129
+ message: error.message,
130
+ stack: error.stack,
131
+ cause: error.cause
132
+ }
133
+ });
134
+ deferredResponse.reject(error);
135
+ } else if (request.method === "GET" || request.method === "HEAD") {
136
+ this.requestRetryQueue.set(request, deferredResponse);
137
+ } else {
138
+ deferredResponse.resolve(
139
+ new Response(
140
+ "Your worker restarted mid-request. Please try sending the request again. Only GET or HEAD requests are retried automatically.",
141
+ {
142
+ status: 503,
143
+ headers: { "Retry-After": "0" }
144
+ }
145
+ )
146
+ );
147
+ }
148
+ });
149
+ }
150
+ }
151
+ };
152
+ function isRequestFromProxyController(req, env) {
153
+ return req.headers.get("Authorization") === env.PROXY_CONTROLLER_AUTH_SECRET;
154
+ }
155
+ function isHtmlResponse(res) {
156
+ return res.headers.get("content-type")?.startsWith("text/html") ?? false;
157
+ }
158
+ function isRequestForLiveReloadWebsocket(req) {
159
+ const websocketProtocol = req.headers.get("Sec-WebSocket-Protocol");
160
+ const isWebSocketUpgrade = req.headers.get("Upgrade") === "websocket";
161
+ return isWebSocketUpgrade && websocketProtocol === LIVE_RELOAD_PROTOCOL;
162
+ }
163
+ function sendMessageToProxyController(env, message) {
164
+ return env.PROXY_CONTROLLER.fetch("http://dummy", {
165
+ method: "POST",
166
+ body: JSON.stringify(message)
167
+ });
168
+ }
169
+ function insertLiveReloadScript(request, response, env, proxyData) {
170
+ const htmlRewriter = new HTMLRewriter();
171
+ let errorDetails = "";
172
+ htmlRewriter.on("#cf-error-details", {
173
+ text(element) {
174
+ errorDetails += element.text;
175
+ }
176
+ });
177
+ htmlRewriter.onDocument({
178
+ end(end) {
179
+ if (response.status === 400 && errorDetails.includes("Invalid Workers Preview configuration")) {
180
+ void sendMessageToProxyController(env, {
181
+ type: "previewTokenExpired",
182
+ proxyData
183
+ });
184
+ }
185
+ if (proxyData.liveReload) {
186
+ const websocketUrl = new URL(request.url);
187
+ websocketUrl.protocol = websocketUrl.protocol === "http:" ? "ws:" : "wss:";
188
+ end.append(
189
+ `
190
+ <script>
191
+ (function() {
192
+ var ws;
193
+ function recover() {
194
+ ws = null;
195
+ setTimeout(initLiveReload, 100);
196
+ }
197
+ function initLiveReload() {
198
+ if (ws) return;
199
+ var origin = (location.protocol === "http:" ? "ws://" : "wss://") + location.host;
200
+ ws = new WebSocket(origin + "/cdn-cgi/live-reload", "${LIVE_RELOAD_PROTOCOL}");
201
+ ws.onclose = recover;
202
+ ws.onerror = recover;
203
+ ws.onmessage = location.reload.bind(location);
204
+ }
205
+ })();
206
+ </script>
207
+ `,
208
+ { html: true }
209
+ );
210
+ }
211
+ }
212
+ });
213
+ return htmlRewriter.transform(response);
214
+ }
215
+ function rewriteUrlRelatedHeaders(headers, from, to) {
216
+ const setCookie = headers.getAll("Set-Cookie");
217
+ headers.delete("Set-Cookie");
218
+ headers.forEach((value, key) => {
219
+ if (typeof value === "string" && value.includes(from.host)) {
220
+ headers.set(
221
+ key,
222
+ value.replaceAll(from.origin, to.origin).replaceAll(from.host, to.host)
223
+ );
224
+ }
225
+ });
226
+ for (const cookie of setCookie) {
227
+ headers.append(
228
+ "Set-Cookie",
229
+ cookie.replace(
230
+ new RegExp(`Domain=${from.hostname}($|;|,)`),
231
+ `Domain=${to.hostname}$1`
232
+ )
233
+ );
234
+ }
235
+ }
236
+ export {
237
+ ProxyWorker,
238
+ ProxyWorker_default as default
239
+ };
240
+ //# 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
+ }