wrangler 0.0.0-e2b7352 → 0.0.0-e305903a

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 (264) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +51 -14
  3. package/bin/wrangler.js +154 -31
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +6244 -21
  6. package/package.json +185 -141
  7. package/src/__tests__/api-dev.test.ts +209 -0
  8. package/src/__tests__/api-devregistry.test.js +56 -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 +42 -0
  12. package/src/__tests__/configuration.test.ts +4122 -2810
  13. package/src/__tests__/dev.test.tsx +1341 -527
  14. package/src/__tests__/dialogs.test.tsx +40 -0
  15. package/src/__tests__/generate.test.ts +91 -0
  16. package/src/__tests__/guess-worker-format.test.ts +74 -57
  17. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  18. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  19. package/src/__tests__/helpers/mock-bin.ts +20 -20
  20. package/src/__tests__/helpers/mock-cfetch.ts +202 -93
  21. package/src/__tests__/helpers/mock-console.ts +68 -32
  22. package/src/__tests__/helpers/mock-dialogs.ts +121 -33
  23. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  24. package/src/__tests__/helpers/mock-http-server.ts +46 -0
  25. package/src/__tests__/helpers/mock-istty.ts +74 -0
  26. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  27. package/src/__tests__/helpers/mock-kv.ts +26 -26
  28. package/src/__tests__/helpers/mock-oauth-flow.ts +252 -0
  29. package/src/__tests__/helpers/mock-process.ts +39 -0
  30. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  31. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  32. package/src/__tests__/helpers/msw/handlers/index.ts +13 -0
  33. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  34. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  35. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  36. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  37. package/src/__tests__/helpers/msw/index.ts +4 -0
  38. package/src/__tests__/helpers/run-in-tmp.ts +28 -22
  39. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  40. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  41. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  42. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  43. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  44. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  45. package/src/__tests__/helpers/write-worker-source.ts +31 -0
  46. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  47. package/src/__tests__/https-options.test.ts +144 -108
  48. package/src/__tests__/index.test.ts +233 -967
  49. package/src/__tests__/init.test.ts +2717 -0
  50. package/src/__tests__/jest.setup.ts +151 -34
  51. package/src/__tests__/kv.test.ts +1376 -1085
  52. package/src/__tests__/logger.test.ts +141 -0
  53. package/src/__tests__/metrics.test.ts +450 -0
  54. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  55. package/src/__tests__/middleware.test.ts +726 -0
  56. package/src/__tests__/package-manager.test.ts +312 -165
  57. package/src/__tests__/pages.test.ts +1990 -77
  58. package/src/__tests__/parse.test.ts +253 -245
  59. package/src/__tests__/paths.test.ts +39 -0
  60. package/src/__tests__/publish.test.ts +6989 -3411
  61. package/src/__tests__/pubsub.test.ts +367 -0
  62. package/src/__tests__/r2.test.ts +363 -190
  63. package/src/__tests__/route.test.ts +22 -22
  64. package/src/__tests__/secret.test.ts +626 -407
  65. package/src/__tests__/tail.test.ts +653 -516
  66. package/src/__tests__/test-old-node-version.js +31 -0
  67. package/src/__tests__/user.test.ts +155 -0
  68. package/src/__tests__/validate-dev-props.test.ts +56 -0
  69. package/src/__tests__/version.test.ts +35 -0
  70. package/src/__tests__/whoami.test.tsx +261 -88
  71. package/src/__tests__/worker-namespace.test.ts +319 -0
  72. package/src/abort.d.ts +3 -0
  73. package/src/api/dev.ts +206 -0
  74. package/src/api/index.ts +2 -0
  75. package/src/bundle-reporter.tsx +29 -0
  76. package/src/bundle.ts +723 -122
  77. package/src/cfetch/index.ts +83 -66
  78. package/src/cfetch/internal.ts +267 -92
  79. package/src/cli.ts +24 -14
  80. package/src/config/README.md +1 -1
  81. package/src/config/config.ts +236 -179
  82. package/src/config/diagnostics.ts +61 -61
  83. package/src/config/environment.ts +450 -316
  84. package/src/config/index.ts +259 -38
  85. package/src/config/validation-helpers.ts +385 -342
  86. package/src/config/validation.ts +1797 -1099
  87. package/src/config-cache.ts +85 -0
  88. package/src/create-worker-preview.ts +233 -124
  89. package/src/create-worker-upload-form.ts +285 -201
  90. package/src/d1/backups.tsx +212 -0
  91. package/src/d1/create.tsx +54 -0
  92. package/src/d1/delete.tsx +56 -0
  93. package/src/d1/execute.tsx +294 -0
  94. package/src/d1/formatTimeAgo.ts +14 -0
  95. package/src/d1/index.ts +75 -0
  96. package/src/d1/list.tsx +48 -0
  97. package/src/d1/options.ts +12 -0
  98. package/src/d1/types.tsx +14 -0
  99. package/src/d1/utils.ts +39 -0
  100. package/src/dev/dev-vars.ts +36 -0
  101. package/src/dev/dev.tsx +501 -328
  102. package/src/dev/get-local-persistence-path.tsx +31 -0
  103. package/src/dev/local.tsx +629 -211
  104. package/src/dev/remote.tsx +398 -188
  105. package/src/dev/start-server.ts +443 -0
  106. package/src/dev/use-esbuild.ts +175 -82
  107. package/src/dev/validate-dev-props.ts +31 -0
  108. package/src/dev-registry.tsx +190 -0
  109. package/src/dev.tsx +869 -0
  110. package/src/dialogs.tsx +138 -57
  111. package/src/dispatch-namespace.ts +206 -0
  112. package/src/durable.ts +102 -0
  113. package/src/entry.ts +260 -171
  114. package/src/environment-variables.ts +40 -23
  115. package/src/errors.ts +11 -0
  116. package/src/faye-websocket.d.ts +6 -0
  117. package/src/generate.ts +131 -0
  118. package/src/git-client.ts +42 -0
  119. package/src/global-wrangler-config-path.ts +26 -0
  120. package/src/https-options.ts +85 -80
  121. package/src/index.tsx +2295 -2315
  122. package/src/init.ts +967 -0
  123. package/src/inspect.ts +687 -557
  124. package/src/intl-polyfill.d.ts +123 -123
  125. package/src/is-ci.ts +14 -0
  126. package/src/is-interactive.ts +12 -0
  127. package/src/kv.ts +353 -242
  128. package/src/logger.ts +80 -0
  129. package/src/metrics/index.ts +5 -0
  130. package/src/metrics/metrics-config.ts +239 -0
  131. package/src/metrics/metrics-dispatcher.ts +96 -0
  132. package/src/metrics/metrics-usage-headers.ts +24 -0
  133. package/src/metrics/send-event.ts +93 -0
  134. package/src/miniflare-cli/assets.ts +215 -0
  135. package/src/miniflare-cli/index.ts +201 -30
  136. package/src/miniflare-cli/request-context.ts +40 -0
  137. package/src/module-collection.ts +213 -213
  138. package/src/open-in-browser.ts +8 -16
  139. package/src/package-manager.ts +183 -90
  140. package/src/pages/build.tsx +238 -0
  141. package/src/pages/constants.ts +16 -0
  142. package/src/pages/deployments.tsx +106 -0
  143. package/src/pages/dev.tsx +684 -0
  144. package/src/pages/errors.ts +66 -0
  145. package/src/pages/functions/buildPlugin.ts +110 -0
  146. package/src/pages/functions/buildWorker.ts +156 -0
  147. package/src/pages/functions/filepath-routing.test.ts +234 -0
  148. package/src/pages/functions/filepath-routing.ts +189 -0
  149. package/src/pages/functions/identifiers.ts +78 -0
  150. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  151. package/src/pages/functions/routes-consolidation.ts +73 -0
  152. package/src/pages/functions/routes-transformation.test.ts +282 -0
  153. package/src/pages/functions/routes-transformation.ts +115 -0
  154. package/src/pages/functions/routes-validation.test.ts +403 -0
  155. package/src/pages/functions/routes-validation.ts +202 -0
  156. package/src/pages/functions/routes.ts +151 -0
  157. package/src/pages/functions.tsx +82 -0
  158. package/src/pages/hash.tsx +13 -0
  159. package/src/pages/index.tsx +94 -0
  160. package/src/pages/projects.tsx +169 -0
  161. package/src/pages/publish.tsx +419 -0
  162. package/src/pages/types.ts +49 -0
  163. package/src/pages/upload.tsx +398 -0
  164. package/src/pages/utils.ts +12 -0
  165. package/src/parse.ts +224 -121
  166. package/src/paths.ts +53 -8
  167. package/src/preview.ts +31 -0
  168. package/src/proxy.ts +436 -370
  169. package/src/publish.ts +839 -324
  170. package/src/pubsub/index.ts +286 -0
  171. package/src/pubsub/pubsub-commands.tsx +623 -0
  172. package/src/r2.ts +100 -19
  173. package/src/selfsigned.d.ts +23 -23
  174. package/src/sites.tsx +281 -189
  175. package/src/tail/filters.ts +108 -110
  176. package/src/tail/index.ts +234 -218
  177. package/src/tail/printing.ts +92 -47
  178. package/src/update-check.ts +19 -0
  179. package/src/user/choose-account.tsx +69 -0
  180. package/src/user/env-vars.ts +46 -0
  181. package/src/user/generate-auth-url.ts +33 -0
  182. package/src/user/generate-random-state.ts +16 -0
  183. package/src/user/index.ts +3 -0
  184. package/src/user/user.tsx +1192 -0
  185. package/src/whoami.tsx +142 -42
  186. package/src/worker.ts +171 -100
  187. package/src/zones.ts +167 -0
  188. package/templates/checked-fetch.js +17 -0
  189. package/templates/d1-beta-facade.js +174 -0
  190. package/templates/experimental-local-cache-stubs.js +27 -0
  191. package/templates/first-party-worker-module-facade.ts +18 -0
  192. package/templates/format-dev-errors.ts +32 -0
  193. package/templates/gitignore +171 -0
  194. package/templates/init-tests/test-jest-new-worker.js +25 -0
  195. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  196. package/templates/middleware/common.ts +62 -0
  197. package/templates/middleware/loader-modules.ts +84 -0
  198. package/templates/middleware/loader-sw.ts +213 -0
  199. package/templates/middleware/middleware-pretty-error.ts +40 -0
  200. package/templates/middleware/middleware-scheduled.ts +15 -0
  201. package/templates/new-worker-scheduled.js +17 -0
  202. package/templates/new-worker-scheduled.ts +32 -0
  203. package/templates/new-worker.js +3 -3
  204. package/templates/new-worker.ts +18 -3
  205. package/templates/no-op-worker.js +10 -0
  206. package/templates/pages-dev-pipeline.ts +35 -0
  207. package/templates/pages-shim.ts +9 -0
  208. package/templates/pages-template-plugin.ts +167 -0
  209. package/templates/pages-template-worker.ts +172 -0
  210. package/templates/serve-static-assets.ts +63 -0
  211. package/templates/service-bindings-module-facade.js +54 -0
  212. package/templates/service-bindings-sw-facade.js +42 -0
  213. package/templates/tsconfig.json +95 -95
  214. package/wrangler-dist/cli.d.ts +841 -0
  215. package/wrangler-dist/cli.js +129492 -108210
  216. package/miniflare-dist/index.mjs.map +0 -7
  217. package/pages/functions/buildWorker.ts +0 -62
  218. package/pages/functions/filepath-routing.test.ts +0 -223
  219. package/pages/functions/filepath-routing.ts +0 -181
  220. package/pages/functions/identifiers.ts +0 -78
  221. package/pages/functions/routes.ts +0 -151
  222. package/pages/functions/template-worker.ts +0 -130
  223. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  224. package/src/__tests__/logout.test.ts +0 -52
  225. package/src/__tests__/sentry.test.ts +0 -146
  226. package/src/miniflare-cli/enum-keys.ts +0 -17
  227. package/src/pages.tsx +0 -1061
  228. package/src/reporting.ts +0 -131
  229. package/src/user.tsx +0 -1127
  230. package/templates/static-asset-facade.js +0 -47
  231. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  232. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  233. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  234. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  235. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  236. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  237. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  238. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  239. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  240. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  241. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  242. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  243. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  244. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  245. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  246. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  247. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  248. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  249. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  250. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  251. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  252. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  253. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  254. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  255. package/vendor/wrangler-mime/LICENSE +0 -21
  256. package/vendor/wrangler-mime/Mime.js +0 -97
  257. package/vendor/wrangler-mime/README.md +0 -187
  258. package/vendor/wrangler-mime/cli.js +0 -46
  259. package/vendor/wrangler-mime/index.js +0 -4
  260. package/vendor/wrangler-mime/lite.js +0 -4
  261. package/vendor/wrangler-mime/package.json +0 -52
  262. package/vendor/wrangler-mime/types/other.js +0 -1
  263. package/vendor/wrangler-mime/types/standard.js +0 -1
  264. package/wrangler-dist/cli.js.map +0 -7
@@ -1,53 +1,57 @@
1
1
  import { findUpSync } from "find-up";
2
+ import { logger } from "../logger";
2
3
  import { parseTOML, readFileSync } from "../parse";
4
+ import { removeD1BetaPrefix } from "../worker";
3
5
  import { normalizeAndValidateConfig } from "./validation";
6
+ import type { CfWorkerInit } from "../worker";
4
7
  import type { Config, RawConfig } from "./config";
8
+ import type { CamelCaseKey } from "yargs";
5
9
 
6
10
  export type {
7
- Config,
8
- RawConfig,
9
- ConfigFields,
10
- DevConfig,
11
- RawDevConfig,
11
+ Config,
12
+ RawConfig,
13
+ ConfigFields,
14
+ DevConfig,
15
+ RawDevConfig,
12
16
  } from "./config";
13
17
  export type {
14
- Environment,
15
- RawEnvironment,
16
- ConfigModuleRuleType,
18
+ Environment,
19
+ RawEnvironment,
20
+ ConfigModuleRuleType,
17
21
  } from "./environment";
18
22
 
19
23
  /**
20
24
  * Get the Wrangler configuration; read it from the give `configPath` if available.
21
25
  */
22
26
  export function readConfig(
23
- configPath: string | undefined,
24
- args: unknown
27
+ configPath: string | undefined,
28
+ args: unknown
25
29
  ): Config {
26
- let rawConfig: RawConfig = {};
27
- if (!configPath) {
28
- configPath = findWranglerToml();
29
- }
30
-
31
- // Load the configuration from disk if available
32
- if (configPath) {
33
- rawConfig = parseTOML(readFileSync(configPath), configPath);
34
- }
35
-
36
- // Process the top-level configuration.
37
- const { config, diagnostics } = normalizeAndValidateConfig(
38
- rawConfig,
39
- configPath,
40
- args
41
- );
42
-
43
- if (diagnostics.hasWarnings()) {
44
- console.warn(diagnostics.renderWarnings());
45
- }
46
- if (diagnostics.hasErrors()) {
47
- throw new Error(diagnostics.renderErrors());
48
- }
49
-
50
- return config;
30
+ let rawConfig: RawConfig = {};
31
+ if (!configPath) {
32
+ configPath = findWranglerToml();
33
+ }
34
+
35
+ // Load the configuration from disk if available
36
+ if (configPath) {
37
+ rawConfig = parseTOML(readFileSync(configPath), configPath);
38
+ }
39
+
40
+ // Process the top-level configuration.
41
+ const { config, diagnostics } = normalizeAndValidateConfig(
42
+ rawConfig,
43
+ configPath,
44
+ args
45
+ );
46
+
47
+ if (diagnostics.hasWarnings()) {
48
+ logger.warn(diagnostics.renderWarnings());
49
+ }
50
+ if (diagnostics.hasErrors()) {
51
+ throw new Error(diagnostics.renderErrors());
52
+ }
53
+
54
+ return config;
51
55
  }
52
56
 
53
57
  /**
@@ -55,8 +59,225 @@ export function readConfig(
55
59
  * from the current working directory.
56
60
  */
57
61
  export function findWranglerToml(
58
- referencePath: string = process.cwd()
62
+ referencePath: string = process.cwd()
59
63
  ): string | undefined {
60
- const configPath = findUpSync("wrangler.toml", { cwd: referencePath });
61
- return configPath;
64
+ const configPath = findUpSync("wrangler.toml", { cwd: referencePath });
65
+ return configPath;
66
+ }
67
+
68
+ /**
69
+ * Print all the bindings a worker using a given config would have access to
70
+ */
71
+ export function printBindings(bindings: CfWorkerInit["bindings"]) {
72
+ const truncate = (item: string | Record<string, unknown>) => {
73
+ const s = typeof item === "string" ? item : JSON.stringify(item);
74
+ const maxLength = 40;
75
+ if (s.length < maxLength) {
76
+ return s;
77
+ }
78
+
79
+ return `${s.substring(0, maxLength - 3)}...`;
80
+ };
81
+
82
+ const output: { type: string; entries: { key: string; value: string }[] }[] =
83
+ [];
84
+
85
+ const {
86
+ data_blobs,
87
+ durable_objects,
88
+ kv_namespaces,
89
+ d1_databases,
90
+ r2_buckets,
91
+ logfwdr,
92
+ services,
93
+ text_blobs,
94
+ unsafe,
95
+ vars,
96
+ wasm_modules,
97
+ dispatch_namespaces,
98
+ } = bindings;
99
+
100
+ if (data_blobs !== undefined && Object.keys(data_blobs).length > 0) {
101
+ output.push({
102
+ type: "Data Blobs",
103
+ entries: Object.entries(data_blobs).map(([key, value]) => ({
104
+ key,
105
+ value: truncate(value),
106
+ })),
107
+ });
108
+ }
109
+
110
+ if (durable_objects !== undefined && durable_objects.bindings.length > 0) {
111
+ output.push({
112
+ type: "Durable Objects",
113
+ entries: durable_objects.bindings.map(
114
+ ({ name, class_name, script_name, environment }) => {
115
+ let value = class_name;
116
+ if (script_name) {
117
+ value += ` (defined in ${script_name})`;
118
+ }
119
+ if (environment) {
120
+ value += ` - ${environment}`;
121
+ }
122
+
123
+ return {
124
+ key: name,
125
+ value,
126
+ };
127
+ }
128
+ ),
129
+ });
130
+ }
131
+
132
+ if (kv_namespaces !== undefined && kv_namespaces.length > 0) {
133
+ output.push({
134
+ type: "KV Namespaces",
135
+ entries: kv_namespaces.map(({ binding, id }) => {
136
+ return {
137
+ key: binding,
138
+ value: id,
139
+ };
140
+ }),
141
+ });
142
+ }
143
+
144
+ if (d1_databases !== undefined && d1_databases.length > 0) {
145
+ output.push({
146
+ type: "D1 Databases",
147
+ entries: d1_databases.map(({ binding, database_name, database_id }) => {
148
+ return {
149
+ key: removeD1BetaPrefix(binding),
150
+ value: database_name
151
+ ? `${database_name} (${database_id})`
152
+ : database_id,
153
+ };
154
+ }),
155
+ });
156
+ }
157
+
158
+ if (r2_buckets !== undefined && r2_buckets.length > 0) {
159
+ output.push({
160
+ type: "R2 Buckets",
161
+ entries: r2_buckets.map(({ binding, bucket_name }) => {
162
+ return {
163
+ key: binding,
164
+ value: bucket_name,
165
+ };
166
+ }),
167
+ });
168
+ }
169
+
170
+ if (logfwdr !== undefined && logfwdr.bindings.length > 0) {
171
+ output.push({
172
+ type: "logfwdr",
173
+ entries: logfwdr.bindings.map((binding) => {
174
+ return {
175
+ key: binding.name,
176
+ value: binding.destination,
177
+ };
178
+ }),
179
+ });
180
+ }
181
+
182
+ if (services !== undefined && services.length > 0) {
183
+ output.push({
184
+ type: "Services",
185
+ entries: services.map(({ binding, service, environment }) => {
186
+ let value = service;
187
+ if (environment) {
188
+ value += ` - ${environment}`;
189
+ }
190
+
191
+ return {
192
+ key: binding,
193
+ value,
194
+ };
195
+ }),
196
+ });
197
+ }
198
+
199
+ if (text_blobs !== undefined && Object.keys(text_blobs).length > 0) {
200
+ output.push({
201
+ type: "Text Blobs",
202
+ entries: Object.entries(text_blobs).map(([key, value]) => ({
203
+ key,
204
+ value: truncate(value),
205
+ })),
206
+ });
207
+ }
208
+
209
+ if (unsafe !== undefined && unsafe.length > 0) {
210
+ output.push({
211
+ type: "Unsafe",
212
+ entries: unsafe.map(({ name, type }) => ({
213
+ key: type,
214
+ value: name,
215
+ })),
216
+ });
217
+ }
218
+
219
+ if (vars !== undefined && Object.keys(vars).length > 0) {
220
+ output.push({
221
+ type: "Vars",
222
+ entries: Object.entries(vars).map(([key, value]) => ({
223
+ key,
224
+ value: `"${truncate(`${value}`)}"`,
225
+ })),
226
+ });
227
+ }
228
+
229
+ if (wasm_modules !== undefined && Object.keys(wasm_modules).length > 0) {
230
+ output.push({
231
+ type: "Wasm Modules",
232
+ entries: Object.entries(wasm_modules).map(([key, value]) => ({
233
+ key,
234
+ value: truncate(value),
235
+ })),
236
+ });
237
+ }
238
+
239
+ if (dispatch_namespaces !== undefined && dispatch_namespaces.length > 0) {
240
+ output.push({
241
+ type: "dispatch namespaces",
242
+ entries: dispatch_namespaces.map(({ binding, namespace }) => {
243
+ return {
244
+ key: binding,
245
+ value: namespace,
246
+ };
247
+ }),
248
+ });
249
+ }
250
+
251
+ if (output.length === 0) {
252
+ return;
253
+ }
254
+
255
+ const message = [
256
+ `Your worker has access to the following bindings:`,
257
+ ...output
258
+ .map((bindingGroup) => {
259
+ return [
260
+ `- ${bindingGroup.type}:`,
261
+ bindingGroup.entries.map(({ key, value }) => ` - ${key}: ${value}`),
262
+ ];
263
+ })
264
+ .flat(2),
265
+ ].join("\n");
266
+
267
+ logger.log(message);
268
+ }
269
+
270
+ type CamelCase<T> = {
271
+ [key in keyof T as key | CamelCaseKey<key>]: T[key];
272
+ };
273
+
274
+ export function withConfig<T extends { config?: string }>(
275
+ handler: (
276
+ t: Omit<CamelCase<T>, "config"> & { config: Config }
277
+ ) => Promise<void>
278
+ ) {
279
+ return (t: CamelCase<T>) => {
280
+ const { config: configPath, ...rest } = t;
281
+ return handler({ ...rest, config: readConfig(configPath, rest) });
282
+ };
62
283
  }