@pseolint/core 0.3.2 → 0.4.1
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 +49 -1
- package/dist/ai/triage.d.ts.map +1 -1
- package/dist/ai/triage.js +8 -1
- package/dist/ai/triage.js.map +1 -1
- package/dist/auditor.d.ts.map +1 -1
- package/dist/auditor.js +566 -136
- package/dist/auditor.js.map +1 -1
- package/dist/backpressure.d.ts +68 -0
- package/dist/backpressure.d.ts.map +1 -0
- package/dist/backpressure.js +81 -0
- package/dist/backpressure.js.map +1 -0
- package/dist/cache.d.ts +73 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +258 -19
- package/dist/cache.js.map +1 -1
- package/dist/enrich-findings.d.ts.map +1 -1
- package/dist/enrich-findings.js +1 -14
- package/dist/enrich-findings.js.map +1 -1
- package/dist/fetch-observer.d.ts +97 -0
- package/dist/fetch-observer.d.ts.map +1 -0
- package/dist/fetch-observer.js +124 -0
- package/dist/fetch-observer.js.map +1 -0
- package/dist/formatters/console.d.ts +7 -9
- package/dist/formatters/console.d.ts.map +1 -1
- package/dist/formatters/console.js +218 -254
- package/dist/formatters/console.js.map +1 -1
- package/dist/formatters/html.d.ts +5 -1
- package/dist/formatters/html.d.ts.map +1 -1
- package/dist/formatters/html.js +352 -570
- package/dist/formatters/html.js.map +1 -1
- package/dist/formatters/index.d.ts +4 -1
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +1 -1
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/json.d.ts +11 -1
- package/dist/formatters/json.d.ts.map +1 -1
- package/dist/formatters/json.js +5 -1
- package/dist/formatters/json.js.map +1 -1
- package/dist/formatters/markdown.d.ts +7 -1
- package/dist/formatters/markdown.d.ts.map +1 -1
- package/dist/formatters/markdown.js +77 -70
- package/dist/formatters/markdown.js.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -7
- package/dist/index.js.map +1 -1
- package/dist/page-filter.d.ts +50 -0
- package/dist/page-filter.d.ts.map +1 -0
- package/dist/page-filter.js +86 -0
- package/dist/page-filter.js.map +1 -0
- package/dist/rule-references.d.ts.map +1 -1
- package/dist/rule-references.js +0 -6
- package/dist/rule-references.js.map +1 -1
- package/dist/rules/content/unique-value.d.ts.map +1 -1
- package/dist/rules/content/unique-value.js +1 -0
- package/dist/rules/content/unique-value.js.map +1 -1
- package/dist/rules/scope.d.ts.map +1 -1
- package/dist/rules/scope.js +6 -14
- package/dist/rules/scope.js.map +1 -1
- package/dist/rules/tech/robots-sitemap-presence.d.ts +9 -1
- package/dist/rules/tech/robots-sitemap-presence.d.ts.map +1 -1
- package/dist/rules/tech/robots-sitemap-presence.js +14 -5
- package/dist/rules/tech/robots-sitemap-presence.js.map +1 -1
- package/dist/safe-mode-preset.d.ts +27 -0
- package/dist/safe-mode-preset.d.ts.map +1 -0
- package/dist/safe-mode-preset.js +54 -0
- package/dist/safe-mode-preset.js.map +1 -0
- package/dist/site-classifier.d.ts +83 -0
- package/dist/site-classifier.d.ts.map +1 -0
- package/dist/site-classifier.js +205 -0
- package/dist/site-classifier.js.map +1 -0
- package/dist/ssrf-guard.d.ts +96 -0
- package/dist/ssrf-guard.d.ts.map +1 -0
- package/dist/ssrf-guard.js +268 -0
- package/dist/ssrf-guard.js.map +1 -0
- package/dist/types.d.ts +202 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export type Severity = "info" | "warning" | "error" | "critical";
|
|
2
|
+
/** Verdict ladder — replaces the old numeric `score` field as the user-facing signal. */
|
|
3
|
+
export type Verdict = "ready" | "caution" | "concerning" | "critical";
|
|
4
|
+
/** Letter grade per category. */
|
|
5
|
+
export type Grade = "A" | "B" | "C" | "D" | "F";
|
|
6
|
+
/** Top-level v0.4 schema version. Bumps on every breaking output change. */
|
|
7
|
+
export declare const SCHEMA_VERSION = "2026-04-v0.4";
|
|
2
8
|
/** Options for `normalizeAuditUrl` (HTTP identity). */
|
|
3
9
|
export interface NormalizeUrlOptions {
|
|
4
10
|
/** When true (default), drop `?query` for URL identity. */
|
|
@@ -38,6 +44,12 @@ export interface RuleResult {
|
|
|
38
44
|
fix?: string;
|
|
39
45
|
/** Google documentation URL backing this finding. */
|
|
40
46
|
ref?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Marketing-page deeplink for this rule (v0.4+). Always populated by the
|
|
49
|
+
* auditor — points to https://pseolint.dev/rules/{slug} where slug is the
|
|
50
|
+
* rule-id segment after the namespace prefix.
|
|
51
|
+
*/
|
|
52
|
+
docsUrl?: string;
|
|
41
53
|
/** Primary page this finding refers to, when applicable. */
|
|
42
54
|
pageUrl?: string;
|
|
43
55
|
/** Other URLs involved (e.g. cluster members, related pairs). */
|
|
@@ -51,15 +63,47 @@ export interface RuleResult {
|
|
|
51
63
|
/** Fix effort level assigned by the enrichment pipeline. */
|
|
52
64
|
effort?: FixEffort;
|
|
53
65
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
/** v0.4 four-category bucket keys. */
|
|
67
|
+
export type CategoryKey = "integrity" | "discoverability" | "citation" | "data" | "audit";
|
|
68
|
+
/** Per-category grade + raw issue count. Audit category exists for completeness but is never weighted. */
|
|
69
|
+
export interface CategoryGrade {
|
|
70
|
+
grade: Grade;
|
|
71
|
+
issues: number;
|
|
72
|
+
}
|
|
73
|
+
export type CategoryGrades = Record<CategoryKey, CategoryGrade>;
|
|
74
|
+
/** Issues bucketed by severity — the v0.4 replacement for the flat `findings` array. */
|
|
75
|
+
export interface IssueBuckets {
|
|
76
|
+
/** Severity = error or critical. Must be fixed before shipping. */
|
|
77
|
+
blockers: RuleResult[];
|
|
78
|
+
/** Severity = warning. Should be fixed before scaling. */
|
|
79
|
+
shouldFix: RuleResult[];
|
|
80
|
+
/** Severity = info. Tracked for trend analysis. */
|
|
81
|
+
informational: RuleResult[];
|
|
82
|
+
}
|
|
83
|
+
/** Crawl statistics surfaced under diagnostics. */
|
|
84
|
+
export interface CrawlStats {
|
|
85
|
+
/** Total URLs the crawler considered (sitemap + discovered links). */
|
|
86
|
+
discovered: number;
|
|
87
|
+
/** URLs the crawler successfully fetched and audited. */
|
|
88
|
+
fetched: number;
|
|
89
|
+
/**
|
|
90
|
+
* URLs the crawler fetched but excluded from the rule pipeline (non-HTML
|
|
91
|
+
* content-type, dedup, robots-disallow, render budget, etc.).
|
|
92
|
+
*/
|
|
93
|
+
skipped: number;
|
|
94
|
+
}
|
|
95
|
+
/** Engine-internal diagnostics — weight 0, never affects verdict. */
|
|
96
|
+
export interface Diagnostics {
|
|
97
|
+
/** Origin readiness aggregate (median/p95/error ratio). Null when no live fetches occurred. */
|
|
98
|
+
originReadiness: import("./fetch-observer.js").ReadinessReport | null;
|
|
99
|
+
crawlStats: CrawlStats;
|
|
100
|
+
/**
|
|
101
|
+
* Engine-emitted `audit/*` findings (e.g. `audit/duplicate-url`,
|
|
102
|
+
* `audit/skipped-by-robots`). Always severity=info, never affect the
|
|
103
|
+
* verdict, never appear in `summary.issues`. Surfaced here so consumers
|
|
104
|
+
* (telemetry, debug UIs) can still see what was skipped or deduped.
|
|
105
|
+
*/
|
|
106
|
+
auditFindings: RuleResult[];
|
|
63
107
|
}
|
|
64
108
|
/** Options for HTTP caching during audits. */
|
|
65
109
|
export interface CacheOptions {
|
|
@@ -67,6 +111,13 @@ export interface CacheOptions {
|
|
|
67
111
|
dir?: string;
|
|
68
112
|
/** TTL for entries without ETag/Last-Modified validators. Default: 7 days. */
|
|
69
113
|
ttlMs?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Maximum total size of the cache directory in bytes. When exceeded after a
|
|
116
|
+
* run, oldest-mtime entries are evicted until under the cap. Also sweeps
|
|
117
|
+
* leftover `.tmp` files from crashed writes. `<= 0` disables size-based
|
|
118
|
+
* eviction. Default: 209_715_200 (200 MB).
|
|
119
|
+
*/
|
|
120
|
+
maxBytes?: number;
|
|
70
121
|
}
|
|
71
122
|
/** Cache stats reported at end of audit. */
|
|
72
123
|
export interface CacheStats {
|
|
@@ -117,12 +168,34 @@ export interface AiOptions {
|
|
|
117
168
|
} | false;
|
|
118
169
|
}
|
|
119
170
|
export interface AuditSummary {
|
|
120
|
-
|
|
121
|
-
|
|
171
|
+
/** Schema version. v0.4 = "2026-04-v0.4". Wave 2 / 3 consumers branch on this. */
|
|
172
|
+
schemaVersion: typeof SCHEMA_VERSION;
|
|
173
|
+
/** User-facing verdict ladder. */
|
|
174
|
+
verdict: Verdict;
|
|
175
|
+
/**
|
|
176
|
+
* Internal numeric risk score (0–100, low = good). Retained for CI thresholding,
|
|
177
|
+
* trend deltas, and alert-gate diff logic. NEVER displayed to humans.
|
|
178
|
+
*/
|
|
179
|
+
risk: number;
|
|
180
|
+
/** One-liner summarising counts: e.g. "3 ship-blockers, 16 should-fix". */
|
|
181
|
+
headline: string;
|
|
182
|
+
/** Per-category grade + count. */
|
|
183
|
+
categories: CategoryGrades;
|
|
184
|
+
/** Findings bucketed by severity. */
|
|
185
|
+
issues: IssueBuckets;
|
|
186
|
+
/**
|
|
187
|
+
* v0.4 §4.11 — pre-flight site classification. Decides which rules apply
|
|
188
|
+
* based on URL count, template clustering, and framework signal. The
|
|
189
|
+
* `suppressedRules` list is what the rule dispatcher honours. Pass
|
|
190
|
+
* `strict: true` in AuditOptions to keep the classification but force all
|
|
191
|
+
* rules to run anyway.
|
|
192
|
+
*/
|
|
193
|
+
siteClassification: import("./site-classifier.js").SiteClassification;
|
|
194
|
+
/** Engine-internal diagnostics (origin readiness, crawl stats). Weight 0. */
|
|
195
|
+
diagnostics: Diagnostics;
|
|
122
196
|
groupScores?: Record<string, number>;
|
|
123
197
|
groupPageCounts?: Record<string, number>;
|
|
124
198
|
pageCount: number;
|
|
125
|
-
findings: RuleResult[];
|
|
126
199
|
/** True when the enrichment pipeline detects template-generated content. */
|
|
127
200
|
templateDetected?: boolean;
|
|
128
201
|
/** Pre-enrichment finding count, for backward compatibility with CI scripts. */
|
|
@@ -160,12 +233,6 @@ export interface AuditOptions {
|
|
|
160
233
|
uniqueValueMinWords?: number;
|
|
161
234
|
metaUniquenessMinJaccard?: number;
|
|
162
235
|
linkDepthMaxClicks?: number;
|
|
163
|
-
/** Minimum pages in one directory before hub/index coverage is required. */
|
|
164
|
-
hubPagesMinSiblings?: number;
|
|
165
|
-
/** Skip hub/index checks when a directory has more than this many pages (e.g. large blogs). */
|
|
166
|
-
hubPagesMaxSiblings?: number;
|
|
167
|
-
titleOverlapThreshold?: number;
|
|
168
|
-
keywordCollisionMinShared?: number;
|
|
169
236
|
templateCoverageMinPages?: number;
|
|
170
237
|
/** aeo/answer-first: max words in the first paragraph for extractable answer. */
|
|
171
238
|
answerFirstMaxWords?: number;
|
|
@@ -188,8 +255,25 @@ export interface AuditOptions {
|
|
|
188
255
|
timeout?: number;
|
|
189
256
|
/** Audit a random subset of N pages. 0 means all pages (default: 0). */
|
|
190
257
|
sampleSize?: number;
|
|
191
|
-
/**
|
|
258
|
+
/**
|
|
259
|
+
* URL/path glob patterns to exclude from the audit. v0.4: globs match
|
|
260
|
+
* against the URL pathname only (e.g. "/api/foo"), not the full URL.
|
|
261
|
+
* When `warnUnmatchedIgnore` is true, the auditor logs a per-pattern
|
|
262
|
+
* warning for any pattern that matched zero discovered URLs. Regardless
|
|
263
|
+
* of the flag, if EVERY ignore pattern matched zero URLs, a single
|
|
264
|
+
* consolidated warning is emitted (likely systematic typo).
|
|
265
|
+
*/
|
|
192
266
|
ignore?: string[];
|
|
267
|
+
/**
|
|
268
|
+
* v0.4.1: when true, emit a per-pattern warning for each `ignore` glob
|
|
269
|
+
* that matched zero discovered URLs. Default: false (quiet) — config-
|
|
270
|
+
* loaded patterns commonly include broad safety lists like
|
|
271
|
+
* `**\/dashboard\/**` that legitimately don't match a small site. The
|
|
272
|
+
* CLI sets this to true only when `--ignore` was passed explicitly on
|
|
273
|
+
* the command line. The all-zero consolidated warning still fires
|
|
274
|
+
* regardless of this flag.
|
|
275
|
+
*/
|
|
276
|
+
warnUnmatchedIgnore?: boolean;
|
|
193
277
|
crawlDiscovery?: boolean;
|
|
194
278
|
/**
|
|
195
279
|
* When true and crawlDiscovery is also true, top the sample budget up to `sampleSize` by
|
|
@@ -243,7 +327,100 @@ export interface AuditOptions {
|
|
|
243
327
|
ai?: AiOptions;
|
|
244
328
|
/** Local-only telemetry (JSONL) options. When omitted or `enabled: false`, no records are written. */
|
|
245
329
|
telemetry?: TelemetryOptions;
|
|
330
|
+
/**
|
|
331
|
+
* External abort signal. When aborted, in-flight fetches are cancelled and
|
|
332
|
+
* `auditSource` throws an `AbortError`. Host code can use this to kill an
|
|
333
|
+
* audit that exceeded a per-user budget or was cancelled by the user.
|
|
334
|
+
*/
|
|
335
|
+
signal?: AbortSignal;
|
|
336
|
+
/**
|
|
337
|
+
* When true, every crawled URL's hostname is validated with
|
|
338
|
+
* `validateTargetHost` before fetch — resolves the hostname and rejects if
|
|
339
|
+
* any address is in a private / reserved / link-local / loopback / multicast
|
|
340
|
+
* range. Applies to the source URL, sitemap entries, redirect targets, and
|
|
341
|
+
* discovered links. Defends against SSRF / DNS-rebinding when the library is
|
|
342
|
+
* invoked against user-supplied URLs (e.g. from a hosted audit service).
|
|
343
|
+
* Default: false (CLI users auditing localhost / staging sites should not
|
|
344
|
+
* be broken silently).
|
|
345
|
+
*/
|
|
346
|
+
guardSsrf?: boolean;
|
|
347
|
+
/**
|
|
348
|
+
* When true (default), sitemap URLs that match a `Disallow:` rule in the
|
|
349
|
+
* target's robots.txt are skipped at fetch time instead of crawled. Set to
|
|
350
|
+
* false to audit staging / internal sites that Disallow everything.
|
|
351
|
+
*/
|
|
352
|
+
respectRobotsTxt?: boolean;
|
|
353
|
+
/**
|
|
354
|
+
* When true (default), pages explicitly marked `noindex` (via
|
|
355
|
+
* `<meta name="robots">` or `X-Robots-Tag` header) are excluded from rule
|
|
356
|
+
* evaluation — the site owner already opted out of SEO indexing for them.
|
|
357
|
+
* The skipped URLs surface in `summary.skippedUrls` with reason `"noindex"`.
|
|
358
|
+
* Set to false to audit them anyway (useful when investigating why a
|
|
359
|
+
* specific page was accidentally noindex'd).
|
|
360
|
+
*/
|
|
361
|
+
respectNoindex?: boolean;
|
|
362
|
+
/**
|
|
363
|
+
* When true, pages heuristically detected as auth surfaces (login / signup /
|
|
364
|
+
* password reset) are excluded from rule evaluation. Detection requires 2+
|
|
365
|
+
* signals: `<input type="password">` in a < 200-word body, title matching
|
|
366
|
+
* the auth-page regex (case-insensitive, after stripping brand suffix), or
|
|
367
|
+
* H1 matching the same regex. Default: false (CLI runs unchanged; the
|
|
368
|
+
* hosted web form turns this on so end-user audits aren't polluted by auth
|
|
369
|
+
* pages at unconventional URLs like `/account` or `/portal`).
|
|
370
|
+
*/
|
|
371
|
+
skipDetectedAuth?: boolean;
|
|
372
|
+
/**
|
|
373
|
+
* Preset that flips several safety options at once.
|
|
374
|
+
* "saas" — intended for hosted services auditing user-submitted URLs:
|
|
375
|
+
* guardSsrf=true, respectRobotsTxt=true, tighter maxFetchBytes cap,
|
|
376
|
+
* followRedirects stays true (audits need final URL).
|
|
377
|
+
* "cli" — intended for local CLI / dev use:
|
|
378
|
+
* guardSsrf=false (auditing localhost is OK), respectRobotsTxt=true,
|
|
379
|
+
* default caps.
|
|
380
|
+
* "dev" — tiny crawl budget for localhost probing: concurrency=1,
|
|
381
|
+
* sampleSize=25, maxCrawlDiscovered=50. Designed so a cache-cold
|
|
382
|
+
* `pseolint http://localhost:3000` doesn't thundering-herd a dev DB.
|
|
383
|
+
* Auto-selected on localhost sources unless `autoDevPreset: false`.
|
|
384
|
+
* Individual options on AuditOptions override the preset when set.
|
|
385
|
+
* Default: undefined (no preset applied, existing opt-in behaviour).
|
|
386
|
+
*/
|
|
387
|
+
safeMode?: SafeMode;
|
|
388
|
+
/**
|
|
389
|
+
* When true (default), audit sources pointing at localhost / private
|
|
390
|
+
* networks are auto-promoted to the `dev` safeMode preset. Set to false
|
|
391
|
+
* to opt out (e.g. `--full` on the CLI). Explicit `safeMode` beats this.
|
|
392
|
+
*/
|
|
393
|
+
autoDevPreset?: boolean;
|
|
394
|
+
/**
|
|
395
|
+
* Hard ceiling on URLs discovered via link-following before sampling.
|
|
396
|
+
* Protects against malicious sites with many self-links that could extend
|
|
397
|
+
* the crawl up to the byte budget. Default: 5000.
|
|
398
|
+
*/
|
|
399
|
+
maxCrawlDiscovered?: number;
|
|
400
|
+
/**
|
|
401
|
+
* When false, 3xx responses are returned as-is (the audit will see the
|
|
402
|
+
* redirect location header and can report it) instead of followed. Useful
|
|
403
|
+
* for security-sensitive audits that must not leave the exact submitted
|
|
404
|
+
* URL. Default: true.
|
|
405
|
+
*/
|
|
406
|
+
followRedirects?: boolean;
|
|
407
|
+
/**
|
|
408
|
+
* When false, disables the in-flight backpressure watchdog that aborts the
|
|
409
|
+
* audit when origin latency / 5xx rate spikes past thresholds during the
|
|
410
|
+
* crawl. On by default; the last line of defence against a cache-cold
|
|
411
|
+
* origin ballooning an audit into an expensive egress event.
|
|
412
|
+
*/
|
|
413
|
+
backpressure?: boolean;
|
|
414
|
+
/**
|
|
415
|
+
* v0.4 §4.11 — when true, the site classifier still runs and `summary.siteClassification`
|
|
416
|
+
* is populated, but `suppressedRules` is forced to `[]` so every rule executes
|
|
417
|
+
* regardless of detected site type. Use this to inspect what the classifier
|
|
418
|
+
* sees on a site that would otherwise have pSEO-only rules suppressed.
|
|
419
|
+
* Default: false.
|
|
420
|
+
*/
|
|
421
|
+
strict?: boolean;
|
|
246
422
|
}
|
|
423
|
+
export type SafeMode = "saas" | "cli" | "dev";
|
|
247
424
|
export type SamplingStrategy = "stratified" | "random";
|
|
248
425
|
/** A single page's source data for data-source comparison. */
|
|
249
426
|
export interface PageDataRecord {
|
|
@@ -267,6 +444,12 @@ export interface HttpMeta {
|
|
|
267
444
|
redirectChain: string[];
|
|
268
445
|
xRobotsTag: string;
|
|
269
446
|
linkHeader: string;
|
|
447
|
+
/**
|
|
448
|
+
* v0.4: lower-cased response headers. Populated for the source URL only
|
|
449
|
+
* (used by the dev-server framework detector). Other crawled pages can
|
|
450
|
+
* leave this undefined to keep the audit memory-bounded.
|
|
451
|
+
*/
|
|
452
|
+
headers?: Record<string, string>;
|
|
270
453
|
}
|
|
271
454
|
export interface ParsedPage {
|
|
272
455
|
url: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,uDAAuD;AACvD,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gGAAgG;IAChG,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAE5D,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAQA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pseolint/core",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Programmatic SEO audit engine —
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "Programmatic SEO audit engine — 32 rules across 4 categories (integrity, discoverability, citation, data) for SpamBrain risk + AI Overview citability. v0.4 verdict ladder + site classifier.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ouranos Labs <contact@ouranos-labs.dev>",
|
|
7
7
|
"homepage": "https://pseolint.dev",
|