wrangler 2.0.12 → 2.0.16
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.
- package/README.md +7 -1
- package/bin/wrangler.js +111 -57
- package/miniflare-dist/index.mjs +9 -2
- package/package.json +156 -154
- package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
- package/src/__tests__/config-cache.test.ts +30 -24
- package/src/__tests__/configuration.test.ts +3935 -3476
- package/src/__tests__/dev.test.tsx +1128 -979
- package/src/__tests__/guess-worker-format.test.ts +68 -68
- package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
- package/src/__tests__/helpers/faye-websocket.d.ts +4 -4
- package/src/__tests__/helpers/mock-account-id.ts +24 -24
- package/src/__tests__/helpers/mock-bin.ts +20 -20
- package/src/__tests__/helpers/mock-cfetch.ts +92 -92
- package/src/__tests__/helpers/mock-console.ts +49 -39
- package/src/__tests__/helpers/mock-dialogs.ts +94 -71
- package/src/__tests__/helpers/mock-http-server.ts +30 -30
- package/src/__tests__/helpers/mock-istty.ts +65 -18
- package/src/__tests__/helpers/mock-kv.ts +26 -26
- package/src/__tests__/helpers/mock-oauth-flow.ts +223 -228
- package/src/__tests__/helpers/mock-process.ts +39 -0
- package/src/__tests__/helpers/mock-stdin.ts +82 -77
- package/src/__tests__/helpers/mock-web-socket.ts +21 -21
- package/src/__tests__/helpers/run-in-tmp.ts +27 -27
- package/src/__tests__/helpers/run-wrangler.ts +8 -8
- package/src/__tests__/helpers/write-worker-source.ts +16 -16
- package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
- package/src/__tests__/https-options.test.ts +104 -104
- package/src/__tests__/index.test.ts +239 -234
- package/src/__tests__/init.test.ts +1605 -1250
- package/src/__tests__/jest.setup.ts +63 -33
- package/src/__tests__/kv.test.ts +1128 -1011
- package/src/__tests__/logger.test.ts +100 -74
- package/src/__tests__/package-manager.test.ts +303 -303
- package/src/__tests__/pages.test.ts +1152 -652
- package/src/__tests__/parse.test.ts +252 -252
- package/src/__tests__/publish.test.ts +6371 -5622
- package/src/__tests__/pubsub.test.ts +367 -0
- package/src/__tests__/r2.test.ts +133 -133
- package/src/__tests__/route.test.ts +18 -18
- package/src/__tests__/secret.test.ts +382 -377
- package/src/__tests__/tail.test.ts +530 -530
- package/src/__tests__/user.test.ts +123 -111
- package/src/__tests__/whoami.test.tsx +198 -117
- package/src/__tests__/worker-namespace.test.ts +327 -0
- package/src/abort.d.ts +1 -1
- package/src/api/dev.ts +49 -0
- package/src/api/index.ts +1 -0
- package/src/bundle-reporter.tsx +29 -0
- package/src/bundle.ts +157 -149
- package/src/cfetch/index.ts +80 -80
- package/src/cfetch/internal.ts +90 -83
- package/src/cli.ts +21 -7
- package/src/config/config.ts +204 -195
- package/src/config/diagnostics.ts +61 -61
- package/src/config/environment.ts +390 -357
- package/src/config/index.ts +206 -193
- package/src/config/validation-helpers.ts +366 -366
- package/src/config/validation.ts +1573 -1376
- package/src/config-cache.ts +79 -41
- package/src/create-worker-preview.ts +206 -136
- package/src/create-worker-upload-form.ts +247 -238
- package/src/dev/dev-vars.ts +13 -13
- package/src/dev/dev.tsx +329 -307
- package/src/dev/local.tsx +304 -275
- package/src/dev/remote.tsx +366 -224
- package/src/dev/use-esbuild.ts +126 -91
- package/src/dev.tsx +538 -0
- package/src/dialogs.tsx +97 -97
- package/src/durable.ts +87 -87
- package/src/entry.ts +234 -228
- package/src/environment-variables.ts +23 -23
- package/src/errors.ts +6 -6
- package/src/generate.ts +33 -0
- package/src/git-client.ts +42 -0
- package/src/https-options.ts +79 -79
- package/src/index.tsx +1775 -2763
- package/src/init.ts +549 -0
- package/src/inspect.ts +593 -593
- package/src/intl-polyfill.d.ts +123 -123
- package/src/is-interactive.ts +12 -0
- package/src/kv.ts +277 -277
- package/src/logger.ts +46 -39
- package/src/miniflare-cli/enum-keys.ts +8 -8
- package/src/miniflare-cli/index.ts +42 -31
- package/src/miniflare-cli/request-context.ts +18 -18
- package/src/module-collection.ts +212 -212
- package/src/open-in-browser.ts +4 -6
- package/src/package-manager.ts +123 -123
- package/src/pages/build.tsx +202 -0
- package/src/pages/constants.ts +7 -0
- package/src/pages/deployments.tsx +101 -0
- package/src/pages/dev.tsx +964 -0
- package/src/pages/functions/buildPlugin.ts +105 -0
- package/src/pages/functions/buildWorker.ts +151 -0
- package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
- package/src/pages/functions/filepath-routing.ts +189 -0
- package/src/pages/functions/identifiers.ts +78 -0
- package/src/pages/functions/routes.ts +151 -0
- package/src/pages/index.tsx +84 -0
- package/src/pages/projects.tsx +157 -0
- package/src/pages/publish.tsx +335 -0
- package/src/pages/types.ts +40 -0
- package/src/pages/upload.tsx +384 -0
- package/src/pages/utils.ts +12 -0
- package/src/parse.ts +202 -138
- package/src/paths.ts +6 -6
- package/src/preview.ts +31 -0
- package/src/proxy.ts +400 -402
- package/src/publish.ts +667 -621
- package/src/pubsub/index.ts +286 -0
- package/src/pubsub/pubsub-commands.tsx +577 -0
- package/src/r2.ts +19 -19
- package/src/selfsigned.d.ts +23 -23
- package/src/sites.tsx +271 -225
- package/src/tail/filters.ts +108 -108
- package/src/tail/index.ts +217 -217
- package/src/tail/printing.ts +45 -45
- package/src/update-check.ts +11 -11
- package/src/user/choose-account.tsx +60 -0
- package/src/user/env-vars.ts +46 -0
- package/src/user/generate-auth-url.ts +33 -0
- package/src/user/generate-random-state.ts +16 -0
- package/src/user/index.ts +3 -0
- package/src/user/user.tsx +1161 -0
- package/src/whoami.tsx +61 -42
- package/src/worker-namespace.ts +190 -0
- package/src/worker.ts +110 -100
- package/src/zones.ts +39 -36
- package/templates/checked-fetch.js +17 -0
- package/templates/new-worker-scheduled.js +3 -3
- package/templates/new-worker-scheduled.ts +15 -15
- package/templates/new-worker.js +3 -3
- package/templates/new-worker.ts +15 -15
- package/templates/no-op-worker.js +10 -0
- package/templates/pages-template-plugin.ts +155 -0
- package/templates/pages-template-worker.ts +161 -0
- package/templates/static-asset-facade.js +31 -31
- package/templates/tsconfig.json +95 -95
- package/wrangler-dist/cli.js +55383 -54138
- package/pages/functions/buildPlugin.ts +0 -105
- package/pages/functions/buildWorker.ts +0 -151
- package/pages/functions/filepath-routing.ts +0 -189
- package/pages/functions/identifiers.ts +0 -78
- package/pages/functions/routes.ts +0 -156
- package/pages/functions/template-plugin.ts +0 -147
- package/pages/functions/template-worker.ts +0 -143
- package/src/pages.tsx +0 -2093
- package/src/user.tsx +0 -1214
package/src/config/config.ts
CHANGED
|
@@ -23,212 +23,221 @@ import type { Environment, RawEnvironment } from "./environment";
|
|
|
23
23
|
export type Config = ConfigFields<DevConfig> & Environment;
|
|
24
24
|
|
|
25
25
|
export type RawConfig = Partial<ConfigFields<RawDevConfig>> &
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
RawEnvironment &
|
|
27
|
+
DeprecatedConfigFields &
|
|
28
|
+
EnvironmentMap;
|
|
29
29
|
|
|
30
30
|
export interface ConfigFields<Dev extends RawDevConfig> {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
+
* Options to configure the development server that your worker will use.
|
|
43
|
+
*/
|
|
44
|
+
dev: Dev;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A list of migrations that should be uploaded with your Worker.
|
|
48
|
+
*
|
|
49
|
+
* These define changes in your Durable Object declarations.
|
|
50
|
+
*
|
|
51
|
+
* More details at https://developers.cloudflare.com/workers/learning/using-durable-objects#configuring-durable-object-classes-with-migrations
|
|
52
|
+
*
|
|
53
|
+
* @default `[]`
|
|
54
|
+
*/
|
|
55
|
+
migrations: {
|
|
56
|
+
/** A unique identifier for this migration. */
|
|
57
|
+
tag: string;
|
|
58
|
+
/** The new Durable Objects being defined. */
|
|
59
|
+
new_classes?: string[];
|
|
60
|
+
/** The Durable Objects being renamed. */
|
|
61
|
+
renamed_classes?: {
|
|
62
|
+
from: string;
|
|
63
|
+
to: string;
|
|
64
|
+
}[];
|
|
65
|
+
/** The Durable Objects being removed. */
|
|
66
|
+
deleted_classes?: string[];
|
|
67
|
+
}[];
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* The definition of a Worker Site, a feature that lets you upload
|
|
71
|
+
* static assets with your Worker.
|
|
72
|
+
*
|
|
73
|
+
* More details at https://developers.cloudflare.com/workers/platform/sites
|
|
74
|
+
*/
|
|
75
|
+
site:
|
|
76
|
+
| {
|
|
77
|
+
/**
|
|
78
|
+
* The directory containing your static assets.
|
|
79
|
+
*
|
|
80
|
+
* It must be a path relative to your wrangler.toml file.
|
|
81
|
+
* Example: bucket = "./public"
|
|
82
|
+
*
|
|
83
|
+
* If there is a `site` field then it must contain this `bucket` field.
|
|
84
|
+
*/
|
|
85
|
+
bucket: string;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The location of your Worker script.
|
|
89
|
+
*
|
|
90
|
+
* @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.
|
|
91
|
+
* @breaking
|
|
92
|
+
*/
|
|
93
|
+
"entry-point"?: string;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* An exclusive list of .gitignore-style patterns that match file
|
|
97
|
+
* or directory names from your bucket location. Only matched
|
|
98
|
+
* items will be uploaded. Example: include = ["upload_dir"]
|
|
99
|
+
*
|
|
100
|
+
* @optional
|
|
101
|
+
* @default `[]`
|
|
102
|
+
*/
|
|
103
|
+
include?: string[];
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* A list of .gitignore-style patterns that match files or
|
|
107
|
+
* directories in your bucket that should be excluded from
|
|
108
|
+
* uploads. Example: exclude = ["ignore_dir"]
|
|
109
|
+
*
|
|
110
|
+
* @optional
|
|
111
|
+
* @default `[]`
|
|
112
|
+
*/
|
|
113
|
+
exclude?: string[];
|
|
114
|
+
}
|
|
115
|
+
| undefined;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Serve a folder of static assets with your Worker, without any additional code.
|
|
119
|
+
* This can either be a string, or an object with additional config fields.
|
|
120
|
+
*/
|
|
121
|
+
assets:
|
|
122
|
+
| string
|
|
123
|
+
| { bucket: string; include: string[]; exclude: string[] }
|
|
124
|
+
| undefined;
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* A list of wasm modules that your worker should be bound to. This is
|
|
128
|
+
* the "legacy" way of binding to a wasm module. ES module workers should
|
|
129
|
+
* do proper module imports.
|
|
130
|
+
*/
|
|
131
|
+
wasm_modules:
|
|
132
|
+
| {
|
|
133
|
+
[key: string]: string;
|
|
134
|
+
}
|
|
135
|
+
| undefined;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* A list of text files that your worker should be bound to. This is
|
|
139
|
+
* the "legacy" way of binding to a text file. ES module workers should
|
|
140
|
+
* do proper module imports.
|
|
141
|
+
*/
|
|
142
|
+
text_blobs:
|
|
143
|
+
| {
|
|
144
|
+
[key: string]: string;
|
|
145
|
+
}
|
|
146
|
+
| undefined;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* A list of data files that your worker should be bound to. This is
|
|
150
|
+
* the "legacy" way of binding to a data file. ES module workers should
|
|
151
|
+
* do proper module imports.
|
|
152
|
+
*/
|
|
153
|
+
data_blobs:
|
|
154
|
+
| {
|
|
155
|
+
[key: string]: string;
|
|
156
|
+
}
|
|
157
|
+
| undefined;
|
|
149
158
|
}
|
|
150
159
|
|
|
151
160
|
export interface DevConfig {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
161
|
+
/**
|
|
162
|
+
* IP address for the local dev server to listen on,
|
|
163
|
+
*
|
|
164
|
+
* @default `localhost`
|
|
165
|
+
*/
|
|
166
|
+
ip: string;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Port for the local dev server to listen on
|
|
170
|
+
*
|
|
171
|
+
* @default `8787`
|
|
172
|
+
*/
|
|
173
|
+
port: number | undefined;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Protocol that local wrangler dev server listens to requests on.
|
|
177
|
+
*
|
|
178
|
+
* @default `http`
|
|
179
|
+
*/
|
|
180
|
+
local_protocol: "http" | "https";
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Protocol that wrangler dev forwards requests on
|
|
184
|
+
*
|
|
185
|
+
* Setting this to `http` is not currently implemented.
|
|
186
|
+
* See https://github.com/cloudflare/wrangler2/issues/583
|
|
187
|
+
*
|
|
188
|
+
* @default `https`
|
|
189
|
+
* @todo this needs to be implemented https://github.com/cloudflare/wrangler2/issues/583
|
|
190
|
+
*/
|
|
191
|
+
upstream_protocol: "https" | "http";
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Host to forward requests to, defaults to the host of the first route of project
|
|
195
|
+
*/
|
|
196
|
+
host: string | undefined;
|
|
188
197
|
}
|
|
189
198
|
|
|
190
199
|
export type RawDevConfig = Partial<DevConfig>;
|
|
191
200
|
|
|
192
201
|
export interface DeprecatedConfigFields {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
202
|
+
/**
|
|
203
|
+
* The project "type". A holdover from wrangler 1.x.
|
|
204
|
+
* Valid values were "webpack", "javascript", and "rust".
|
|
205
|
+
*
|
|
206
|
+
* @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.
|
|
207
|
+
* @breaking
|
|
208
|
+
*/
|
|
209
|
+
type?: "webpack" | "javascript" | "rust";
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Path to the webpack config to use when building your worker.
|
|
213
|
+
* A holdover from wrangler 1.x, used with `type: "webpack"`.
|
|
214
|
+
*
|
|
215
|
+
* @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.
|
|
216
|
+
* @breaking
|
|
217
|
+
*/
|
|
218
|
+
webpack_config?: string;
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Configuration only used by a standalone use of the miniflare binary.
|
|
222
|
+
* @deprecated
|
|
223
|
+
*/
|
|
224
|
+
miniflare?: unknown;
|
|
216
225
|
}
|
|
217
226
|
|
|
218
227
|
interface EnvironmentMap {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
228
|
+
/**
|
|
229
|
+
* The `env` section defines overrides for the configuration for different environments.
|
|
230
|
+
*
|
|
231
|
+
* All environment fields can be specified at the top level of the config indicating the default environment settings.
|
|
232
|
+
*
|
|
233
|
+
* - Some fields are inherited and overridable in each environment.
|
|
234
|
+
* - But some are not inherited and must be explicitly specified in every environment, if they are specified at the top level.
|
|
235
|
+
*
|
|
236
|
+
* For more information, see the documentation at https://developers.cloudflare.com/workers/cli-wrangler/configuration#environments
|
|
237
|
+
*
|
|
238
|
+
* @default `{}`
|
|
239
|
+
*/
|
|
240
|
+
env?: {
|
|
241
|
+
[envName: string]: RawEnvironment;
|
|
242
|
+
};
|
|
234
243
|
}
|
|
@@ -5,76 +5,76 @@
|
|
|
5
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
6
|
*/
|
|
7
7
|
export class Diagnostics {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
errors: string[] = [];
|
|
9
|
+
warnings: string[] = [];
|
|
10
|
+
children: Diagnostics[] = [];
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
/** Render the errors of this and all its children. */
|
|
37
|
+
renderErrors(): string {
|
|
38
|
+
return this.render("errors");
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
/** Render the warnings of this and all its children. */
|
|
51
|
+
renderWarnings(): string {
|
|
52
|
+
return this.render("warnings");
|
|
53
|
+
}
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
70
|
}
|
|
71
71
|
|
|
72
72
|
/** Indent all the but the first line by two spaces. */
|
|
73
73
|
function indentText(str: string): string {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
return str
|
|
75
|
+
.split("\n")
|
|
76
|
+
.map((line, index) =>
|
|
77
|
+
(index === 0 ? line : ` ${line}`).replace(/^\s*$/, "")
|
|
78
|
+
)
|
|
79
|
+
.join("\n");
|
|
80
80
|
}
|