wrangler 0.0.0-e6c9c5c0 → 0.0.0-e72a5794

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 (283) hide show
  1. package/README.md +12 -14
  2. package/bin/wrangler.js +10 -76
  3. package/package.json +24 -23
  4. package/templates/__tests__/tsconfig.json +1 -1
  5. package/templates/checked-fetch.js +19 -4
  6. package/templates/facade.d.ts +4 -1
  7. package/templates/gitignore +1 -0
  8. package/templates/middleware/common.ts +9 -4
  9. package/templates/middleware/loader-modules.ts +64 -11
  10. package/templates/middleware/loader-sw.ts +2 -7
  11. package/templates/middleware/middleware-d1-beta.d.ts +3 -0
  12. package/templates/{d1-beta-facade.js → middleware/middleware-d1-beta.ts} +87 -84
  13. package/templates/middleware/middleware-miniflare3-json-error.ts +17 -5
  14. package/templates/middleware/middleware-multiworker-dev.d.ts +4 -0
  15. package/templates/middleware/middleware-multiworker-dev.ts +59 -0
  16. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  17. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  18. package/templates/new-worker-scheduled.ts +1 -1
  19. package/templates/new-worker.ts +4 -1
  20. package/templates/pages-dev-util.ts +4 -1
  21. package/templates/pages-shim.ts +0 -3
  22. package/templates/pages-template-plugin.ts +19 -5
  23. package/templates/pages-template-worker.ts +11 -2
  24. package/templates/tsconfig.init.json +1 -2
  25. package/templates/tsconfig.json +1 -1
  26. package/wrangler-dist/cli.d.ts +780 -82
  27. package/wrangler-dist/cli.js +79958 -74868
  28. package/import_meta_url.js +0 -3
  29. package/miniflare-config-stubs/.env.empty +0 -0
  30. package/miniflare-config-stubs/package.empty.json +0 -1
  31. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  32. package/miniflare-dist/index.mjs +0 -6364
  33. package/src/__tests__/access.test.ts +0 -25
  34. package/src/__tests__/api-dev.test.ts +0 -238
  35. package/src/__tests__/api-devregistry.test.js +0 -64
  36. package/src/__tests__/api.test.ts +0 -80
  37. package/src/__tests__/config-cache-without-cache-dir.test.ts +0 -38
  38. package/src/__tests__/config-cache.test.ts +0 -42
  39. package/src/__tests__/configuration.test.ts +0 -4163
  40. package/src/__tests__/d1/d1.test.ts +0 -127
  41. package/src/__tests__/d1/splitter.test.ts +0 -255
  42. package/src/__tests__/delete.test.ts +0 -266
  43. package/src/__tests__/deployments.test.ts +0 -105
  44. package/src/__tests__/dev.test.tsx +0 -1586
  45. package/src/__tests__/generate.test.ts +0 -238
  46. package/src/__tests__/get-host-from-url.test.ts +0 -16
  47. package/src/__tests__/guess-worker-format.test.ts +0 -85
  48. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  49. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  50. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  51. package/src/__tests__/helpers/mock-auth-domain.ts +0 -20
  52. package/src/__tests__/helpers/mock-bin.ts +0 -36
  53. package/src/__tests__/helpers/mock-console.ts +0 -106
  54. package/src/__tests__/helpers/mock-dialogs.ts +0 -139
  55. package/src/__tests__/helpers/mock-get-zone-from-host.ts +0 -11
  56. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  57. package/src/__tests__/helpers/mock-istty.ts +0 -74
  58. package/src/__tests__/helpers/mock-known-routes.ts +0 -12
  59. package/src/__tests__/helpers/mock-kv.ts +0 -46
  60. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -263
  61. package/src/__tests__/helpers/mock-process.ts +0 -34
  62. package/src/__tests__/helpers/mock-stdin.ts +0 -108
  63. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  64. package/src/__tests__/helpers/msw/blob-worker.cjs +0 -19
  65. package/src/__tests__/helpers/msw/handlers/access.ts +0 -13
  66. package/src/__tests__/helpers/msw/handlers/deployments.ts +0 -69
  67. package/src/__tests__/helpers/msw/handlers/namespaces.ts +0 -81
  68. package/src/__tests__/helpers/msw/handlers/oauth.ts +0 -31
  69. package/src/__tests__/helpers/msw/handlers/r2.ts +0 -60
  70. package/src/__tests__/helpers/msw/handlers/script.ts +0 -56
  71. package/src/__tests__/helpers/msw/handlers/user.ts +0 -52
  72. package/src/__tests__/helpers/msw/handlers/zones.ts +0 -20
  73. package/src/__tests__/helpers/msw/index.ts +0 -50
  74. package/src/__tests__/helpers/msw/read-file-sync.js +0 -61
  75. package/src/__tests__/helpers/run-in-tmp.ts +0 -38
  76. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  77. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +0 -1
  78. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +0 -5
  79. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +0 -1
  80. package/src/__tests__/helpers/worker-scripts/parent-worker.js +0 -8
  81. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +0 -5
  82. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  83. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  84. package/src/__tests__/https-options.test.ts +0 -163
  85. package/src/__tests__/index.test.ts +0 -268
  86. package/src/__tests__/init.test.ts +0 -3164
  87. package/src/__tests__/jest.setup.ts +0 -175
  88. package/src/__tests__/kv.test.ts +0 -1788
  89. package/src/__tests__/logger.test.ts +0 -141
  90. package/src/__tests__/logout.test.ts +0 -47
  91. package/src/__tests__/metrics.test.ts +0 -493
  92. package/src/__tests__/middleware.scheduled.test.ts +0 -145
  93. package/src/__tests__/middleware.test.ts +0 -750
  94. package/src/__tests__/package-manager.test.ts +0 -353
  95. package/src/__tests__/pages-deployment-tail.test.ts +0 -955
  96. package/src/__tests__/pages.test.ts +0 -2898
  97. package/src/__tests__/parse.test.ts +0 -330
  98. package/src/__tests__/paths.test.ts +0 -39
  99. package/src/__tests__/publish.test.ts +0 -8117
  100. package/src/__tests__/pubsub.test.ts +0 -490
  101. package/src/__tests__/queues.test.ts +0 -522
  102. package/src/__tests__/r2.test.ts +0 -369
  103. package/src/__tests__/route.test.ts +0 -45
  104. package/src/__tests__/secret.test.ts +0 -693
  105. package/src/__tests__/tail.test.ts +0 -958
  106. package/src/__tests__/test-old-node-version.js +0 -31
  107. package/src/__tests__/tsconfig-sanity.ts +0 -12
  108. package/src/__tests__/tsconfig.json +0 -8
  109. package/src/__tests__/tsconfig.tsbuildinfo +0 -1
  110. package/src/__tests__/type-generation.test.ts +0 -233
  111. package/src/__tests__/user.test.ts +0 -118
  112. package/src/__tests__/utils-collectKeyValues.test.ts +0 -47
  113. package/src/__tests__/validate-dev-props.test.ts +0 -56
  114. package/src/__tests__/version.test.ts +0 -35
  115. package/src/__tests__/whoami.test.tsx +0 -172
  116. package/src/__tests__/worker-namespace.test.ts +0 -334
  117. package/src/abort.d.ts +0 -3
  118. package/src/api/dev.ts +0 -259
  119. package/src/api/index.ts +0 -3
  120. package/src/api/pages/index.ts +0 -5
  121. package/src/api/pages/publish.tsx +0 -321
  122. package/src/bundle-reporter.ts +0 -68
  123. package/src/bundle.ts +0 -875
  124. package/src/cfetch/index.ts +0 -158
  125. package/src/cfetch/internal.ts +0 -258
  126. package/src/cli.ts +0 -28
  127. package/src/config/README.md +0 -107
  128. package/src/config/config.ts +0 -275
  129. package/src/config/diagnostics.ts +0 -80
  130. package/src/config/environment.ts +0 -579
  131. package/src/config/index.ts +0 -358
  132. package/src/config/validation-helpers.ts +0 -597
  133. package/src/config/validation.ts +0 -2151
  134. package/src/config-cache.ts +0 -85
  135. package/src/create-worker-preview.ts +0 -282
  136. package/src/create-worker-upload-form.ts +0 -325
  137. package/src/d1/backups.tsx +0 -219
  138. package/src/d1/constants.ts +0 -2
  139. package/src/d1/create.tsx +0 -63
  140. package/src/d1/delete.ts +0 -56
  141. package/src/d1/execute.tsx +0 -323
  142. package/src/d1/formatTimeAgo.ts +0 -14
  143. package/src/d1/index.ts +0 -101
  144. package/src/d1/list.tsx +0 -48
  145. package/src/d1/migrations/apply.tsx +0 -197
  146. package/src/d1/migrations/create.tsx +0 -77
  147. package/src/d1/migrations/helpers.ts +0 -147
  148. package/src/d1/migrations/index.ts +0 -3
  149. package/src/d1/migrations/list.tsx +0 -79
  150. package/src/d1/migrations/options.ts +0 -18
  151. package/src/d1/options.ts +0 -22
  152. package/src/d1/splitter.ts +0 -161
  153. package/src/d1/types.ts +0 -24
  154. package/src/d1/utils.ts +0 -48
  155. package/src/delete.ts +0 -103
  156. package/src/deployments.ts +0 -93
  157. package/src/deprecated/index.ts +0 -145
  158. package/src/dev/dev-vars.ts +0 -39
  159. package/src/dev/dev.tsx +0 -614
  160. package/src/dev/get-local-persistence-path.ts +0 -31
  161. package/src/dev/local.tsx +0 -923
  162. package/src/dev/remote.tsx +0 -632
  163. package/src/dev/start-server.ts +0 -538
  164. package/src/dev/use-esbuild.ts +0 -205
  165. package/src/dev/validate-dev-props.ts +0 -31
  166. package/src/dev-registry.ts +0 -201
  167. package/src/dev.tsx +0 -949
  168. package/src/dialogs.ts +0 -136
  169. package/src/dispatch-namespace.ts +0 -207
  170. package/src/docs/index.ts +0 -98
  171. package/src/durable.ts +0 -102
  172. package/src/entry.ts +0 -328
  173. package/src/environment-variables/factory.ts +0 -88
  174. package/src/environment-variables/misc-variables.ts +0 -30
  175. package/src/errors.ts +0 -11
  176. package/src/generate/index.ts +0 -300
  177. package/src/git-client.ts +0 -135
  178. package/src/global-wrangler-config-path.ts +0 -26
  179. package/src/https-options.ts +0 -127
  180. package/src/index.ts +0 -694
  181. package/src/init.ts +0 -1024
  182. package/src/inspect.ts +0 -767
  183. package/src/intl-polyfill.d.ts +0 -139
  184. package/src/is-ci.ts +0 -14
  185. package/src/is-interactive.ts +0 -16
  186. package/src/jest.d.ts +0 -4
  187. package/src/kv/helpers.ts +0 -430
  188. package/src/kv/index.ts +0 -596
  189. package/src/logger.ts +0 -104
  190. package/src/metrics/index.ts +0 -5
  191. package/src/metrics/metrics-config.ts +0 -239
  192. package/src/metrics/metrics-dispatcher.ts +0 -96
  193. package/src/metrics/metrics-usage-headers.ts +0 -24
  194. package/src/metrics/send-event.ts +0 -98
  195. package/src/miniflare-cli/README.md +0 -30
  196. package/src/miniflare-cli/assets.ts +0 -250
  197. package/src/miniflare-cli/index.ts +0 -210
  198. package/src/miniflare-cli/request-context.ts +0 -40
  199. package/src/miniflare-cli/tsconfig.json +0 -9
  200. package/src/miniflare-cli/tsconfig.tsbuildinfo +0 -1
  201. package/src/miniflare-cli/types.ts +0 -11
  202. package/src/module-collection.ts +0 -267
  203. package/src/open-in-browser.ts +0 -17
  204. package/src/package-manager.ts +0 -219
  205. package/src/pages/build.ts +0 -150
  206. package/src/pages/buildFunctions.ts +0 -129
  207. package/src/pages/constants.ts +0 -18
  208. package/src/pages/deployment-tails.ts +0 -284
  209. package/src/pages/deployments.tsx +0 -84
  210. package/src/pages/dev.ts +0 -716
  211. package/src/pages/errors.ts +0 -66
  212. package/src/pages/functions/buildPlugin.ts +0 -90
  213. package/src/pages/functions/buildWorker.ts +0 -288
  214. package/src/pages/functions/filepath-routing.test.ts +0 -234
  215. package/src/pages/functions/filepath-routing.ts +0 -189
  216. package/src/pages/functions/identifiers.ts +0 -78
  217. package/src/pages/functions/routes-consolidation.test.ts +0 -250
  218. package/src/pages/functions/routes-consolidation.ts +0 -73
  219. package/src/pages/functions/routes-transformation.test.ts +0 -282
  220. package/src/pages/functions/routes-transformation.ts +0 -115
  221. package/src/pages/functions/routes-validation.test.ts +0 -403
  222. package/src/pages/functions/routes-validation.ts +0 -202
  223. package/src/pages/functions/routes.ts +0 -151
  224. package/src/pages/functions/tsconfig.json +0 -8
  225. package/src/pages/functions/tsconfig.tsbuildinfo +0 -1
  226. package/src/pages/functions.ts +0 -82
  227. package/src/pages/hash.ts +0 -13
  228. package/src/pages/index.ts +0 -102
  229. package/src/pages/projects.tsx +0 -167
  230. package/src/pages/prompt-select-project.tsx +0 -31
  231. package/src/pages/publish.tsx +0 -263
  232. package/src/pages/types.ts +0 -41
  233. package/src/pages/upload.tsx +0 -447
  234. package/src/pages/utils.ts +0 -23
  235. package/src/parse.ts +0 -286
  236. package/src/paths.ts +0 -71
  237. package/src/proxy.ts +0 -694
  238. package/src/publish/index.ts +0 -270
  239. package/src/publish/publish.ts +0 -1064
  240. package/src/pubsub/index.ts +0 -286
  241. package/src/pubsub/pubsub-commands.ts +0 -624
  242. package/src/queues/cli/commands/consumer/add.ts +0 -71
  243. package/src/queues/cli/commands/consumer/index.ts +0 -22
  244. package/src/queues/cli/commands/consumer/remove.ts +0 -38
  245. package/src/queues/cli/commands/create.ts +0 -25
  246. package/src/queues/cli/commands/delete.ts +0 -26
  247. package/src/queues/cli/commands/index.ts +0 -36
  248. package/src/queues/cli/commands/list.ts +0 -25
  249. package/src/queues/client.ts +0 -135
  250. package/src/queues/utils.ts +0 -18
  251. package/src/r2/constants.ts +0 -4
  252. package/src/r2/helpers.ts +0 -131
  253. package/src/r2/index.ts +0 -289
  254. package/src/routes.ts +0 -140
  255. package/src/secret/index.ts +0 -379
  256. package/src/selfsigned.d.ts +0 -29
  257. package/src/sites.ts +0 -372
  258. package/src/tail/createTail.ts +0 -406
  259. package/src/tail/filters.ts +0 -277
  260. package/src/tail/index.ts +0 -213
  261. package/src/tail/printing.ts +0 -122
  262. package/src/tsconfig-sanity.ts +0 -16
  263. package/src/type-generation.ts +0 -181
  264. package/src/update-check.ts +0 -19
  265. package/src/user/access.ts +0 -68
  266. package/src/user/auth-variables.ts +0 -113
  267. package/src/user/choose-account.tsx +0 -39
  268. package/src/user/generate-auth-url.ts +0 -33
  269. package/src/user/generate-random-state.ts +0 -16
  270. package/src/user/index.ts +0 -2
  271. package/src/user/user.ts +0 -1232
  272. package/src/utils/collectKeyValues.ts +0 -14
  273. package/src/whoami.ts +0 -135
  274. package/src/worker.ts +0 -251
  275. package/src/yargs-types.ts +0 -24
  276. package/src/zones.ts +0 -191
  277. package/templates/__tests__/tsconfig.tsbuildinfo +0 -1
  278. package/templates/first-party-worker-module-facade.ts +0 -19
  279. package/templates/format-dev-errors.ts +0 -33
  280. package/templates/serve-static-assets.ts +0 -65
  281. package/templates/service-bindings-module-facade.js +0 -54
  282. package/templates/service-bindings-sw-facade.js +0 -42
  283. package/templates/tsconfig.tsbuildinfo +0 -1
@@ -1,17 +1,15 @@
1
- // src/shim.ts
2
- import worker, * as OTHER_EXPORTS from "__ENTRY_POINT__";
3
- export * from "__ENTRY_POINT__";
1
+ /// <reference path="middleware-d1-beta.d.ts"/>
2
+
3
+ import { D1_IMPORTS } from "config:middleware/d1-beta";
4
4
 
5
5
  // src/index.ts
6
- var D1Database = class {
7
- constructor(binding) {
8
- this.binding = binding;
9
- }
10
- prepare(query) {
6
+ class D1Database {
7
+ constructor(readonly binding: Fetcher) {}
8
+ prepare(query: string) {
11
9
  return new D1PreparedStatement(this, query);
12
10
  }
13
11
  async dump() {
14
- const response = await this.binding.fetch("/dump", {
12
+ const response = await this.binding.fetch("http://d1/dump", {
15
13
  method: "POST",
16
14
  headers: {
17
15
  "content-type": "application/json",
@@ -19,19 +17,19 @@ var D1Database = class {
19
17
  });
20
18
  if (response.status !== 200) {
21
19
  try {
22
- const err = await response.json();
23
- throw new Error("D1_DUMP_ERROR", {
20
+ const err = (await response.json()) as { error: string };
21
+ throw new Error(`D1_DUMP_ERROR: ${err.error}`, {
24
22
  cause: new Error(err.error),
25
23
  });
26
24
  } catch (e) {
27
- throw new Error("D1_DUMP_ERROR", {
25
+ throw new Error(`D1_DUMP_ERROR: Status + ${response.status}`, {
28
26
  cause: new Error("Status " + response.status),
29
27
  });
30
28
  }
31
29
  }
32
30
  return await response.arrayBuffer();
33
31
  }
34
- async batch(statements) {
32
+ async batch(statements: D1PreparedStatement[]) {
35
33
  const exec = await this._send(
36
34
  "/query",
37
35
  statements.map((s) => s.statement),
@@ -39,7 +37,7 @@ var D1Database = class {
39
37
  );
40
38
  return exec;
41
39
  }
42
- async exec(query) {
40
+ async exec(query: string) {
43
41
  const lines = query.trim().split("\n");
44
42
  const _exec = await this._send("/query", lines, [], false);
45
43
  const exec = Array.isArray(_exec) ? _exec : [_exec];
@@ -49,26 +47,36 @@ var D1Database = class {
49
47
  })
50
48
  .indexOf(1);
51
49
  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
- });
50
+ throw new Error(
51
+ `D1_EXEC_ERROR: Error in line ${error + 1}: ${lines[error]}: ${
52
+ exec[error].error
53
+ }`,
54
+ {
55
+ cause: new Error(
56
+ "Error in line " +
57
+ (error + 1) +
58
+ ": " +
59
+ lines[error] +
60
+ ": " +
61
+ exec[error].error
62
+ ),
63
+ }
64
+ );
62
65
  } else {
63
66
  return {
64
67
  count: exec.length,
65
68
  duration: exec.reduce((p, c) => {
66
- return p + c.meta.duration;
69
+ return p + (c.meta.duration as number);
67
70
  }, 0),
68
71
  };
69
72
  }
70
73
  }
71
- async _send(endpoint, query, params, dothrow = true) {
74
+ async _send(
75
+ endpoint: string,
76
+ query: string | string[],
77
+ params: unknown[],
78
+ dothrow = true
79
+ ) {
72
80
  const body = JSON.stringify(
73
81
  typeof query == "object"
74
82
  ? query.map((s, index) => {
@@ -79,7 +87,7 @@ var D1Database = class {
79
87
  params,
80
88
  }
81
89
  );
82
- const response = await this.binding.fetch(endpoint, {
90
+ const response = await this.binding.fetch(new URL(endpoint, "http://d1"), {
83
91
  method: "POST",
84
92
  headers: {
85
93
  "content-type": "application/json",
@@ -87,75 +95,79 @@ var D1Database = class {
87
95
  body,
88
96
  });
89
97
  try {
90
- const answer = await response.json();
98
+ const answer = (await response.json()) as { error?: string };
91
99
  if (answer.error && dothrow) {
92
100
  const err = answer;
93
- throw new Error("D1_ERROR", { cause: new Error(err.error) });
101
+ throw new Error(`D1_ERROR: ${err.error}`, {
102
+ cause: new Error(err.error),
103
+ });
94
104
  } else {
95
105
  return Array.isArray(answer)
96
106
  ? answer.map((r) => mapD1Result(r))
97
107
  : mapD1Result(answer);
98
108
  }
99
109
  } catch (e) {
100
- throw new Error("D1_ERROR", {
101
- cause: new Error(e.cause || "Something went wrong"),
110
+ const error = e as Error;
111
+ throw new Error(`D1_ERROR: ${error.cause || "Something went wrong"}`, {
112
+ cause: new Error(`${error.cause}` || "Something went wrong"),
102
113
  });
103
114
  }
104
115
  }
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) {
116
+ }
117
+
118
+ class D1PreparedStatement {
119
+ constructor(
120
+ readonly database: D1Database,
121
+ readonly statement: string,
122
+ readonly params: unknown[] = []
123
+ ) {}
124
+ bind(...values: unknown[]) {
113
125
  for (var r in values) {
114
- switch (typeof values[r]) {
126
+ const value = values[r];
127
+ switch (typeof value) {
115
128
  case "number":
116
129
  case "string":
117
130
  break;
118
131
  case "object":
119
- if (values[r] == null) break;
132
+ if (value == null) break;
120
133
  if (
121
- Array.isArray(values[r]) &&
122
- values[r]
134
+ Array.isArray(value) &&
135
+ value
123
136
  .map((b) => {
124
137
  return typeof b == "number" && b >= 0 && b < 256 ? 1 : 0;
125
138
  })
126
139
  .indexOf(0) == -1
127
140
  )
128
141
  break;
129
- if (values[r] instanceof ArrayBuffer) {
130
- values[r] = Array.from(new Uint8Array(values[r]));
142
+ if (value instanceof ArrayBuffer) {
143
+ values[r] = Array.from(new Uint8Array(value));
131
144
  break;
132
145
  }
133
- if (ArrayBuffer.isView(values[r])) {
134
- values[r] = Array.from(values[r]);
146
+ if (ArrayBuffer.isView(value)) {
147
+ values[r] = Array.from(new Uint8Array(value.buffer));
135
148
  break;
136
149
  }
137
150
  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
- });
151
+ throw new Error(
152
+ `D1_TYPE_ERROR: Type '${typeof value}' not supported for value '${value}'`,
153
+ {
154
+ cause: new Error(
155
+ `Type '${typeof value}' not supported for value '${value}'`
156
+ ),
157
+ }
158
+ );
147
159
  }
148
160
  }
149
161
  return new D1PreparedStatement(this.database, this.statement, values);
150
162
  }
151
- async first(colName) {
163
+ async first(colName: string) {
152
164
  const info = firstIfArray(
153
165
  await this.database._send("/query", this.statement, this.params)
154
166
  );
155
167
  const results = info.results;
156
168
  if (colName !== void 0) {
157
169
  if (results.length > 0 && results[0][colName] === void 0) {
158
- throw new Error("D1_COLUMN_NOTFOUND", {
170
+ throw new Error(`D1_COLUMN_NOTFOUND: Column not found (${colName})`, {
159
171
  cause: new Error("Column not found"),
160
172
  });
161
173
  }
@@ -187,12 +199,12 @@ var D1PreparedStatement = class {
187
199
  }
188
200
  return raw;
189
201
  }
190
- };
191
- function firstIfArray(results) {
202
+ }
203
+ function firstIfArray(results: unknown) {
192
204
  return Array.isArray(results) ? results[0] : results;
193
205
  }
194
- function mapD1Result(result) {
195
- let map = {
206
+ function mapD1Result(result: Partial<D1Result>): D1Result {
207
+ let map: D1Result = {
196
208
  results: result.results || [],
197
209
  success: result.success === void 0 ? true : result.success,
198
210
  meta: result.meta || {},
@@ -201,12 +213,17 @@ function mapD1Result(result) {
201
213
  return map;
202
214
  }
203
215
 
216
+ type D1Result = {
217
+ results: unknown[];
218
+ success: boolean;
219
+ meta: Record<string, unknown>;
220
+ error?: string;
221
+ };
222
+
204
223
  // src/shim.ts
205
- var D1_IMPORTS = __D1_IMPORTS__;
206
- var LOCAL_MODE = __LOCAL_MODE__;
207
224
  var D1_BETA_PREFIX = `__D1_BETA__`;
208
225
  var envMap = /* @__PURE__ */ new Map();
209
- function getMaskedEnv(env) {
226
+ function getMaskedEnv(env: Record<string, Fetcher | D1Database>) {
210
227
  if (envMap.has(env)) return envMap.get(env);
211
228
  const newEnv = new Map(Object.entries(env));
212
229
  D1_IMPORTS.filter((bindingName) =>
@@ -214,28 +231,14 @@ function getMaskedEnv(env) {
214
231
  ).forEach((bindingName) => {
215
232
  newEnv.delete(bindingName);
216
233
  const newName = bindingName.slice(D1_BETA_PREFIX.length);
217
- const newBinding = !LOCAL_MODE
218
- ? new D1Database(env[bindingName])
219
- : env[bindingName];
234
+ const newBinding = new D1Database(env[bindingName] as Fetcher);
220
235
  newEnv.set(newName, newBinding);
221
236
  });
222
237
  const newEnvObj = Object.fromEntries(newEnv.entries());
223
238
  envMap.set(env, newEnvObj);
224
239
  return newEnvObj;
225
240
  }
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 };
241
+
242
+ export function wrap(env: Record<string, D1Database | Fetcher>) {
243
+ return getMaskedEnv(env);
244
+ }
@@ -1,15 +1,27 @@
1
1
  import type { Middleware } from "./common";
2
2
 
3
+ interface JsonError {
4
+ message?: string;
5
+ name?: string;
6
+ stack?: string;
7
+ cause?: JsonError;
8
+ }
9
+
10
+ function reduceError(e: any): JsonError {
11
+ return {
12
+ name: e?.name,
13
+ message: e?.message ?? String(e),
14
+ stack: e?.stack,
15
+ cause: e?.cause === undefined ? undefined : reduceError(e.cause),
16
+ };
17
+ }
18
+
3
19
  // See comment in `bundle.ts` for details on why this is needed
4
20
  const jsonError: Middleware = async (request, env, _ctx, middlewareCtx) => {
5
21
  try {
6
22
  return await middlewareCtx.next(request, env);
7
23
  } catch (e: any) {
8
- const error = {
9
- name: e?.name,
10
- message: e?.message ?? String(e),
11
- stack: e?.stack,
12
- };
24
+ const error = reduceError(e);
13
25
  return Response.json(error, {
14
26
  status: 500,
15
27
  headers: { "MF-Experimental-Error-Stack": "true" },
@@ -0,0 +1,4 @@
1
+ declare module "config:middleware/multiworker-dev" {
2
+ import type { WorkerRegistry } from "../../src/dev-registry";
3
+ export const workers: WorkerRegistry;
4
+ }
@@ -0,0 +1,59 @@
1
+ // @ts-nocheck
2
+ /// <reference path="middleware-multiworker-dev.d.ts"/>
3
+
4
+ import { workers } from "config:middleware/multiworker-dev";
5
+ import type { WorkerRegistry } from "../../src/dev-registry";
6
+
7
+ export function wrap(env: Record<string, unknown>) {
8
+ const facadeEnv = { ...env };
9
+ // For every Worker definition that's available,
10
+ // create a fetcher for it on the facade env.
11
+ // for const [name, binding] of env
12
+ // if Workers[name]
13
+ // const details = Workers[name];
14
+
15
+ for (const [name, details] of Object.entries(workers as WorkerRegistry)) {
16
+ if (details) {
17
+ facadeEnv[name] = {
18
+ async fetch(...reqArgs: Parameters<Fetcher["fetch"]>) {
19
+ const reqFromArgs = new Request(...reqArgs);
20
+ if (details.headers) {
21
+ for (const [key, value] of Object.entries(details.headers)) {
22
+ // In remote mode, you need to add a couple of headers
23
+ // to make sure it's talking to the 'dev' preview session
24
+ // (much like wrangler dev already does via proxy.ts)
25
+ reqFromArgs.headers.set(key, value);
26
+ }
27
+ return (env[name] as Fetcher).fetch(reqFromArgs);
28
+ }
29
+
30
+ const url = new URL(reqFromArgs.url);
31
+ if (details.protocol !== undefined) {
32
+ url.protocol = details.protocol;
33
+ }
34
+ if (details.host !== undefined) {
35
+ url.host = details.host;
36
+ }
37
+ if (details.port !== undefined) {
38
+ url.port = details.port.toString();
39
+ }
40
+
41
+ const request = new Request(url.toString(), reqFromArgs);
42
+ return fetch(request);
43
+ },
44
+ };
45
+ } else {
46
+ // This means there's no dev binding available.
47
+ // Let's use whatever's available, or put a shim with a message.
48
+ facadeEnv[name] = facadeEnv[name] || {
49
+ async fetch() {
50
+ return new Response(
51
+ `You should start up wrangler dev --local on the ${name} worker`,
52
+ { status: 404 }
53
+ );
54
+ },
55
+ };
56
+ }
57
+ }
58
+ return facadeEnv;
59
+ }
@@ -0,0 +1,6 @@
1
+ declare module "config:middleware/serve-static-assets" {
2
+ import type { CacheControl } from "@cloudflare/kv-asset-handler";
3
+
4
+ export const spaMode: boolean;
5
+ export const cacheControl: Partial<CacheControl>;
6
+ }
@@ -0,0 +1,56 @@
1
+ /// <reference path="middleware-serve-static-assets.d.ts"/>
2
+
3
+ import {
4
+ getAssetFromKV,
5
+ NotFoundError,
6
+ MethodNotAllowedError,
7
+ serveSinglePageApp,
8
+ } from "@cloudflare/kv-asset-handler";
9
+ import type { Options } from "@cloudflare/kv-asset-handler";
10
+ import { spaMode, cacheControl } from "config:middleware/serve-static-assets";
11
+ import type * as kvAssetHandler from "@cloudflare/kv-asset-handler";
12
+ import manifest from "__STATIC_CONTENT_MANIFEST";
13
+ const ASSET_MANIFEST = JSON.parse(manifest);
14
+
15
+ import type { Middleware } from "./common";
16
+
17
+ const staticAssets: Middleware = async (request, env, _ctx, middlewareCtx) => {
18
+ let options: Partial<Options> = {
19
+ ASSET_MANIFEST,
20
+ ASSET_NAMESPACE: env.__STATIC_CONTENT,
21
+ cacheControl: cacheControl,
22
+ mapRequestToAsset: spaMode ? serveSinglePageApp : undefined,
23
+ };
24
+
25
+ try {
26
+ const page = await (getAssetFromKV as typeof kvAssetHandler.getAssetFromKV)(
27
+ {
28
+ request,
29
+ waitUntil(promise) {
30
+ return _ctx.waitUntil(promise);
31
+ },
32
+ },
33
+ options
34
+ );
35
+
36
+ // allow headers to be altered
37
+ const response = new Response(page.body, page);
38
+
39
+ response.headers.set("X-XSS-Protection", "1; mode=block");
40
+ response.headers.set("X-Content-Type-Options", "nosniff");
41
+ response.headers.set("X-Frame-Options", "DENY");
42
+ response.headers.set("Referrer-Policy", "unsafe-url");
43
+ response.headers.set("Feature-Policy", "none");
44
+
45
+ return response;
46
+ } catch (e) {
47
+ if (e instanceof NotFoundError || e instanceof MethodNotAllowedError) {
48
+ // if a known error is thrown then serve from actual worker
49
+ return await middlewareCtx.next(request, env);
50
+ }
51
+ // otherwise it's a real error, so throw it
52
+ throw e;
53
+ }
54
+ };
55
+
56
+ export default staticAssets;
@@ -5,7 +5,7 @@
5
5
  * - Run `curl "http://localhost:8787/cdn-cgi/mf/scheduled"` to trigger the scheduled event
6
6
  * - Go back to the console to see what your worker has logged
7
7
  * - Update the Cron trigger in wrangler.toml (see https://developers.cloudflare.com/workers/wrangler/configuration/#triggers)
8
- * - Run `wrangler publish --name my-worker` to publish your worker
8
+ * - Run `wrangler deploy --name my-worker` to deploy your worker
9
9
  *
10
10
  * Learn more at https://developers.cloudflare.com/workers/runtime-apis/scheduled-event/
11
11
  */
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * - Run `wrangler dev src/index.ts` in your terminal to start a development server
5
5
  * - Open a browser tab at http://localhost:8787/ to see your worker in action
6
- * - Run `wrangler publish src/index.ts --name my-worker` to publish your worker
6
+ * - Run `wrangler deploy src/index.ts --name my-worker` to deploy your worker
7
7
  *
8
8
  * Learn more at https://developers.cloudflare.com/workers/
9
9
  */
@@ -17,6 +17,9 @@ export interface Env {
17
17
  //
18
18
  // Example binding to R2. Learn more at https://developers.cloudflare.com/workers/runtime-apis/r2/
19
19
  // MY_BUCKET: R2Bucket;
20
+ //
21
+ // Example binding to a Service. Learn more at https://developers.cloudflare.com/workers/runtime-apis/service-bindings/
22
+ // MY_SERVICE: Fetcher;
20
23
  }
21
24
 
22
25
  export default {
@@ -45,7 +45,10 @@ function transformRoutingRuleToRegExp(rule: string): RegExp {
45
45
  }
46
46
 
47
47
  // /foo* => /foo.* => ^/foo.*$
48
- transformedRule = `^${transformedRule.replace("*", ".*")}$`;
48
+ // /*.* => /*\.* => /.*\..* => ^/.*\..*$
49
+ transformedRule = `^${transformedRule
50
+ .replaceAll(/\./g, "\\.")
51
+ .replaceAll(/\*/g, ".*")}$`;
49
52
 
50
53
  // ^/foo.*$ => /^\/foo.*$/
51
54
  return new RegExp(transformedRule);
@@ -3,9 +3,6 @@
3
3
 
4
4
  export default <ExportedHandler<{ ASSETS: Fetcher }>>{
5
5
  async fetch(request, env, context) {
6
- // @ts-expect-error due to a bug in `@cloudflare/workers-types`, the `cf`
7
- // types from the `request` parameter and `RequestInit` are incompatible.
8
- // We'll get this fixed very soon.
9
6
  const response = await env.ASSETS.fetch(request.url, request);
10
7
  return new Response(response.body, response);
11
8
  },
@@ -122,7 +122,8 @@ function* executeRequest(request: Request, relativePathname: string) {
122
122
  export default function (pluginArgs: unknown) {
123
123
  const onRequest: PagesPluginFunction = async (workerContext) => {
124
124
  let { request } = workerContext;
125
- const { env, next, data } = workerContext;
125
+ const { env, next } = workerContext;
126
+ let { data } = workerContext;
126
127
 
127
128
  const url = new URL(request.url);
128
129
  // TODO: Replace this with something actually legible.
@@ -133,7 +134,11 @@ export default function (pluginArgs: unknown) {
133
134
  const handlerIterator = executeRequest(request, relativePathname);
134
135
  const pluginNext = async (input?: RequestInfo, init?: RequestInit) => {
135
136
  if (input !== undefined) {
136
- request = new Request(input, init);
137
+ let url = input;
138
+ if (typeof input === "string") {
139
+ url = new URL(input, request.url).toString();
140
+ }
141
+ request = new Request(url, init);
137
142
  }
138
143
 
139
144
  const result = handlerIterator.next();
@@ -141,11 +146,20 @@ export default function (pluginArgs: unknown) {
141
146
  if (result.done === false) {
142
147
  const { handler, params, path } = result.value;
143
148
  const context = {
144
- request,
149
+ request: new Request(request.clone()),
145
150
  functionPath: workerContext.functionPath + path,
146
151
  next: pluginNext,
147
152
  params,
148
- data,
153
+ get data() {
154
+ return data;
155
+ },
156
+ set data(value) {
157
+ if (typeof value !== "object" || value === null) {
158
+ throw new Error("context.data must be an object");
159
+ }
160
+ // user has overriden context.data, so we need to merge it with the existing data
161
+ data = value;
162
+ },
149
163
  pluginArgs,
150
164
  env,
151
165
  waitUntil: workerContext.waitUntil.bind(workerContext),
@@ -157,7 +171,7 @@ export default function (pluginArgs: unknown) {
157
171
 
158
172
  return cloneResponse(response);
159
173
  } else {
160
- return next();
174
+ return next(request);
161
175
  }
162
176
  };
163
177
 
@@ -120,7 +120,7 @@ export default {
120
120
  ) {
121
121
  let request = originalRequest;
122
122
  const handlerIterator = executeRequest(request);
123
- const data = {}; // arbitrary data the user can set between functions
123
+ let data = {}; // arbitrary data the user can set between functions
124
124
  let isFailOpen = false;
125
125
 
126
126
  const next = async (input?: RequestInfo, init?: RequestInit) => {
@@ -141,7 +141,16 @@ export default {
141
141
  functionPath: path,
142
142
  next,
143
143
  params,
144
- data,
144
+ get data() {
145
+ return data;
146
+ },
147
+ set data(value) {
148
+ if (typeof value !== "object" || value === null) {
149
+ throw new Error("context.data must be an object");
150
+ }
151
+ // user has overriden context.data, so we need to merge it with the existing data
152
+ data = value;
153
+ },
145
154
  env,
146
155
  waitUntil: workerContext.waitUntil.bind(workerContext),
147
156
  passThroughOnException: () => {
@@ -34,8 +34,7 @@
34
34
  // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
35
35
  // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
36
36
  "types": [
37
- "@cloudflare/workers-types",
38
- "jest"
37
+ "@cloudflare/workers-types"
39
38
  ] /* Specify type package names to be included without being referenced in a source file. */,
40
39
  // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
41
40
  "resolveJsonModule": true /* Enable importing .json files */,
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../tsconfig.json",
2
+ "extends": "@cloudflare/workers-tsconfig/tsconfig.json",
3
3
  "compilerOptions": {
4
4
  "types": ["@cloudflare/workers-types"]
5
5
  },