@accesslint/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3609 -0
- package/dist/rules/aria/aria-allowed-attr.d.ts +3 -0
- package/dist/rules/aria/aria-allowed-attr.d.ts.map +1 -0
- package/dist/rules/aria/aria-allowed-role.d.ts +3 -0
- package/dist/rules/aria/aria-allowed-role.d.ts.map +1 -0
- package/dist/rules/aria/aria-attr-audit.d.ts +10 -0
- package/dist/rules/aria/aria-attr-audit.d.ts.map +1 -0
- package/dist/rules/aria/aria-children-parent.d.ts +4 -0
- package/dist/rules/aria/aria-children-parent.d.ts.map +1 -0
- package/dist/rules/aria/aria-hidden-rules.d.ts +4 -0
- package/dist/rules/aria/aria-hidden-rules.d.ts.map +1 -0
- package/dist/rules/aria/aria-name-rules.d.ts +10 -0
- package/dist/rules/aria/aria-name-rules.d.ts.map +1 -0
- package/dist/rules/aria/aria-prohibited-attr.d.ts +3 -0
- package/dist/rules/aria/aria-prohibited-attr.d.ts.map +1 -0
- package/dist/rules/aria/aria-required-attr.d.ts +3 -0
- package/dist/rules/aria/aria-required-attr.d.ts.map +1 -0
- package/dist/rules/aria/aria-roles.d.ts +3 -0
- package/dist/rules/aria/aria-roles.d.ts.map +1 -0
- package/dist/rules/aria/aria-valid-attr-value.d.ts +3 -0
- package/dist/rules/aria/aria-valid-attr-value.d.ts.map +1 -0
- package/dist/rules/aria/aria-valid-attr.d.ts +3 -0
- package/dist/rules/aria/aria-valid-attr.d.ts.map +1 -0
- package/dist/rules/aria/button-name.d.ts +3 -0
- package/dist/rules/aria/button-name.d.ts.map +1 -0
- package/dist/rules/aria/presentation-role-conflict.d.ts +3 -0
- package/dist/rules/aria/presentation-role-conflict.d.ts.map +1 -0
- package/dist/rules/aria/summary-name.d.ts +3 -0
- package/dist/rules/aria/summary-name.d.ts.map +1 -0
- package/dist/rules/engine.d.ts +12 -0
- package/dist/rules/engine.d.ts.map +1 -0
- package/dist/rules/forms/autocomplete-valid.d.ts +3 -0
- package/dist/rules/forms/autocomplete-valid.d.ts.map +1 -0
- package/dist/rules/forms/input-button-name.d.ts +3 -0
- package/dist/rules/forms/input-button-name.d.ts.map +1 -0
- package/dist/rules/forms/label-content-name-mismatch.d.ts +3 -0
- package/dist/rules/forms/label-content-name-mismatch.d.ts.map +1 -0
- package/dist/rules/forms/label-title-only.d.ts +3 -0
- package/dist/rules/forms/label-title-only.d.ts.map +1 -0
- package/dist/rules/forms/label.d.ts +4 -0
- package/dist/rules/forms/label.d.ts.map +1 -0
- package/dist/rules/forms/select-name.d.ts +3 -0
- package/dist/rules/forms/select-name.d.ts.map +1 -0
- package/dist/rules/images/area-alt.d.ts +3 -0
- package/dist/rules/images/area-alt.d.ts.map +1 -0
- package/dist/rules/images/image-redundant-alt.d.ts +14 -0
- package/dist/rules/images/image-redundant-alt.d.ts.map +1 -0
- package/dist/rules/images/img-alt.d.ts +3 -0
- package/dist/rules/images/img-alt.d.ts.map +1 -0
- package/dist/rules/images/input-image-alt.d.ts +3 -0
- package/dist/rules/images/input-image-alt.d.ts.map +1 -0
- package/dist/rules/images/object-alt.d.ts +3 -0
- package/dist/rules/images/object-alt.d.ts.map +1 -0
- package/dist/rules/images/role-img-alt.d.ts +3 -0
- package/dist/rules/images/role-img-alt.d.ts.map +1 -0
- package/dist/rules/images/server-side-image-map.d.ts +3 -0
- package/dist/rules/images/server-side-image-map.d.ts.map +1 -0
- package/dist/rules/images/svg-img-alt.d.ts +3 -0
- package/dist/rules/images/svg-img-alt.d.ts.map +1 -0
- package/dist/rules/index.d.ts +28 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/keyboard/accesskeys.d.ts +3 -0
- package/dist/rules/keyboard/accesskeys.d.ts.map +1 -0
- package/dist/rules/keyboard/focus-order-semantics.d.ts +3 -0
- package/dist/rules/keyboard/focus-order-semantics.d.ts.map +1 -0
- package/dist/rules/keyboard/interactive-rules.d.ts +4 -0
- package/dist/rules/keyboard/interactive-rules.d.ts.map +1 -0
- package/dist/rules/keyboard/tabindex.d.ts +3 -0
- package/dist/rules/keyboard/tabindex.d.ts.map +1 -0
- package/dist/rules/language/html-has-lang.d.ts +6 -0
- package/dist/rules/language/html-has-lang.d.ts.map +1 -0
- package/dist/rules/links/link-name.d.ts +3 -0
- package/dist/rules/links/link-name.d.ts.map +1 -0
- package/dist/rules/links/link-rules.d.ts +4 -0
- package/dist/rules/links/link-rules.d.ts.map +1 -0
- package/dist/rules/media/media-captions.d.ts +4 -0
- package/dist/rules/media/media-captions.d.ts.map +1 -0
- package/dist/rules/parsing/duplicate-id.d.ts +3 -0
- package/dist/rules/parsing/duplicate-id.d.ts.map +1 -0
- package/dist/rules/structure/deprecated-elements.d.ts +4 -0
- package/dist/rules/structure/deprecated-elements.d.ts.map +1 -0
- package/dist/rules/structure/document-rules.d.ts +5 -0
- package/dist/rules/structure/document-rules.d.ts.map +1 -0
- package/dist/rules/structure/frame-rules.d.ts +4 -0
- package/dist/rules/structure/frame-rules.d.ts.map +1 -0
- package/dist/rules/structure/heading-order.d.ts +3 -0
- package/dist/rules/structure/heading-order.d.ts.map +1 -0
- package/dist/rules/structure/heading-rules.d.ts +3 -0
- package/dist/rules/structure/heading-rules.d.ts.map +1 -0
- package/dist/rules/structure/landmark-rules.d.ts +13 -0
- package/dist/rules/structure/landmark-rules.d.ts.map +1 -0
- package/dist/rules/structure/list-rules.d.ts +5 -0
- package/dist/rules/structure/list-rules.d.ts.map +1 -0
- package/dist/rules/structure/meta-rules.d.ts +4 -0
- package/dist/rules/structure/meta-rules.d.ts.map +1 -0
- package/dist/rules/structure/semantic-rules.d.ts +3 -0
- package/dist/rules/structure/semantic-rules.d.ts.map +1 -0
- package/dist/rules/tables/table-headers.d.ts +7 -0
- package/dist/rules/tables/table-headers.d.ts.map +1 -0
- package/dist/rules/types.d.ts +87 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/utils/aria.d.ts +25 -0
- package/dist/rules/utils/aria.d.ts.map +1 -0
- package/dist/rules/utils/selector.d.ts +16 -0
- package/dist/rules/utils/selector.d.ts.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export interface Rule {
|
|
2
|
+
id: string;
|
|
3
|
+
wcag: string[];
|
|
4
|
+
level: "A" | "AA";
|
|
5
|
+
tags?: string[];
|
|
6
|
+
description: string;
|
|
7
|
+
/** Generic remediation guidance for the AI to contextualize */
|
|
8
|
+
guidance?: string;
|
|
9
|
+
/** Tailored prompt for AI explanation of this specific rule violation */
|
|
10
|
+
prompt?: string;
|
|
11
|
+
run(doc: Document): Violation[];
|
|
12
|
+
}
|
|
13
|
+
export interface Violation {
|
|
14
|
+
ruleId: string;
|
|
15
|
+
selector: string;
|
|
16
|
+
html: string;
|
|
17
|
+
impact: "critical" | "serious" | "moderate" | "minor";
|
|
18
|
+
message: string;
|
|
19
|
+
/** Rule-specific surrounding context to help AI understand the issue */
|
|
20
|
+
context?: string;
|
|
21
|
+
element?: Element;
|
|
22
|
+
}
|
|
23
|
+
export interface AuditResult {
|
|
24
|
+
url: string;
|
|
25
|
+
timestamp: number;
|
|
26
|
+
violations: Violation[];
|
|
27
|
+
ruleCount: number;
|
|
28
|
+
}
|
|
29
|
+
export interface SelectorExistsCheck {
|
|
30
|
+
type: "selector-exists";
|
|
31
|
+
}
|
|
32
|
+
export interface AttributeValueCheck {
|
|
33
|
+
type: "attribute-value";
|
|
34
|
+
attribute: string;
|
|
35
|
+
operator: ">" | "<" | "=" | "!=" | "in" | "not-in";
|
|
36
|
+
value: number | string | string[];
|
|
37
|
+
}
|
|
38
|
+
export interface AttributeMissingCheck {
|
|
39
|
+
type: "attribute-missing";
|
|
40
|
+
attribute: string;
|
|
41
|
+
}
|
|
42
|
+
export interface AttributeRegexCheck {
|
|
43
|
+
type: "attribute-regex";
|
|
44
|
+
attribute: string;
|
|
45
|
+
pattern: string;
|
|
46
|
+
flags?: string;
|
|
47
|
+
shouldMatch: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ChildRequiredCheck {
|
|
50
|
+
type: "child-required";
|
|
51
|
+
childSelector: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ChildInvalidCheck {
|
|
54
|
+
type: "child-invalid";
|
|
55
|
+
allowedChildren: string[];
|
|
56
|
+
}
|
|
57
|
+
export type CheckType = SelectorExistsCheck | AttributeValueCheck | AttributeMissingCheck | AttributeRegexCheck | ChildRequiredCheck | ChildInvalidCheck;
|
|
58
|
+
export interface DeclarativeRule {
|
|
59
|
+
id: string;
|
|
60
|
+
selector: string;
|
|
61
|
+
check: CheckType;
|
|
62
|
+
impact: "critical" | "serious" | "moderate" | "minor";
|
|
63
|
+
message: string;
|
|
64
|
+
description: string;
|
|
65
|
+
wcag: string[];
|
|
66
|
+
level: "A" | "AA";
|
|
67
|
+
tags?: string[];
|
|
68
|
+
guidance?: string;
|
|
69
|
+
prompt?: string;
|
|
70
|
+
skipAriaHidden?: boolean;
|
|
71
|
+
documentOnly?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface RemoteRuleMetadata {
|
|
74
|
+
description?: string;
|
|
75
|
+
guidance?: string;
|
|
76
|
+
prompt?: string;
|
|
77
|
+
wcag?: string[];
|
|
78
|
+
level?: "A" | "AA";
|
|
79
|
+
tags?: string[];
|
|
80
|
+
}
|
|
81
|
+
export interface RemoteRuleData {
|
|
82
|
+
version: number;
|
|
83
|
+
metadata?: Record<string, RemoteRuleMetadata>;
|
|
84
|
+
rules?: DeclarativeRule[];
|
|
85
|
+
disabled?: string[];
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare function clearComputedRoleCache(): void;
|
|
2
|
+
/**
|
|
3
|
+
* Return the implicit ARIA role for a native HTML element, or null if
|
|
4
|
+
* the element does not map to any role. Follows the ARIA in HTML spec:
|
|
5
|
+
* https://www.w3.org/TR/html-aria/#docconformance
|
|
6
|
+
*/
|
|
7
|
+
export declare function getImplicitRole(el: Element): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* Return the computed ARIA role for an element: the explicit `role`
|
|
10
|
+
* attribute if present, otherwise the implicit role derived from the
|
|
11
|
+
* HTML tag name and attributes. Results are cached per-audit via a
|
|
12
|
+
* WeakMap (call `clearComputedRoleCache()` between audits).
|
|
13
|
+
*/
|
|
14
|
+
export declare function getComputedRole(el: Element): string | null;
|
|
15
|
+
export declare function getAccessibleName(el: Element): string;
|
|
16
|
+
export declare function isValidRole(role: string): boolean;
|
|
17
|
+
export declare function isValidAriaAttribute(attr: string): boolean;
|
|
18
|
+
export declare function clearAriaHiddenCache(): void;
|
|
19
|
+
export declare function isAriaHidden(el: Element): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Get text content from an element, excluding descendants
|
|
22
|
+
* removed from the accessibility tree.
|
|
23
|
+
*/
|
|
24
|
+
export declare function getAccessibleTextContent(el: Element): string;
|
|
25
|
+
//# sourceMappingURL=aria.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aria.d.ts","sourceRoot":"","sources":["../../../src/rules/utils/aria.ts"],"names":[],"mappings":"AAMA,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA0D1D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAS1D;AAMD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CA0ErD;AAkBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIjD;AAWD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAID,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAiBjD;AAYD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAiC5D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a CSS selector for an element.
|
|
3
|
+
* If the element is inside a shadow root, produces a ` >>> `-delimited
|
|
4
|
+
* path that crosses shadow boundaries: `host-selector >>> inner-selector`.
|
|
5
|
+
* If the element is inside an iframe, produces a ` >>>iframe> `-delimited
|
|
6
|
+
* path that crosses iframe boundaries: `iframe-selector >>>iframe> inner-selector`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSelector(el: Element): string;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a selector that may contain ` >>> ` (shadow DOM) or
|
|
11
|
+
* ` >>>iframe> ` (iframe) boundary delimiters.
|
|
12
|
+
* Falls back to plain querySelector for selectors without boundaries.
|
|
13
|
+
*/
|
|
14
|
+
export declare function querySelectorShadowAware(selector: string): Element | null;
|
|
15
|
+
export declare function getHtmlSnippet(el: Element): string;
|
|
16
|
+
//# sourceMappingURL=selector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../../src/rules/utils/selector.ts"],"names":[],"mappings":"AAoEA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAwB/C;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAgDzE;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAGlD"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@accesslint/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Pure accessibility rule engine — WCAG audit with zero browser dependencies",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "vite build --config vite.lib.config.ts && tsc -p tsconfig.lib.json",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"bench": "vitest bench",
|
|
23
|
+
"prepublishOnly": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git+https://github.com/accesslint/core.git"
|
|
28
|
+
},
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"happy-dom": "^20.4.0",
|
|
32
|
+
"typescript": "^5.7.0",
|
|
33
|
+
"vite": "^6.0.0",
|
|
34
|
+
"vitest": "^3.0.0"
|
|
35
|
+
}
|
|
36
|
+
}
|