@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.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/dist/adapters.d.ts +29 -0
  4. package/dist/adapters.d.ts.map +1 -0
  5. package/dist/adapters.js +55 -0
  6. package/dist/adapters.js.map +1 -0
  7. package/dist/bin.d.ts +3 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +54 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/cli.d.ts +27 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +93 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/diagnostics.d.ts +22 -0
  16. package/dist/diagnostics.d.ts.map +1 -0
  17. package/dist/diagnostics.js +71 -0
  18. package/dist/diagnostics.js.map +1 -0
  19. package/dist/enumerate.d.ts +18 -0
  20. package/dist/enumerate.d.ts.map +1 -0
  21. package/dist/enumerate.js +182 -0
  22. package/dist/enumerate.js.map +1 -0
  23. package/dist/exit-codes.d.ts +23 -0
  24. package/dist/exit-codes.d.ts.map +1 -0
  25. package/dist/exit-codes.js +38 -0
  26. package/dist/exit-codes.js.map +1 -0
  27. package/dist/index.d.ts +9 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +12 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/line-index.d.ts +34 -0
  32. package/dist/line-index.d.ts.map +1 -0
  33. package/dist/line-index.js +82 -0
  34. package/dist/line-index.js.map +1 -0
  35. package/dist/options.d.ts +79 -0
  36. package/dist/options.d.ts.map +1 -0
  37. package/dist/options.js +465 -0
  38. package/dist/options.js.map +1 -0
  39. package/dist/output/ndjson.d.ts +80 -0
  40. package/dist/output/ndjson.d.ts.map +1 -0
  41. package/dist/output/ndjson.js +61 -0
  42. package/dist/output/ndjson.js.map +1 -0
  43. package/dist/output/text.d.ts +12 -0
  44. package/dist/output/text.d.ts.map +1 -0
  45. package/dist/output/text.js +76 -0
  46. package/dist/output/text.js.map +1 -0
  47. package/dist/runner.d.ts +38 -0
  48. package/dist/runner.d.ts.map +1 -0
  49. package/dist/runner.js +221 -0
  50. package/dist/runner.js.map +1 -0
  51. package/dist/settings-resolution.d.ts +27 -0
  52. package/dist/settings-resolution.d.ts.map +1 -0
  53. package/dist/settings-resolution.js +48 -0
  54. package/dist/settings-resolution.js.map +1 -0
  55. package/dist/types.d.ts +74 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +6 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +43 -0
@@ -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"}