@mew-lab/a11y-cli 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/README.md +80 -0
- package/bin/a11y.mjs +27 -0
- package/dist/api.d.ts +50 -0
- package/dist/api.js +17 -0
- package/dist/api.js.map +1 -0
- package/dist/chunk-Y6KJQSVY.js +3514 -0
- package/dist/chunk-Y6KJQSVY.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +393 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# @mew-lab/a11y-cli
|
|
2
|
+
|
|
3
|
+
writer: Claude Code
|
|
4
|
+
|
|
5
|
+
WAI-ARIA APG パターンと WCAG 2.2 のアクセシビリティ観点を、コマンドラインと JSON で引けるツールです。
|
|
6
|
+
[a11y.mew-lab.com](https://a11y.mew-lab.com) と同じ知識(日本語)を、エディタの手元や AI エージェントから参照できます。
|
|
7
|
+
|
|
8
|
+
## インストール
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
# 単発で使う(推奨)
|
|
12
|
+
npx @mew-lab/a11y-cli pattern dialog-modal
|
|
13
|
+
|
|
14
|
+
# グローバルに入れる
|
|
15
|
+
npm install -g @mew-lab/a11y-cli
|
|
16
|
+
a11y pattern dialog-modal
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Node.js 18 以上が必要です。
|
|
20
|
+
|
|
21
|
+
## コマンド
|
|
22
|
+
|
|
23
|
+
| コマンド | 説明 |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `a11y pattern [slug]` | APG パターンの観点(ARIA・キーボード・チェックリスト・アンチパターン・関連 WCAG)。無引数で一覧 |
|
|
26
|
+
| `a11y wcag [slug]` | WCAG 2.2 達成基準(レベル・原則・要約・参照 URL・関連パターン)。無引数で一覧 |
|
|
27
|
+
| `a11y search <query>` | パターン + WCAG を横断検索 |
|
|
28
|
+
| `a11y checklist <slug>` | パターンの実装チェックリストだけを表示(PR レビュー向け) |
|
|
29
|
+
| `a11y manifest` | 全コマンド/レスポンス型の構造化 manifest(AI エージェント向け) |
|
|
30
|
+
| `a11y doctor` | 実行環境を診断 |
|
|
31
|
+
|
|
32
|
+
グローバルオプション: `--json`(型付き JSON 出力)/ `--detail <full\|compact\|brief>` / `-v, --version`。
|
|
33
|
+
|
|
34
|
+
## 使用例
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
# モーダルダイアログの観点を見る
|
|
38
|
+
a11y pattern dialog-modal
|
|
39
|
+
|
|
40
|
+
# パターン一覧
|
|
41
|
+
a11y pattern
|
|
42
|
+
|
|
43
|
+
# WCAG 達成基準を JSON で取得(スクリプト/AI 向け)
|
|
44
|
+
a11y wcag 1-1-1 --json
|
|
45
|
+
|
|
46
|
+
# 「フォーカス」に関する項目を横断検索
|
|
47
|
+
a11y search フォーカス
|
|
48
|
+
|
|
49
|
+
# タブの実装チェックリストだけ
|
|
50
|
+
a11y checklist tabs
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## AI エージェント / スクリプトから使う
|
|
54
|
+
|
|
55
|
+
`--json` を付けると、機械可読な封筒で出力します。
|
|
56
|
+
|
|
57
|
+
```jsonc
|
|
58
|
+
// 成功
|
|
59
|
+
{ "apiVersion": 1, "type": "pattern.detail", "data": { /* ... */ } }
|
|
60
|
+
|
|
61
|
+
// エラー(code で分岐できる。code は append-only の安定値)
|
|
62
|
+
{ "apiVersion": 1, "error": "'dialg' というパターンはありません",
|
|
63
|
+
"code": "ERR_UNKNOWN_PATTERN",
|
|
64
|
+
"suggestions": [{ "slug": "dialog-modal", "reason": "モーダルダイアログ(似た名前)" }] }
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
まず `a11y manifest --json` でコマンドとレスポンス型の一覧を取得すると、ヘルプをスクレイプせずに使えます。
|
|
68
|
+
|
|
69
|
+
### プログラムから(API)
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import { patternDetail, wcagDetail, search } from '@mew-lab/a11y-cli/api';
|
|
73
|
+
|
|
74
|
+
const { data } = patternDetail('dialog-modal'); // { type, data } を返す。CLI と同じロジック
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## データの出どころ
|
|
78
|
+
|
|
79
|
+
すべての観点データは [`@mew-lab/a11y-core`](../core) に一元化されています(唯一の真実)。
|
|
80
|
+
Web サイトと CLI は同じ core を参照するため、内容が食い違いません。
|
package/bin/a11y.mjs
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Node バージョンゲート → CLI 本体(dist)を動的 import する。
|
|
3
|
+
// 古い Node でも cryptic な ESM エラーではなく分かりやすいメッセージを出す。
|
|
4
|
+
const MIN = [18, 0, 0];
|
|
5
|
+
const cur = process.versions.node.split('.').map((n) => Number.parseInt(n, 10));
|
|
6
|
+
|
|
7
|
+
function isOlder(a, b) {
|
|
8
|
+
for (let i = 0; i < 3; i++) {
|
|
9
|
+
const va = a[i] ?? 0;
|
|
10
|
+
const vb = b[i] ?? 0;
|
|
11
|
+
if (va !== vb) return va < vb;
|
|
12
|
+
}
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (isOlder(cur, MIN)) {
|
|
17
|
+
const msg = `a11y CLI には Node.js ${MIN.join('.')} 以上が必要です(現在: ${process.versions.node})`;
|
|
18
|
+
if (process.argv.includes('--json')) {
|
|
19
|
+
console.log(JSON.stringify({ apiVersion: 1, error: msg, code: 'ERR_NODE_VERSION' }, null, 2));
|
|
20
|
+
} else {
|
|
21
|
+
console.error(msg);
|
|
22
|
+
}
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const { run } = await import('../dist/index.js');
|
|
27
|
+
await run(process.argv);
|
package/dist/api.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SearchHit, PatternDetail, CriterionDetail } from '@mew-lab/a11y-core';
|
|
2
|
+
|
|
3
|
+
interface ApiResult<T extends string, D> {
|
|
4
|
+
type: T;
|
|
5
|
+
data: D;
|
|
6
|
+
}
|
|
7
|
+
interface PatternListData {
|
|
8
|
+
total: number;
|
|
9
|
+
categories: {
|
|
10
|
+
category: string;
|
|
11
|
+
items: {
|
|
12
|
+
slug: string;
|
|
13
|
+
ja: string;
|
|
14
|
+
en: string;
|
|
15
|
+
summary: string;
|
|
16
|
+
}[];
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
declare function patternList(): ApiResult<'pattern.list', PatternListData>;
|
|
20
|
+
declare function patternDetail(slug: string): ApiResult<'pattern.detail', PatternDetail>;
|
|
21
|
+
interface WcagListData {
|
|
22
|
+
total: number;
|
|
23
|
+
principles: {
|
|
24
|
+
principle: string;
|
|
25
|
+
items: {
|
|
26
|
+
slug: string;
|
|
27
|
+
num: string;
|
|
28
|
+
ja: string;
|
|
29
|
+
en: string;
|
|
30
|
+
level: string;
|
|
31
|
+
summary: string;
|
|
32
|
+
}[];
|
|
33
|
+
}[];
|
|
34
|
+
}
|
|
35
|
+
declare function wcagList(): ApiResult<'wcag.list', WcagListData>;
|
|
36
|
+
declare function wcagDetail(slug: string): ApiResult<'wcag.detail', CriterionDetail>;
|
|
37
|
+
interface SearchData {
|
|
38
|
+
query: string;
|
|
39
|
+
total: number;
|
|
40
|
+
hits: SearchHit[];
|
|
41
|
+
}
|
|
42
|
+
declare function search(query: string): ApiResult<'search.results', SearchData>;
|
|
43
|
+
interface ChecklistData {
|
|
44
|
+
slug: string;
|
|
45
|
+
ja: string;
|
|
46
|
+
checklist: string[];
|
|
47
|
+
}
|
|
48
|
+
declare function checklist(slug: string): ApiResult<'pattern.checklist', ChecklistData>;
|
|
49
|
+
|
|
50
|
+
export { type ApiResult, type ChecklistData, type PatternListData, type SearchData, type WcagListData, checklist, patternDetail, patternList, search, wcagDetail, wcagList };
|
package/dist/api.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
checklist,
|
|
3
|
+
patternDetail,
|
|
4
|
+
patternList,
|
|
5
|
+
search,
|
|
6
|
+
wcagDetail,
|
|
7
|
+
wcagList
|
|
8
|
+
} from "./chunk-Y6KJQSVY.js";
|
|
9
|
+
export {
|
|
10
|
+
checklist,
|
|
11
|
+
patternDetail,
|
|
12
|
+
patternList,
|
|
13
|
+
search,
|
|
14
|
+
wcagDetail,
|
|
15
|
+
wcagList
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|