@fulldotdev/scan 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 (55) hide show
  1. package/README.md +79 -0
  2. package/bin/fullscan.js +2 -0
  3. package/dist/cli.d.ts +1 -0
  4. package/dist/cli.js +239 -0
  5. package/dist/engine/analysis.d.ts +2 -0
  6. package/dist/engine/analysis.js +747 -0
  7. package/dist/engine/browser-inspection.d.ts +143 -0
  8. package/dist/engine/browser-inspection.js +567 -0
  9. package/dist/engine/browser.d.ts +22 -0
  10. package/dist/engine/browser.js +629 -0
  11. package/dist/engine/collect.d.ts +6 -0
  12. package/dist/engine/collect.js +359 -0
  13. package/dist/engine/crawl-scope.d.ts +22 -0
  14. package/dist/engine/crawl-scope.js +145 -0
  15. package/dist/engine/env.d.ts +1 -0
  16. package/dist/engine/env.js +3 -0
  17. package/dist/engine/html.d.ts +307 -0
  18. package/dist/engine/html.js +645 -0
  19. package/dist/engine/language.d.ts +13 -0
  20. package/dist/engine/language.js +75 -0
  21. package/dist/engine/lighthouse-evidence.d.ts +36 -0
  22. package/dist/engine/lighthouse-evidence.js +69 -0
  23. package/dist/engine/lighthouse.d.ts +4 -0
  24. package/dist/engine/lighthouse.js +284 -0
  25. package/dist/engine/log.d.ts +1 -0
  26. package/dist/engine/log.js +4 -0
  27. package/dist/engine/network.d.ts +53 -0
  28. package/dist/engine/network.js +296 -0
  29. package/dist/engine/proxy.d.ts +8 -0
  30. package/dist/engine/proxy.js +95 -0
  31. package/dist/engine/run.d.ts +38 -0
  32. package/dist/engine/run.js +202 -0
  33. package/dist/engine/select.d.ts +6 -0
  34. package/dist/engine/select.js +38 -0
  35. package/dist/engine/site.d.ts +186 -0
  36. package/dist/engine/site.js +758 -0
  37. package/dist/engine/srcset.d.ts +1 -0
  38. package/dist/engine/srcset.js +31 -0
  39. package/dist/engine/state.d.ts +30 -0
  40. package/dist/engine/state.js +198 -0
  41. package/dist/engine/structured-data.d.ts +83 -0
  42. package/dist/engine/structured-data.js +331 -0
  43. package/dist/engine/types.d.ts +128 -0
  44. package/dist/engine/types.js +63 -0
  45. package/dist/engine.d.ts +1 -0
  46. package/dist/engine.js +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.js +7 -0
  49. package/dist/report/build.d.ts +377 -0
  50. package/dist/report/build.js +2263 -0
  51. package/dist/report/evidence.d.ts +58 -0
  52. package/dist/report/evidence.js +192 -0
  53. package/dist/report/rules.d.ts +41 -0
  54. package/dist/report/rules.js +301 -0
  55. package/package.json +52 -0
@@ -0,0 +1,307 @@
1
+ import { type HttpResult } from "./types.js";
2
+ export declare function resolveLink(value: string | undefined, base: string): string | null;
3
+ export declare function markdownLinks(body: string, base: string): {
4
+ text: string;
5
+ url: string | null;
6
+ }[];
7
+ export declare const loadMoreText: RegExp;
8
+ export declare function parseAmount(raw: string): number | null;
9
+ export declare function visiblePrices(text: string): {
10
+ raw: string;
11
+ currency: string;
12
+ amount: number | null;
13
+ }[];
14
+ export declare function extractPage(response: HttpResult, representation?: "original-response-html" | "rendered-dom"): {
15
+ http: {
16
+ url: string;
17
+ finalUrl: string;
18
+ status: number | null;
19
+ headers: Record<string, string>;
20
+ redirects: {
21
+ url: string;
22
+ status: number;
23
+ location: string;
24
+ }[];
25
+ bytes: number;
26
+ durationMs: number;
27
+ fetchedAt: string;
28
+ outcome: "ok" | "http-error" | "inconclusive" | "blocked" | "error";
29
+ error?: string;
30
+ truncated?: boolean;
31
+ attempts: number;
32
+ };
33
+ base: string;
34
+ title: string;
35
+ titles: string[];
36
+ descriptions: string[];
37
+ language: string | null;
38
+ meta: {
39
+ name: string | undefined;
40
+ property: string | undefined;
41
+ httpEquiv: string | undefined;
42
+ content: string;
43
+ }[];
44
+ declarations: {
45
+ rel: string;
46
+ href: string | null;
47
+ rawHref: string | undefined;
48
+ type: string | undefined;
49
+ hreflang: string | undefined;
50
+ sizes: string | undefined;
51
+ fetchpriority: string | undefined;
52
+ }[];
53
+ links: {
54
+ href: string | null;
55
+ rawHref: string;
56
+ text: string;
57
+ name: string;
58
+ rel: string;
59
+ target: string;
60
+ hreflang: string | undefined;
61
+ fragment: string | null;
62
+ location: string;
63
+ pagination: true | undefined;
64
+ }[];
65
+ images: {
66
+ src: string | null;
67
+ alt: string | null;
68
+ width: string | undefined;
69
+ height: string | undefined;
70
+ loading: string | undefined;
71
+ fetchpriority: string | undefined;
72
+ srcset: string | undefined;
73
+ sources: {
74
+ srcset: string | undefined;
75
+ sizes: string | undefined;
76
+ type: string | undefined;
77
+ media: string | undefined;
78
+ }[];
79
+ sizes: string | undefined;
80
+ }[];
81
+ scripts: {
82
+ src: string | null;
83
+ type: string | undefined;
84
+ async: boolean;
85
+ defer: boolean;
86
+ }[];
87
+ styles: {
88
+ rel: string;
89
+ href: string | null;
90
+ rawHref: string | undefined;
91
+ type: string | undefined;
92
+ hreflang: string | undefined;
93
+ sizes: string | undefined;
94
+ fetchpriority: string | undefined;
95
+ }[];
96
+ forms: {
97
+ index: number;
98
+ id: string | undefined;
99
+ action: string | null;
100
+ rawAction: string | null;
101
+ method: string;
102
+ noValidate: boolean;
103
+ enctype: string;
104
+ controls: {
105
+ tag: string;
106
+ id: string | undefined;
107
+ name: string | undefined;
108
+ type: string;
109
+ labels: string[];
110
+ ariaLabel: string | undefined;
111
+ referencedLabels: string[];
112
+ hasAccessibleName: boolean;
113
+ required: boolean;
114
+ disabled: boolean;
115
+ autocomplete: string | undefined;
116
+ pattern: string | undefined;
117
+ min: string | undefined;
118
+ max: string | undefined;
119
+ minLength: string | undefined;
120
+ maxLength: string | undefined;
121
+ actionOverride: string | null;
122
+ methodOverride: string | undefined;
123
+ }[];
124
+ insecureDestination: boolean;
125
+ verification: string;
126
+ }[];
127
+ structuredData: ({
128
+ index: number;
129
+ raw: string;
130
+ data: any;
131
+ parseValid: boolean;
132
+ structuralErrors: string[];
133
+ validationScope: string;
134
+ error?: undefined;
135
+ } | {
136
+ data?: undefined;
137
+ structuralErrors?: undefined;
138
+ validationScope?: undefined;
139
+ index: number;
140
+ raw: string;
141
+ parseValid: boolean;
142
+ error: string;
143
+ })[];
144
+ microdata: {
145
+ tag: string;
146
+ type: string | undefined;
147
+ property: string | undefined;
148
+ id: string | undefined;
149
+ content: string;
150
+ }[];
151
+ rdfa: {
152
+ tag: string;
153
+ type: string | undefined;
154
+ property: string | undefined;
155
+ resource: string | undefined;
156
+ content: string;
157
+ }[];
158
+ headings: {
159
+ level: number;
160
+ text: string;
161
+ }[];
162
+ ids: (string | undefined)[];
163
+ canonicals: {
164
+ rel: string;
165
+ href: string | null;
166
+ rawHref: string | undefined;
167
+ type: string | undefined;
168
+ hreflang: string | undefined;
169
+ sizes: string | undefined;
170
+ fetchpriority: string | undefined;
171
+ }[];
172
+ hreflangs: {
173
+ rel: string;
174
+ href: string | null;
175
+ rawHref: string | undefined;
176
+ type: string | undefined;
177
+ hreflang: string | undefined;
178
+ sizes: string | undefined;
179
+ fetchpriority: string | undefined;
180
+ }[];
181
+ social: {
182
+ name: string | undefined;
183
+ property: string | undefined;
184
+ httpEquiv: string | undefined;
185
+ content: string;
186
+ }[];
187
+ bodyText: string;
188
+ mainText: string;
189
+ wordCount: number;
190
+ readability: {
191
+ paragraphs: number;
192
+ longestParagraphWords: number;
193
+ paragraphsOver150: number;
194
+ sentences: number;
195
+ longSentenceShare: number;
196
+ };
197
+ textHash: string;
198
+ htmlHash: string;
199
+ robots: {
200
+ name: string | undefined;
201
+ property: string | undefined;
202
+ httpEquiv: string | undefined;
203
+ content: string;
204
+ }[];
205
+ xRobotsTag: string;
206
+ technologies: {
207
+ name: string;
208
+ category: string;
209
+ source: string;
210
+ evidence: string;
211
+ confidence: string;
212
+ version: null;
213
+ }[];
214
+ pagination: {
215
+ next: string | null;
216
+ prev: string | null;
217
+ numbered: string[];
218
+ source: string;
219
+ } | null;
220
+ loadMore: {
221
+ tag: string;
222
+ text: string;
223
+ href: string | null;
224
+ }[];
225
+ prices: {
226
+ raw: string;
227
+ currency: string;
228
+ amount: number | null;
229
+ }[];
230
+ availability: {
231
+ inStock: boolean;
232
+ outOfStock: boolean;
233
+ inStockText: string | null;
234
+ outOfStockText: string | null;
235
+ };
236
+ contacts: {
237
+ phones: string[];
238
+ emails: string[];
239
+ };
240
+ truncated: boolean;
241
+ representation: "original-response-html" | "rendered-dom";
242
+ };
243
+ export type Page = ReturnType<typeof extractPage>;
244
+ export declare function compareRendered(original: Page, rendered: Page): {
245
+ title: {
246
+ original: string;
247
+ rendered: string;
248
+ same: boolean;
249
+ };
250
+ canonical: {
251
+ original: (string | null)[];
252
+ rendered: (string | null)[];
253
+ same: boolean;
254
+ };
255
+ robots: {
256
+ original: string;
257
+ rendered: string;
258
+ same: boolean;
259
+ };
260
+ language: {
261
+ original: string | null;
262
+ rendered: string | null;
263
+ same: boolean;
264
+ };
265
+ headings: {
266
+ original: number;
267
+ rendered: number;
268
+ added: string[];
269
+ removed: string[];
270
+ };
271
+ links: {
272
+ original: number;
273
+ rendered: number;
274
+ added: string[];
275
+ removed: string[];
276
+ };
277
+ structuredData: {
278
+ original: string[];
279
+ rendered: string[];
280
+ addedTypes: string[];
281
+ removedTypes: string[];
282
+ };
283
+ text: {
284
+ originalWords: number;
285
+ renderedWords: number;
286
+ same: boolean;
287
+ ratio: number | null;
288
+ };
289
+ scope: string;
290
+ };
291
+ export declare function structuredTypes(data: any, depth?: number): string[];
292
+ export declare function detectTechnologies(html: string, headers: Record<string, string>): {
293
+ name: string;
294
+ category: string;
295
+ source: string;
296
+ evidence: string;
297
+ confidence: string;
298
+ version: null;
299
+ }[];
300
+ export declare function isHtml(response: HttpResult): boolean;
301
+ export declare function markdownEvidence(body: string, contentType: string | undefined): {
302
+ usable: boolean;
303
+ looksHtml: boolean;
304
+ looksMarkdown: boolean;
305
+ };
306
+ export declare function textTokens(s: string): Set<string>;
307
+ export declare function textSimilarity(a: string, b: string): number;