@goflag/cli 0.2.7 → 0.2.9
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 +34 -8
- package/dist/{chunk-UOKYUKHQ.js → chunk-TAZEAIFI.js} +977 -37
- package/dist/chunk-TAZEAIFI.js.map +1 -0
- package/dist/cli.js +547 -235
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +93 -3
- package/dist/index.js +1 -1
- package/flags.json +302 -0
- package/package.json +5 -2
- package/rules.json +366 -2
- package/dist/chunk-UOKYUKHQ.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -95,12 +95,29 @@ interface ReciprocityIssue {
|
|
|
95
95
|
peerUrl?: string;
|
|
96
96
|
message: string;
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* What the audit actually knows about the URL in a cell.
|
|
100
|
+
*
|
|
101
|
+
* - `crawled` — fetched and inspected. The only one that is a fact.
|
|
102
|
+
* - `sitemap` — the site's own `<loc>` list names it, but the crawl did not
|
|
103
|
+
* reach it. Under structural coverage this is most of the grid.
|
|
104
|
+
* - `alternate` — **no list names it**: the only evidence is a
|
|
105
|
+
* `<link rel="alternate">` on some page. It still fills the cell, so it
|
|
106
|
+
* still hides a hole, and nothing has checked that the page is there.
|
|
107
|
+
*
|
|
108
|
+
* Derived from the winning URL rather than from which writer got there first,
|
|
109
|
+
* so `record`'s ordering — and every fingerprint that depends on it — is
|
|
110
|
+
* untouched (`docs/i18n-cluster-plan.md` §10).
|
|
111
|
+
*/
|
|
112
|
+
type I18nCellSource = "crawled" | "sitemap" | "alternate";
|
|
98
113
|
interface I18nCell {
|
|
99
114
|
/** Absolute URL serving this (route, locale) cell. `null` when
|
|
100
115
|
* no page in the crawl filled this cell. */
|
|
101
116
|
url: string | null;
|
|
102
117
|
/** True when the page was actually inspected (vs. discovered only). */
|
|
103
118
|
inspected: boolean;
|
|
119
|
+
/** How the URL got here. Absent when `url` is null — nothing to source. */
|
|
120
|
+
source?: I18nCellSource;
|
|
104
121
|
}
|
|
105
122
|
interface I18nMatrix {
|
|
106
123
|
/** Stable locale axis, `x-default` first when present, then BCP 47
|
|
@@ -272,6 +289,34 @@ interface ExtractionIcon {
|
|
|
272
289
|
height: number;
|
|
273
290
|
} | "any">;
|
|
274
291
|
}
|
|
292
|
+
/** One entry of a Web App Manifest's `icons` member. */
|
|
293
|
+
interface ExtractionManifestIcon {
|
|
294
|
+
src: string;
|
|
295
|
+
sizes?: string;
|
|
296
|
+
type?: string;
|
|
297
|
+
purpose?: string;
|
|
298
|
+
/** Parsed `sizes` entries; empty for absent or unparseable values. */
|
|
299
|
+
parsedSizes: Array<{
|
|
300
|
+
width: number;
|
|
301
|
+
height: number;
|
|
302
|
+
} | "any">;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* The `<link rel="manifest">`, and what the manifest said when goflag fetched
|
|
306
|
+
* it.
|
|
307
|
+
*
|
|
308
|
+
* `parsed` is deliberately three-valued. `undefined` means no probe ran — the
|
|
309
|
+
* manifest was never looked at — while `false` means it was fetched and could
|
|
310
|
+
* not be read. A rule must be able to tell those apart from a manifest that
|
|
311
|
+
* parsed and declares no icons, because only the last of the three is evidence
|
|
312
|
+
* about the site.
|
|
313
|
+
*/
|
|
314
|
+
interface ExtractionManifest {
|
|
315
|
+
href: string;
|
|
316
|
+
parsed?: boolean;
|
|
317
|
+
/** Present only when `parsed` is true. */
|
|
318
|
+
icons?: ExtractionManifestIcon[];
|
|
319
|
+
}
|
|
275
320
|
/** One feed advertisement (`rel="alternate"` with a feed content type). */
|
|
276
321
|
interface ExtractionFeed {
|
|
277
322
|
type: string;
|
|
@@ -286,9 +331,7 @@ interface ExtractionFeed {
|
|
|
286
331
|
interface ExtractionLinks {
|
|
287
332
|
hreflang: ExtractionHreflang[];
|
|
288
333
|
icons: ExtractionIcon[];
|
|
289
|
-
manifest?:
|
|
290
|
-
href: string;
|
|
291
|
-
};
|
|
334
|
+
manifest?: ExtractionManifest;
|
|
292
335
|
feeds: ExtractionFeed[];
|
|
293
336
|
}
|
|
294
337
|
/** One `<script type="application/ld+json">` block. */
|
|
@@ -303,6 +346,29 @@ interface ExtractionJsonLd {
|
|
|
303
346
|
/** Verbatim script content — the evidence, especially on parse errors. */
|
|
304
347
|
raw: string;
|
|
305
348
|
}
|
|
349
|
+
/** One intrinsic size a file declares about itself. */
|
|
350
|
+
interface ExtractionAssetSize {
|
|
351
|
+
width: number;
|
|
352
|
+
height: number;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* What was served at one asset URL the page declared.
|
|
356
|
+
*
|
|
357
|
+
* The rules stay pure functions of this model: the network happened in a
|
|
358
|
+
* dedicated pass (`docs/og-plan.md` D8) and its answers arrive here as data,
|
|
359
|
+
* exactly like the manifest's.
|
|
360
|
+
*/
|
|
361
|
+
interface ExtractionAsset {
|
|
362
|
+
status: number;
|
|
363
|
+
/** 2xx *and* an image content type. */
|
|
364
|
+
ok: boolean;
|
|
365
|
+
contentType?: string;
|
|
366
|
+
/**
|
|
367
|
+
* Sizes decoded from the file's header — several for an ICO. Absent for a
|
|
368
|
+
* format goflag does not decode, which means *unknown*, never *none*.
|
|
369
|
+
*/
|
|
370
|
+
sizes?: ExtractionAssetSize[];
|
|
371
|
+
}
|
|
306
372
|
/**
|
|
307
373
|
* The per-page observation. Everything a page rule (or an agent judging a
|
|
308
374
|
* prose rule) may read; nothing else.
|
|
@@ -319,6 +385,13 @@ interface Extraction {
|
|
|
319
385
|
twitter: ExtractionTwitter;
|
|
320
386
|
links: ExtractionLinks;
|
|
321
387
|
jsonLd: ExtractionJsonLd[];
|
|
388
|
+
/**
|
|
389
|
+
* What was served at each asset URL this page declared, keyed by resolved
|
|
390
|
+
* URL. **Absent when no probe pass ran** — a rule must read that as "not
|
|
391
|
+
* looked at" rather than "nothing there", the same three-valued care the
|
|
392
|
+
* manifest gets.
|
|
393
|
+
*/
|
|
394
|
+
assets?: Record<string, ExtractionAsset>;
|
|
322
395
|
}
|
|
323
396
|
|
|
324
397
|
/**
|
|
@@ -778,6 +851,13 @@ interface GoflagReport {
|
|
|
778
851
|
* are duplicates. Reported so a shrinking finding count is explicable.
|
|
779
852
|
*/
|
|
780
853
|
duplicatePages?: number;
|
|
854
|
+
/**
|
|
855
|
+
* Matrix cells filled by an `hreflang` on another page and by nothing
|
|
856
|
+
* else: not crawled, and not listed in the sitemap. They count as a
|
|
857
|
+
* present translation, so each one may be hiding the hole it claims to
|
|
858
|
+
* fill. Reported, never judged — see `docs/i18n-cluster-plan.md` §10.
|
|
859
|
+
*/
|
|
860
|
+
unverifiedAlternates?: number;
|
|
781
861
|
/**
|
|
782
862
|
* Translation clusters the sitemap declared with `xhtml:link`, when it
|
|
783
863
|
* declared any.
|
|
@@ -792,6 +872,16 @@ interface GoflagReport {
|
|
|
792
872
|
declaredClusters?: {
|
|
793
873
|
count: number;
|
|
794
874
|
conflicts?: number;
|
|
875
|
+
/**
|
|
876
|
+
* Of `count`, the clusters that exist only because a page's `<head>`
|
|
877
|
+
* declared them — rows the sitemap never mentioned.
|
|
878
|
+
*/
|
|
879
|
+
fromHead?: number;
|
|
880
|
+
/**
|
|
881
|
+
* Clusters the site declared that goflag declined to use, because no
|
|
882
|
+
* `x-default` named the row (or the members disagreed about it).
|
|
883
|
+
*/
|
|
884
|
+
refused?: number;
|
|
795
885
|
};
|
|
796
886
|
/** Sitemap discovery outcome, when discovery ran. */
|
|
797
887
|
/** Which pages the run chose to audit, and what it therefore cannot promise. */
|
package/dist/index.js
CHANGED
package/flags.json
ADDED
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
{
|
|
2
|
+
"flags": [
|
|
3
|
+
{
|
|
4
|
+
"name": "--advisories",
|
|
5
|
+
"short": null,
|
|
6
|
+
"arg": null,
|
|
7
|
+
"default": null,
|
|
8
|
+
"requires": null,
|
|
9
|
+
"group": "output",
|
|
10
|
+
"description": "Attach the prose rules — the judgment calls goflag refuses to fake — each with the observed facts an agent needs to judge it. Never affects the gate."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "--allow-insecure-tls",
|
|
14
|
+
"short": null,
|
|
15
|
+
"arg": null,
|
|
16
|
+
"default": null,
|
|
17
|
+
"requires": null,
|
|
18
|
+
"group": "fetch",
|
|
19
|
+
"description": "Accept self-signed / invalid TLS (localhost, tunnels)."
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "--baseline",
|
|
23
|
+
"short": null,
|
|
24
|
+
"arg": "<file>",
|
|
25
|
+
"default": null,
|
|
26
|
+
"requires": null,
|
|
27
|
+
"group": "gate",
|
|
28
|
+
"description": "Stored report to compare against. Use with --regressions-only."
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"name": "--conformance",
|
|
32
|
+
"short": null,
|
|
33
|
+
"arg": null,
|
|
34
|
+
"default": null,
|
|
35
|
+
"requires": null,
|
|
36
|
+
"group": "output",
|
|
37
|
+
"description": "Report EVERY rule's status on every page (pass / fail / warn / na), not just the violations. Answers \"where do we stand against the catalog?\"; pairs with --json."
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"name": "--coverage",
|
|
41
|
+
"short": null,
|
|
42
|
+
"arg": "<mode>",
|
|
43
|
+
"default": "structural when a sitemap is found, all otherwise",
|
|
44
|
+
"requires": null,
|
|
45
|
+
"group": "crawl",
|
|
46
|
+
"description": "How to choose which pages to audit. \"structural\" (default when a sitemap is found) keeps every standalone page and samples families of pages built from one template. \"all\" audits everything the sitemap lists, up to --max-pages."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "--depth",
|
|
50
|
+
"short": null,
|
|
51
|
+
"arg": "<n>",
|
|
52
|
+
"default": "2",
|
|
53
|
+
"requires": null,
|
|
54
|
+
"group": "crawl",
|
|
55
|
+
"description": "How far to follow links out of each page (0 = follow none). Sitemap URLs are seeded regardless, so --depth 0 alone is not \"entry page only\" — add --no-sitemap for that. Default: 2."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"name": "--exclude",
|
|
59
|
+
"short": null,
|
|
60
|
+
"arg": "<glob>",
|
|
61
|
+
"default": null,
|
|
62
|
+
"requires": null,
|
|
63
|
+
"group": "crawl",
|
|
64
|
+
"description": "Skip paths matching <glob> (repeatable)."
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "--fail-on",
|
|
68
|
+
"short": null,
|
|
69
|
+
"arg": "<level>",
|
|
70
|
+
"default": "warning",
|
|
71
|
+
"requires": null,
|
|
72
|
+
"group": "gate",
|
|
73
|
+
"description": "Exit 1 at or above this severity: warning (default), error, or never."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"name": "--help",
|
|
77
|
+
"short": "-h",
|
|
78
|
+
"arg": null,
|
|
79
|
+
"default": null,
|
|
80
|
+
"requires": null,
|
|
81
|
+
"group": "terminal",
|
|
82
|
+
"description": "Show this help."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "--ignore-holes",
|
|
86
|
+
"short": null,
|
|
87
|
+
"arg": "<glob>",
|
|
88
|
+
"default": null,
|
|
89
|
+
"requires": null,
|
|
90
|
+
"group": "i18n",
|
|
91
|
+
"description": "Route (locale-free) that is deliberately not translated everywhere, so its gaps are not reported as missing translations (repeatable)."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "--include",
|
|
95
|
+
"short": null,
|
|
96
|
+
"arg": "<glob>",
|
|
97
|
+
"default": null,
|
|
98
|
+
"requires": null,
|
|
99
|
+
"group": "crawl",
|
|
100
|
+
"description": "Only crawl paths matching <glob> (repeatable)."
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"name": "--json",
|
|
104
|
+
"short": null,
|
|
105
|
+
"arg": null,
|
|
106
|
+
"default": null,
|
|
107
|
+
"requires": null,
|
|
108
|
+
"group": "output",
|
|
109
|
+
"description": "Print the JSON report to stdout (nothing else)."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"name": "--locales",
|
|
113
|
+
"short": null,
|
|
114
|
+
"arg": "<list>",
|
|
115
|
+
"default": null,
|
|
116
|
+
"requires": null,
|
|
117
|
+
"group": "i18n",
|
|
118
|
+
"description": "Comma-separated locales the site serves, e.g. \"fr,en,pt-br\". Unioned with what the sitemap shows, never substituted for it, and the only way to make a locale the site does not serve yet show up as missing. Also folds /en/… and /fr/… into one route family for structural coverage, so pass it on any locale-prefixed site."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "--max-debt",
|
|
122
|
+
"short": null,
|
|
123
|
+
"arg": "<n>",
|
|
124
|
+
"default": null,
|
|
125
|
+
"requires": null,
|
|
126
|
+
"group": "gate",
|
|
127
|
+
"description": "Fail when the site carries more than <n> findings in total, whether new or known. Lower it as you fix, to stop a baseline from fossilising."
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "--max-pages",
|
|
131
|
+
"short": null,
|
|
132
|
+
"arg": "<n>",
|
|
133
|
+
"default": "200",
|
|
134
|
+
"requires": null,
|
|
135
|
+
"group": "crawl",
|
|
136
|
+
"description": "Page budget for the crawl. A hard cap under --coverage all; under structural coverage the selection wins and the budget is max(<n>, selected + 5). Default: 200."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "--no-color",
|
|
140
|
+
"short": null,
|
|
141
|
+
"arg": null,
|
|
142
|
+
"default": "colour when stdout is a TTY and NO_COLOR is unset",
|
|
143
|
+
"requires": null,
|
|
144
|
+
"group": "terminal",
|
|
145
|
+
"description": "Disable coloured output."
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "--no-external",
|
|
149
|
+
"short": null,
|
|
150
|
+
"arg": null,
|
|
151
|
+
"default": null,
|
|
152
|
+
"requires": null,
|
|
153
|
+
"group": "fetch",
|
|
154
|
+
"description": "Do not probe off-origin (external) links."
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"name": "--no-sitemap",
|
|
158
|
+
"short": null,
|
|
159
|
+
"arg": null,
|
|
160
|
+
"default": null,
|
|
161
|
+
"requires": null,
|
|
162
|
+
"group": "crawl",
|
|
163
|
+
"description": "Do not discover the sitemap; crawl from <url> only. Discovery is on by default because link-only crawling cannot find locales a site never links to."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"name": "--profile",
|
|
167
|
+
"short": null,
|
|
168
|
+
"arg": "<name>",
|
|
169
|
+
"default": "default",
|
|
170
|
+
"requires": null,
|
|
171
|
+
"group": "gate",
|
|
172
|
+
"description": "Policy overlay on the rule set — it changes how loudly a rule fires, never what it observes: default — rule severities exactly as authored strict — every spec-backed rule fails the build spec-only — heuristic rules switched off entirely marketing — snippet and unfurl metadata gaps are errors"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"name": "--quiet",
|
|
176
|
+
"short": "-q",
|
|
177
|
+
"arg": null,
|
|
178
|
+
"default": null,
|
|
179
|
+
"requires": null,
|
|
180
|
+
"group": "terminal",
|
|
181
|
+
"description": "Suppress the live progress output."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "--regressions-only",
|
|
185
|
+
"short": null,
|
|
186
|
+
"arg": null,
|
|
187
|
+
"default": null,
|
|
188
|
+
"requires": "--baseline",
|
|
189
|
+
"group": "gate",
|
|
190
|
+
"description": "Weaken the gate: fail only on findings that are NEW relative to --baseline. Known findings stop blocking the build — a green run no longer means a clean site. Requires --baseline."
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"name": "--report",
|
|
194
|
+
"short": null,
|
|
195
|
+
"arg": "<file>",
|
|
196
|
+
"default": null,
|
|
197
|
+
"requires": null,
|
|
198
|
+
"group": "output",
|
|
199
|
+
"description": "Write the (full) JSON report to <file>."
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"name": "--start",
|
|
203
|
+
"short": null,
|
|
204
|
+
"arg": "<cmd>",
|
|
205
|
+
"default": null,
|
|
206
|
+
"requires": null,
|
|
207
|
+
"group": "boot",
|
|
208
|
+
"description": "Boot <cmd>, wait for <url> to answer, audit, then stop it. Use to gate a merge on the built app before it ships."
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"name": "--start-cwd",
|
|
212
|
+
"short": null,
|
|
213
|
+
"arg": "<dir>",
|
|
214
|
+
"default": "the current directory",
|
|
215
|
+
"requires": null,
|
|
216
|
+
"group": "boot",
|
|
217
|
+
"description": "Directory to run --start in. Defaults to the current one; set it when auditing a monorepo package from the repository root."
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"name": "--start-timeout",
|
|
221
|
+
"short": null,
|
|
222
|
+
"arg": "<ms>",
|
|
223
|
+
"default": "60000",
|
|
224
|
+
"requires": null,
|
|
225
|
+
"group": "boot",
|
|
226
|
+
"description": "How long to wait for --start to answer. Default: 60000."
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"name": "--static",
|
|
230
|
+
"short": null,
|
|
231
|
+
"arg": null,
|
|
232
|
+
"default": null,
|
|
233
|
+
"requires": null,
|
|
234
|
+
"group": "fetch",
|
|
235
|
+
"description": "Static HTML only; never launch headless Chromium."
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"name": "--summary",
|
|
239
|
+
"short": "-s",
|
|
240
|
+
"arg": null,
|
|
241
|
+
"default": null,
|
|
242
|
+
"requires": null,
|
|
243
|
+
"group": "output",
|
|
244
|
+
"description": "Roll findings up (dedup by link/rule/code). Pairs with --json for a compact, agent-friendly payload."
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"name": "--timeout",
|
|
248
|
+
"short": null,
|
|
249
|
+
"arg": "<ms>",
|
|
250
|
+
"default": "8000 for link probes, 15000 for page fetches",
|
|
251
|
+
"requires": null,
|
|
252
|
+
"group": "fetch",
|
|
253
|
+
"description": "Per-request timeout in ms, for page fetches and link probes alike. Unset, the defaults differ: 8000 for link probes, 15000 for page fetches."
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"name": "--update-baseline",
|
|
257
|
+
"short": null,
|
|
258
|
+
"arg": null,
|
|
259
|
+
"default": null,
|
|
260
|
+
"requires": "--baseline",
|
|
261
|
+
"group": "gate",
|
|
262
|
+
"description": "Write this run to --baseline and exit 0, instead of judging against it. Use it to capture a baseline, or to accept findings you have decided to live with — it says what it accepted."
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"name": "--verbose",
|
|
266
|
+
"short": "-V",
|
|
267
|
+
"arg": null,
|
|
268
|
+
"default": null,
|
|
269
|
+
"requires": null,
|
|
270
|
+
"group": "terminal",
|
|
271
|
+
"description": "Log every page as it is analyzed."
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
"name": "--version",
|
|
275
|
+
"short": "-v",
|
|
276
|
+
"arg": null,
|
|
277
|
+
"default": null,
|
|
278
|
+
"requires": null,
|
|
279
|
+
"group": "terminal",
|
|
280
|
+
"description": "Show the version."
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
"exitCodes": [
|
|
284
|
+
{
|
|
285
|
+
"code": 0,
|
|
286
|
+
"label": "clean"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"code": 1,
|
|
290
|
+
"label": "findings found"
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
"code": 2,
|
|
294
|
+
"label": "fatal error"
|
|
295
|
+
}
|
|
296
|
+
],
|
|
297
|
+
"counts": {
|
|
298
|
+
"flags": 31,
|
|
299
|
+
"withShortForm": 5,
|
|
300
|
+
"takingValue": 16
|
|
301
|
+
}
|
|
302
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goflag/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Audits a site for broken links, missing translation pages, a robots.txt that contradicts your pages, and missing or misconfigured SEO metadata. JSON-first.",
|
|
6
6
|
"keywords": [
|
|
@@ -43,7 +43,8 @@
|
|
|
43
43
|
},
|
|
44
44
|
"files": [
|
|
45
45
|
"dist",
|
|
46
|
-
"rules.json"
|
|
46
|
+
"rules.json",
|
|
47
|
+
"flags.json"
|
|
47
48
|
],
|
|
48
49
|
"publishConfig": {
|
|
49
50
|
"access": "public"
|
|
@@ -61,6 +62,8 @@
|
|
|
61
62
|
"test:coverage": "vitest run --coverage",
|
|
62
63
|
"validate:sources": "tsx scripts/validate-sources.ts",
|
|
63
64
|
"generate:catalog": "tsx scripts/generate-catalog.ts",
|
|
65
|
+
"generate:flags": "tsx scripts/generate-flags.ts",
|
|
66
|
+
"generate:help-fixture": "tsx scripts/generate-help-fixture.ts",
|
|
64
67
|
"prepack": "node ../../scripts/stage-package-docs.mjs",
|
|
65
68
|
"prepublishOnly": "pnpm build",
|
|
66
69
|
"release": "commit-and-tag-version --path . --skip.tag"
|