wrangler 0.0.0-e7a0cd5b → 0.0.0-e81b1611

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 (258) hide show
  1. package/README.md +12 -14
  2. package/bin/wrangler.js +19 -65
  3. package/package.json +209 -191
  4. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  5. package/templates/__tests__/tsconfig.json +8 -0
  6. package/templates/checked-fetch.js +19 -6
  7. package/templates/facade.d.ts +17 -0
  8. package/templates/gitignore +1 -0
  9. package/templates/init-tests/test-jest-new-worker.js +3 -5
  10. package/templates/init-tests/test-vitest-new-worker.js +3 -5
  11. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  12. package/templates/middleware/common.ts +9 -4
  13. package/templates/middleware/loader-modules.ts +64 -11
  14. package/templates/middleware/loader-sw.ts +47 -32
  15. package/templates/middleware/middleware-d1-beta.d.ts +3 -0
  16. package/templates/middleware/middleware-miniflare3-json-error.ts +33 -0
  17. package/templates/middleware/middleware-multiworker-dev.d.ts +4 -0
  18. package/templates/middleware/middleware-multiworker-dev.ts +68 -0
  19. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  20. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  21. package/templates/modules-watch-stub.js +4 -0
  22. package/templates/new-worker-scheduled.ts +1 -1
  23. package/templates/new-worker.ts +4 -1
  24. package/templates/pages-dev-pipeline.ts +4 -1
  25. package/templates/pages-dev-util.ts +4 -1
  26. package/templates/pages-shim.ts +1 -1
  27. package/templates/pages-template-plugin.ts +31 -12
  28. package/templates/pages-template-worker.ts +11 -2
  29. package/templates/tsconfig-sanity.ts +11 -0
  30. package/templates/tsconfig.init.json +105 -0
  31. package/templates/tsconfig.json +5 -103
  32. package/wrangler-dist/cli.d.ts +951 -121
  33. package/wrangler-dist/cli.js +133766 -143686
  34. package/wrangler-dist/wasm-sync.wasm +0 -0
  35. package/import_meta_url.js +0 -3
  36. package/miniflare-config-stubs/.env.empty +0 -0
  37. package/miniflare-config-stubs/package.empty.json +0 -1
  38. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  39. package/miniflare-dist/index.mjs +0 -6316
  40. package/src/__tests__/access.test.ts +0 -25
  41. package/src/__tests__/api-dev.test.ts +0 -209
  42. package/src/__tests__/api-devregistry.test.js +0 -57
  43. package/src/__tests__/api.test.ts +0 -80
  44. package/src/__tests__/config-cache-without-cache-dir.test.ts +0 -38
  45. package/src/__tests__/config-cache.test.ts +0 -42
  46. package/src/__tests__/configuration.test.ts +0 -4028
  47. package/src/__tests__/d1.test.ts +0 -72
  48. package/src/__tests__/delete.test.ts +0 -230
  49. package/src/__tests__/deployments.test.ts +0 -95
  50. package/src/__tests__/dev.test.tsx +0 -1509
  51. package/src/__tests__/dialogs.test.tsx +0 -40
  52. package/src/__tests__/generate.test.ts +0 -235
  53. package/src/__tests__/get-host-from-url.test.ts +0 -16
  54. package/src/__tests__/guess-worker-format.test.ts +0 -85
  55. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  56. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  57. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  58. package/src/__tests__/helpers/mock-bin.ts +0 -36
  59. package/src/__tests__/helpers/mock-cfetch.ts +0 -333
  60. package/src/__tests__/helpers/mock-console.ts +0 -106
  61. package/src/__tests__/helpers/mock-dialogs.ts +0 -153
  62. package/src/__tests__/helpers/mock-get-zone-from-host.ts +0 -8
  63. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  64. package/src/__tests__/helpers/mock-istty.ts +0 -74
  65. package/src/__tests__/helpers/mock-known-routes.ts +0 -7
  66. package/src/__tests__/helpers/mock-kv.ts +0 -33
  67. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -252
  68. package/src/__tests__/helpers/mock-process.ts +0 -39
  69. package/src/__tests__/helpers/mock-stdin.ts +0 -108
  70. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  71. package/src/__tests__/helpers/msw/handlers/access.ts +0 -13
  72. package/src/__tests__/helpers/msw/handlers/deployments.ts +0 -59
  73. package/src/__tests__/helpers/msw/handlers/namespaces.ts +0 -104
  74. package/src/__tests__/helpers/msw/handlers/oauth.ts +0 -36
  75. package/src/__tests__/helpers/msw/handlers/r2.ts +0 -80
  76. package/src/__tests__/helpers/msw/handlers/script.ts +0 -75
  77. package/src/__tests__/helpers/msw/handlers/user.ts +0 -63
  78. package/src/__tests__/helpers/msw/handlers/zones.ts +0 -22
  79. package/src/__tests__/helpers/msw/index.ts +0 -21
  80. package/src/__tests__/helpers/run-in-tmp.ts +0 -38
  81. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  82. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +0 -1
  83. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +0 -5
  84. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +0 -1
  85. package/src/__tests__/helpers/worker-scripts/parent-worker.js +0 -8
  86. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +0 -5
  87. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  88. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  89. package/src/__tests__/https-options.test.ts +0 -163
  90. package/src/__tests__/index.test.ts +0 -262
  91. package/src/__tests__/init.test.ts +0 -2900
  92. package/src/__tests__/jest.setup.ts +0 -202
  93. package/src/__tests__/kv.test.ts +0 -1675
  94. package/src/__tests__/logger.test.ts +0 -141
  95. package/src/__tests__/metrics.test.ts +0 -450
  96. package/src/__tests__/middleware.scheduled.test.ts +0 -135
  97. package/src/__tests__/middleware.test.ts +0 -726
  98. package/src/__tests__/package-manager.test.ts +0 -353
  99. package/src/__tests__/pages.test.ts +0 -2223
  100. package/src/__tests__/parse.test.ts +0 -330
  101. package/src/__tests__/paths.test.ts +0 -39
  102. package/src/__tests__/publish.test.ts +0 -7660
  103. package/src/__tests__/pubsub.test.ts +0 -370
  104. package/src/__tests__/queues.test.ts +0 -371
  105. package/src/__tests__/r2.test.ts +0 -376
  106. package/src/__tests__/route.test.ts +0 -45
  107. package/src/__tests__/secret.test.ts +0 -644
  108. package/src/__tests__/tail.test.ts +0 -800
  109. package/src/__tests__/test-old-node-version.js +0 -31
  110. package/src/__tests__/type-generation.test.ts +0 -217
  111. package/src/__tests__/user.test.ts +0 -155
  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 -278
  116. package/src/__tests__/worker-namespace.test.ts +0 -326
  117. package/src/abort.d.ts +0 -3
  118. package/src/api/dev.ts +0 -208
  119. package/src/api/index.ts +0 -2
  120. package/src/bundle-reporter.tsx +0 -68
  121. package/src/bundle.ts +0 -785
  122. package/src/cfetch/index.ts +0 -160
  123. package/src/cfetch/internal.ts +0 -263
  124. package/src/cli.ts +0 -28
  125. package/src/config/README.md +0 -107
  126. package/src/config/config.ts +0 -275
  127. package/src/config/diagnostics.ts +0 -80
  128. package/src/config/environment.ts +0 -563
  129. package/src/config/index.ts +0 -342
  130. package/src/config/validation-helpers.ts +0 -597
  131. package/src/config/validation.ts +0 -2113
  132. package/src/config-cache.ts +0 -85
  133. package/src/create-worker-preview.ts +0 -282
  134. package/src/create-worker-upload-form.ts +0 -321
  135. package/src/d1/backups.tsx +0 -218
  136. package/src/d1/create.tsx +0 -54
  137. package/src/d1/delete.tsx +0 -56
  138. package/src/d1/execute.tsx +0 -299
  139. package/src/d1/formatTimeAgo.ts +0 -14
  140. package/src/d1/index.ts +0 -76
  141. package/src/d1/list.tsx +0 -48
  142. package/src/d1/options.ts +0 -12
  143. package/src/d1/types.tsx +0 -14
  144. package/src/d1/utils.ts +0 -39
  145. package/src/delete.ts +0 -108
  146. package/src/deployments.ts +0 -74
  147. package/src/deprecated/index.ts +0 -438
  148. package/src/dev/dev-vars.ts +0 -39
  149. package/src/dev/dev.tsx +0 -587
  150. package/src/dev/get-local-persistence-path.tsx +0 -31
  151. package/src/dev/local.tsx +0 -717
  152. package/src/dev/remote.tsx +0 -603
  153. package/src/dev/start-server.ts +0 -513
  154. package/src/dev/use-esbuild.ts +0 -204
  155. package/src/dev/validate-dev-props.ts +0 -31
  156. package/src/dev-registry.tsx +0 -201
  157. package/src/dev.tsx +0 -869
  158. package/src/dialogs.tsx +0 -163
  159. package/src/dispatch-namespace.ts +0 -207
  160. package/src/durable.ts +0 -102
  161. package/src/entry.ts +0 -329
  162. package/src/environment-variables.ts +0 -50
  163. package/src/errors.ts +0 -11
  164. package/src/git-client.ts +0 -124
  165. package/src/global-wrangler-config-path.ts +0 -26
  166. package/src/https-options.ts +0 -127
  167. package/src/index.tsx +0 -684
  168. package/src/init.ts +0 -970
  169. package/src/inspect.ts +0 -767
  170. package/src/intl-polyfill.d.ts +0 -139
  171. package/src/is-ci.ts +0 -14
  172. package/src/is-interactive.ts +0 -16
  173. package/src/kv/helpers.ts +0 -430
  174. package/src/kv/index.ts +0 -596
  175. package/src/logger.ts +0 -92
  176. package/src/metrics/index.ts +0 -5
  177. package/src/metrics/metrics-config.ts +0 -239
  178. package/src/metrics/metrics-dispatcher.ts +0 -96
  179. package/src/metrics/metrics-usage-headers.ts +0 -24
  180. package/src/metrics/send-event.ts +0 -94
  181. package/src/miniflare-cli/README.md +0 -30
  182. package/src/miniflare-cli/assets.ts +0 -215
  183. package/src/miniflare-cli/index.ts +0 -213
  184. package/src/miniflare-cli/request-context.ts +0 -40
  185. package/src/module-collection.ts +0 -267
  186. package/src/open-in-browser.ts +0 -17
  187. package/src/package-manager.ts +0 -219
  188. package/src/pages/build.tsx +0 -238
  189. package/src/pages/constants.ts +0 -18
  190. package/src/pages/deployments.tsx +0 -106
  191. package/src/pages/dev.tsx +0 -693
  192. package/src/pages/errors.ts +0 -66
  193. package/src/pages/functions/buildPlugin.ts +0 -110
  194. package/src/pages/functions/buildWorker.ts +0 -156
  195. package/src/pages/functions/filepath-routing.test.ts +0 -234
  196. package/src/pages/functions/filepath-routing.ts +0 -189
  197. package/src/pages/functions/identifiers.ts +0 -78
  198. package/src/pages/functions/routes-consolidation.test.ts +0 -250
  199. package/src/pages/functions/routes-consolidation.ts +0 -73
  200. package/src/pages/functions/routes-transformation.test.ts +0 -282
  201. package/src/pages/functions/routes-transformation.ts +0 -115
  202. package/src/pages/functions/routes-validation.test.ts +0 -403
  203. package/src/pages/functions/routes-validation.ts +0 -202
  204. package/src/pages/functions/routes.ts +0 -151
  205. package/src/pages/functions.tsx +0 -82
  206. package/src/pages/hash.tsx +0 -13
  207. package/src/pages/index.tsx +0 -94
  208. package/src/pages/projects.tsx +0 -169
  209. package/src/pages/publish.tsx +0 -436
  210. package/src/pages/types.ts +0 -49
  211. package/src/pages/upload.tsx +0 -425
  212. package/src/pages/utils.ts +0 -12
  213. package/src/parse.ts +0 -286
  214. package/src/paths.ts +0 -71
  215. package/src/proxy.ts +0 -689
  216. package/src/publish/index.ts +0 -270
  217. package/src/publish/publish.ts +0 -1035
  218. package/src/pubsub/index.ts +0 -286
  219. package/src/pubsub/pubsub-commands.tsx +0 -624
  220. package/src/queues/cli/commands/consumer/add.ts +0 -71
  221. package/src/queues/cli/commands/consumer/index.ts +0 -22
  222. package/src/queues/cli/commands/consumer/remove.ts +0 -38
  223. package/src/queues/cli/commands/create.ts +0 -25
  224. package/src/queues/cli/commands/delete.ts +0 -26
  225. package/src/queues/cli/commands/index.ts +0 -33
  226. package/src/queues/cli/commands/list.ts +0 -25
  227. package/src/queues/client.ts +0 -135
  228. package/src/r2/helpers.ts +0 -131
  229. package/src/r2/index.ts +0 -277
  230. package/src/routes.ts +0 -140
  231. package/src/secret/index.ts +0 -379
  232. package/src/selfsigned.d.ts +0 -29
  233. package/src/sites.tsx +0 -372
  234. package/src/tail/createTail.ts +0 -315
  235. package/src/tail/filters.ts +0 -277
  236. package/src/tail/index.ts +0 -214
  237. package/src/tail/printing.ts +0 -107
  238. package/src/type-generation.ts +0 -159
  239. package/src/update-check.ts +0 -19
  240. package/src/user/access.ts +0 -69
  241. package/src/user/choose-account.tsx +0 -69
  242. package/src/user/env-vars.ts +0 -46
  243. package/src/user/generate-auth-url.ts +0 -33
  244. package/src/user/generate-random-state.ts +0 -16
  245. package/src/user/index.ts +0 -3
  246. package/src/user/user.tsx +0 -1192
  247. package/src/utils/collectKeyValues.ts +0 -14
  248. package/src/whoami.tsx +0 -169
  249. package/src/worker.ts +0 -242
  250. package/src/yargs-types.ts +0 -20
  251. package/src/zones.ts +0 -191
  252. package/templates/d1-beta-facade.js +0 -174
  253. package/templates/experimental-local-cache-stubs.js +0 -27
  254. package/templates/first-party-worker-module-facade.ts +0 -18
  255. package/templates/format-dev-errors.ts +0 -32
  256. package/templates/serve-static-assets.ts +0 -63
  257. package/templates/service-bindings-module-facade.js +0 -54
  258. package/templates/service-bindings-sw-facade.js +0 -42
@@ -1,275 +0,0 @@
1
- import type { Environment, RawEnvironment } from "./environment";
2
-
3
- /**
4
- * This is the static type definition for the configuration object.
5
- *
6
- * It reflects a normalized and validated version of the configuration that you can write in wrangler.toml,
7
- * and optionally augment with arguments passed directly to wrangler.
8
- *
9
- * For more information about the configuration object, see the
10
- * documentation at https://developers.cloudflare.com/workers/cli-wrangler/configuration
11
- *
12
- * Notes:
13
- *
14
- * - Fields that are only specified in `ConfigFields` and not `Environment` can only appear
15
- * in the top level config and should not appear in any environments.
16
- * - All top level fields in config and environments are optional in the wrangler.toml file.
17
- *
18
- * Legend for the annotations:
19
- *
20
- * - `@breaking`: the deprecation/optionality is a breaking change from wrangler 1.
21
- * - `@todo`: there's more work to be done (with details attached).
22
- */
23
- export type Config = ConfigFields<DevConfig> & Environment;
24
-
25
- export type RawConfig = Partial<ConfigFields<RawDevConfig>> &
26
- RawEnvironment &
27
- DeprecatedConfigFields &
28
- EnvironmentMap;
29
-
30
- export interface ConfigFields<Dev extends RawDevConfig> {
31
- configPath: string | undefined;
32
-
33
- /**
34
- * A boolean to enable "legacy" style wrangler environments (from wrangler 1).
35
- * These have been superseded by Services, but there may be projects that won't
36
- * (or can't) use them. If you're using a legacy environment, you can set this
37
- * to `true` to enable it.
38
- */
39
- legacy_env: boolean;
40
-
41
- /**
42
- * Whether Wrangler should send usage metrics to Cloudflare for this project.
43
- *
44
- * When defined this will override any user settings.
45
- * Otherwise, Wrangler will use the user's preference.
46
- */
47
- send_metrics: boolean | undefined;
48
-
49
- /**
50
- * Options to configure the development server that your worker will use.
51
- */
52
- dev: Dev;
53
-
54
- /**
55
- * A list of migrations that should be uploaded with your Worker.
56
- *
57
- * These define changes in your Durable Object declarations.
58
- *
59
- * More details at https://developers.cloudflare.com/workers/learning/using-durable-objects#configuring-durable-object-classes-with-migrations
60
- *
61
- * @default `[]`
62
- */
63
- migrations: {
64
- /** A unique identifier for this migration. */
65
- tag: string;
66
- /** The new Durable Objects being defined. */
67
- new_classes?: string[];
68
- /** The Durable Objects being renamed. */
69
- renamed_classes?: {
70
- from: string;
71
- to: string;
72
- }[];
73
- /** The Durable Objects being removed. */
74
- deleted_classes?: string[];
75
- }[];
76
-
77
- /**
78
- * The definition of a Worker Site, a feature that lets you upload
79
- * static assets with your Worker.
80
- *
81
- * More details at https://developers.cloudflare.com/workers/platform/sites
82
- */
83
- site:
84
- | {
85
- /**
86
- * The directory containing your static assets.
87
- *
88
- * It must be a path relative to your wrangler.toml file.
89
- * Example: bucket = "./public"
90
- *
91
- * If there is a `site` field then it must contain this `bucket` field.
92
- */
93
- bucket: string;
94
-
95
- /**
96
- * The location of your Worker script.
97
- *
98
- * @deprecated DO NOT use this (it's a holdover from wrangler 1.x). Either use the top level `main` field, or pass the path to your entry file as a command line argument.
99
- * @breaking
100
- */
101
- "entry-point"?: string;
102
-
103
- /**
104
- * An exclusive list of .gitignore-style patterns that match file
105
- * or directory names from your bucket location. Only matched
106
- * items will be uploaded. Example: include = ["upload_dir"]
107
- *
108
- * @optional
109
- * @default `[]`
110
- */
111
- include?: string[];
112
-
113
- /**
114
- * A list of .gitignore-style patterns that match files or
115
- * directories in your bucket that should be excluded from
116
- * uploads. Example: exclude = ["ignore_dir"]
117
- *
118
- * @optional
119
- * @default `[]`
120
- */
121
- exclude?: string[];
122
- }
123
- | undefined;
124
-
125
- /**
126
- * Serve a folder of static assets with your Worker, without any additional code.
127
- * This can either be a string, or an object with additional config fields.
128
- */
129
- assets:
130
- | {
131
- bucket: string;
132
- include: string[];
133
- exclude: string[];
134
- browser_TTL: number | undefined;
135
- serve_single_page_app: boolean;
136
- }
137
- | undefined;
138
-
139
- /**
140
- * A list of wasm modules that your worker should be bound to. This is
141
- * the "legacy" way of binding to a wasm module. ES module workers should
142
- * do proper module imports.
143
- */
144
- wasm_modules:
145
- | {
146
- [key: string]: string;
147
- }
148
- | undefined;
149
-
150
- /**
151
- * A list of text files that your worker should be bound to. This is
152
- * the "legacy" way of binding to a text file. ES module workers should
153
- * do proper module imports.
154
- */
155
- text_blobs:
156
- | {
157
- [key: string]: string;
158
- }
159
- | undefined;
160
-
161
- /**
162
- * A list of data files that your worker should be bound to. This is
163
- * the "legacy" way of binding to a data file. ES module workers should
164
- * do proper module imports.
165
- */
166
- data_blobs:
167
- | {
168
- [key: string]: string;
169
- }
170
- | undefined;
171
-
172
- /**
173
- * By default, wrangler.toml is the source of truth for your environment configuration, like a terraform file.
174
- *
175
- * If you change your vars in the dashboard, wrangler *will* override/delete them on its next publish.
176
- *
177
- * If you want to keep your dashboard vars when wrangler deploys, set this field to true.
178
- *
179
- * @default false
180
- * @nonInheritable
181
- */
182
- keep_vars?: boolean;
183
- }
184
-
185
- export interface DevConfig {
186
- /**
187
- * IP address for the local dev server to listen on,
188
- *
189
- * @default `0.0.0.0`
190
- */
191
- ip: string;
192
-
193
- /**
194
- * Port for the local dev server to listen on
195
- *
196
- * @default `8787`
197
- */
198
- port: number | undefined;
199
-
200
- /**
201
- * Port for the local dev server's inspector to listen on
202
- *
203
- * @default `9229`
204
- */
205
- inspector_port: number | undefined;
206
-
207
- /**
208
- * Protocol that local wrangler dev server listens to requests on.
209
- *
210
- * @default `http`
211
- */
212
- local_protocol: "http" | "https";
213
-
214
- /**
215
- * Protocol that wrangler dev forwards requests on
216
- *
217
- * Setting this to `http` is not currently implemented.
218
- * See https://github.com/cloudflare/wrangler2/issues/583
219
- *
220
- * @default `https`
221
- * @todo this needs to be implemented https://github.com/cloudflare/wrangler2/issues/583
222
- */
223
- upstream_protocol: "https" | "http";
224
-
225
- /**
226
- * Host to forward requests to, defaults to the host of the first route of project
227
- */
228
- host: string | undefined;
229
- }
230
-
231
- export type RawDevConfig = Partial<DevConfig>;
232
-
233
- export interface DeprecatedConfigFields {
234
- /**
235
- * The project "type". A holdover from wrangler 1.x.
236
- * Valid values were "webpack", "javascript", and "rust".
237
- *
238
- * @deprecated DO NOT USE THIS. Most common features now work out of the box with wrangler, including modules, jsx, typescript, etc. If you need anything more, use a custom build.
239
- * @breaking
240
- */
241
- type?: "webpack" | "javascript" | "rust";
242
-
243
- /**
244
- * Path to the webpack config to use when building your worker.
245
- * A holdover from wrangler 1.x, used with `type: "webpack"`.
246
- *
247
- * @deprecated DO NOT USE THIS. Most common features now work out of the box with wrangler, including modules, jsx, typescript, etc. If you need anything more, use a custom build.
248
- * @breaking
249
- */
250
- webpack_config?: string;
251
-
252
- /**
253
- * Configuration only used by a standalone use of the miniflare binary.
254
- * @deprecated
255
- */
256
- miniflare?: unknown;
257
- }
258
-
259
- interface EnvironmentMap {
260
- /**
261
- * The `env` section defines overrides for the configuration for different environments.
262
- *
263
- * All environment fields can be specified at the top level of the config indicating the default environment settings.
264
- *
265
- * - Some fields are inherited and overridable in each environment.
266
- * - But some are not inherited and must be explicitly specified in every environment, if they are specified at the top level.
267
- *
268
- * For more information, see the documentation at https://developers.cloudflare.com/workers/cli-wrangler/configuration#environments
269
- *
270
- * @default `{}`
271
- */
272
- env?: {
273
- [envName: string]: RawEnvironment;
274
- };
275
- }
@@ -1,80 +0,0 @@
1
- /**
2
- * Diagnostic errors and warnings.
3
- *
4
- * The structure is a tree, where each node can contain zero or more errors, warnings and child diagnostics objects.
5
- * You can check whether the overall tree has errors or warnings, and you can render a string representation of the errors or warnings.
6
- */
7
- export class Diagnostics {
8
- errors: string[] = [];
9
- warnings: string[] = [];
10
- children: Diagnostics[] = [];
11
-
12
- /**
13
- * Create a new Diagnostics object.
14
- * @param description A general description of this collection of messages.
15
- */
16
- constructor(public description: string) {}
17
-
18
- /**
19
- * Merge the given `diagnostics` into this as a child.
20
- */
21
- addChild(diagnostics: Diagnostics): void {
22
- if (diagnostics.hasErrors() || diagnostics.hasWarnings()) {
23
- this.children.push(diagnostics);
24
- }
25
- }
26
-
27
- /** Does this or any of its children have errors. */
28
- hasErrors(): boolean {
29
- if (this.errors.length > 0) {
30
- return true;
31
- } else {
32
- return this.children.some((child) => child.hasErrors());
33
- }
34
- }
35
-
36
- /** Render the errors of this and all its children. */
37
- renderErrors(): string {
38
- return this.render("errors");
39
- }
40
-
41
- /** Does this or any of its children have warnings. */
42
- hasWarnings(): boolean {
43
- if (this.warnings.length > 0) {
44
- return true;
45
- } else {
46
- return this.children.some((child) => child.hasWarnings());
47
- }
48
- }
49
-
50
- /** Render the warnings of this and all its children. */
51
- renderWarnings(): string {
52
- return this.render("warnings");
53
- }
54
-
55
- private render(field: "errors" | "warnings"): string {
56
- const hasMethod = field === "errors" ? "hasErrors" : "hasWarnings";
57
- return indentText(
58
- `${this.description}\n` +
59
- // Output all the fields (errors or warnings) at this level
60
- this[field].map((message) => `- ${indentText(message)}`).join("\n") +
61
- // Output all the child diagnostics at the next level
62
- this.children
63
- .map((child) =>
64
- child[hasMethod]() ? "\n- " + child.render(field) : ""
65
- )
66
- .filter((output) => output !== "")
67
- .join("\n")
68
- );
69
- }
70
- }
71
-
72
- /** Indent all the but the first line by two spaces. */
73
- function indentText(str: string): string {
74
- return str
75
- .split("\n")
76
- .map((line, index) =>
77
- (index === 0 ? line : ` ${line}`).replace(/^\s*$/, "")
78
- )
79
- .join("\n");
80
- }