afdocs 0.1.3 → 0.2.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/README.md +39 -21
- package/dist/checks/authentication/auth-alternative-access.d.ts +2 -0
- package/dist/checks/authentication/auth-alternative-access.d.ts.map +1 -0
- package/dist/checks/authentication/auth-alternative-access.js +17 -0
- package/dist/checks/authentication/auth-alternative-access.js.map +1 -0
- package/dist/checks/authentication/auth-gate-detection.d.ts +2 -0
- package/dist/checks/authentication/auth-gate-detection.d.ts.map +1 -0
- package/dist/checks/authentication/auth-gate-detection.js +17 -0
- package/dist/checks/authentication/auth-gate-detection.js.map +1 -0
- package/dist/checks/index.d.ts +2 -0
- package/dist/checks/index.d.ts.map +1 -1
- package/dist/checks/index.js +3 -0
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/llms-txt/llms-txt-exists.js +83 -6
- package/dist/checks/llms-txt/llms-txt-exists.js.map +1 -1
- package/dist/checks/llms-txt/llms-txt-links-markdown.js +46 -21
- package/dist/checks/llms-txt/llms-txt-links-markdown.js.map +1 -1
- package/dist/checks/llms-txt/llms-txt-links-resolve.js +10 -3
- package/dist/checks/llms-txt/llms-txt-links-resolve.js.map +1 -1
- package/dist/checks/markdown-availability/content-negotiation.js +101 -5
- package/dist/checks/markdown-availability/content-negotiation.js.map +1 -1
- package/dist/checks/markdown-availability/markdown-url-support.js +82 -5
- package/dist/checks/markdown-availability/markdown-url-support.js.map +1 -1
- package/dist/checks/page-size/content-start-position.js +161 -5
- package/dist/checks/page-size/content-start-position.js.map +1 -1
- package/dist/checks/page-size/page-size-html.js +127 -5
- package/dist/checks/page-size/page-size-html.js.map +1 -1
- package/dist/checks/page-size/page-size-markdown.js +183 -5
- package/dist/checks/page-size/page-size-markdown.js.map +1 -1
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +9 -1
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/formatters/text.d.ts +4 -1
- package/dist/cli/formatters/text.d.ts.map +1 -1
- package/dist/cli/formatters/text.js +94 -1
- package/dist/cli/formatters/text.js.map +1 -1
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -1
- package/dist/helpers/detect-markdown.d.ts +10 -0
- package/dist/helpers/detect-markdown.d.ts.map +1 -0
- package/dist/helpers/detect-markdown.js +29 -0
- package/dist/helpers/detect-markdown.js.map +1 -0
- package/dist/helpers/get-page-urls.d.ts +39 -0
- package/dist/helpers/get-page-urls.d.ts.map +1 -0
- package/dist/helpers/get-page-urls.js +230 -0
- package/dist/helpers/get-page-urls.js.map +1 -0
- package/dist/helpers/html-to-markdown.d.ts +7 -0
- package/dist/helpers/html-to-markdown.d.ts.map +1 -0
- package/dist/helpers/html-to-markdown.js +11 -0
- package/dist/helpers/html-to-markdown.js.map +1 -0
- package/dist/helpers/index.d.ts +5 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +4 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/to-md-urls.d.ts +7 -0
- package/dist/helpers/to-md-urls.d.ts.map +1 -0
- package/dist/helpers/to-md-urls.js +24 -0
- package/dist/helpers/to-md-urls.js.map +1 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +21 -14
- package/dist/runner.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -2
|
@@ -1,10 +1,188 @@
|
|
|
1
1
|
import { registerCheck } from '../registry.js';
|
|
2
|
-
|
|
2
|
+
import { looksLikeMarkdown } from '../../helpers/detect-markdown.js';
|
|
3
|
+
import { discoverAndSamplePages } from '../../helpers/get-page-urls.js';
|
|
4
|
+
import { toMdUrls } from '../../helpers/to-md-urls.js';
|
|
5
|
+
function sizeStatus(chars, pass, fail) {
|
|
6
|
+
if (chars <= pass)
|
|
7
|
+
return 'pass';
|
|
8
|
+
if (chars <= fail)
|
|
9
|
+
return 'warn';
|
|
10
|
+
return 'fail';
|
|
11
|
+
}
|
|
12
|
+
function worstStatus(statuses) {
|
|
13
|
+
if (statuses.includes('fail'))
|
|
14
|
+
return 'fail';
|
|
15
|
+
if (statuses.includes('warn'))
|
|
16
|
+
return 'warn';
|
|
17
|
+
return 'pass';
|
|
18
|
+
}
|
|
19
|
+
async function check(ctx) {
|
|
20
|
+
const id = 'page-size-markdown';
|
|
21
|
+
const category = 'page-size';
|
|
22
|
+
const { pass: passThreshold, fail: failThreshold } = ctx.options.thresholds;
|
|
23
|
+
// Check if dependency checks ran
|
|
24
|
+
const mdUrlResult = ctx.previousResults.get('markdown-url-support');
|
|
25
|
+
const cnResult = ctx.previousResults.get('content-negotiation');
|
|
26
|
+
const depRan = mdUrlResult || cnResult;
|
|
27
|
+
if (depRan) {
|
|
28
|
+
// At least one dependency check ran. Did either pass or warn?
|
|
29
|
+
const depPassed = (mdUrlResult && (mdUrlResult.status === 'pass' || mdUrlResult.status === 'warn')) ||
|
|
30
|
+
(cnResult && (cnResult.status === 'pass' || cnResult.status === 'warn'));
|
|
31
|
+
if (!depPassed) {
|
|
32
|
+
return {
|
|
33
|
+
id,
|
|
34
|
+
category,
|
|
35
|
+
status: 'skip',
|
|
36
|
+
message: 'Site does not serve markdown; skipping markdown size check',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Build a map from page URL → markdown URL using dependency results
|
|
40
|
+
const mdUrlMap = new Map();
|
|
41
|
+
const mdUrlPages = mdUrlResult?.details?.pageResults;
|
|
42
|
+
if (mdUrlPages) {
|
|
43
|
+
for (const p of mdUrlPages) {
|
|
44
|
+
if (p.supported)
|
|
45
|
+
mdUrlMap.set(p.url, p.mdUrl);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Use cached pages
|
|
49
|
+
const pageResults = [];
|
|
50
|
+
for (const [, cached] of ctx.pageCache) {
|
|
51
|
+
if (cached.markdown) {
|
|
52
|
+
const chars = cached.markdown.content.length;
|
|
53
|
+
const resolvedMdUrl = cached.markdown.source === 'md-url'
|
|
54
|
+
? (mdUrlMap.get(cached.url) ?? cached.url)
|
|
55
|
+
: cached.url;
|
|
56
|
+
pageResults.push({
|
|
57
|
+
url: cached.url,
|
|
58
|
+
mdUrl: resolvedMdUrl,
|
|
59
|
+
characters: chars,
|
|
60
|
+
status: sizeStatus(chars, passThreshold, failThreshold),
|
|
61
|
+
source: 'cache',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (pageResults.length === 0) {
|
|
66
|
+
return {
|
|
67
|
+
id,
|
|
68
|
+
category,
|
|
69
|
+
status: 'skip',
|
|
70
|
+
message: 'No cached markdown pages available to measure',
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return buildResult(id, category, pageResults, pageResults.length, false, passThreshold, failThreshold, []);
|
|
74
|
+
}
|
|
75
|
+
// Standalone mode: dependency checks never ran
|
|
76
|
+
const { urls: pageUrls, totalPages, sampled: wasSampled, warnings, } = await discoverAndSamplePages(ctx);
|
|
77
|
+
const pageResults = [];
|
|
78
|
+
const concurrency = ctx.options.maxConcurrency;
|
|
79
|
+
for (let i = 0; i < pageUrls.length; i += concurrency) {
|
|
80
|
+
const batch = pageUrls.slice(i, i + concurrency);
|
|
81
|
+
const batchResults = await Promise.all(batch.map(async (url) => {
|
|
82
|
+
// Try .md URL candidates
|
|
83
|
+
const candidates = toMdUrls(url);
|
|
84
|
+
for (const candidateUrl of candidates) {
|
|
85
|
+
try {
|
|
86
|
+
const response = await ctx.http.fetch(candidateUrl);
|
|
87
|
+
if (!response.ok)
|
|
88
|
+
continue;
|
|
89
|
+
const body = await response.text();
|
|
90
|
+
if (looksLikeMarkdown(body)) {
|
|
91
|
+
const chars = body.length;
|
|
92
|
+
return {
|
|
93
|
+
url,
|
|
94
|
+
mdUrl: candidateUrl,
|
|
95
|
+
characters: chars,
|
|
96
|
+
status: sizeStatus(chars, passThreshold, failThreshold),
|
|
97
|
+
source: 'fallback',
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Try next candidate
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Try content negotiation
|
|
106
|
+
try {
|
|
107
|
+
const response = await ctx.http.fetch(url, {
|
|
108
|
+
headers: { Accept: 'text/markdown' },
|
|
109
|
+
});
|
|
110
|
+
if (response.ok) {
|
|
111
|
+
const body = await response.text();
|
|
112
|
+
if (looksLikeMarkdown(body)) {
|
|
113
|
+
const chars = body.length;
|
|
114
|
+
return {
|
|
115
|
+
url,
|
|
116
|
+
mdUrl: url,
|
|
117
|
+
characters: chars,
|
|
118
|
+
status: sizeStatus(chars, passThreshold, failThreshold),
|
|
119
|
+
source: 'fallback',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// No markdown available for this page
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}));
|
|
129
|
+
for (const r of batchResults) {
|
|
130
|
+
if (r)
|
|
131
|
+
pageResults.push(r);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (pageResults.length === 0) {
|
|
135
|
+
return {
|
|
136
|
+
id,
|
|
137
|
+
category,
|
|
138
|
+
status: 'skip',
|
|
139
|
+
message: 'No markdown content found; skipping size check',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return buildResult(id, category, pageResults, totalPages, wasSampled, passThreshold, failThreshold, warnings);
|
|
143
|
+
}
|
|
144
|
+
function buildResult(id, category, pageResults, totalPages, sampled, passThreshold, failThreshold, discoveryWarnings) {
|
|
145
|
+
const sizes = pageResults.map((r) => r.characters).sort((a, b) => a - b);
|
|
146
|
+
const median = sizes[Math.floor(sizes.length / 2)];
|
|
147
|
+
const max = sizes[sizes.length - 1];
|
|
148
|
+
const passBucket = pageResults.filter((r) => r.status === 'pass').length;
|
|
149
|
+
const warnBucket = pageResults.filter((r) => r.status === 'warn').length;
|
|
150
|
+
const failBucket = pageResults.filter((r) => r.status === 'fail').length;
|
|
151
|
+
const overallStatus = worstStatus(pageResults.map((r) => r.status));
|
|
152
|
+
const pageLabel = sampled ? 'sampled pages' : 'pages';
|
|
153
|
+
const formatSize = (chars) => {
|
|
154
|
+
if (chars >= 1000)
|
|
155
|
+
return `${Math.round(chars / 1000)}K`;
|
|
156
|
+
return String(chars);
|
|
157
|
+
};
|
|
158
|
+
let message;
|
|
159
|
+
if (overallStatus === 'pass') {
|
|
160
|
+
message = `All ${pageResults.length} ${pageLabel} under ${formatSize(passThreshold)} chars (median ${formatSize(median)}, max ${formatSize(max)})`;
|
|
161
|
+
}
|
|
162
|
+
else if (overallStatus === 'warn') {
|
|
163
|
+
message = `${warnBucket} of ${pageResults.length} ${pageLabel} between ${formatSize(passThreshold)}–${formatSize(failThreshold)} chars (max ${formatSize(max)})`;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
message = `${failBucket} of ${pageResults.length} ${pageLabel} exceed ${formatSize(failThreshold)} chars (max ${formatSize(max)})`;
|
|
167
|
+
}
|
|
3
168
|
return {
|
|
4
|
-
id
|
|
5
|
-
category
|
|
6
|
-
status:
|
|
7
|
-
message
|
|
169
|
+
id,
|
|
170
|
+
category,
|
|
171
|
+
status: overallStatus,
|
|
172
|
+
message,
|
|
173
|
+
details: {
|
|
174
|
+
totalPages,
|
|
175
|
+
testedPages: pageResults.length,
|
|
176
|
+
sampled,
|
|
177
|
+
median,
|
|
178
|
+
max,
|
|
179
|
+
passBucket,
|
|
180
|
+
warnBucket,
|
|
181
|
+
failBucket,
|
|
182
|
+
thresholds: { pass: passThreshold, fail: failThreshold },
|
|
183
|
+
pageResults,
|
|
184
|
+
discoveryWarnings,
|
|
185
|
+
},
|
|
8
186
|
};
|
|
9
187
|
}
|
|
10
188
|
registerCheck({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-size-markdown.js","sourceRoot":"","sources":["../../../src/checks/page-size/page-size-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"page-size-markdown.js","sourceRoot":"","sources":["../../../src/checks/page-size/page-size-markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,uBAAuB,CAAC;AAE/B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,uBAAuB,CAAC;AAE/B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C3D"}
|
|
@@ -14,8 +14,14 @@ export function registerCheckCommand(program) {
|
|
|
14
14
|
.option('--max-links <n>', 'Maximum links to test', '50')
|
|
15
15
|
.option('--pass-threshold <n>', 'Pass threshold in characters', '50000')
|
|
16
16
|
.option('--fail-threshold <n>', 'Fail threshold in characters', '100000')
|
|
17
|
+
.option('-v, --verbose', 'Show per-page details for checks with issues')
|
|
17
18
|
.action(async (url, opts) => {
|
|
18
19
|
const checkIds = opts.checks ? opts.checks.split(',').map((s) => s.trim()) : undefined;
|
|
20
|
+
const isText = opts.format !== 'json';
|
|
21
|
+
if (isText) {
|
|
22
|
+
const domain = new URL(url).hostname;
|
|
23
|
+
process.stderr.write(`Running checks on ${domain}...\n`);
|
|
24
|
+
}
|
|
19
25
|
const report = await runChecks(url, {
|
|
20
26
|
checkIds,
|
|
21
27
|
maxConcurrency: parseInt(opts.maxConcurrency, 10),
|
|
@@ -26,7 +32,9 @@ export function registerCheckCommand(program) {
|
|
|
26
32
|
fail: parseInt(opts.failThreshold, 10),
|
|
27
33
|
},
|
|
28
34
|
});
|
|
29
|
-
const output = opts.format === 'json'
|
|
35
|
+
const output = opts.format === 'json'
|
|
36
|
+
? formatJson(report)
|
|
37
|
+
: formatText(report, { verbose: !!opts.verbose });
|
|
30
38
|
process.stdout.write(output + '\n');
|
|
31
39
|
// Exit 1 if any check failed
|
|
32
40
|
const hasFailure = report.results.some((r) => r.status === 'fail');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,mCAAmC;AACnC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SACnE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,OAAO,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAA4B,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,mCAAmC;AACnC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SACnE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,OAAO,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACxE,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAA4B,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAEtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAClC,QAAQ;YACR,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC7C,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBACtC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,MAAM;YACpB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;YACpB,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAEpC,6BAA6B;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import type { ReportResult } from '../../types.js';
|
|
2
|
-
export
|
|
2
|
+
export interface FormatTextOptions {
|
|
3
|
+
verbose?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function formatText(report: ReportResult, options?: FormatTextOptions): string;
|
|
3
6
|
//# sourceMappingURL=text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAgIhE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAyCpF"}
|
|
@@ -13,12 +13,102 @@ const STATUS_COLORS = {
|
|
|
13
13
|
skip: chalk.gray,
|
|
14
14
|
error: chalk.red,
|
|
15
15
|
};
|
|
16
|
+
function formatSize(chars) {
|
|
17
|
+
if (chars >= 1000)
|
|
18
|
+
return `${Math.round(chars / 1000)}K chars`;
|
|
19
|
+
return `${chars} chars`;
|
|
20
|
+
}
|
|
21
|
+
const DETAIL_FORMATTERS = {
|
|
22
|
+
'page-size-html': (details) => {
|
|
23
|
+
const pages = details.pageResults;
|
|
24
|
+
if (!pages)
|
|
25
|
+
return [];
|
|
26
|
+
return pages
|
|
27
|
+
.filter((p) => p.status !== 'pass')
|
|
28
|
+
.map((p) => {
|
|
29
|
+
const size = formatSize(p.convertedCharacters);
|
|
30
|
+
return formatDetailLine(p.status, p.url, size);
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
'page-size-markdown': (details) => {
|
|
34
|
+
const pages = details.pageResults;
|
|
35
|
+
if (!pages)
|
|
36
|
+
return [];
|
|
37
|
+
return pages
|
|
38
|
+
.filter((p) => p.status !== 'pass')
|
|
39
|
+
.map((p) => {
|
|
40
|
+
const size = formatSize(p.characters);
|
|
41
|
+
const displayUrl = p.mdUrl ?? p.url;
|
|
42
|
+
return formatDetailLine(p.status, displayUrl, size);
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
'content-start-position': (details) => {
|
|
46
|
+
const pages = details.pageResults;
|
|
47
|
+
if (!pages)
|
|
48
|
+
return [];
|
|
49
|
+
return pages
|
|
50
|
+
.filter((p) => p.status !== 'pass')
|
|
51
|
+
.map((p) => {
|
|
52
|
+
const pct = `${p.contentStartPercent}%`;
|
|
53
|
+
return formatDetailLine(p.status, p.url, pct);
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
'markdown-url-support': (details) => {
|
|
57
|
+
const pages = details.pageResults;
|
|
58
|
+
if (!pages)
|
|
59
|
+
return [];
|
|
60
|
+
return pages
|
|
61
|
+
.filter((p) => p.status !== 'pass')
|
|
62
|
+
.map((p) => formatDetailLine(p.status, p.url, 'no .md URL found'));
|
|
63
|
+
},
|
|
64
|
+
'content-negotiation': (details) => {
|
|
65
|
+
const pages = details.pageResults;
|
|
66
|
+
if (!pages)
|
|
67
|
+
return [];
|
|
68
|
+
return pages
|
|
69
|
+
.filter((p) => p.status !== 'pass')
|
|
70
|
+
.map((p) => {
|
|
71
|
+
const classification = p.classification ?? '';
|
|
72
|
+
return formatDetailLine(p.status, p.url, classification);
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
'llms-txt-links-resolve': (details) => {
|
|
76
|
+
const broken = details.broken;
|
|
77
|
+
if (!broken)
|
|
78
|
+
return [];
|
|
79
|
+
return broken.map((b) => {
|
|
80
|
+
const info = b.error ?? `HTTP ${b.status}`;
|
|
81
|
+
return formatDetailLine('fail', b.url, info);
|
|
82
|
+
});
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
function formatDetailLine(status, url, metric) {
|
|
86
|
+
const icon = STATUS_ICONS[status] ?? STATUS_ICONS.warn;
|
|
87
|
+
return ` ${icon} ${url} ${chalk.dim(metric)}`;
|
|
88
|
+
}
|
|
16
89
|
function formatResult(result) {
|
|
17
90
|
const icon = STATUS_ICONS[result.status] ?? '?';
|
|
18
91
|
const color = STATUS_COLORS[result.status] ?? ((s) => s);
|
|
19
92
|
return ` ${icon} ${color(result.id)}: ${result.message}`;
|
|
20
93
|
}
|
|
21
|
-
|
|
94
|
+
function formatVerboseDetails(result) {
|
|
95
|
+
if (!result.details)
|
|
96
|
+
return [];
|
|
97
|
+
const lines = [];
|
|
98
|
+
const formatter = DETAIL_FORMATTERS[result.id];
|
|
99
|
+
if (formatter) {
|
|
100
|
+
lines.push(...formatter(result.details));
|
|
101
|
+
}
|
|
102
|
+
const warnings = result.details.discoveryWarnings;
|
|
103
|
+
if (warnings && warnings.length > 0) {
|
|
104
|
+
for (const w of warnings) {
|
|
105
|
+
lines.push(` ${chalk.yellow('⚠')} ${chalk.dim(w)}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return lines;
|
|
109
|
+
}
|
|
110
|
+
export function formatText(report, options) {
|
|
111
|
+
const verbose = options?.verbose ?? false;
|
|
22
112
|
const lines = [];
|
|
23
113
|
lines.push('');
|
|
24
114
|
lines.push(chalk.bold(`Agent-Friendly Docs Check: ${report.url}`));
|
|
@@ -35,6 +125,9 @@ export function formatText(report) {
|
|
|
35
125
|
lines.push(chalk.bold.underline(category));
|
|
36
126
|
for (const result of results) {
|
|
37
127
|
lines.push(formatResult(result));
|
|
128
|
+
if (verbose) {
|
|
129
|
+
lines.push(...formatVerboseDetails(result));
|
|
130
|
+
}
|
|
38
131
|
}
|
|
39
132
|
lines.push('');
|
|
40
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,YAAY,GAA2B;IAC3C,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACvB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACpB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;CACtB,CAAC;AAEF,MAAM,aAAa,GAA0C;IAC3D,IAAI,EAAE,KAAK,CAAC,KAAK;IACjB,IAAI,EAAE,KAAK,CAAC,MAAM;IAClB,IAAI,EAAE,KAAK,CAAC,GAAG;IACf,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,KAAK,EAAE,KAAK,CAAC,GAAG;CACjB,CAAC;AAEF,SAAS,YAAY,CAAC,MAAmB;IACvC,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IAChD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAoB;
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -29,8 +29,14 @@ export declare const CATEGORIES: readonly [{
|
|
|
29
29
|
readonly id: "observability";
|
|
30
30
|
readonly name: "Observability and Content Health";
|
|
31
31
|
readonly order: 7;
|
|
32
|
+
}, {
|
|
33
|
+
readonly id: "authentication";
|
|
34
|
+
readonly name: "Authentication and Access";
|
|
35
|
+
readonly order: 8;
|
|
32
36
|
}];
|
|
33
37
|
export declare const CATEGORY_ORDER: Record<string, number>;
|
|
34
38
|
/** Link resolution threshold: warn if > 90% resolve, fail if <= 90%. */
|
|
35
39
|
export declare const LINK_RESOLVE_THRESHOLD = 0.9;
|
|
40
|
+
/** Maximum number of URLs to collect from sitemaps before stopping. */
|
|
41
|
+
export declare const MAX_SITEMAP_URLS = 500;
|
|
36
42
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,cAGhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAM7B,CAAC;AAEF,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,cAGhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAM7B,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASb,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEjD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,MAAM,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -17,8 +17,11 @@ export const CATEGORIES = [
|
|
|
17
17
|
{ id: 'url-stability', name: 'URL Stability and Redirects', order: 5 },
|
|
18
18
|
{ id: 'agent-discoverability', name: 'Agent Discoverability Directives', order: 6 },
|
|
19
19
|
{ id: 'observability', name: 'Observability and Content Health', order: 7 },
|
|
20
|
+
{ id: 'authentication', name: 'Authentication and Access', order: 8 },
|
|
20
21
|
];
|
|
21
22
|
export const CATEGORY_ORDER = Object.fromEntries(CATEGORIES.map((c) => [c.id, c.order]));
|
|
22
23
|
/** Link resolution threshold: warn if > 90% resolve, fail if <= 90%. */
|
|
23
24
|
export const LINK_RESOLVE_THRESHOLD = 0.9;
|
|
25
|
+
/** Maximum number of URLs to collect from sitemaps before stopping. */
|
|
26
|
+
export const MAX_SITEMAP_URLS = 500;
|
|
24
27
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9C,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE;IACpE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;IAChE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE;IACtE,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9C,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE;IACpE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;IAChE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE;IACtE,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE;CAC7D,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAA2B,MAAM,CAAC,WAAW,CACtE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CACvC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true if the body looks like HTML (contains DOCTYPE, <html>, <head>, or <body> tags).
|
|
3
|
+
*/
|
|
4
|
+
export declare function looksLikeHtml(body: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Returns true if the body looks like markdown content (has headings, links, or code fences)
|
|
7
|
+
* and does NOT look like HTML.
|
|
8
|
+
*/
|
|
9
|
+
export declare function looksLikeMarkdown(body: string): boolean;
|
|
10
|
+
//# sourceMappingURL=detect-markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-markdown.d.ts","sourceRoot":"","sources":["../../src/helpers/detect-markdown.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUvD"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const HTML_PATTERNS = [/<!doctype\s/i, /<html[\s>]/i, /<head[\s>]/i, /<body[\s>]/i];
|
|
2
|
+
const MD_HEADING = /^#{1,6}\s+\S/m;
|
|
3
|
+
const MD_LINK = /\[[^\]]+\]\([^)]+\)/;
|
|
4
|
+
const MD_CODE_FENCE = /^```/m;
|
|
5
|
+
/**
|
|
6
|
+
* Returns true if the body looks like HTML (contains DOCTYPE, <html>, <head>, or <body> tags).
|
|
7
|
+
*/
|
|
8
|
+
export function looksLikeHtml(body) {
|
|
9
|
+
const sample = body.slice(0, 2000);
|
|
10
|
+
return HTML_PATTERNS.some((p) => p.test(sample));
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Returns true if the body looks like markdown content (has headings, links, or code fences)
|
|
14
|
+
* and does NOT look like HTML.
|
|
15
|
+
*/
|
|
16
|
+
export function looksLikeMarkdown(body) {
|
|
17
|
+
if (looksLikeHtml(body))
|
|
18
|
+
return false;
|
|
19
|
+
const sample = body.slice(0, 5000);
|
|
20
|
+
let signals = 0;
|
|
21
|
+
if (MD_HEADING.test(sample))
|
|
22
|
+
signals++;
|
|
23
|
+
if (MD_LINK.test(sample))
|
|
24
|
+
signals++;
|
|
25
|
+
if (MD_CODE_FENCE.test(sample))
|
|
26
|
+
signals++;
|
|
27
|
+
return signals >= 1;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=detect-markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-markdown.js","sourceRoot":"","sources":["../../src/helpers/detect-markdown.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAEpF,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,OAAO,GAAG,qBAAqB,CAAC;AACtC,MAAM,aAAa,GAAG,OAAO,CAAC;AAE9B;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,OAAO,OAAO,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CheckContext } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extract `<loc>` URLs from a sitemap XML string.
|
|
4
|
+
* Also returns any `<sitemap><loc>` entries from sitemap index files.
|
|
5
|
+
*/
|
|
6
|
+
export declare function parseSitemapUrls(xml: string): {
|
|
7
|
+
urls: string[];
|
|
8
|
+
sitemapIndexUrls: string[];
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parse `Sitemap:` directives from a robots.txt body.
|
|
12
|
+
* Returns an array of sitemap URLs found.
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseSitemapDirectives(robotsTxt: string): string[];
|
|
15
|
+
export interface PageUrlResult {
|
|
16
|
+
urls: string[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Discover page URLs from llms.txt links, sitemap, or fall back to baseUrl.
|
|
21
|
+
*
|
|
22
|
+
* Priority:
|
|
23
|
+
* 1. llms.txt links (from previous check results)
|
|
24
|
+
* 2. Sitemap URLs (robots.txt Sitemap directives, then /sitemap.xml fallback)
|
|
25
|
+
* 3. baseUrl fallback
|
|
26
|
+
*/
|
|
27
|
+
export declare function getPageUrls(ctx: CheckContext): Promise<PageUrlResult>;
|
|
28
|
+
export interface SampledPages {
|
|
29
|
+
urls: string[];
|
|
30
|
+
totalPages: number;
|
|
31
|
+
sampled: boolean;
|
|
32
|
+
warnings: string[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Discover page URLs and sample down to maxLinksToTest if needed.
|
|
36
|
+
* Consolidates the discover+shuffle+sample pattern used by multiple checks.
|
|
37
|
+
*/
|
|
38
|
+
export declare function discoverAndSamplePages(ctx: CheckContext): Promise<SampledPages>;
|
|
39
|
+
//# sourceMappingURL=get-page-urls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-page-urls.d.ts","sourceRoot":"","sources":["../../src/helpers/get-page-urls.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CA2B5F;AAyDD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASlE;AAsBD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAmB3E;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAerF"}
|