@drowlink/aeo-linter-core 0.1.1 → 0.1.3
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/dist/__tests__/audit-contract.test.js +12 -13
- package/dist/__tests__/audit-contract.test.js.map +1 -1
- package/dist/__tests__/gatherers.test.js +11 -12
- package/dist/__tests__/gatherers.test.js.map +1 -1
- package/dist/__tests__/runner.test.js +12 -12
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/audits/ai-accessibility/ai-bot-sitemap.d.ts +1 -1
- package/dist/audits/ai-accessibility/ai-bot-sitemap.js +6 -6
- package/dist/audits/ai-accessibility/ai-bot-sitemap.js.map +1 -1
- package/dist/audits/ai-accessibility/ai-robots-txt.d.ts +1 -1
- package/dist/audits/ai-accessibility/ai-robots-txt.d.ts.map +1 -1
- package/dist/audits/ai-accessibility/ai-robots-txt.js +11 -12
- package/dist/audits/ai-accessibility/ai-robots-txt.js.map +1 -1
- package/dist/audits/ai-accessibility/ai-x-robots-tag.d.ts +1 -1
- package/dist/audits/ai-accessibility/ai-x-robots-tag.js +8 -8
- package/dist/audits/ai-accessibility/ai-x-robots-tag.js.map +1 -1
- package/dist/audits/audit.d.ts +13 -13
- package/dist/audits/audit.js +14 -14
- package/dist/audits/audit.js.map +1 -1
- package/dist/audits/content-chunking/chunk-token-density.d.ts +1 -1
- package/dist/audits/content-chunking/chunk-token-density.js +12 -12
- package/dist/audits/content-chunking/chunk-token-density.js.map +1 -1
- package/dist/audits/content-chunking/heading-hierarchy.d.ts +1 -1
- package/dist/audits/content-chunking/heading-hierarchy.js +13 -13
- package/dist/audits/content-chunking/heading-hierarchy.js.map +1 -1
- package/dist/audits/content-chunking/semantic-containers.d.ts +1 -1
- package/dist/audits/content-chunking/semantic-containers.js +7 -7
- package/dist/audits/content-chunking/semantic-containers.js.map +1 -1
- package/dist/audits/direct-answer-density/concise-answer-wordcount.d.ts +1 -1
- package/dist/audits/direct-answer-density/concise-answer-wordcount.js +11 -11
- package/dist/audits/direct-answer-density/concise-answer-wordcount.js.map +1 -1
- package/dist/audits/direct-answer-density/direct-definition-answering.d.ts +1 -1
- package/dist/audits/direct-answer-density/direct-definition-answering.js +12 -12
- package/dist/audits/direct-answer-density/direct-definition-answering.js.map +1 -1
- package/dist/audits/direct-answer-density/question-heading-alignment.d.ts +1 -1
- package/dist/audits/direct-answer-density/question-heading-alignment.js +7 -7
- package/dist/audits/direct-answer-density/question-heading-alignment.js.map +1 -1
- package/dist/audits/index.d.ts +1 -1
- package/dist/audits/index.js +1 -1
- package/dist/audits/structured-data/entity-sameas-links.d.ts +1 -1
- package/dist/audits/structured-data/entity-sameas-links.js +11 -11
- package/dist/audits/structured-data/entity-sameas-links.js.map +1 -1
- package/dist/audits/structured-data/jsonld-syntax-validity.d.ts +1 -1
- package/dist/audits/structured-data/jsonld-syntax-validity.js +12 -12
- package/dist/audits/structured-data/jsonld-syntax-validity.js.map +1 -1
- package/dist/audits/structured-data/rag-schema-presence.d.ts +1 -1
- package/dist/audits/structured-data/rag-schema-presence.js +13 -13
- package/dist/audits/structured-data/rag-schema-presence.js.map +1 -1
- package/dist/config/default-config.d.ts +2 -2
- package/dist/config/default-config.js +6 -6
- package/dist/config/default-config.js.map +1 -1
- package/dist/gather/driver/cheerio-driver.d.ts +1 -1
- package/dist/gather/driver/cheerio-driver.js +4 -4
- package/dist/gather/driver/cheerio-driver.js.map +1 -1
- package/dist/gather/gatherers/content-chunks-gatherer.d.ts +1 -1
- package/dist/gather/gatherers/content-chunks-gatherer.d.ts.map +1 -1
- package/dist/gather/gatherers/content-chunks-gatherer.js +4 -6
- package/dist/gather/gatherers/content-chunks-gatherer.js.map +1 -1
- package/dist/gather/gatherers/direct-answers-gatherer.d.ts +1 -1
- package/dist/gather/gatherers/direct-answers-gatherer.d.ts.map +1 -1
- package/dist/gather/gatherers/direct-answers-gatherer.js +4 -5
- package/dist/gather/gatherers/direct-answers-gatherer.js.map +1 -1
- package/dist/gather/gatherers/headings-hierarchy-gatherer.d.ts +1 -1
- package/dist/gather/gatherers/headings-hierarchy-gatherer.js +2 -2
- package/dist/gather/gatherers/headings-hierarchy-gatherer.js.map +1 -1
- package/dist/gather/gatherers/robots-txt-gatherer.d.ts +1 -1
- package/dist/gather/gatherers/robots-txt-gatherer.d.ts.map +1 -1
- package/dist/gather/gatherers/robots-txt-gatherer.js +2 -4
- package/dist/gather/gatherers/robots-txt-gatherer.js.map +1 -1
- package/dist/report/html-reporter.d.ts +2 -2
- package/dist/report/html-reporter.js +9 -9
- package/dist/report/html-reporter.js.map +1 -1
- package/dist/report/terminal-reporter.d.ts +1 -1
- package/dist/report/terminal-reporter.js +3 -3
- package/dist/report/terminal-reporter.js.map +1 -1
- package/dist/runner/aggregator.d.ts +3 -3
- package/dist/runner/aggregator.js +5 -5
- package/dist/runner/aggregator.js.map +1 -1
- package/dist/runner/runner.d.ts +7 -7
- package/dist/runner/runner.d.ts.map +1 -1
- package/dist/runner/runner.js +17 -18
- package/dist/runner/runner.js.map +1 -1
- package/dist/types/artifacts.d.ts +19 -21
- package/dist/types/artifacts.d.ts.map +1 -1
- package/dist/types/artifacts.js +3 -3
- package/dist/types/audit.d.ts +29 -29
- package/dist/types/audit.d.ts.map +1 -1
- package/dist/types/audit.js +2 -2
- package/dist/types/config.d.ts +21 -21
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -1
- package/dist/types/gatherer.d.ts +6 -6
- package/dist/types/gatherer.d.ts.map +1 -1
- package/dist/types/gatherer.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonld-syntax-validity.js","sourceRoot":"","sources":["../../../src/audits/structured-data/jsonld-syntax-validity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAC3C,MAAM,CAAU,IAAI,GAAc;QACvC,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"jsonld-syntax-validity.js","sourceRoot":"","sources":["../../../src/audits/structured-data/jsonld-syntax-validity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAC3C,MAAM,CAAU,IAAI,GAAc;QACvC,EAAE,EAAE,wBAAwB;QAC5B,KAAK,EAAE,kDAAkD;QACzD,YAAY,EAAE,0DAA0D;QACxE,WAAW,EACT,gHAAgH;QAClH,iBAAiB,EAAE,CAAC,QAAQ,CAAC;KAC9B,CAAC;IAEK,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,SAAoB;QACrD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAEhC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,mBAAmB,CAAC;gBAC9B,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,iDAAiD;gBAC/D,WAAW,EAAE,2FAA2F;aACzG,CAAC,CAAC;QACL,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAC7D,MAAM,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAE/C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAClD,KAAK,EAAE,GAAG,GAAG,CAAC;YACd,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3F,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc;YAC/C,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM;SACjE,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,mBAAmB,CAAC;YAC9B,KAAK;YACL,YAAY,EAAE,GAAG,UAAU,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,2BAA2B;YAChF,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAC5B;gBACE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE;gBAClD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;gBAClD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACvD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE;aACrD,EACD,UAAU,CACX;SACF,CAAC,CAAC;IACL,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Audit evaluating presence of high-value schemas for RAG & Answer Engines
|
|
3
3
|
*/
|
|
4
4
|
import { Audit } from '../audit.js';
|
|
5
5
|
import type { Artifacts, AuditMeta, AuditResult } from '../../types/index.js';
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Audit evaluating presence of high-value schemas for RAG & Answer Engines
|
|
3
3
|
*/
|
|
4
4
|
import { Audit } from '../audit.js';
|
|
5
5
|
export class RagSchemaPresenceAudit extends Audit {
|
|
6
6
|
static meta = {
|
|
7
7
|
id: 'rag-schema-presence',
|
|
8
|
-
title: '
|
|
9
|
-
failureTitle: '
|
|
10
|
-
description: '
|
|
8
|
+
title: 'Page implements RAG-optimized JSON-LD schemas (FAQPage, HowTo, Article)',
|
|
9
|
+
failureTitle: 'Missing high-value structured schemas for RAG',
|
|
10
|
+
description: 'Schemas like FAQPage, HowTo, QAPage, and Article enable Answer Engines to extract Q&A pairs and step-by-step information directly into synthesized answers.',
|
|
11
11
|
requiredArtifacts: ['JSONLD'],
|
|
12
12
|
};
|
|
13
13
|
static async audit(artifacts) {
|
|
14
14
|
const jsonld = artifacts.JSONLD;
|
|
15
15
|
const ragSchemas = [
|
|
16
|
-
{ name: 'FAQPage', present: jsonld.hasFAQPage, value: '
|
|
17
|
-
{ name: 'HowTo / QAPage', present: jsonld.hasHowTo || jsonld.hasQAPage, value: '
|
|
18
|
-
{ name: 'Article / TechArticle', present: jsonld.hasArticle, value: '
|
|
19
|
-
{ name: 'Organization / Product', present: jsonld.hasOrganization || jsonld.hasProduct, value: '
|
|
16
|
+
{ name: 'FAQPage', present: jsonld.hasFAQPage, value: 'Direct Q&A pairs' },
|
|
17
|
+
{ name: 'HowTo / QAPage', present: jsonld.hasHowTo || jsonld.hasQAPage, value: 'Step-by-step instructional procedures' },
|
|
18
|
+
{ name: 'Article / TechArticle', present: jsonld.hasArticle, value: 'Authorship and content metadata' },
|
|
19
|
+
{ name: 'Organization / Product', present: jsonld.hasOrganization || jsonld.hasProduct, value: 'Business entity / product metadata' },
|
|
20
20
|
];
|
|
21
21
|
const presentCount = ragSchemas.filter((s) => s.present).length;
|
|
22
22
|
let score = 0;
|
|
@@ -31,16 +31,16 @@ export class RagSchemaPresenceAudit extends Audit {
|
|
|
31
31
|
}
|
|
32
32
|
const tableItems = ragSchemas.map((s) => ({
|
|
33
33
|
schema: s.name,
|
|
34
|
-
status: s.present ? '
|
|
34
|
+
status: s.present ? 'Implemented' : 'Not found',
|
|
35
35
|
benefit: s.value,
|
|
36
36
|
}));
|
|
37
37
|
return this.generateAuditResult({
|
|
38
38
|
score,
|
|
39
|
-
displayValue: `${presentCount}
|
|
39
|
+
displayValue: `${presentCount} RAG schema type(s) detected`,
|
|
40
40
|
details: this.makeTableDetails([
|
|
41
|
-
{ key: 'schema', label: '
|
|
42
|
-
{ key: 'status', label: '
|
|
43
|
-
{ key: 'benefit', label: '
|
|
41
|
+
{ key: 'schema', label: 'Schema Type', valueType: 'code' },
|
|
42
|
+
{ key: 'status', label: 'Status', valueType: 'status' },
|
|
43
|
+
{ key: 'benefit', label: 'Impact on RAG / AEO', valueType: 'text' },
|
|
44
44
|
], tableItems),
|
|
45
45
|
});
|
|
46
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rag-schema-presence.js","sourceRoot":"","sources":["../../../src/audits/structured-data/rag-schema-presence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACxC,MAAM,CAAU,IAAI,GAAc;QACvC,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"rag-schema-presence.js","sourceRoot":"","sources":["../../../src/audits/structured-data/rag-schema-presence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACxC,MAAM,CAAU,IAAI,GAAc;QACvC,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,yEAAyE;QAChF,YAAY,EAAE,+CAA+C;QAC7D,WAAW,EACT,6JAA6J;QAC/J,iBAAiB,EAAE,CAAC,QAAQ,CAAC;KAC9B,CAAC;IAEK,MAAM,CAAU,KAAK,CAAC,KAAK,CAAC,SAAoB;QACrD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAEhC,MAAM,UAAU,GAAG;YACjB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE;YAC1E,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,uCAAuC,EAAE;YACxH,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,iCAAiC,EAAE;YACvG,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,oCAAoC,EAAE;SACtI,CAAC;QAEF,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAChE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC,CAAC,IAAI;YACd,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;YAC/C,OAAO,EAAE,CAAC,CAAC,KAAK;SACjB,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,CAAC,mBAAmB,CAAC;YAC9B,KAAK;YACL,YAAY,EAAE,GAAG,YAAY,8BAA8B;YAC3D,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAC5B;gBACE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE;gBAC1D,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE;gBACvD,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,EAAE;aACpE,EACD,UAAU,CACX;SACF,CAAC,CAAC;IACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
3
|
-
*
|
|
2
|
+
* @fileoverview Default AEO Linter configuration with category weights and audit definitions.
|
|
3
|
+
* Follows the Google Lighthouse configuration model (categories + auditRefs with weights).
|
|
4
4
|
*/
|
|
5
5
|
import type { LinterConfig } from '../types/config.js';
|
|
6
6
|
export declare const defaultConfig: LinterConfig;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
3
|
-
*
|
|
2
|
+
* @fileoverview Default AEO Linter configuration with category weights and audit definitions.
|
|
3
|
+
* Follows the Google Lighthouse configuration model (categories + auditRefs with weights).
|
|
4
4
|
*/
|
|
5
5
|
export const defaultConfig = {
|
|
6
6
|
settings: {
|
|
@@ -10,7 +10,7 @@ export const defaultConfig = {
|
|
|
10
10
|
categories: {
|
|
11
11
|
'ai-accessibility': {
|
|
12
12
|
title: 'AI Accessibility & Crawling',
|
|
13
|
-
description: '
|
|
13
|
+
description: 'Verifies that AI agents and search crawlers (GPTBot, PerplexityBot, ClaudeBot, Google-Extended, etc.) have unrestricted crawling permissions via robots.txt and HTTP headers.',
|
|
14
14
|
weight: 25,
|
|
15
15
|
auditRefs: [
|
|
16
16
|
{ id: 'ai-robots-txt', weight: 10, group: 'crawling' },
|
|
@@ -20,7 +20,7 @@ export const defaultConfig = {
|
|
|
20
20
|
},
|
|
21
21
|
'structured-data': {
|
|
22
22
|
title: 'Structured Data & RAG Schemas',
|
|
23
|
-
description: '
|
|
23
|
+
description: 'Audits JSON-LD schemas optimized for RAG (FAQPage, HowTo, Article, QAPage, sameAs) that enrich LLM knowledge graphs with structured entity data.',
|
|
24
24
|
weight: 25,
|
|
25
25
|
auditRefs: [
|
|
26
26
|
{ id: 'jsonld-syntax-validity', weight: 8, group: 'schema' },
|
|
@@ -30,7 +30,7 @@ export const defaultConfig = {
|
|
|
30
30
|
},
|
|
31
31
|
'content-chunking': {
|
|
32
32
|
title: 'Content Chunking & Semantic Structure',
|
|
33
|
-
description: '
|
|
33
|
+
description: 'Evaluates H1-H3 sequential hierarchy, semantic partitioning (<article>, <section>, <main>), and token density per block for optimal RAG embedding extraction.',
|
|
34
34
|
weight: 25,
|
|
35
35
|
auditRefs: [
|
|
36
36
|
{ id: 'heading-hierarchy', weight: 8, group: 'structure' },
|
|
@@ -40,7 +40,7 @@ export const defaultConfig = {
|
|
|
40
40
|
},
|
|
41
41
|
'direct-answer-density': {
|
|
42
42
|
title: 'Direct Answer Density',
|
|
43
|
-
description: '
|
|
43
|
+
description: 'Detects concise, direct definitions and answers to key user questions, optimizing extraction for Answer Engines (Perplexity, SearchGPT, AI Overviews).',
|
|
44
44
|
weight: 25,
|
|
45
45
|
auditRefs: [
|
|
46
46
|
{ id: 'direct-definition-answering', weight: 10, group: 'answers' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-config.js","sourceRoot":"","sources":["../../src/config/default-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO;QACf,iBAAiB,EAAE,KAAK;KACzB;IACD,UAAU,EAAE;QACV,kBAAkB,EAAE;YAClB,KAAK,EAAE,6BAA6B;YACpC,WAAW,EACT
|
|
1
|
+
{"version":3,"file":"default-config.js","sourceRoot":"","sources":["../../src/config/default-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO;QACf,iBAAiB,EAAE,KAAK;KACzB;IACD,UAAU,EAAE;QACV,kBAAkB,EAAE;YAClB,KAAK,EAAE,6BAA6B;YACpC,WAAW,EACT,+KAA+K;YACjL,MAAM,EAAE,EAAE;YACV,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;gBACtD,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;gBACvD,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;aACvD;SACF;QACD,iBAAiB,EAAE;YACjB,KAAK,EAAE,+BAA+B;YACtC,WAAW,EACT,kJAAkJ;YACpJ,MAAM,EAAE,EAAE;YACV,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC5D,EAAE,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACzD,EAAE,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE;aACnE;SACF;QACD,kBAAkB,EAAE;YAClB,KAAK,EAAE,uCAAuC;YAC9C,WAAW,EACT,+JAA+J;YACjK,MAAM,EAAE,EAAE;YACV,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;gBAC1D,EAAE,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;gBAC5D,EAAE,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE;aAC9D;SACF;QACD,uBAAuB,EAAE;YACvB,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EACT,wJAAwJ;YAC1J,MAAM,EAAE,EAAE;YACV,SAAS,EAAE;gBACT,EAAE,EAAE,EAAE,6BAA6B,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;gBACnE,EAAE,EAAE,EAAE,0BAA0B,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC/D,EAAE,EAAE,EAAE,4BAA4B,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;aAClE;SACF;KACF;IACD,MAAM,EAAE;QACN,mBAAmB;QACnB,eAAe;QACf,iBAAiB;QACjB,gBAAgB;QAChB,kBAAkB;QAClB,wBAAwB;QACxB,qBAAqB;QACrB,qBAAqB;QACrB,mBAAmB;QACnB,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,wBAAwB;QACxB,6BAA6B;QAC7B,0BAA0B;QAC1B,4BAA4B;KAC7B;CACF,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Driver implementation based on Fetch + Cheerio for Node.js / CLI environments.
|
|
3
3
|
*/
|
|
4
4
|
import * as cheerio from 'cheerio';
|
|
5
5
|
import type { Driver } from '../../types/index.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Driver implementation based on Fetch + Cheerio for Node.js / CLI environments.
|
|
3
3
|
*/
|
|
4
4
|
import * as cheerio from 'cheerio';
|
|
5
5
|
export class CheerioDriver {
|
|
@@ -16,7 +16,7 @@ export class CheerioDriver {
|
|
|
16
16
|
static async createFromUrl(targetUrl, fetchFn = fetch, options) {
|
|
17
17
|
const defaultHeaders = {
|
|
18
18
|
'User-Agent': options?.userAgent ||
|
|
19
|
-
'Mozilla/5.0 (compatible; AEOLinter/1.0; +https://github.com/aeo-linter)',
|
|
19
|
+
'Mozilla/5.0 (compatible; AEOLinter/1.0; +https://github.com/DrowLink/aeo-audit-linter)',
|
|
20
20
|
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
|
21
21
|
...options?.headers,
|
|
22
22
|
};
|
|
@@ -25,7 +25,7 @@ export class CheerioDriver {
|
|
|
25
25
|
redirect: 'follow',
|
|
26
26
|
});
|
|
27
27
|
if (!res.ok) {
|
|
28
|
-
throw new Error(`
|
|
28
|
+
throw new Error(`HTTP ${res.status} error fetching ${targetUrl}: ${res.statusText}`);
|
|
29
29
|
}
|
|
30
30
|
const html = await res.text();
|
|
31
31
|
const finalUrl = res.url || targetUrl;
|
|
@@ -43,7 +43,7 @@ export class CheerioDriver {
|
|
|
43
43
|
if (typeof script === 'function') {
|
|
44
44
|
return script();
|
|
45
45
|
}
|
|
46
|
-
throw new Error('evaluate()
|
|
46
|
+
throw new Error('evaluate() with raw string is not supported in CheerioDriver');
|
|
47
47
|
}
|
|
48
48
|
async fetch(url, init) {
|
|
49
49
|
return fetch(url, init);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cheerio-driver.js","sourceRoot":"","sources":["../../../src/gather/driver/cheerio-driver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,MAAM,OAAO,aAAa;IAChB,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,OAAO,CAAoC;IAC3C,CAAC,CAAqB;IAE9B,YAAY,OAIX;QACC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,aAAa,CAC/B,SAAiB,EACjB,UAAwB,KAAK,EAC7B,OAAkE;QAElE,MAAM,cAAc,GAAG;YACrB,YAAY,EACV,OAAO,EAAE,SAAS;gBAClB,
|
|
1
|
+
{"version":3,"file":"cheerio-driver.js","sourceRoot":"","sources":["../../../src/gather/driver/cheerio-driver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,MAAM,OAAO,aAAa;IAChB,GAAG,CAAS;IACZ,IAAI,CAAS;IACb,OAAO,CAAoC;IAC3C,CAAC,CAAqB;IAE9B,YAAY,OAIX;QACC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,aAAa,CAC/B,SAAiB,EACjB,UAAwB,KAAK,EAC7B,OAAkE;QAElE,MAAM,cAAc,GAAG;YACrB,YAAY,EACV,OAAO,EAAE,SAAS;gBAClB,wFAAwF;YAC1F,MAAM,EAAE,iEAAiE;YACzE,GAAG,OAAO,EAAE,OAAO;SACpB,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE;YACnC,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,mBAAmB,SAAS,KAAK,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC;QAEtC,MAAM,aAAa,GAAsC,EAAE,CAAC;QAC5D,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/B,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,aAAa,CAAC;YACvB,GAAG,EAAE,QAAQ;YACb,IAAI;YACJ,OAAO,EAAE,aAAa;SACvB,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAI,MAA0B;QACjD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,MAAM,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,IAAkB;QAChD,OAAO,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,CAAC,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview ContentChunksGatherer
|
|
2
|
+
* @fileoverview ContentChunksGatherer for semantic content chunking and token density estimation for RAG.
|
|
3
3
|
*/
|
|
4
4
|
import { Gatherer } from '../gatherer.js';
|
|
5
5
|
import type { ContentChunksArtifact, GathererContext } from '../../types/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-chunks-gatherer.d.ts","sourceRoot":"","sources":["../../../src/gather/gatherers/content-chunks-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAgB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEjG,qBAAa,qBAAsB,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAClE,SAAyB,IAAI,EAAG,eAAe,CAAU;IAEnC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"content-chunks-gatherer.d.ts","sourceRoot":"","sources":["../../../src/gather/gatherers/content-chunks-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAgB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEjG,qBAAa,qBAAsB,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAClE,SAAyB,IAAI,EAAG,eAAe,CAAU;IAEnC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAiG5F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview ContentChunksGatherer
|
|
2
|
+
* @fileoverview ContentChunksGatherer for semantic content chunking and token density estimation for RAG.
|
|
3
3
|
*/
|
|
4
4
|
import * as cheerio from 'cheerio';
|
|
5
5
|
import { Gatherer } from '../gatherer.js';
|
|
@@ -8,7 +8,7 @@ export class ContentChunksGatherer extends Gatherer {
|
|
|
8
8
|
async getArtifact(context) {
|
|
9
9
|
const html = await context.driver.getHtml();
|
|
10
10
|
const $ = cheerio.load(html);
|
|
11
|
-
//
|
|
11
|
+
// Remove boilerplate non-content tags
|
|
12
12
|
$('script, style, noscript, svg, nav, footer, header').remove();
|
|
13
13
|
const semanticTagsUsed = [];
|
|
14
14
|
if ($('main').length > 0)
|
|
@@ -19,13 +19,11 @@ export class ContentChunksGatherer extends Gatherer {
|
|
|
19
19
|
semanticTagsUsed.push('section');
|
|
20
20
|
const chunks = [];
|
|
21
21
|
let chunkCounter = 0;
|
|
22
|
-
// Buscar secciones o elementos principales
|
|
23
22
|
const contentContainers = $('article, section, main');
|
|
24
23
|
const targetElements = contentContainers.length > 0 ? contentContainers : $('body');
|
|
25
24
|
targetElements.each((_, container) => {
|
|
26
25
|
const containerTag = container.tagName.toLowerCase();
|
|
27
26
|
const isSemantic = ['article', 'section', 'main'].includes(containerTag);
|
|
28
|
-
// Dividir el contenedor por encabezados internos o párrafos
|
|
29
27
|
const subNodes = $(container).children('h1, h2, h3, h4, p, ul, ol, table, pre');
|
|
30
28
|
let currentHeading = undefined;
|
|
31
29
|
let bufferText = '';
|
|
@@ -39,7 +37,7 @@ export class ContentChunksGatherer extends Gatherer {
|
|
|
39
37
|
const words = text.split(/\s+/).filter(Boolean);
|
|
40
38
|
const wordCount = words.length;
|
|
41
39
|
if (wordCount < 10)
|
|
42
|
-
return; //
|
|
40
|
+
return; // Ignore small noise fragments
|
|
43
41
|
const estimatedTokens = Math.round(wordCount * 1.3);
|
|
44
42
|
chunks.push({
|
|
45
43
|
id: `chunk-${++chunkCounter}`,
|
|
@@ -74,7 +72,7 @@ export class ContentChunksGatherer extends Gatherer {
|
|
|
74
72
|
if (tag === 'pre' || $(el).find('code').length > 0)
|
|
75
73
|
hasCode = true;
|
|
76
74
|
bufferText += ' ' + $(el).text().trim();
|
|
77
|
-
//
|
|
75
|
+
// Split into a subchunk if exceeding ~350 words for embeddings
|
|
78
76
|
if (bufferText.split(/\s+/).length > 350) {
|
|
79
77
|
flushChunk();
|
|
80
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-chunks-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/content-chunks-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,qBAAsB,SAAQ,QAAyB;IACzC,IAAI,GAAG,eAAwB,CAAC;IAEzC,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,
|
|
1
|
+
{"version":3,"file":"content-chunks-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/content-chunks-gatherer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview DirectAnswersGatherer
|
|
2
|
+
* @fileoverview DirectAnswersGatherer to detect query patterns and immediate concise answers.
|
|
3
3
|
*/
|
|
4
4
|
import { Gatherer } from '../gatherer.js';
|
|
5
5
|
import type { DirectAnswersArtifact, GathererContext } from '../../types/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-answers-gatherer.d.ts","sourceRoot":"","sources":["../../../src/gather/gatherers/direct-answers-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAoB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAErG,qBAAa,qBAAsB,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAClE,SAAyB,IAAI,EAAG,eAAe,CAAU;IAEnC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"direct-answers-gatherer.d.ts","sourceRoot":"","sources":["../../../src/gather/gatherers/direct-answers-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,qBAAqB,EAAoB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAErG,qBAAa,qBAAsB,SAAQ,QAAQ,CAAC,eAAe,CAAC;IAClE,SAAyB,IAAI,EAAG,eAAe,CAAU;IAEnC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAwD5F"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview DirectAnswersGatherer
|
|
2
|
+
* @fileoverview DirectAnswersGatherer to detect query patterns and immediate concise answers.
|
|
3
3
|
*/
|
|
4
4
|
import * as cheerio from 'cheerio';
|
|
5
5
|
import { Gatherer } from '../gatherer.js';
|
|
@@ -10,19 +10,18 @@ export class DirectAnswersGatherer extends Gatherer {
|
|
|
10
10
|
const $ = cheerio.load(html);
|
|
11
11
|
const pairs = [];
|
|
12
12
|
let definitionPatternsFound = 0;
|
|
13
|
-
const questionWordsRegex = /^(
|
|
14
|
-
const definitionRegex = /\b(es un|es una|es el|es la|son los|son las|se refiere a|se define como|consiste en
|
|
13
|
+
const questionWordsRegex = /^(what|how|why|when|where|who|which|is|are|can|do|does|should|will|¿|\?|qué|que|cómo|como|por qué|porque|cuál|cual)\b/i;
|
|
14
|
+
const definitionRegex = /\b(is a|is an|is the|are the|refers to|is defined as|means|consists of|es un|es una|es el|es la|son los|son las|se refiere a|se define como|consiste en)\b/i;
|
|
15
15
|
$('h1, h2, h3, h4').each((_, el) => {
|
|
16
16
|
const headingText = $(el).text().trim();
|
|
17
17
|
const isQuestion = headingText.includes('?') || questionWordsRegex.test(headingText);
|
|
18
18
|
if (isQuestion) {
|
|
19
|
-
// Encontrar el siguiente párrafo o lista
|
|
20
19
|
const nextElem = $(el).nextAll('p, ul, ol').first();
|
|
21
20
|
if (nextElem.length > 0) {
|
|
22
21
|
const answerText = nextElem.text().trim().replace(/\s+/g, ' ');
|
|
23
22
|
const words = answerText.split(/\s+/).filter(Boolean);
|
|
24
23
|
const answerWordCount = words.length;
|
|
25
|
-
//
|
|
24
|
+
// Concise for Answer Engines: typically between 20 and 75 words (ideal 30-60)
|
|
26
25
|
const isConcise = answerWordCount >= 20 && answerWordCount <= 75;
|
|
27
26
|
const hasDirectDefinition = definitionRegex.test(answerText.slice(0, 150));
|
|
28
27
|
if (hasDirectDefinition) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-answers-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/direct-answers-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,qBAAsB,SAAQ,QAAyB;IACzC,IAAI,GAAG,eAAwB,CAAC;IAEzC,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAEhC,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"direct-answers-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/direct-answers-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,qBAAsB,SAAQ,QAAyB;IACzC,IAAI,GAAG,eAAwB,CAAC;IAEzC,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAEhC,MAAM,kBAAkB,GAAG,wHAAwH,CAAC;QACpJ,MAAM,eAAe,GAAG,6JAA6J,CAAC;QAEtL,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;YACjC,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAErF,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;gBACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACtD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC;oBAErC,8EAA8E;oBAC9E,MAAM,SAAS,GAAG,eAAe,IAAI,EAAE,IAAI,eAAe,IAAI,EAAE,CAAC;oBACjE,MAAM,mBAAmB,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAE3E,IAAI,mBAAmB,EAAE,CAAC;wBACxB,uBAAuB,EAAE,CAAC;oBAC5B,CAAC;oBAED,IAAI,UAAU,GAAG,GAAG,CAAC;oBACrB,IAAI,SAAS;wBAAE,UAAU,IAAI,GAAG,CAAC;oBACjC,IAAI,mBAAmB;wBAAE,UAAU,IAAI,GAAG,CAAC;oBAE3C,KAAK,CAAC,IAAI,CAAC;wBACT,QAAQ,EAAE,WAAW;wBACrB,cAAc,EAAE,SAAS;wBACzB,UAAU;wBACV,eAAe;wBACf,SAAS;wBACT,mBAAmB;wBACnB,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;qBAC3C,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QACpE,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpF,OAAO;YACL,KAAK;YACL,iBAAiB;YACjB,mBAAmB;YACnB,uBAAuB;SACxB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview HeadingsHierarchyGatherer
|
|
2
|
+
* @fileoverview HeadingsHierarchyGatherer to evaluate H1-H6 sequential hierarchy and structure.
|
|
3
3
|
*/
|
|
4
4
|
import { Gatherer } from '../gatherer.js';
|
|
5
5
|
import type { HeadingsHierarchyArtifact, GathererContext } from '../../types/index.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview HeadingsHierarchyGatherer
|
|
2
|
+
* @fileoverview HeadingsHierarchyGatherer to evaluate H1-H6 sequential hierarchy and structure.
|
|
3
3
|
*/
|
|
4
4
|
import * as cheerio from 'cheerio';
|
|
5
5
|
import { Gatherer } from '../gatherer.js';
|
|
@@ -36,7 +36,7 @@ export class HeadingsHierarchyGatherer extends Gatherer {
|
|
|
36
36
|
for (let i = 1; i < headings.length; i++) {
|
|
37
37
|
const prev = headings[i - 1];
|
|
38
38
|
const curr = headings[i];
|
|
39
|
-
//
|
|
39
|
+
// A skipped level occurs when heading depth increases by more than 1 (e.g. h1 -> h3)
|
|
40
40
|
if (curr.level > prev.level + 1) {
|
|
41
41
|
isHierarchySequential = false;
|
|
42
42
|
skippedLevels.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headings-hierarchy-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/headings-hierarchy-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,yBAA0B,SAAQ,QAA6B;IACjD,IAAI,GAAG,mBAA4B,CAAC;IAE7C,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,eAAe,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC;QACpD,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAyB,CAAC;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE3B,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,IAAI;gBACJ,EAAE;gBACF,KAAK;aACN,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAsD,EAAE,CAAC;QAC5E,IAAI,qBAAqB,GAAG,IAAI,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEzB,
|
|
1
|
+
{"version":3,"file":"headings-hierarchy-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/headings-hierarchy-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,yBAA0B,SAAQ,QAA6B;IACjD,IAAI,GAAG,mBAA4B,CAAC;IAE7C,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,eAAe,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC;QACpD,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACjC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAyB,CAAC;YACtE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE5B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAC3B,IAAI,KAAK,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAE3B,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,IAAI;gBACJ,EAAE;gBACF,KAAK;aACN,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAsD,EAAE,CAAC;QAC5E,IAAI,qBAAqB,GAAG,IAAI,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEzB,qFAAqF;YACrF,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBAChC,qBAAqB,GAAG,KAAK,CAAC;gBAC9B,aAAa,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,IAAI,CAAC,KAAK;oBAChB,EAAE,EAAE,IAAI,CAAC,KAAK;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,OAAO;YACP,OAAO;YACP,OAAO;YACP,WAAW,EAAE,OAAO,KAAK,CAAC;YAC1B,qBAAqB;YACrB,aAAa;SACd,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview RobotsTxtGatherer
|
|
2
|
+
* @fileoverview RobotsTxtGatherer to fetch and parse robots.txt and evaluate AI bot directives.
|
|
3
3
|
*/
|
|
4
4
|
import { Gatherer } from '../gatherer.js';
|
|
5
5
|
import type { RobotsTxtArtifact, GathererContext } from '../../types/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots-txt-gatherer.d.ts","sourceRoot":"","sources":["../../../src/gather/gatherers/robots-txt-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAmB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhG,qBAAa,iBAAkB,SAAQ,QAAQ,CAAC,WAAW,CAAC;IAC1D,SAAyB,IAAI,EAAG,WAAW,CAAU;IAE/B,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"robots-txt-gatherer.d.ts","sourceRoot":"","sources":["../../../src/gather/gatherers/robots-txt-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAmB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhG,qBAAa,iBAAkB,SAAQ,QAAQ,CAAC,WAAW,CAAC;IAC1D,SAAyB,IAAI,EAAG,WAAW,CAAU;IAE/B,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAqCvF,OAAO,CAAC,cAAc;IAgEtB,OAAO,CAAC,cAAc;CAgDvB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview RobotsTxtGatherer
|
|
2
|
+
* @fileoverview RobotsTxtGatherer to fetch and parse robots.txt and evaluate AI bot directives.
|
|
3
3
|
*/
|
|
4
4
|
import { Gatherer } from '../gatherer.js';
|
|
5
5
|
export class RobotsTxtGatherer extends Gatherer {
|
|
@@ -16,7 +16,7 @@ export class RobotsTxtGatherer extends Gatherer {
|
|
|
16
16
|
statusCode = response.status;
|
|
17
17
|
if (response.ok) {
|
|
18
18
|
const text = await response.text();
|
|
19
|
-
//
|
|
19
|
+
// Verify it is not an HTML 404 page masquerading as 200
|
|
20
20
|
if (!text.trim().toLowerCase().startsWith('<!doctype html') && !text.trim().toLowerCase().startsWith('<html')) {
|
|
21
21
|
rawContent = text;
|
|
22
22
|
exists = true;
|
|
@@ -24,7 +24,6 @@ export class RobotsTxtGatherer extends Gatherer {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
catch {
|
|
27
|
-
// Ignorar errores de red y marcar como no existente
|
|
28
27
|
exists = false;
|
|
29
28
|
}
|
|
30
29
|
const { rulesByAgent, sitemaps } = this.parseRobotsTxt(rawContent || '');
|
|
@@ -57,7 +56,6 @@ export class RobotsTxtGatherer extends Gatherer {
|
|
|
57
56
|
const value = line.slice(colonIdx + 1).trim();
|
|
58
57
|
if (key === 'user-agent') {
|
|
59
58
|
const agent = value.toLowerCase();
|
|
60
|
-
// Si veníamos procesando otro grupo, iniciamos nuevo grupo si no es consecutivo
|
|
61
59
|
currentAgents = [agent];
|
|
62
60
|
if (!rulesByAgent[agent]) {
|
|
63
61
|
rulesByAgent[agent] = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"robots-txt-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/robots-txt-gatherer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,MAAM,OAAO,iBAAkB,SAAQ,QAAqB;IACjC,IAAI,GAAG,WAAoB,CAAC;IAErC,KAAK,CAAC,WAAW,CAAC,OAAwB;QACxD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,MAAM,aAAa,CAAC;QAEhD,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,UAAU,GAAkB,IAAI,CAAC;QACrC,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvD,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,
|
|
1
|
+
{"version":3,"file":"robots-txt-gatherer.js","sourceRoot":"","sources":["../../../src/gather/gatherers/robots-txt-gatherer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Generates standalone interactive HTML reports inspired by Google Lighthouse.
|
|
3
3
|
*/
|
|
4
4
|
import type { AeoReportResult } from '../types/index.js';
|
|
5
5
|
export declare class HtmlReporter {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Generates a self-contained HTML document with score gauges and audit breakdowns.
|
|
8
8
|
*/
|
|
9
9
|
static generate(report: AeoReportResult): string;
|
|
10
10
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Generates standalone interactive HTML reports inspired by Google Lighthouse.
|
|
3
3
|
*/
|
|
4
4
|
export class HtmlReporter {
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Generates a self-contained HTML document with score gauges and audit breakdowns.
|
|
7
7
|
*/
|
|
8
8
|
static generate(report) {
|
|
9
9
|
const getScoreColor = (score) => {
|
|
10
10
|
if (score === null)
|
|
11
11
|
return '#9e9e9e';
|
|
12
12
|
if (score >= 0.9 || score >= 90)
|
|
13
|
-
return '#0cce6b'; //
|
|
13
|
+
return '#0cce6b'; // Lighthouse Green
|
|
14
14
|
if (score >= 0.5 || score >= 50)
|
|
15
|
-
return '#ffa400'; //
|
|
16
|
-
return '#ff4e42'; //
|
|
15
|
+
return '#ffa400'; // Lighthouse Orange
|
|
16
|
+
return '#ff4e42'; // Lighthouse Red
|
|
17
17
|
};
|
|
18
18
|
const getScoreCategoryClass = (score) => {
|
|
19
19
|
if (score === null)
|
|
@@ -88,7 +88,7 @@ export class HtmlReporter {
|
|
|
88
88
|
</summary>
|
|
89
89
|
<div class="audit-body">
|
|
90
90
|
<p class="audit-desc">${audit.description}</p>
|
|
91
|
-
${audit.explanation ? `<p class="audit-explanation"><strong>
|
|
91
|
+
${audit.explanation ? `<p class="audit-explanation"><strong>Diagnostic:</strong> ${audit.explanation}</p>` : ''}
|
|
92
92
|
${detailsHtml}
|
|
93
93
|
</div>
|
|
94
94
|
</details>
|
|
@@ -114,7 +114,7 @@ export class HtmlReporter {
|
|
|
114
114
|
`;
|
|
115
115
|
};
|
|
116
116
|
return `<!DOCTYPE html>
|
|
117
|
-
<html lang="
|
|
117
|
+
<html lang="en">
|
|
118
118
|
<head>
|
|
119
119
|
<meta charset="UTF-8">
|
|
120
120
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -264,13 +264,13 @@ export class HtmlReporter {
|
|
|
264
264
|
<div class="container">
|
|
265
265
|
<div class="brand">AEO Linter Engine • Lighthouse Architecture</div>
|
|
266
266
|
<h1>${report.url}</h1>
|
|
267
|
-
<p class="meta">
|
|
267
|
+
<p class="meta">Audited on ${new Date(report.fetchTime).toLocaleString('en-US')} | AEO v${report.aeoVersion}</p>
|
|
268
268
|
</div>
|
|
269
269
|
</header>
|
|
270
270
|
|
|
271
271
|
<main class="container">
|
|
272
272
|
<div class="gauges-grid">
|
|
273
|
-
${renderGauge(report.overallScore, '
|
|
273
|
+
${renderGauge(report.overallScore, 'Overall AEO Score')}
|
|
274
274
|
${Object.values(report.categories)
|
|
275
275
|
.map((cat) => renderGauge(cat.score !== null ? Math.round(cat.score * 100) : 0, cat.title))
|
|
276
276
|
.join('')}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-reporter.js","sourceRoot":"","sources":["../../src/report/html-reporter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,OAAO,YAAY;IACvB;;OAEG;IACI,MAAM,CAAC,QAAQ,CAAC,MAAuB;QAC5C,MAAM,aAAa,GAAG,CAAC,KAAoB,EAAU,EAAE;YACrD,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;YACrC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE;gBAAE,OAAO,SAAS,CAAC,CAAC,mBAAmB;YACtE,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE;gBAAE,OAAO,SAAS,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"html-reporter.js","sourceRoot":"","sources":["../../src/report/html-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Formats audit reports for standard terminal / console output.
|
|
3
3
|
*/
|
|
4
4
|
import type { AeoReportResult } from '../types/index.js';
|
|
5
5
|
export declare class TerminalReporter {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview
|
|
2
|
+
* @fileoverview Formats audit reports for standard terminal / console output.
|
|
3
3
|
*/
|
|
4
4
|
export class TerminalReporter {
|
|
5
5
|
static generate(report) {
|
|
@@ -18,10 +18,10 @@ export class TerminalReporter {
|
|
|
18
18
|
lines.push('\x1b[1m\x1b[36m============================================================\x1b[0m');
|
|
19
19
|
lines.push(`\x1b[1m AEO Linter Report - Answer Engine Optimization\x1b[0m`);
|
|
20
20
|
lines.push(` URL: \x1b[4m${report.url}\x1b[0m`);
|
|
21
|
-
lines.push(`
|
|
21
|
+
lines.push(` Date: ${new Date(report.fetchTime).toLocaleString('en-US')}`);
|
|
22
22
|
lines.push('\x1b[1m\x1b[36m============================================================\x1b[0m');
|
|
23
23
|
lines.push('');
|
|
24
|
-
lines.push(`\x1b[1m
|
|
24
|
+
lines.push(`\x1b[1m Overall AEO Score: ${formatScore(report.overallScore)} / 100\x1b[0m`);
|
|
25
25
|
lines.push('');
|
|
26
26
|
for (const cat of Object.values(report.categories)) {
|
|
27
27
|
const catScore = cat.score !== null ? Math.round(cat.score * 100) : null;
|