wrangler 0.0.0-e5a3814 → 0.0.0-e60dc909

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 (302) hide show
  1. package/README.md +23 -3
  2. package/bin/wrangler.js +170 -62
  3. package/kv-asset-handler.js +1 -0
  4. package/miniflare-dist/index.mjs +1499 -21
  5. package/package.json +193 -153
  6. package/src/__tests__/access.test.ts +25 -0
  7. package/src/__tests__/api-dev.test.ts +238 -0
  8. package/src/__tests__/api-devregistry.test.js +64 -0
  9. package/src/__tests__/api.test.ts +80 -0
  10. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  11. package/src/__tests__/config-cache.test.ts +30 -24
  12. package/src/__tests__/configuration.test.ts +4152 -3476
  13. package/src/__tests__/d1/d1.test.ts +123 -0
  14. package/src/__tests__/d1/splitter.test.ts +255 -0
  15. package/src/__tests__/delete.test.ts +266 -0
  16. package/src/__tests__/deployments.test.ts +105 -0
  17. package/src/__tests__/dev.test.tsx +1559 -956
  18. package/src/__tests__/generate.test.ts +238 -0
  19. package/src/__tests__/get-host-from-url.test.ts +16 -0
  20. package/src/__tests__/guess-worker-format.test.ts +68 -68
  21. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  22. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  23. package/src/__tests__/helpers/mock-auth-domain.ts +20 -0
  24. package/src/__tests__/helpers/mock-bin.ts +20 -20
  25. package/src/__tests__/helpers/mock-cfetch.ts +167 -100
  26. package/src/__tests__/helpers/mock-console.ts +58 -39
  27. package/src/__tests__/helpers/mock-dialogs.ts +88 -81
  28. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  29. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  30. package/src/__tests__/helpers/mock-istty.ts +65 -18
  31. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  32. package/src/__tests__/helpers/mock-kv.ts +27 -27
  33. package/src/__tests__/helpers/mock-oauth-flow.ts +244 -228
  34. package/src/__tests__/helpers/mock-process.ts +34 -0
  35. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  36. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  37. package/src/__tests__/helpers/msw/blob-worker.cjs +19 -0
  38. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  39. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  40. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  41. package/src/__tests__/helpers/msw/handlers/oauth.ts +31 -0
  42. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  43. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  44. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  45. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  46. package/src/__tests__/helpers/msw/index.ts +21 -0
  47. package/src/__tests__/helpers/msw/read-file-sync.js +61 -0
  48. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  49. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  50. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  51. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  52. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  53. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  54. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  55. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  56. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  57. package/src/__tests__/https-options.test.ts +142 -109
  58. package/src/__tests__/index.test.ts +245 -234
  59. package/src/__tests__/init.test.ts +3146 -1608
  60. package/src/__tests__/jest.setup.ts +167 -46
  61. package/src/__tests__/kv.test.ts +1778 -1471
  62. package/src/__tests__/logger.test.ts +100 -74
  63. package/src/__tests__/logout.test.ts +47 -0
  64. package/src/__tests__/metrics.test.ts +493 -0
  65. package/src/__tests__/middleware.scheduled.test.ts +145 -0
  66. package/src/__tests__/middleware.test.ts +750 -0
  67. package/src/__tests__/package-manager.test.ts +303 -303
  68. package/src/__tests__/pages-deployment-tail.test.ts +884 -0
  69. package/src/__tests__/pages.test.ts +2888 -743
  70. package/src/__tests__/parse.test.ts +252 -252
  71. package/src/__tests__/paths.test.ts +39 -0
  72. package/src/__tests__/publish.test.ts +7641 -5626
  73. package/src/__tests__/pubsub.test.ts +490 -0
  74. package/src/__tests__/queues.test.ts +522 -0
  75. package/src/__tests__/r2.test.ts +388 -228
  76. package/src/__tests__/route.test.ts +18 -18
  77. package/src/__tests__/secret.test.ts +689 -469
  78. package/src/__tests__/tail.test.ts +782 -567
  79. package/src/__tests__/test-old-node-version.js +31 -0
  80. package/src/__tests__/tsconfig-sanity.ts +12 -0
  81. package/src/__tests__/tsconfig.json +8 -0
  82. package/src/__tests__/tsconfig.tsbuildinfo +1 -0
  83. package/src/__tests__/type-generation.test.ts +233 -0
  84. package/src/__tests__/user.test.ts +117 -119
  85. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  86. package/src/__tests__/validate-dev-props.test.ts +56 -0
  87. package/src/__tests__/version.test.ts +35 -0
  88. package/src/__tests__/whoami.test.tsx +176 -132
  89. package/src/__tests__/worker-namespace.test.ts +326 -0
  90. package/src/abort.d.ts +1 -1
  91. package/src/api/dev.ts +247 -0
  92. package/src/api/index.ts +2 -0
  93. package/src/bundle-reporter.ts +68 -0
  94. package/src/bundle.ts +785 -159
  95. package/src/cfetch/index.ts +120 -83
  96. package/src/cfetch/internal.ts +211 -92
  97. package/src/cli.ts +23 -8
  98. package/src/config/config.ts +236 -195
  99. package/src/config/diagnostics.ts +61 -61
  100. package/src/config/environment.ts +514 -357
  101. package/src/config/index.ts +326 -193
  102. package/src/config/validation-helpers.ts +379 -366
  103. package/src/config/validation.ts +1979 -1380
  104. package/src/config-cache.ts +81 -41
  105. package/src/create-worker-preview.ts +239 -142
  106. package/src/create-worker-upload-form.ts +309 -238
  107. package/src/d1/backups.tsx +223 -0
  108. package/src/d1/constants.ts +2 -0
  109. package/src/d1/create.tsx +63 -0
  110. package/src/d1/delete.ts +56 -0
  111. package/src/d1/execute.tsx +323 -0
  112. package/src/d1/formatTimeAgo.ts +14 -0
  113. package/src/d1/index.ts +101 -0
  114. package/src/d1/list.tsx +48 -0
  115. package/src/d1/migrations/apply.tsx +197 -0
  116. package/src/d1/migrations/create.tsx +77 -0
  117. package/src/d1/migrations/helpers.ts +147 -0
  118. package/src/d1/migrations/index.ts +3 -0
  119. package/src/d1/migrations/list.tsx +79 -0
  120. package/src/d1/migrations/options.ts +18 -0
  121. package/src/d1/options.ts +22 -0
  122. package/src/d1/splitter.ts +161 -0
  123. package/src/d1/types.ts +24 -0
  124. package/src/d1/utils.ts +48 -0
  125. package/src/delete.ts +103 -0
  126. package/src/deployments.ts +83 -0
  127. package/src/deprecated/index.ts +145 -0
  128. package/src/dev/dev-vars.ts +20 -17
  129. package/src/dev/dev.tsx +546 -333
  130. package/src/dev/get-local-persistence-path.ts +31 -0
  131. package/src/dev/local.tsx +912 -302
  132. package/src/dev/remote.tsx +618 -225
  133. package/src/dev/start-server.ts +543 -0
  134. package/src/dev/use-esbuild.ts +183 -97
  135. package/src/dev/validate-dev-props.ts +31 -0
  136. package/src/dev-registry.ts +201 -0
  137. package/src/dev.tsx +949 -0
  138. package/src/dialogs.ts +136 -0
  139. package/src/dispatch-namespace.ts +207 -0
  140. package/src/docs/index.ts +97 -0
  141. package/src/durable.ts +87 -87
  142. package/src/entry.ts +235 -228
  143. package/src/environment-variables/factory.ts +88 -0
  144. package/src/environment-variables/misc-variables.ts +30 -0
  145. package/src/errors.ts +6 -6
  146. package/src/generate/index.ts +300 -0
  147. package/src/git-client.ts +135 -0
  148. package/src/global-wrangler-config-path.ts +26 -0
  149. package/src/https-options.ts +84 -80
  150. package/src/index.ts +694 -0
  151. package/src/init.ts +1024 -0
  152. package/src/inspect.ts +698 -593
  153. package/src/intl-polyfill.d.ts +123 -123
  154. package/src/is-ci.ts +14 -0
  155. package/src/is-interactive.ts +16 -0
  156. package/src/jest.d.ts +4 -0
  157. package/src/kv/helpers.ts +430 -0
  158. package/src/kv/index.ts +596 -0
  159. package/src/logger.ts +80 -42
  160. package/src/metrics/index.ts +5 -0
  161. package/src/metrics/metrics-config.ts +239 -0
  162. package/src/metrics/metrics-dispatcher.ts +96 -0
  163. package/src/metrics/metrics-usage-headers.ts +24 -0
  164. package/src/metrics/send-event.ts +97 -0
  165. package/src/miniflare-cli/assets.ts +250 -0
  166. package/src/miniflare-cli/index.ts +202 -33
  167. package/src/miniflare-cli/request-context.ts +18 -18
  168. package/src/miniflare-cli/tsconfig.json +9 -0
  169. package/src/miniflare-cli/tsconfig.tsbuildinfo +1 -0
  170. package/src/miniflare-cli/types.ts +11 -0
  171. package/src/module-collection.ts +221 -212
  172. package/src/open-in-browser.ts +4 -6
  173. package/src/package-manager.ts +173 -128
  174. package/src/pages/build.ts +270 -0
  175. package/src/pages/constants.ts +18 -0
  176. package/src/pages/deployment-tails.ts +284 -0
  177. package/src/pages/deployments.tsx +84 -0
  178. package/src/pages/dev.ts +711 -0
  179. package/src/pages/errors.ts +66 -0
  180. package/src/pages/functions/buildPlugin.ts +107 -0
  181. package/src/pages/functions/buildWorker.ts +166 -0
  182. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  183. package/src/pages/functions/filepath-routing.ts +189 -0
  184. package/src/pages/functions/identifiers.ts +78 -0
  185. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  186. package/src/pages/functions/routes-consolidation.ts +73 -0
  187. package/src/pages/functions/routes-transformation.test.ts +282 -0
  188. package/src/pages/functions/routes-transformation.ts +115 -0
  189. package/src/pages/functions/routes-validation.test.ts +403 -0
  190. package/src/pages/functions/routes-validation.ts +202 -0
  191. package/src/pages/functions/routes.ts +151 -0
  192. package/src/pages/functions/tsconfig.json +8 -0
  193. package/src/pages/functions/tsconfig.tsbuildinfo +1 -0
  194. package/src/pages/functions.ts +82 -0
  195. package/src/pages/hash.ts +13 -0
  196. package/src/pages/index.ts +102 -0
  197. package/src/pages/projects.tsx +167 -0
  198. package/src/pages/prompt-select-project.tsx +31 -0
  199. package/src/pages/publish.tsx +462 -0
  200. package/src/pages/types.ts +41 -0
  201. package/src/pages/upload.tsx +447 -0
  202. package/src/pages/utils.ts +23 -0
  203. package/src/parse.ts +208 -125
  204. package/src/paths.ts +53 -8
  205. package/src/proxy.ts +623 -407
  206. package/src/publish/index.ts +270 -0
  207. package/src/publish/publish.ts +1038 -0
  208. package/src/pubsub/index.ts +286 -0
  209. package/src/pubsub/pubsub-commands.ts +624 -0
  210. package/src/queues/cli/commands/consumer/add.ts +71 -0
  211. package/src/queues/cli/commands/consumer/index.ts +22 -0
  212. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  213. package/src/queues/cli/commands/create.ts +25 -0
  214. package/src/queues/cli/commands/delete.ts +26 -0
  215. package/src/queues/cli/commands/index.ts +36 -0
  216. package/src/queues/cli/commands/list.ts +25 -0
  217. package/src/queues/client.ts +135 -0
  218. package/src/queues/utils.ts +18 -0
  219. package/src/r2/constants.ts +4 -0
  220. package/src/r2/helpers.ts +131 -0
  221. package/src/r2/index.ts +289 -0
  222. package/src/routes.ts +140 -0
  223. package/src/secret/index.ts +379 -0
  224. package/src/selfsigned.d.ts +23 -23
  225. package/src/sites.ts +372 -0
  226. package/src/tail/createTail.ts +379 -0
  227. package/src/tail/filters.ts +108 -110
  228. package/src/tail/index.ts +210 -296
  229. package/src/tail/printing.ts +86 -46
  230. package/src/tsconfig-sanity.ts +16 -0
  231. package/src/type-generation.ts +181 -0
  232. package/src/update-check.ts +11 -11
  233. package/src/user/access.ts +68 -0
  234. package/src/user/auth-variables.ts +113 -0
  235. package/src/user/choose-account.tsx +39 -0
  236. package/src/user/generate-auth-url.ts +33 -0
  237. package/src/user/generate-random-state.ts +16 -0
  238. package/src/user/index.ts +2 -0
  239. package/src/user/user.ts +1232 -0
  240. package/src/utils/collectKeyValues.ts +14 -0
  241. package/src/whoami.ts +135 -0
  242. package/src/worker.ts +177 -107
  243. package/src/yargs-types.ts +24 -0
  244. package/src/zones.ts +158 -40
  245. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  246. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  247. package/templates/__tests__/tsconfig.json +8 -0
  248. package/templates/__tests__/tsconfig.tsbuildinfo +1 -0
  249. package/templates/checked-fetch.js +17 -0
  250. package/templates/d1-beta-facade.js +241 -0
  251. package/templates/facade.d.ts +14 -0
  252. package/templates/first-party-worker-module-facade.ts +19 -0
  253. package/templates/format-dev-errors.ts +33 -0
  254. package/templates/init-tests/test-jest-new-worker.js +23 -0
  255. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  256. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  257. package/templates/middleware/common.ts +62 -0
  258. package/templates/middleware/loader-modules.ts +82 -0
  259. package/templates/middleware/loader-sw.ts +233 -0
  260. package/templates/middleware/middleware-miniflare3-json-error.ts +20 -0
  261. package/templates/middleware/middleware-pretty-error.ts +40 -0
  262. package/templates/middleware/middleware-scheduled.ts +15 -0
  263. package/templates/new-worker-scheduled.js +3 -3
  264. package/templates/new-worker-scheduled.ts +15 -15
  265. package/templates/new-worker.js +3 -3
  266. package/templates/new-worker.ts +15 -15
  267. package/templates/no-op-worker.js +10 -0
  268. package/templates/pages-dev-pipeline.ts +31 -0
  269. package/templates/pages-dev-util.ts +52 -0
  270. package/templates/pages-shim.ts +12 -0
  271. package/templates/pages-template-plugin.ts +176 -0
  272. package/templates/pages-template-worker.ts +189 -0
  273. package/templates/serve-static-assets.ts +65 -0
  274. package/templates/service-bindings-module-facade.js +54 -0
  275. package/templates/service-bindings-sw-facade.js +42 -0
  276. package/templates/tsconfig-sanity.ts +11 -0
  277. package/templates/tsconfig.init.json +106 -0
  278. package/templates/tsconfig.json +6 -103
  279. package/templates/tsconfig.tsbuildinfo +1 -0
  280. package/wrangler-dist/cli.d.ts +906 -0
  281. package/wrangler-dist/cli.js +128866 -110945
  282. package/wrangler-dist/wasm-sync.wasm +0 -0
  283. package/pages/functions/buildPlugin.ts +0 -105
  284. package/pages/functions/buildWorker.ts +0 -151
  285. package/pages/functions/filepath-routing.ts +0 -189
  286. package/pages/functions/identifiers.ts +0 -78
  287. package/pages/functions/routes.ts +0 -156
  288. package/pages/functions/template-plugin.ts +0 -147
  289. package/pages/functions/template-worker.ts +0 -143
  290. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  291. package/src/dialogs.tsx +0 -135
  292. package/src/environment-variables.ts +0 -35
  293. package/src/index.tsx +0 -2846
  294. package/src/kv.ts +0 -408
  295. package/src/miniflare-cli/enum-keys.ts +0 -17
  296. package/src/pages.tsx +0 -2093
  297. package/src/publish.ts +0 -716
  298. package/src/r2.ts +0 -50
  299. package/src/sites.tsx +0 -326
  300. package/src/user.tsx +0 -1214
  301. package/src/whoami.tsx +0 -71
  302. package/templates/static-asset-facade.js +0 -43
@@ -0,0 +1,241 @@
1
+ // src/shim.ts
2
+ import worker from "__ENTRY_POINT__";
3
+ export * from "__ENTRY_POINT__";
4
+
5
+ // src/index.ts
6
+ var D1Database = class {
7
+ constructor(binding) {
8
+ this.binding = binding;
9
+ }
10
+ prepare(query) {
11
+ return new D1PreparedStatement(this, query);
12
+ }
13
+ async dump() {
14
+ const response = await this.binding.fetch("/dump", {
15
+ method: "POST",
16
+ headers: {
17
+ "content-type": "application/json",
18
+ },
19
+ });
20
+ if (response.status !== 200) {
21
+ try {
22
+ const err = await response.json();
23
+ throw new Error("D1_DUMP_ERROR", {
24
+ cause: new Error(err.error),
25
+ });
26
+ } catch (e) {
27
+ throw new Error("D1_DUMP_ERROR", {
28
+ cause: new Error("Status " + response.status),
29
+ });
30
+ }
31
+ }
32
+ return await response.arrayBuffer();
33
+ }
34
+ async batch(statements) {
35
+ const exec = await this._send(
36
+ "/query",
37
+ statements.map((s) => s.statement),
38
+ statements.map((s) => s.params)
39
+ );
40
+ return exec;
41
+ }
42
+ async exec(query) {
43
+ const lines = query.trim().split("\n");
44
+ const _exec = await this._send("/query", lines, [], false);
45
+ const exec = Array.isArray(_exec) ? _exec : [_exec];
46
+ const error = exec
47
+ .map((r) => {
48
+ return r.error ? 1 : 0;
49
+ })
50
+ .indexOf(1);
51
+ if (error !== -1) {
52
+ throw new Error("D1_EXEC_ERROR", {
53
+ cause: new Error(
54
+ "Error in line " +
55
+ (error + 1) +
56
+ ": " +
57
+ lines[error] +
58
+ ": " +
59
+ exec[error].error
60
+ ),
61
+ });
62
+ } else {
63
+ return {
64
+ count: exec.length,
65
+ duration: exec.reduce((p, c) => {
66
+ return p + c.meta.duration;
67
+ }, 0),
68
+ };
69
+ }
70
+ }
71
+ async _send(endpoint, query, params, dothrow = true) {
72
+ const body = JSON.stringify(
73
+ typeof query == "object"
74
+ ? query.map((s, index) => {
75
+ return { sql: s, params: params[index] };
76
+ })
77
+ : {
78
+ sql: query,
79
+ params,
80
+ }
81
+ );
82
+ const response = await this.binding.fetch(endpoint, {
83
+ method: "POST",
84
+ headers: {
85
+ "content-type": "application/json",
86
+ },
87
+ body,
88
+ });
89
+ try {
90
+ const answer = await response.json();
91
+ if (answer.error && dothrow) {
92
+ const err = answer;
93
+ throw new Error("D1_ERROR", { cause: new Error(err.error) });
94
+ } else {
95
+ return Array.isArray(answer)
96
+ ? answer.map((r) => mapD1Result(r))
97
+ : mapD1Result(answer);
98
+ }
99
+ } catch (e) {
100
+ throw new Error("D1_ERROR", {
101
+ cause: new Error(e.cause || "Something went wrong"),
102
+ });
103
+ }
104
+ }
105
+ };
106
+ var D1PreparedStatement = class {
107
+ constructor(database, statement, values) {
108
+ this.database = database;
109
+ this.statement = statement;
110
+ this.params = values || [];
111
+ }
112
+ bind(...values) {
113
+ for (var r in values) {
114
+ switch (typeof values[r]) {
115
+ case "number":
116
+ case "string":
117
+ break;
118
+ case "object":
119
+ if (values[r] == null) break;
120
+ if (
121
+ Array.isArray(values[r]) &&
122
+ values[r]
123
+ .map((b) => {
124
+ return typeof b == "number" && b >= 0 && b < 256 ? 1 : 0;
125
+ })
126
+ .indexOf(0) == -1
127
+ )
128
+ break;
129
+ if (values[r] instanceof ArrayBuffer) {
130
+ values[r] = Array.from(new Uint8Array(values[r]));
131
+ break;
132
+ }
133
+ if (ArrayBuffer.isView(values[r])) {
134
+ values[r] = Array.from(values[r]);
135
+ break;
136
+ }
137
+ default:
138
+ throw new Error("D1_TYPE_ERROR", {
139
+ cause: new Error(
140
+ "Type '" +
141
+ typeof values[r] +
142
+ "' not supported for value '" +
143
+ values[r] +
144
+ "'"
145
+ ),
146
+ });
147
+ }
148
+ }
149
+ return new D1PreparedStatement(this.database, this.statement, values);
150
+ }
151
+ async first(colName) {
152
+ const info = firstIfArray(
153
+ await this.database._send("/query", this.statement, this.params)
154
+ );
155
+ const results = info.results;
156
+ if (colName !== void 0) {
157
+ if (results.length > 0 && results[0][colName] === void 0) {
158
+ throw new Error("D1_COLUMN_NOTFOUND", {
159
+ cause: new Error("Column not found"),
160
+ });
161
+ }
162
+ return results.length < 1 ? null : results[0][colName];
163
+ } else {
164
+ return results.length < 1 ? null : results[0];
165
+ }
166
+ }
167
+ async run() {
168
+ return firstIfArray(
169
+ await this.database._send("/execute", this.statement, this.params)
170
+ );
171
+ }
172
+ async all() {
173
+ return firstIfArray(
174
+ await this.database._send("/query", this.statement, this.params)
175
+ );
176
+ }
177
+ async raw() {
178
+ const s = firstIfArray(
179
+ await this.database._send("/query", this.statement, this.params)
180
+ );
181
+ const raw = [];
182
+ for (var r in s.results) {
183
+ const entry = Object.keys(s.results[r]).map((k) => {
184
+ return s.results[r][k];
185
+ });
186
+ raw.push(entry);
187
+ }
188
+ return raw;
189
+ }
190
+ };
191
+ function firstIfArray(results) {
192
+ return Array.isArray(results) ? results[0] : results;
193
+ }
194
+ function mapD1Result(result) {
195
+ let map = {
196
+ results: result.results || [],
197
+ success: result.success === void 0 ? true : result.success,
198
+ meta: result.meta || {},
199
+ };
200
+ result.error && (map.error = result.error);
201
+ return map;
202
+ }
203
+
204
+ // src/shim.ts
205
+ var D1_IMPORTS = __D1_IMPORTS__;
206
+ var LOCAL_MODE = __LOCAL_MODE__;
207
+ var D1_BETA_PREFIX = `__D1_BETA__`;
208
+ var envMap = /* @__PURE__ */ new Map();
209
+ function getMaskedEnv(env) {
210
+ if (envMap.has(env)) return envMap.get(env);
211
+ const newEnv = new Map(Object.entries(env));
212
+ D1_IMPORTS.filter((bindingName) =>
213
+ bindingName.startsWith(D1_BETA_PREFIX)
214
+ ).forEach((bindingName) => {
215
+ newEnv.delete(bindingName);
216
+ const newName = bindingName.slice(D1_BETA_PREFIX.length);
217
+ const newBinding = !LOCAL_MODE
218
+ ? new D1Database(env[bindingName])
219
+ : env[bindingName];
220
+ newEnv.set(newName, newBinding);
221
+ });
222
+ const newEnvObj = Object.fromEntries(newEnv.entries());
223
+ envMap.set(env, newEnvObj);
224
+ return newEnvObj;
225
+ }
226
+ var shim_default = {
227
+ ...worker,
228
+ async fetch(request, env, ctx) {
229
+ return worker.fetch(request, getMaskedEnv(env), ctx);
230
+ },
231
+ async queue(batch, env, ctx) {
232
+ return worker.queue(batch, getMaskedEnv(env), ctx);
233
+ },
234
+ async scheduled(controller, env, ctx) {
235
+ return worker.scheduled(controller, getMaskedEnv(env), ctx);
236
+ },
237
+ async trace(traces, env, ctx) {
238
+ return worker.trace(traces, getMaskedEnv(env), ctx);
239
+ },
240
+ };
241
+ export { shim_default as default };
@@ -0,0 +1,14 @@
1
+ declare module "__ENTRY_POINT__" {
2
+ import type { Middleware } from "./middleware/common";
3
+ const worker: ExportedHandler & { middleware?: Middleware[] };
4
+ export default worker;
5
+ }
6
+
7
+ declare module "__KV_ASSET_HANDLER__" {
8
+ export * from "@cloudflare/kv-asset-handler";
9
+ }
10
+
11
+ declare module "__STATIC_CONTENT_MANIFEST" {
12
+ const manifest: string;
13
+ export default manifest;
14
+ }
@@ -0,0 +1,19 @@
1
+ import worker from "__ENTRY_POINT__";
2
+ export * from "__ENTRY_POINT__";
3
+
4
+ type Env = {
5
+ // TODO: type this
6
+ };
7
+
8
+ /**
9
+ * Setup globals/vars as required
10
+ */
11
+
12
+ export default <ExportedHandler>{
13
+ async fetch(request: Request, env: Env, ctx: ExecutionContext) {
14
+ if (worker.fetch === undefined) {
15
+ throw new TypeError("Entry point missing `fetch` handler");
16
+ }
17
+ return worker.fetch(request, env, ctx);
18
+ },
19
+ };
@@ -0,0 +1,33 @@
1
+ import worker from "__ENTRY_POINT__";
2
+
3
+ export * from "__ENTRY_POINT__";
4
+
5
+ export default <ExportedHandler>{
6
+ async fetch(req, env, ctx) {
7
+ if (worker.fetch === undefined) {
8
+ throw new TypeError("Entry point missing `fetch` handler");
9
+ }
10
+ try {
11
+ return await worker.fetch(req, env, ctx);
12
+ } catch (err) {
13
+ return new Response(
14
+ `<!DOCTYPE html>
15
+ <html>
16
+ <head>
17
+ <meta charset="utf-8" />
18
+ <title>Error</title>
19
+ </head>
20
+ <body>
21
+ <pre>${(err as Error).stack}</pre>
22
+ </body>
23
+ </html>`,
24
+ {
25
+ status: 500,
26
+ headers: {
27
+ "Content-Type": "text/html",
28
+ },
29
+ }
30
+ );
31
+ }
32
+ },
33
+ };
@@ -0,0 +1,23 @@
1
+ const { unstable_dev } = require("wrangler");
2
+
3
+ describe("Worker", () => {
4
+ let worker;
5
+
6
+ beforeAll(async () => {
7
+ worker = await unstable_dev("src/index.js", {
8
+ experimental: { disableExperimentalWarning: true },
9
+ });
10
+ });
11
+
12
+ afterAll(async () => {
13
+ await worker.stop();
14
+ });
15
+
16
+ it("should return Hello World", async () => {
17
+ const resp = await worker.fetch();
18
+ if (resp) {
19
+ const text = await resp.text();
20
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
21
+ }
22
+ });
23
+ });
@@ -0,0 +1,24 @@
1
+ import { unstable_dev } from "wrangler";
2
+ import { describe, expect, it, beforeAll, afterAll } from "vitest";
3
+
4
+ describe("Worker", () => {
5
+ let worker;
6
+
7
+ beforeAll(async () => {
8
+ worker = await unstable_dev("src/index.js", {
9
+ experimental: { disableExperimentalWarning: true },
10
+ });
11
+ });
12
+
13
+ afterAll(async () => {
14
+ await worker.stop();
15
+ });
16
+
17
+ it("should return Hello World", async () => {
18
+ const resp = await worker.fetch();
19
+ if (resp) {
20
+ const text = await resp.text();
21
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
22
+ }
23
+ });
24
+ });
@@ -0,0 +1,25 @@
1
+ import { unstable_dev } from "wrangler";
2
+ import type { UnstableDevWorker } from "wrangler";
3
+ import { describe, expect, it, beforeAll, afterAll } from "vitest";
4
+
5
+ describe("Worker", () => {
6
+ let worker: UnstableDevWorker;
7
+
8
+ beforeAll(async () => {
9
+ worker = await unstable_dev("src/index.ts", {
10
+ experimental: { disableExperimentalWarning: true },
11
+ });
12
+ });
13
+
14
+ afterAll(async () => {
15
+ await worker.stop();
16
+ });
17
+
18
+ it("should return Hello World", async () => {
19
+ const resp = await worker.fetch();
20
+ if (resp) {
21
+ const text = await resp.text();
22
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
23
+ }
24
+ });
25
+ });
@@ -0,0 +1,62 @@
1
+ export type Awaitable<T> = T | Promise<T>;
2
+ // TODO: allow dispatching more events?
3
+ export type Dispatcher = (
4
+ type: "scheduled",
5
+ init: { cron?: string }
6
+ ) => Awaitable<void>;
7
+
8
+ export interface MiddlewareContext {
9
+ dispatch: Dispatcher;
10
+ next(request: Request, env: any): Awaitable<Response>;
11
+ }
12
+
13
+ export type Middleware = (
14
+ request: Request,
15
+ env: any,
16
+ ctx: ExecutionContext,
17
+ middlewareCtx: MiddlewareContext
18
+ ) => Awaitable<Response>;
19
+
20
+ const __facade_middleware__: Middleware[] = [];
21
+
22
+ // The register functions allow for the insertion of one or many middleware,
23
+ // We register internal middleware first in the stack, but have no way of controlling
24
+ // the order that addMiddleware is run in service workers so need an internal function.
25
+ export function __facade_register__(...args: (Middleware | Middleware[])[]) {
26
+ __facade_middleware__.push(...args.flat());
27
+ }
28
+ export function __facade_registerInternal__(
29
+ ...args: (Middleware | Middleware[])[]
30
+ ) {
31
+ __facade_middleware__.unshift(...args.flat());
32
+ }
33
+
34
+ function __facade_invokeChain__(
35
+ request: Request,
36
+ env: any,
37
+ ctx: ExecutionContext,
38
+ dispatch: Dispatcher,
39
+ middlewareChain: Middleware[]
40
+ ): Awaitable<Response> {
41
+ const [head, ...tail] = middlewareChain;
42
+ const middlewareCtx: MiddlewareContext = {
43
+ dispatch,
44
+ next(newRequest, newEnv) {
45
+ return __facade_invokeChain__(newRequest, newEnv, ctx, dispatch, tail);
46
+ },
47
+ };
48
+ return head(request, env, ctx, middlewareCtx);
49
+ }
50
+
51
+ export function __facade_invoke__(
52
+ request: Request,
53
+ env: any,
54
+ ctx: ExecutionContext,
55
+ dispatch: Dispatcher,
56
+ finalMiddleware: Middleware
57
+ ): Awaitable<Response> {
58
+ return __facade_invokeChain__(request, env, ctx, dispatch, [
59
+ ...__facade_middleware__,
60
+ finalMiddleware,
61
+ ]);
62
+ }
@@ -0,0 +1,82 @@
1
+ // // This loads all middlewares exposed on the middleware object
2
+ // // and then starts the invocation chain.
3
+ // // The big idea is that we can add these to the middleware export dynamically
4
+ // // through wrangler, or we can potentially let users directly add them as a sort
5
+ // // of "plugin" system.
6
+
7
+ import {
8
+ Dispatcher,
9
+ Middleware,
10
+ __facade_invoke__,
11
+ __facade_register__,
12
+ } from "./common";
13
+
14
+ import worker from "__ENTRY_POINT__";
15
+
16
+ // We need to preserve all of the exports from the worker
17
+ export * from "__ENTRY_POINT__";
18
+
19
+ class __Facade_ScheduledController__ implements ScheduledController {
20
+ #noRetry: ScheduledController["noRetry"];
21
+
22
+ constructor(
23
+ readonly scheduledTime: number,
24
+ readonly cron: string,
25
+ noRetry: ScheduledController["noRetry"]
26
+ ) {
27
+ this.#noRetry = noRetry;
28
+ }
29
+
30
+ noRetry() {
31
+ if (!(this instanceof __Facade_ScheduledController__)) {
32
+ throw new TypeError("Illegal invocation");
33
+ }
34
+ // Need to call native method immediately in case uncaught error thrown
35
+ this.#noRetry();
36
+ }
37
+ }
38
+
39
+ const __facade_modules_fetch__: Middleware = function (request, env, ctx) {
40
+ if (worker.fetch === undefined) throw new Error("No fetch handler!"); // TODO: proper error message
41
+ return worker.fetch(request, env, ctx);
42
+ };
43
+
44
+ const facade: ExportedHandler<unknown> = {
45
+ fetch(request, env, ctx) {
46
+ // Get the chain of middleware from the worker object
47
+ if (worker.middleware && worker.middleware.length > 0) {
48
+ for (const middleware of worker.middleware) {
49
+ __facade_register__(middleware);
50
+ }
51
+
52
+ const __facade_modules_dispatch__: Dispatcher = function (type, init) {
53
+ if (type === "scheduled" && worker.scheduled !== undefined) {
54
+ const controller = new __Facade_ScheduledController__(
55
+ Date.now(),
56
+ init.cron ?? "",
57
+ () => {}
58
+ );
59
+ return worker.scheduled(controller, env, ctx);
60
+ }
61
+ };
62
+
63
+ return __facade_invoke__(
64
+ request,
65
+ env,
66
+ ctx,
67
+ __facade_modules_dispatch__,
68
+ __facade_modules_fetch__
69
+ );
70
+ } else {
71
+ // We didn't have any middleware so we can skip the invocation chain,
72
+ // and just call the fetch handler directly
73
+
74
+ // We "don't care" if this is undefined as we want to have the same behaviour
75
+ // as if the worker completely bypassed middleware.
76
+ return worker.fetch!(request, env, ctx);
77
+ }
78
+ },
79
+ scheduled: worker.scheduled,
80
+ };
81
+
82
+ export default facade;