open-local-audit 0.2.0 → 0.3.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/CHANGELOG.md +8 -0
- package/README.md +16 -2
- package/dist/batch.d.ts +17 -0
- package/dist/batch.js +51 -0
- package/dist/batch.js.map +1 -0
- package/dist/cli.js +34 -4
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +1 -1
- package/dist/output.js +14 -4
- package/dist/output.js.map +1 -1
- package/dist/reporters.d.ts +1 -0
- package/dist/reporters.js +63 -0
- package/dist/reporters.js.map +1 -1
- package/dist/schema.d.ts +7 -4
- package/dist/schema.js +2 -1
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,14 @@ All notable changes to Open Local Audit will be documented here.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## v0.3.0 - 2026-05-09
|
|
8
|
+
|
|
9
|
+
- Added standalone HTML report rendering.
|
|
10
|
+
- Added `--format html`.
|
|
11
|
+
- Expanded `--format all` to write JSON, Markdown, and HTML reports.
|
|
12
|
+
- Added `--input <path>` for batch audits from text files.
|
|
13
|
+
- Added safe per-site output folders for batch reports.
|
|
14
|
+
|
|
7
15
|
## v0.2.0 - 2026-05-08
|
|
8
16
|
|
|
9
17
|
- Added optional same-origin internal link scanning with `--check-links` and `--max-pages`.
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Open Local Audit is an open-source website and local presence auditor for small
|
|
|
4
4
|
|
|
5
5
|
## Current stage
|
|
6
6
|
|
|
7
|
-
Published CLI. The project can run a single URL audit, optionally check same-origin links, and produce JSON, Markdown, or
|
|
7
|
+
Published CLI. The project can run a single URL audit or batch URL list, optionally check same-origin links, and produce JSON, Markdown, HTML, or all report formats.
|
|
8
8
|
|
|
9
9
|
## Business purpose
|
|
10
10
|
|
|
@@ -78,6 +78,18 @@ Write both report formats to a directory:
|
|
|
78
78
|
open-local-audit https://example.com --format all --out-dir reports
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
Write an HTML report:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
open-local-audit https://example.com --format html --out report.html
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Run a batch audit from a text file:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
open-local-audit --input sites.txt --format all --out-dir reports
|
|
91
|
+
```
|
|
92
|
+
|
|
81
93
|
Check same-origin links and fail CI when high-severity issues are found:
|
|
82
94
|
|
|
83
95
|
```bash
|
|
@@ -90,7 +102,9 @@ The first implementation milestone is a CLI that accepts one URL and outputs:
|
|
|
90
102
|
|
|
91
103
|
- JSON report.
|
|
92
104
|
- Markdown report.
|
|
93
|
-
-
|
|
105
|
+
- HTML report.
|
|
106
|
+
- Combined JSON, Markdown, and HTML report output with `--format all --out-dir`.
|
|
107
|
+
- Batch input files with per-site report folders.
|
|
94
108
|
- Score summary.
|
|
95
109
|
- Evidence table.
|
|
96
110
|
- Optional same-origin link checks.
|
package/dist/batch.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type OutputFormat, type ReportOutput } from "./output.js";
|
|
2
|
+
import type { AuditReport } from "./types.js";
|
|
3
|
+
export interface BatchReportOptions {
|
|
4
|
+
format: OutputFormat;
|
|
5
|
+
outDir: string;
|
|
6
|
+
pretty?: boolean;
|
|
7
|
+
audit?: (url: string) => Promise<AuditReport>;
|
|
8
|
+
}
|
|
9
|
+
export interface BatchReportResult {
|
|
10
|
+
url: string;
|
|
11
|
+
slug: string;
|
|
12
|
+
report: AuditReport;
|
|
13
|
+
outputs: ReportOutput[];
|
|
14
|
+
}
|
|
15
|
+
export declare function readInputUrls(path: string): Promise<string[]>;
|
|
16
|
+
export declare function safeReportSlug(rawUrl: string): string;
|
|
17
|
+
export declare function runBatchReports(urls: string[], options: BatchReportOptions): Promise<BatchReportResult[]>;
|
package/dist/batch.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { auditUrl } from "./audit.js";
|
|
4
|
+
import { writeReportOutputs } from "./output.js";
|
|
5
|
+
import { inputUrlSchema } from "./schema.js";
|
|
6
|
+
export async function readInputUrls(path) {
|
|
7
|
+
const content = await readFile(path, "utf8");
|
|
8
|
+
return content
|
|
9
|
+
.split(/\r?\n/)
|
|
10
|
+
.map((line) => line.trim())
|
|
11
|
+
.filter((line) => line.length > 0 && !line.startsWith("#"))
|
|
12
|
+
.map((line) => inputUrlSchema.parse(line));
|
|
13
|
+
}
|
|
14
|
+
export function safeReportSlug(rawUrl) {
|
|
15
|
+
const url = new URL(rawUrl);
|
|
16
|
+
const parts = [url.hostname.replace(/^www\./, ""), url.pathname.replace(/^\/|\/$/g, "")]
|
|
17
|
+
.filter(Boolean)
|
|
18
|
+
.join("-");
|
|
19
|
+
const slug = parts
|
|
20
|
+
.toLowerCase()
|
|
21
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
22
|
+
.replace(/^-+|-+$/g, "");
|
|
23
|
+
return slug || "site";
|
|
24
|
+
}
|
|
25
|
+
function uniqueSlug(base, used) {
|
|
26
|
+
const count = used.get(base) ?? 0;
|
|
27
|
+
used.set(base, count + 1);
|
|
28
|
+
return count === 0 ? base : `${base}-${count + 1}`;
|
|
29
|
+
}
|
|
30
|
+
export async function runBatchReports(urls, options) {
|
|
31
|
+
const usedSlugs = new Map();
|
|
32
|
+
const audit = options.audit ?? ((url) => auditUrl(url, {}));
|
|
33
|
+
const results = [];
|
|
34
|
+
for (const url of urls) {
|
|
35
|
+
const report = await audit(url);
|
|
36
|
+
const slug = uniqueSlug(safeReportSlug(url), usedSlugs);
|
|
37
|
+
const outputs = await writeReportOutputs(report, {
|
|
38
|
+
format: options.format,
|
|
39
|
+
outDir: join(options.outDir, slug),
|
|
40
|
+
pretty: options.pretty
|
|
41
|
+
});
|
|
42
|
+
results.push({
|
|
43
|
+
url,
|
|
44
|
+
slug,
|
|
45
|
+
report,
|
|
46
|
+
outputs
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return results;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch.js","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { auditUrl } from "./audit.js";
|
|
4
|
+
import { readInputUrls, runBatchReports } from "./batch.js";
|
|
4
5
|
import { shouldFailOnThreshold } from "./exit-policy.js";
|
|
5
6
|
import { writeReportOutputs } from "./output.js";
|
|
6
7
|
import { cliOptionsSchema, inputUrlSchema } from "./schema.js";
|
|
@@ -9,8 +10,9 @@ const program = new Command();
|
|
|
9
10
|
program
|
|
10
11
|
.name("open-local-audit")
|
|
11
12
|
.description("Audit a public local-business website and generate an evidence-backed report.")
|
|
12
|
-
.argument("
|
|
13
|
-
.option("
|
|
13
|
+
.argument("[url]", "HTTP or HTTPS URL to audit")
|
|
14
|
+
.option("--input <path>", "read URLs from a text file for batch audits")
|
|
15
|
+
.option("-f, --format <format>", "output format: json, markdown, html, or all", "markdown")
|
|
14
16
|
.option("-o, --out <path>", "write report to a file instead of stdout")
|
|
15
17
|
.option("--out-dir <path>", "write generated report files to a directory")
|
|
16
18
|
.option("--timeout <ms>", "request timeout in milliseconds", "10000")
|
|
@@ -21,13 +23,41 @@ program
|
|
|
21
23
|
.option("--pretty", "pretty-print JSON output", false)
|
|
22
24
|
.action(async (rawUrl, rawOptions) => {
|
|
23
25
|
try {
|
|
24
|
-
const url = inputUrlSchema.parse(rawUrl);
|
|
25
26
|
const options = cliOptionsSchema.parse(rawOptions);
|
|
26
|
-
const
|
|
27
|
+
const auditOptions = {
|
|
27
28
|
timeoutMs: options.timeout,
|
|
28
29
|
maxRedirects: options.maxRedirects,
|
|
29
30
|
checkLinks: options.checkLinks,
|
|
30
31
|
maxPages: options.maxPages
|
|
32
|
+
};
|
|
33
|
+
if (options.input) {
|
|
34
|
+
if (rawUrl) {
|
|
35
|
+
throw new Error("Use either a URL or --input, not both");
|
|
36
|
+
}
|
|
37
|
+
if (!options.outDir) {
|
|
38
|
+
throw new Error("--out-dir is required when --input is used");
|
|
39
|
+
}
|
|
40
|
+
const urls = await readInputUrls(options.input);
|
|
41
|
+
const results = await runBatchReports(urls, {
|
|
42
|
+
format: options.format,
|
|
43
|
+
outDir: options.outDir,
|
|
44
|
+
pretty: options.pretty,
|
|
45
|
+
audit: (url) => auditUrl(url, auditOptions)
|
|
46
|
+
});
|
|
47
|
+
process.stdout.write(`Audited ${results.length} URL${results.length === 1 ? "" : "s"}\n`);
|
|
48
|
+
const failed = results.some((result) => shouldFailOnThreshold(result.report, options.failOn));
|
|
49
|
+
if (failed) {
|
|
50
|
+
process.stderr.write(`open-local-audit: findings met --fail-on ${options.failOn}\n`);
|
|
51
|
+
process.exitCode = 1;
|
|
52
|
+
}
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (!rawUrl) {
|
|
56
|
+
throw new Error("URL is required unless --input is used");
|
|
57
|
+
}
|
|
58
|
+
const url = inputUrlSchema.parse(rawUrl);
|
|
59
|
+
const report = await auditUrl(url, {
|
|
60
|
+
...auditOptions
|
|
31
61
|
});
|
|
32
62
|
const outputs = await writeReportOutputs(report, {
|
|
33
63
|
format: options.format,
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,+EAA+E,CAAC;KAC5F,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;KAC/C,MAAM,CAAC,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { auditUrl, auditSnapshot } from "./audit.js";
|
|
2
|
+
export { readInputUrls, runBatchReports, safeReportSlug } from "./batch.js";
|
|
2
3
|
export { shouldFailOnThreshold } from "./exit-policy.js";
|
|
3
4
|
export { writeReportOutputs } from "./output.js";
|
|
4
|
-
export { renderJsonReport, renderMarkdownReport } from "./reporters.js";
|
|
5
|
+
export { renderHtmlReport, renderJsonReport, renderMarkdownReport } from "./reporters.js";
|
|
5
6
|
export { renderTerminalSummary } from "./summary.js";
|
|
6
7
|
export type { AuditOptions, AuditReport, AuditSummary, Evidence, Finding, FindingCategory, PageSnapshot, Score, Severity } from "./types.js";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { auditUrl, auditSnapshot } from "./audit.js";
|
|
2
|
+
export { readInputUrls, runBatchReports, safeReportSlug } from "./batch.js";
|
|
2
3
|
export { shouldFailOnThreshold } from "./exit-policy.js";
|
|
3
4
|
export { writeReportOutputs } from "./output.js";
|
|
4
|
-
export { renderJsonReport, renderMarkdownReport } from "./reporters.js";
|
|
5
|
+
export { renderHtmlReport, renderJsonReport, renderMarkdownReport } from "./reporters.js";
|
|
5
6
|
export { renderTerminalSummary } from "./summary.js";
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/output.d.ts
CHANGED
package/dist/output.js
CHANGED
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { renderJsonReport, renderMarkdownReport } from "./reporters.js";
|
|
3
|
+
import { renderHtmlReport, renderJsonReport, renderMarkdownReport } from "./reporters.js";
|
|
4
4
|
function outputFor(report, format, pretty) {
|
|
5
|
+
const contentByFormat = {
|
|
6
|
+
json: renderJsonReport(report, pretty),
|
|
7
|
+
markdown: renderMarkdownReport(report),
|
|
8
|
+
html: renderHtmlReport(report)
|
|
9
|
+
};
|
|
5
10
|
return {
|
|
6
11
|
format,
|
|
7
|
-
content: format
|
|
12
|
+
content: contentByFormat[format]
|
|
8
13
|
};
|
|
9
14
|
}
|
|
10
15
|
function defaultReportName(format) {
|
|
11
|
-
|
|
16
|
+
const extension = {
|
|
17
|
+
json: "json",
|
|
18
|
+
markdown: "md",
|
|
19
|
+
html: "html"
|
|
20
|
+
}[format];
|
|
21
|
+
return `open-local-audit-report.${extension}`;
|
|
12
22
|
}
|
|
13
23
|
export async function writeReportOutputs(report, options) {
|
|
14
24
|
const pretty = options.pretty ?? false;
|
|
15
|
-
const formats = options.format === "all" ? ["json", "markdown"] : [options.format];
|
|
25
|
+
const formats = options.format === "all" ? ["json", "markdown", "html"] : [options.format];
|
|
16
26
|
const outputs = formats.map((format) => outputFor(report, format, pretty));
|
|
17
27
|
if (options.outDir) {
|
|
18
28
|
await mkdir(options.outDir, { recursive: true });
|
package/dist/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAkB1F,SAAS,SAAS,CAAC,MAAmB,EAAE,MAAoC,EAAE,MAAe;IAC3F,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC;QACtC,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC;QACtC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;KAC/B,CAAC;IAEF,OAAO;QACL,MAAM;QACN,OAAO,EAAE,eAAe,CAAC,MAAM,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAoC;IAC7D,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,MAAM;KACb,CAAC,MAAM,CAAC,CAAC;IAEV,OAAO,2BAA2B,SAAS,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAmB,EAAE,OAA4B;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACrE,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;QAC9B,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/reporters.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { AuditReport } from "./types.js";
|
|
2
2
|
export declare function renderJsonReport(report: AuditReport, pretty?: boolean): string;
|
|
3
3
|
export declare function renderMarkdownReport(report: AuditReport): string;
|
|
4
|
+
export declare function renderHtmlReport(report: AuditReport): string;
|
package/dist/reporters.js
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
function escapeCell(value) {
|
|
2
2
|
return value.replace(/\|/g, "\\|").replace(/\r?\n/g, " ");
|
|
3
3
|
}
|
|
4
|
+
function escapeHtml(value) {
|
|
5
|
+
return value
|
|
6
|
+
.replace(/&/g, "&")
|
|
7
|
+
.replace(/</g, "<")
|
|
8
|
+
.replace(/>/g, ">")
|
|
9
|
+
.replace(/"/g, """)
|
|
10
|
+
.replace(/'/g, "'");
|
|
11
|
+
}
|
|
4
12
|
function severityRank(finding) {
|
|
5
13
|
const ranks = {
|
|
6
14
|
high: 0,
|
|
@@ -55,4 +63,59 @@ export function renderMarkdownReport(report) {
|
|
|
55
63
|
lines.push("");
|
|
56
64
|
return `${lines.join("\n")}\n`;
|
|
57
65
|
}
|
|
66
|
+
export function renderHtmlReport(report) {
|
|
67
|
+
const findings = [...report.findings].sort((left, right) => severityRank(left) - severityRank(right));
|
|
68
|
+
const scoreRows = Object.values(report.scores)
|
|
69
|
+
.map((score) => `<tr><td>${escapeHtml(score.label)}</td><td>${score.score}/${score.max}</td></tr>`)
|
|
70
|
+
.join("\n");
|
|
71
|
+
const findingRows = findings.length
|
|
72
|
+
? findings
|
|
73
|
+
.map((finding) => {
|
|
74
|
+
const evidence = finding.evidence.map((item) => `${item.label}: ${item.value}`).join("; ");
|
|
75
|
+
return `<tr><td>${finding.severity}</td><td>${escapeHtml(finding.title)}</td><td>${escapeHtml(evidence)}</td><td>${escapeHtml(finding.recommendation)}</td></tr>`;
|
|
76
|
+
})
|
|
77
|
+
.join("\n")
|
|
78
|
+
: `<tr><td colspan="4">No findings were detected by the current rule set.</td></tr>`;
|
|
79
|
+
const recommendations = report.recommendations.length > 0
|
|
80
|
+
? report.recommendations.map((recommendation) => `<li>${escapeHtml(recommendation)}</li>`).join("\n")
|
|
81
|
+
: "<li>Keep monitoring the page as content and templates change.</li>";
|
|
82
|
+
return `<!doctype html>
|
|
83
|
+
<html lang="en">
|
|
84
|
+
<head>
|
|
85
|
+
<meta charset="utf-8">
|
|
86
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
87
|
+
<title>Open Local Audit Report - ${escapeHtml(report.finalUrl)}</title>
|
|
88
|
+
<style>
|
|
89
|
+
body { color: #172026; font-family: Arial, sans-serif; line-height: 1.5; margin: 2rem; }
|
|
90
|
+
table { border-collapse: collapse; width: 100%; }
|
|
91
|
+
th, td { border: 1px solid #d4d9dd; padding: 0.5rem; text-align: left; vertical-align: top; }
|
|
92
|
+
th { background: #f3f5f7; }
|
|
93
|
+
.meta { color: #51606a; }
|
|
94
|
+
</style>
|
|
95
|
+
</head>
|
|
96
|
+
<body>
|
|
97
|
+
<h1>Open Local Audit Report</h1>
|
|
98
|
+
<p class="meta">URL: ${escapeHtml(report.url)}<br>Final URL: ${escapeHtml(report.finalUrl)}<br>Scanned at: ${escapeHtml(report.scannedAt)}<br>Status code: ${report.statusCode}</p>
|
|
99
|
+
<h2>Score Summary</h2>
|
|
100
|
+
<table>
|
|
101
|
+
<thead><tr><th>Category</th><th>Score</th></tr></thead>
|
|
102
|
+
<tbody>
|
|
103
|
+
${scoreRows}
|
|
104
|
+
</tbody>
|
|
105
|
+
</table>
|
|
106
|
+
<h2>Findings</h2>
|
|
107
|
+
<table>
|
|
108
|
+
<thead><tr><th>Severity</th><th>Finding</th><th>Evidence</th><th>Recommendation</th></tr></thead>
|
|
109
|
+
<tbody>
|
|
110
|
+
${findingRows}
|
|
111
|
+
</tbody>
|
|
112
|
+
</table>
|
|
113
|
+
<h2>Recommendations</h2>
|
|
114
|
+
<ul>
|
|
115
|
+
${recommendations}
|
|
116
|
+
</ul>
|
|
117
|
+
</body>
|
|
118
|
+
</html>
|
|
119
|
+
`;
|
|
120
|
+
}
|
|
58
121
|
//# sourceMappingURL=reporters.js.map
|
package/dist/reporters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporters.js","sourceRoot":"","sources":["../src/reporters.ts"],"names":[],"mappings":"AAEA,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,YAAY,CAAC,OAAgB;IACpC,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;KACR,CAAC;IAEF,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAmB,EAAE,MAAM,GAAG,IAAI;IACjE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAmB;IACtD,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACtG,MAAM,KAAK,GAAa;QACtB,2BAA2B;QAC3B,EAAE;QACF,UAAU,MAAM,CAAC,GAAG,EAAE;QACtB,gBAAgB,MAAM,CAAC,QAAQ,EAAE;QACjC,iBAAiB,MAAM,CAAC,SAAS,EAAE;QACnC,kBAAkB,MAAM,CAAC,UAAU,EAAE;QACrC,EAAE;QACF,kBAAkB;QAClB,EAAE;QACF,sBAAsB;QACtB,gBAAgB;QAChB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;QAC9G,EAAE;QACF,aAAa;QACb,EAAE;KACH,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,oDAAoD,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,oDAAoD,EAAE,2BAA2B,CAAC,CAAC;QAC9F,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3F,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,CAAC,QAAQ,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAC3H,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,cAAc,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,KAAK,cAAc,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"reporters.js","sourceRoot":"","sources":["../src/reporters.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const inputUrlSchema: z.ZodEffects<z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>, string, string>;
|
|
3
|
-
export declare const outputFormatSchema: z.ZodEnum<["json", "markdown", "all"]>;
|
|
3
|
+
export declare const outputFormatSchema: z.ZodEnum<["json", "markdown", "html", "all"]>;
|
|
4
4
|
export declare const failOnSchema: z.ZodEnum<["none", "high", "medium", "low"]>;
|
|
5
5
|
export declare const cliOptionsSchema: z.ZodObject<{
|
|
6
|
-
format: z.ZodDefault<z.ZodEnum<["json", "markdown", "all"]>>;
|
|
6
|
+
format: z.ZodDefault<z.ZodEnum<["json", "markdown", "html", "all"]>>;
|
|
7
7
|
out: z.ZodOptional<z.ZodString>;
|
|
8
8
|
outDir: z.ZodOptional<z.ZodString>;
|
|
9
|
+
input: z.ZodOptional<z.ZodString>;
|
|
9
10
|
timeout: z.ZodDefault<z.ZodNumber>;
|
|
10
11
|
maxRedirects: z.ZodDefault<z.ZodNumber>;
|
|
11
12
|
checkLinks: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -16,19 +17,21 @@ export declare const cliOptionsSchema: z.ZodObject<{
|
|
|
16
17
|
maxRedirects: number;
|
|
17
18
|
checkLinks: boolean;
|
|
18
19
|
maxPages: number;
|
|
19
|
-
format: "json" | "markdown" | "all";
|
|
20
|
+
format: "html" | "json" | "markdown" | "all";
|
|
20
21
|
timeout: number;
|
|
21
22
|
failOn: "high" | "medium" | "low" | "none";
|
|
22
23
|
pretty: boolean;
|
|
23
24
|
out?: string | undefined;
|
|
24
25
|
outDir?: string | undefined;
|
|
26
|
+
input?: string | undefined;
|
|
25
27
|
}, {
|
|
26
28
|
maxRedirects?: number | undefined;
|
|
27
29
|
checkLinks?: boolean | undefined;
|
|
28
30
|
maxPages?: number | undefined;
|
|
29
|
-
format?: "json" | "markdown" | "all" | undefined;
|
|
31
|
+
format?: "html" | "json" | "markdown" | "all" | undefined;
|
|
30
32
|
out?: string | undefined;
|
|
31
33
|
outDir?: string | undefined;
|
|
34
|
+
input?: string | undefined;
|
|
32
35
|
timeout?: number | undefined;
|
|
33
36
|
failOn?: "high" | "medium" | "low" | "none" | undefined;
|
|
34
37
|
pretty?: boolean | undefined;
|
package/dist/schema.js
CHANGED
|
@@ -13,12 +13,13 @@ export const inputUrlSchema = z
|
|
|
13
13
|
.refine((value) => /^https?:\/\//i.test(value), {
|
|
14
14
|
message: "Only HTTP and HTTPS URLs are supported"
|
|
15
15
|
});
|
|
16
|
-
export const outputFormatSchema = z.enum(["json", "markdown", "all"]);
|
|
16
|
+
export const outputFormatSchema = z.enum(["json", "markdown", "html", "all"]);
|
|
17
17
|
export const failOnSchema = z.enum(["none", "high", "medium", "low"]);
|
|
18
18
|
export const cliOptionsSchema = z.object({
|
|
19
19
|
format: outputFormatSchema.default("markdown"),
|
|
20
20
|
out: z.string().optional(),
|
|
21
21
|
outDir: z.string().optional(),
|
|
22
|
+
input: z.string().optional(),
|
|
22
23
|
timeout: z.coerce.number().int().positive().max(60000).default(10000),
|
|
23
24
|
maxRedirects: z.coerce.number().int().min(0).max(10).default(5),
|
|
24
25
|
checkLinks: z.boolean().default(false),
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC;KACzB,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,WAAW,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;KACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;KAC7D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IAC9C,OAAO,EAAE,wCAAwC;CAClD,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC;KAC5B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC;KACzB,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,WAAW,KAAK,EAAE,CAAC;AAC5B,CAAC,CAAC;KACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;KAC7D,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;IAC9C,OAAO,EAAE,wCAAwC;CAClD,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACrE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACjE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnC,CAAC,CAAC"}
|