@vue-html-bridge/cli 0.1.0
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/LICENSE +21 -0
- package/README.md +81 -0
- package/dist/adapters.d.ts +29 -0
- package/dist/adapters.d.ts.map +1 -0
- package/dist/adapters.js +55 -0
- package/dist/adapters.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +54 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +27 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +93 -0
- package/dist/cli.js.map +1 -0
- package/dist/diagnostics.d.ts +22 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +71 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/enumerate.d.ts +18 -0
- package/dist/enumerate.d.ts.map +1 -0
- package/dist/enumerate.js +182 -0
- package/dist/enumerate.js.map +1 -0
- package/dist/exit-codes.d.ts +23 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +38 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/line-index.d.ts +34 -0
- package/dist/line-index.d.ts.map +1 -0
- package/dist/line-index.js +82 -0
- package/dist/line-index.js.map +1 -0
- package/dist/options.d.ts +79 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +465 -0
- package/dist/options.js.map +1 -0
- package/dist/output/ndjson.d.ts +80 -0
- package/dist/output/ndjson.d.ts.map +1 -0
- package/dist/output/ndjson.js +61 -0
- package/dist/output/ndjson.js.map +1 -0
- package/dist/output/text.d.ts +12 -0
- package/dist/output/text.d.ts.map +1 -0
- package/dist/output/text.js +76 -0
- package/dist/output/text.js.map +1 -0
- package/dist/runner.d.ts +38 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +221 -0
- package/dist/runner.js.map +1 -0
- package/dist/settings-resolution.d.ts +27 -0
- package/dist/settings-resolution.d.ts.map +1 -0
- package/dist/settings-resolution.js +48 -0
- package/dist/settings-resolution.js.map +1 -0
- package/dist/types.d.ts +74 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
package/dist/options.js
ADDED
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
const OUTPUT_FORMATS = ["text", "ndjson"];
|
|
2
|
+
const FAIL_ON_VALUES = [
|
|
3
|
+
"error",
|
|
4
|
+
"warning",
|
|
5
|
+
"info",
|
|
6
|
+
"hint",
|
|
7
|
+
"never",
|
|
8
|
+
];
|
|
9
|
+
/**
|
|
10
|
+
* Splits a `--flag=value` token into `["--flag", "value"]` at the *first*
|
|
11
|
+
* `=` only — a `--validator-setting` value can legitimately contain further
|
|
12
|
+
* `=` characters (e.g. JSON `{"a":"b=c"}`), so this must never behave like a
|
|
13
|
+
* naive `token.split("=")`.
|
|
14
|
+
*/
|
|
15
|
+
function expandEquals(argv) {
|
|
16
|
+
const expanded = [];
|
|
17
|
+
for (const token of argv) {
|
|
18
|
+
if (token.startsWith("--")) {
|
|
19
|
+
const eq = token.indexOf("=");
|
|
20
|
+
if (eq >= 0) {
|
|
21
|
+
expanded.push(token.slice(0, eq), token.slice(eq + 1));
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
expanded.push(token);
|
|
26
|
+
}
|
|
27
|
+
return expanded;
|
|
28
|
+
}
|
|
29
|
+
function err(message) {
|
|
30
|
+
return { kind: "error", message };
|
|
31
|
+
}
|
|
32
|
+
export function parseArgv(argv) {
|
|
33
|
+
const tokens = expandEquals(argv);
|
|
34
|
+
const positionalArgs = [];
|
|
35
|
+
const include = [];
|
|
36
|
+
const exclude = [];
|
|
37
|
+
const customElements = [];
|
|
38
|
+
const validatorOps = [];
|
|
39
|
+
let maxConcurrencyRaw;
|
|
40
|
+
let warnVariantCountRaw;
|
|
41
|
+
let externalAdapters;
|
|
42
|
+
let configPath;
|
|
43
|
+
let workspaceRoot;
|
|
44
|
+
let format;
|
|
45
|
+
let failOn;
|
|
46
|
+
let untrusted = false;
|
|
47
|
+
let noColor = false;
|
|
48
|
+
let help = false;
|
|
49
|
+
let version = false;
|
|
50
|
+
let i = 0;
|
|
51
|
+
function takeValue() {
|
|
52
|
+
i += 1;
|
|
53
|
+
return tokens[i];
|
|
54
|
+
}
|
|
55
|
+
while (i < tokens.length) {
|
|
56
|
+
const token = tokens[i];
|
|
57
|
+
switch (token) {
|
|
58
|
+
case "--help":
|
|
59
|
+
help = true;
|
|
60
|
+
break;
|
|
61
|
+
case "--version":
|
|
62
|
+
version = true;
|
|
63
|
+
break;
|
|
64
|
+
case "--untrusted":
|
|
65
|
+
untrusted = true;
|
|
66
|
+
break;
|
|
67
|
+
case "--no-color":
|
|
68
|
+
noColor = true;
|
|
69
|
+
break;
|
|
70
|
+
case "--include": {
|
|
71
|
+
const value = takeValue();
|
|
72
|
+
if (value === undefined)
|
|
73
|
+
return err(`"${token}" requires a value.`);
|
|
74
|
+
include.push(value);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "--exclude": {
|
|
78
|
+
const value = takeValue();
|
|
79
|
+
if (value === undefined)
|
|
80
|
+
return err(`"${token}" requires a value.`);
|
|
81
|
+
exclude.push(value);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case "--custom-elements": {
|
|
85
|
+
const value = takeValue();
|
|
86
|
+
if (value === undefined)
|
|
87
|
+
return err(`"${token}" requires a value.`);
|
|
88
|
+
customElements.push(value);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
case "--max-concurrency": {
|
|
92
|
+
const value = takeValue();
|
|
93
|
+
if (value === undefined)
|
|
94
|
+
return err(`"${token}" requires a value.`);
|
|
95
|
+
maxConcurrencyRaw = Number(value);
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
case "--warn-variant-count": {
|
|
99
|
+
const value = takeValue();
|
|
100
|
+
if (value === undefined)
|
|
101
|
+
return err(`"${token}" requires a value.`);
|
|
102
|
+
warnVariantCountRaw = Number(value);
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case "--external-adapters": {
|
|
106
|
+
const value = takeValue();
|
|
107
|
+
if (value === undefined)
|
|
108
|
+
return err(`"${token}" requires a value.`);
|
|
109
|
+
externalAdapters = value;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case "--config": {
|
|
113
|
+
const value = takeValue();
|
|
114
|
+
if (value === undefined)
|
|
115
|
+
return err(`"${token}" requires a value.`);
|
|
116
|
+
configPath = value;
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
case "--workspace-root": {
|
|
120
|
+
const value = takeValue();
|
|
121
|
+
if (value === undefined)
|
|
122
|
+
return err(`"${token}" requires a value.`);
|
|
123
|
+
workspaceRoot = value;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "--format": {
|
|
127
|
+
const value = takeValue();
|
|
128
|
+
if (value === undefined)
|
|
129
|
+
return err(`"${token}" requires a value.`);
|
|
130
|
+
if (!OUTPUT_FORMATS.includes(value)) {
|
|
131
|
+
return err(`"--format" must be one of ${OUTPUT_FORMATS.join(", ")}; got "${value}".`);
|
|
132
|
+
}
|
|
133
|
+
format = value;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
case "--fail-on": {
|
|
137
|
+
const value = takeValue();
|
|
138
|
+
if (value === undefined)
|
|
139
|
+
return err(`"${token}" requires a value.`);
|
|
140
|
+
if (!FAIL_ON_VALUES.includes(value)) {
|
|
141
|
+
return err(`"--fail-on" must be one of ${FAIL_ON_VALUES.join(", ")}; got "${value}".`);
|
|
142
|
+
}
|
|
143
|
+
failOn = value;
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
case "--validator": {
|
|
147
|
+
const value = takeValue();
|
|
148
|
+
if (value === undefined)
|
|
149
|
+
return err(`"${token}" requires a value.`);
|
|
150
|
+
if (value.length === 0)
|
|
151
|
+
return err(`"--validator" requires a non-empty entry key.`);
|
|
152
|
+
validatorOps.push({ kind: "enable", entryKey: value });
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
case "--disable-validator": {
|
|
156
|
+
const value = takeValue();
|
|
157
|
+
if (value === undefined)
|
|
158
|
+
return err(`"${token}" requires a value.`);
|
|
159
|
+
if (value.length === 0) {
|
|
160
|
+
return err(`"--disable-validator" requires a non-empty entry key.`);
|
|
161
|
+
}
|
|
162
|
+
validatorOps.push({ kind: "disable", entryKey: value });
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case "--validator-setting": {
|
|
166
|
+
const value = takeValue();
|
|
167
|
+
if (value === undefined)
|
|
168
|
+
return err(`"${token}" requires a value.`);
|
|
169
|
+
const parsed = parseValidatorSettingFlag(value);
|
|
170
|
+
if (typeof parsed === "string")
|
|
171
|
+
return err(parsed);
|
|
172
|
+
validatorOps.push(parsed);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
default:
|
|
176
|
+
if (token.startsWith("-") && token !== "-") {
|
|
177
|
+
return err(`Unknown option "${token}".`);
|
|
178
|
+
}
|
|
179
|
+
positionalArgs.push(token);
|
|
180
|
+
}
|
|
181
|
+
i += 1;
|
|
182
|
+
}
|
|
183
|
+
// A non-numeric value (e.g. "abc") becomes `NaN` here, which is still
|
|
184
|
+
// `typeof "number"` — resolveSettings' own invalid-type/out-of-range issue
|
|
185
|
+
// reporting (§4.1) rejects it exactly like a bad config-file value; see
|
|
186
|
+
// the module doc comment above.
|
|
187
|
+
const settingsInput = {
|
|
188
|
+
...(include.length > 0 ? { include } : {}),
|
|
189
|
+
...(exclude.length > 0 ? { exclude } : {}),
|
|
190
|
+
...(customElements.length > 0 ? { customElements } : {}),
|
|
191
|
+
...(maxConcurrencyRaw !== undefined
|
|
192
|
+
? { maxConcurrency: maxConcurrencyRaw }
|
|
193
|
+
: {}),
|
|
194
|
+
...(warnVariantCountRaw !== undefined
|
|
195
|
+
? { warnVariantCount: warnVariantCountRaw }
|
|
196
|
+
: {}),
|
|
197
|
+
...(externalAdapters !== undefined
|
|
198
|
+
? {
|
|
199
|
+
externalAdapters: externalAdapters,
|
|
200
|
+
}
|
|
201
|
+
: {}),
|
|
202
|
+
};
|
|
203
|
+
return {
|
|
204
|
+
kind: "ok",
|
|
205
|
+
options: {
|
|
206
|
+
settingsInput,
|
|
207
|
+
validatorOps,
|
|
208
|
+
positionalArgs,
|
|
209
|
+
configPath,
|
|
210
|
+
workspaceRoot,
|
|
211
|
+
format: format ?? "text",
|
|
212
|
+
failOn: failOn ?? "error",
|
|
213
|
+
untrusted,
|
|
214
|
+
noColor,
|
|
215
|
+
help,
|
|
216
|
+
version,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// ---------------------------------------------------------------------------
|
|
221
|
+
// §4.3: validator flags
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
/**
|
|
224
|
+
* Parses `<entry-key>.<path>=<value>`. Splits at the *first* `=` for the
|
|
225
|
+
* value boundary (a JSON value can itself contain `=`), then at the *first*
|
|
226
|
+
* `.` for the entry-key/path boundary (entry keys never contain `.` in
|
|
227
|
+
* practice — an npm package specifier or the built-in id `"markuplint"` —
|
|
228
|
+
* and a path segment that itself contains a literal `.` is documented as
|
|
229
|
+
* unaddressable by flag, cli.md §4.3).
|
|
230
|
+
*/
|
|
231
|
+
function parseValidatorSettingFlag(raw) {
|
|
232
|
+
const eq = raw.indexOf("=");
|
|
233
|
+
if (eq < 0) {
|
|
234
|
+
return `"--validator-setting" requires "<entry-key>.<path>=<value>"; got "${raw}".`;
|
|
235
|
+
}
|
|
236
|
+
const left = raw.slice(0, eq);
|
|
237
|
+
const rawValue = raw.slice(eq + 1);
|
|
238
|
+
const dot = left.indexOf(".");
|
|
239
|
+
if (dot < 0) {
|
|
240
|
+
return `"--validator-setting" requires "<entry-key>.<path>=<value>"; missing "." in "${left}".`;
|
|
241
|
+
}
|
|
242
|
+
const entryKey = left.slice(0, dot);
|
|
243
|
+
const pathText = left.slice(dot + 1);
|
|
244
|
+
if (entryKey.length === 0) {
|
|
245
|
+
return `"--validator-setting" requires a non-empty entry key; got "${raw}".`;
|
|
246
|
+
}
|
|
247
|
+
const path = parseDottedPath(pathText);
|
|
248
|
+
if (typeof path === "string")
|
|
249
|
+
return path;
|
|
250
|
+
return {
|
|
251
|
+
kind: "set-setting",
|
|
252
|
+
entryKey,
|
|
253
|
+
path,
|
|
254
|
+
value: parseFlagValue(rawValue),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
const FORBIDDEN_PATH_SEGMENTS = new Set([
|
|
258
|
+
"__proto__",
|
|
259
|
+
"constructor",
|
|
260
|
+
"prototype",
|
|
261
|
+
]);
|
|
262
|
+
const ARRAY_INDEX_SEGMENT = /[[\]]/;
|
|
263
|
+
/**
|
|
264
|
+
* The dotted-path grammar (cli.md §4.3): one or more non-empty segments
|
|
265
|
+
* separated by `.`. `__proto__`/`constructor`/`prototype` segments and
|
|
266
|
+
* bracketed array-index syntax (`rules[0]`) are rejected outright rather
|
|
267
|
+
* than silently accepted as literal (surprising) object keys.
|
|
268
|
+
*/
|
|
269
|
+
export function parseDottedPath(path) {
|
|
270
|
+
if (path.length === 0)
|
|
271
|
+
return "A validator-setting path must not be empty.";
|
|
272
|
+
const segments = path.split(".");
|
|
273
|
+
for (const segment of segments) {
|
|
274
|
+
if (segment.length === 0) {
|
|
275
|
+
return `A validator-setting path must not contain empty segments; got "${path}".`;
|
|
276
|
+
}
|
|
277
|
+
if (FORBIDDEN_PATH_SEGMENTS.has(segment)) {
|
|
278
|
+
return `The validator-setting path segment "${segment}" is not allowed.`;
|
|
279
|
+
}
|
|
280
|
+
if (ARRAY_INDEX_SEGMENT.test(segment)) {
|
|
281
|
+
return `Array indices are not supported in "--validator-setting" paths (segment "${segment}"); use the config file instead.`;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return segments;
|
|
285
|
+
}
|
|
286
|
+
/** JSON-with-string-fallback (cli.md §4.3): `false` parses as a boolean, an unparsable token stays a plain string. */
|
|
287
|
+
export function parseFlagValue(raw) {
|
|
288
|
+
try {
|
|
289
|
+
return JSON.parse(raw);
|
|
290
|
+
}
|
|
291
|
+
catch {
|
|
292
|
+
return raw;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* A "plain object" for merge purposes: either a null-prototype object (what
|
|
297
|
+
* this function itself produces) or an ordinary `Object.prototype`-based
|
|
298
|
+
* object (what a config file's `JSON.parse` or an existing `validators[].settings`
|
|
299
|
+
* value already is). Anything else (array, class instance, primitive) is not
|
|
300
|
+
* safe to treat as an extendable container.
|
|
301
|
+
*/
|
|
302
|
+
function isMergeableObject(value) {
|
|
303
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
const proto = Object.getPrototypeOf(value);
|
|
307
|
+
return proto === null || proto === Object.prototype;
|
|
308
|
+
}
|
|
309
|
+
/** Copies `source`'s own enumerable keys into a fresh null-prototype object, via `defineProperty` (never `[[Set]]`, so a literal "__proto__" own key copies as inert data, exactly as `JSON.parse` itself already treats it). */
|
|
310
|
+
function toNullProtoCopy(source) {
|
|
311
|
+
const target = Object.create(null);
|
|
312
|
+
for (const key of Object.keys(source)) {
|
|
313
|
+
Object.defineProperty(target, key, {
|
|
314
|
+
value: source[key],
|
|
315
|
+
writable: true,
|
|
316
|
+
enumerable: true,
|
|
317
|
+
configurable: true,
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
return target;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Builds (or extends) a nested settings object using own-property
|
|
324
|
+
* assignment (`Object.defineProperty`, which bypasses the prototype chain
|
|
325
|
+
* entirely) on null-prototype intermediate objects — so even if a forbidden
|
|
326
|
+
* segment slipped past `parseDottedPath` somehow, assignment itself could
|
|
327
|
+
* never reach `Object.prototype`. An existing value at an intermediate
|
|
328
|
+
* position is preserved (copied into a fresh null-prototype object, so the
|
|
329
|
+
* original is never mutated) whenever it is itself a plain object —
|
|
330
|
+
* regardless of whether it came from a previous `deepSetOwn` call (null
|
|
331
|
+
* prototype) or from a config file / earlier `validators[].settings`
|
|
332
|
+
* (ordinary `Object.prototype`); anything else at that position (a scalar,
|
|
333
|
+
* array, or other non-plain value) is replaced (documented last-write-wins
|
|
334
|
+
* for a type mismatch).
|
|
335
|
+
*/
|
|
336
|
+
export function deepSetOwn(root, segments, value) {
|
|
337
|
+
const base = isMergeableObject(root)
|
|
338
|
+
? toNullProtoCopy(root)
|
|
339
|
+
: Object.create(null);
|
|
340
|
+
let cursor = base;
|
|
341
|
+
for (let index = 0; index < segments.length - 1; index += 1) {
|
|
342
|
+
const key = segments[index];
|
|
343
|
+
const existing = Object.prototype.hasOwnProperty.call(cursor, key)
|
|
344
|
+
? cursor[key]
|
|
345
|
+
: undefined;
|
|
346
|
+
const next = isMergeableObject(existing)
|
|
347
|
+
? toNullProtoCopy(existing)
|
|
348
|
+
: Object.create(null);
|
|
349
|
+
Object.defineProperty(cursor, key, {
|
|
350
|
+
value: next,
|
|
351
|
+
writable: true,
|
|
352
|
+
enumerable: true,
|
|
353
|
+
configurable: true,
|
|
354
|
+
});
|
|
355
|
+
cursor = next;
|
|
356
|
+
}
|
|
357
|
+
const lastKey = segments[segments.length - 1];
|
|
358
|
+
Object.defineProperty(cursor, lastKey, {
|
|
359
|
+
value,
|
|
360
|
+
writable: true,
|
|
361
|
+
enumerable: true,
|
|
362
|
+
configurable: true,
|
|
363
|
+
});
|
|
364
|
+
return base;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* cli.md §4.3: applies the three validator flags as per-entry modifications
|
|
368
|
+
* on top of the *already-resolved* `validators[]` (the caller runs this
|
|
369
|
+
* after `resolveSettings`, never as another layer fed into it — a documented
|
|
370
|
+
* exception to normal array-replacement layering). Ops are applied in
|
|
371
|
+
* command-line order, regardless of which of the three flags produced them.
|
|
372
|
+
* `--validator`/`--disable-validator`/`--validator-setting` all add a fresh
|
|
373
|
+
* entry (`enabled: true` by default, matching settings.md §3.1's own default
|
|
374
|
+
* for a `validators[]` entry) when the entry key names no existing entry —
|
|
375
|
+
* documented judgment call: cli.md §4.3 says this explicitly only for
|
|
376
|
+
* `--validator`, but there would otherwise be nothing for
|
|
377
|
+
* `--disable-validator`/`--validator-setting` alone to act on for an adapter
|
|
378
|
+
* not already in the resolved config.
|
|
379
|
+
*/
|
|
380
|
+
export function applyValidatorFlagOps(validators, ops) {
|
|
381
|
+
const entries = new Map();
|
|
382
|
+
const order = [];
|
|
383
|
+
for (const entry of validators) {
|
|
384
|
+
entries.set(entry.adapter, entry);
|
|
385
|
+
order.push(entry.adapter);
|
|
386
|
+
}
|
|
387
|
+
function ensureEntry(entryKey) {
|
|
388
|
+
const existing = entries.get(entryKey);
|
|
389
|
+
if (existing)
|
|
390
|
+
return existing;
|
|
391
|
+
const created = {
|
|
392
|
+
adapter: entryKey,
|
|
393
|
+
enabled: true,
|
|
394
|
+
};
|
|
395
|
+
entries.set(entryKey, created);
|
|
396
|
+
order.push(entryKey);
|
|
397
|
+
return created;
|
|
398
|
+
}
|
|
399
|
+
for (const op of ops) {
|
|
400
|
+
const entry = ensureEntry(op.entryKey);
|
|
401
|
+
switch (op.kind) {
|
|
402
|
+
case "enable":
|
|
403
|
+
entries.set(op.entryKey, { ...entry, enabled: true });
|
|
404
|
+
break;
|
|
405
|
+
case "disable":
|
|
406
|
+
entries.set(op.entryKey, { ...entry, enabled: false });
|
|
407
|
+
break;
|
|
408
|
+
case "set-setting":
|
|
409
|
+
entries.set(op.entryKey, {
|
|
410
|
+
...entry,
|
|
411
|
+
// structuredClone converts the null-prototype build result (see
|
|
412
|
+
// deepSetOwn's doc comment) into an ordinary Object.prototype-based
|
|
413
|
+
// object before it leaves this module — downstream adapter-settings
|
|
414
|
+
// validation (e.g. Ajv-style `value.hasOwnProperty(...)` calls) must
|
|
415
|
+
// never be handed a null-prototype object it wasn't built for. The
|
|
416
|
+
// clone itself cannot reintroduce prototype pollution: it only ever
|
|
417
|
+
// copies the null-prototype object's own enumerable properties.
|
|
418
|
+
settings: structuredClone(deepSetOwn(entry.settings, op.path, op.value)),
|
|
419
|
+
});
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return order.map((key) => entries.get(key));
|
|
424
|
+
}
|
|
425
|
+
// ---------------------------------------------------------------------------
|
|
426
|
+
// --help
|
|
427
|
+
// ---------------------------------------------------------------------------
|
|
428
|
+
export const HELP_TEXT = `Usage: vue-html-bridge [options] [file|dir|glob ...]
|
|
429
|
+
|
|
430
|
+
Runs the same vue-html-bridge analysis as the language server, one-shot.
|
|
431
|
+
|
|
432
|
+
Positional arguments:
|
|
433
|
+
file|dir|glob Files, directories (expanded to <dir>/**/*.vue), or
|
|
434
|
+
globs to analyze. Replaces the "include" setting
|
|
435
|
+
when given. With none, "include" (default
|
|
436
|
+
"**/*.vue") is used, relative to the workspace root.
|
|
437
|
+
|
|
438
|
+
Settings flags:
|
|
439
|
+
--include <glob> Repeatable. Same role as a positional argument.
|
|
440
|
+
--exclude <glob> Repeatable. Always applies (default: **/node_modules/**).
|
|
441
|
+
--max-concurrency <n> Adapter-level concurrency passed to the analyzer.
|
|
442
|
+
--warn-variant-count <n> Passed to core's variant-generation options.
|
|
443
|
+
--custom-elements <name> Repeatable. Tag name or glob.
|
|
444
|
+
--external-adapters <disabled|trusted-workspace-only>
|
|
445
|
+
|
|
446
|
+
Validator flags:
|
|
447
|
+
--validator <entry-key> Repeatable. Marks an entry enabled.
|
|
448
|
+
--disable-validator <entry-key> Repeatable. Marks an entry disabled.
|
|
449
|
+
--validator-setting <entry-key>.<path>=<value>
|
|
450
|
+
Repeatable. <value> is parsed as JSON,
|
|
451
|
+
falling back to a plain string.
|
|
452
|
+
|
|
453
|
+
Other options:
|
|
454
|
+
--config <path> Explicit settings file; replaces discovery.
|
|
455
|
+
--workspace-root <dir> Default: the current working directory.
|
|
456
|
+
--format <text|ndjson> Default: text.
|
|
457
|
+
--fail-on <error|warning|info|hint|never>
|
|
458
|
+
Lowest severity that causes exit code 1. Default: error.
|
|
459
|
+
--untrusted Restricted trust: no external adapters, bundled
|
|
460
|
+
Markuplint defaults only.
|
|
461
|
+
--no-color Disable color output.
|
|
462
|
+
--help Print this message and exit 0.
|
|
463
|
+
--version Print the version and exit 0.
|
|
464
|
+
`;
|
|
465
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { OutputRenderer } from "../types.js";
|
|
2
|
+
export declare const CLI_NDJSON_VERSION = 1;
|
|
3
|
+
/** Always the first line of any run that reaches analysis. */
|
|
4
|
+
export interface CliNdjsonMeta {
|
|
5
|
+
type: "meta";
|
|
6
|
+
version: 1;
|
|
7
|
+
}
|
|
8
|
+
export interface CliNdjsonDiagnostic {
|
|
9
|
+
severity: "error" | "warning" | "info" | "hint";
|
|
10
|
+
code: string;
|
|
11
|
+
message: string;
|
|
12
|
+
origin: "core" | "validator" | "adapter";
|
|
13
|
+
adapterId?: string;
|
|
14
|
+
codeDescriptionHref?: string;
|
|
15
|
+
/** UTF-16 offsets into the SFC. */
|
|
16
|
+
range: {
|
|
17
|
+
start: number;
|
|
18
|
+
end: number;
|
|
19
|
+
};
|
|
20
|
+
position: {
|
|
21
|
+
/** 1-based. */
|
|
22
|
+
startLine: number;
|
|
23
|
+
/** 1-based; UTF-16 units. */
|
|
24
|
+
startColumn: number;
|
|
25
|
+
endLine: number;
|
|
26
|
+
endColumn: number;
|
|
27
|
+
};
|
|
28
|
+
relatedInformation: readonly {
|
|
29
|
+
path: string;
|
|
30
|
+
range: {
|
|
31
|
+
start: number;
|
|
32
|
+
end: number;
|
|
33
|
+
};
|
|
34
|
+
position: {
|
|
35
|
+
startLine: number;
|
|
36
|
+
startColumn: number;
|
|
37
|
+
endLine: number;
|
|
38
|
+
endColumn: number;
|
|
39
|
+
};
|
|
40
|
+
message: string;
|
|
41
|
+
}[];
|
|
42
|
+
evidence: {
|
|
43
|
+
variantCount: number;
|
|
44
|
+
truncated: boolean;
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** One per file, emitted as that file's analysis completes. */
|
|
48
|
+
export interface CliNdjsonFile {
|
|
49
|
+
type: "file";
|
|
50
|
+
/** Workspace-relative, "/"-separated. */
|
|
51
|
+
path: string;
|
|
52
|
+
diagnostics: readonly CliNdjsonDiagnostic[];
|
|
53
|
+
}
|
|
54
|
+
/** One per run-level error (cli.md §8), emitted as it occurs. */
|
|
55
|
+
export interface CliNdjsonRunError {
|
|
56
|
+
type: "runError";
|
|
57
|
+
code: string;
|
|
58
|
+
message: string;
|
|
59
|
+
adapterId?: string;
|
|
60
|
+
/** Workspace-relative, when the error is file-scoped. */
|
|
61
|
+
path?: string;
|
|
62
|
+
}
|
|
63
|
+
/** Emitted once, last, only if the run reaches completion (§7.2 stdout validity). */
|
|
64
|
+
export interface CliNdjsonSummary {
|
|
65
|
+
type: "summary";
|
|
66
|
+
filesAnalyzed: number;
|
|
67
|
+
errors: number;
|
|
68
|
+
warnings: number;
|
|
69
|
+
infos: number;
|
|
70
|
+
hints: number;
|
|
71
|
+
runErrors: number;
|
|
72
|
+
}
|
|
73
|
+
export type CliNdjsonRecord = CliNdjsonMeta | CliNdjsonFile | CliNdjsonRunError | CliNdjsonSummary;
|
|
74
|
+
/**
|
|
75
|
+
* `write` is called once per emitted line (already `\n`-terminated) — the
|
|
76
|
+
* caller (runner.ts via bin.ts) is responsible for the actual stdout stream;
|
|
77
|
+
* this keeps the module trivially testable without a real stream.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createNdjsonRenderer(write: (chunk: string) => void): OutputRenderer;
|
|
80
|
+
//# sourceMappingURL=ndjson.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson.d.ts","sourceRoot":"","sources":["../../src/output/ndjson.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mCAAmC;IACnC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,QAAQ,EAAE;QACR,eAAe;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,6BAA6B;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,kBAAkB,EAAE,SAAS;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QACtC,QAAQ,EAAE;YACR,SAAS,EAAE,MAAM,CAAC;YAClB,WAAW,EAAE,MAAM,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC;YAChB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,OAAO,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,QAAQ,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CACxD;AAED,+DAA+D;AAC/D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC7C;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GACzB,aAAa,GAAG,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAiCvE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAC7B,cAAc,CA2BhB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const CLI_NDJSON_VERSION = 1;
|
|
2
|
+
function toNdjsonDiagnostic(diagnostic) {
|
|
3
|
+
return {
|
|
4
|
+
severity: diagnostic.severity,
|
|
5
|
+
code: diagnostic.code,
|
|
6
|
+
message: diagnostic.message,
|
|
7
|
+
origin: diagnostic.origin,
|
|
8
|
+
...(diagnostic.adapterId !== undefined
|
|
9
|
+
? { adapterId: diagnostic.adapterId }
|
|
10
|
+
: {}),
|
|
11
|
+
...(diagnostic.codeDescriptionHref !== undefined
|
|
12
|
+
? { codeDescriptionHref: diagnostic.codeDescriptionHref }
|
|
13
|
+
: {}),
|
|
14
|
+
range: diagnostic.range,
|
|
15
|
+
position: diagnostic.position,
|
|
16
|
+
relatedInformation: diagnostic.relatedInformation.map((related) => ({
|
|
17
|
+
path: related.path,
|
|
18
|
+
range: related.range,
|
|
19
|
+
position: related.position,
|
|
20
|
+
message: related.message,
|
|
21
|
+
})),
|
|
22
|
+
evidence: diagnostic.evidence,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function writeLine(write, record) {
|
|
26
|
+
write(`${JSON.stringify(record)}\n`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* `write` is called once per emitted line (already `\n`-terminated) — the
|
|
30
|
+
* caller (runner.ts via bin.ts) is responsible for the actual stdout stream;
|
|
31
|
+
* this keeps the module trivially testable without a real stream.
|
|
32
|
+
*/
|
|
33
|
+
export function createNdjsonRenderer(write) {
|
|
34
|
+
return {
|
|
35
|
+
start() {
|
|
36
|
+
writeLine(write, { type: "meta", version: CLI_NDJSON_VERSION });
|
|
37
|
+
},
|
|
38
|
+
file(path, diagnostics) {
|
|
39
|
+
writeLine(write, {
|
|
40
|
+
type: "file",
|
|
41
|
+
path,
|
|
42
|
+
diagnostics: diagnostics.map(toNdjsonDiagnostic),
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
runError(error) {
|
|
46
|
+
writeLine(write, {
|
|
47
|
+
type: "runError",
|
|
48
|
+
code: error.code,
|
|
49
|
+
message: error.message,
|
|
50
|
+
...(error.adapterId !== undefined
|
|
51
|
+
? { adapterId: error.adapterId }
|
|
52
|
+
: {}),
|
|
53
|
+
...(error.path !== undefined ? { path: error.path } : {}),
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
summary(counts) {
|
|
57
|
+
writeLine(write, { type: "summary", ...counts });
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ndjson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson.js","sourceRoot":"","sources":["../../src/output/ndjson.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAuEpC,SAAS,kBAAkB,CAAC,UAAyB;IACnD,OAAO;QACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,GAAG,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS;YACpC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE;YACrC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,UAAU,CAAC,mBAAmB,KAAK,SAAS;YAC9C,CAAC,CAAC,EAAE,mBAAmB,EAAE,UAAU,CAAC,mBAAmB,EAAE;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClE,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;QACH,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAChB,KAA8B,EAC9B,MAAuB;IAEvB,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA8B;IAE9B,OAAO;QACL,KAAK;YACH,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,WAAW;YACpB,SAAS,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,CAAC,KAAoB;YAC3B,SAAS,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;oBAC/B,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;oBAChC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,MAAwB;YAC9B,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { OutputRenderer } from "../types.js";
|
|
2
|
+
export interface TextRendererOptions {
|
|
3
|
+
/** cli.md §4.2: color only when stdout is a TTY and `NO_COLOR` is unset and `--no-color` wasn't given — decided by the caller (cli.ts). Default false. */
|
|
4
|
+
color?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* `writeStdout`/`writeStderr` are called with already-newline-terminated
|
|
8
|
+
* chunks; the caller owns the real stream (kept simple/testable, same
|
|
9
|
+
* pattern as output/ndjson.ts).
|
|
10
|
+
*/
|
|
11
|
+
export declare function createTextRenderer(writeStdout: (chunk: string) => void, writeStderr: (chunk: string) => void, options?: TextRendererOptions): OutputRenderer;
|
|
12
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/output/text.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,aAAa,CAAC;AA0ErB,MAAM,WAAW,mBAAmB;IAClC,0JAA0J;IAC1J,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACpC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACpC,OAAO,GAAE,mBAAwB,GAChC,cAAc,CAkBhB"}
|