chaffjs 0.7.0 → 0.8.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 +11 -4
- package/dist/adapter-load.d.ts +12 -1
- package/dist/adapter-load.d.ts.map +1 -1
- package/dist/adapter-load.js +37 -13
- package/dist/adapter-load.js.map +1 -1
- package/dist/cli-args.d.ts +8 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +8 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-text.d.ts +26 -0
- package/dist/cli-text.d.ts.map +1 -0
- package/dist/cli-text.js +151 -0
- package/dist/cli-text.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +75 -86
- package/dist/cli.js.map +1 -1
- package/dist/commands/cite.d.ts +2 -1
- package/dist/commands/cite.d.ts.map +1 -1
- package/dist/commands/cite.js +39 -18
- package/dist/commands/cite.js.map +1 -1
- package/dist/commands/skill.d.ts +22 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +68 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/tree.d.ts +11 -1
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +18 -6
- package/dist/commands/tree.js.map +1 -1
- package/dist/config/rule-problems.d.ts +2 -1
- package/dist/config/rule-problems.d.ts.map +1 -1
- package/dist/config/rule-problems.js +17 -6
- package/dist/config/rule-problems.js.map +1 -1
- package/dist/config/write.d.ts.map +1 -1
- package/dist/config/write.js +29 -9
- package/dist/config/write.js.map +1 -1
- package/dist/genre.d.ts +1 -1
- package/dist/genre.d.ts.map +1 -1
- package/dist/genre.js +3 -3
- package/dist/genre.js.map +1 -1
- package/dist/init.d.ts +2 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +62 -13
- package/dist/init.js.map +1 -1
- package/dist/plugin.d.ts +6 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/reasons.d.ts +15 -0
- package/dist/reasons.d.ts.map +1 -0
- package/dist/reasons.js +29 -0
- package/dist/reasons.js.map +1 -0
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +36 -12
- package/dist/render/explain.js.map +1 -1
- package/dist/render/friendly.d.ts.map +1 -1
- package/dist/render/friendly.js +32 -9
- package/dist/render/friendly.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +47 -27
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/summary.d.ts +3 -2
- package/dist/render/summary.d.ts.map +1 -1
- package/dist/render/summary.js +24 -9
- package/dist/render/summary.js.map +1 -1
- package/dist/render/suppressions.d.ts +2 -1
- package/dist/render/suppressions.d.ts.map +1 -1
- package/dist/render/suppressions.js +34 -10
- package/dist/render/suppressions.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +18 -10
- package/dist/run.js.map +1 -1
- package/dist/structure/build.d.ts.map +1 -1
- package/dist/structure/build.js +8 -2
- package/dist/structure/build.js.map +1 -1
- package/dist/structure/cite.d.ts.map +1 -1
- package/dist/structure/cite.js +3 -1
- package/dist/structure/cite.js.map +1 -1
- package/dist/structure/issues.d.ts +5 -2
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +27 -9
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/numbering.d.ts.map +1 -1
- package/dist/structure/numbering.js +11 -6
- package/dist/structure/numbering.js.map +1 -1
- package/dist/ui.d.ts +14 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +14 -0
- package/dist/ui.js.map +1 -0
- package/dist/watch.d.ts +1 -1
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +2 -2
- package/dist/watch.js.map +1 -1
- package/package.json +3 -2
- package/skills/chaff/SKILL.md +61 -0
- package/src/adapter-load.ts +41 -10
- package/src/cli-args.ts +9 -0
- package/src/cli-text.ts +182 -0
- package/src/cli.ts +91 -89
- package/src/commands/cite.ts +51 -18
- package/src/commands/skill.ts +74 -0
- package/src/commands/tree.ts +27 -7
- package/src/config/rule-problems.ts +24 -5
- package/src/config/write.ts +33 -9
- package/src/genre.ts +4 -4
- package/src/init.ts +74 -15
- package/src/plugin.ts +6 -0
- package/src/reasons.ts +44 -0
- package/src/render/explain.ts +46 -12
- package/src/render/friendly.ts +42 -10
- package/src/render/rules-json.ts +35 -9
- package/src/render/summary.ts +34 -9
- package/src/render/suppressions.ts +45 -10
- package/src/run.ts +20 -9
- package/src/structure/build.ts +10 -2
- package/src/structure/cite.ts +3 -1
- package/src/structure/issues.ts +33 -14
- package/src/structure/numbering.ts +12 -7
- package/src/ui.ts +23 -0
- package/src/watch.ts +2 -2
package/README.md
CHANGED
|
@@ -10,6 +10,9 @@ npx chaffjs article.md
|
|
|
10
10
|
|
|
11
11
|
インストールも、AI の利用登録も、言語の指定も要りません。
|
|
12
12
|
|
|
13
|
+
> chaff finds what makes writing hard to read — in Japanese and English — and never rewrites the text. On an
|
|
14
|
+
> English document it speaks English. Guide and rule reference: https://isamu.github.io/lab/en/
|
|
15
|
+
|
|
13
16
|
## 何を見つけるか
|
|
14
17
|
|
|
15
18
|
誤字脱字ではなく、文章の組み立てを見ます。
|
|
@@ -59,18 +62,22 @@ npx chaffjs explain bold-density ルールの意図と根拠を読む
|
|
|
59
62
|
npx chaffjs baseline docs/ 既にある指摘を棚上げする
|
|
60
63
|
npx chaffjs suppressions docs/ stet で黙らせている指摘を数える
|
|
61
64
|
npx chaffjs rules --json いまの設定を JSON で出す(AI に渡す用)
|
|
65
|
+
npx chaffjs tree contract.txt 文書を番地の付いた木にする(条・項・定義・参照)
|
|
66
|
+
npx chaffjs cite 原文 引用.json 引用が原文にあるかを確かめる
|
|
67
|
+
npx chaffjs skill Claude Code の skill を入れる(--global でホームに)
|
|
62
68
|
```
|
|
63
69
|
|
|
64
|
-
設定は `strict` / `normal` / `relaxed` / `off` の 4
|
|
70
|
+
設定は `strict` / `normal` / `relaxed` / `off` の 4 語から選びます。それで足りないときは上限を数で書けます(`max-sentence-length: 260`)。
|
|
65
71
|
|
|
66
72
|
## 言語
|
|
67
73
|
|
|
68
|
-
|
|
74
|
+
日本語と英語。言語は本文から自動で判定し、指摘の画面もその言語で出ます。アダプタ(`@chaffjs/lang-ja` / `@chaffjs/lang-en`)は同梱されているので、別に入れる必要はありません。
|
|
69
75
|
|
|
70
|
-
新しい言語のアダプタは誰でも出せます。公式は `@chaffjs
|
|
76
|
+
新しい言語のアダプタは誰でも出せます。公式は `@chaffjs/lang-<言語>`、第三者は `chaff-lang-<言語>` と名乗ってください(`@typescript-eslint/*` と `eslint-plugin-*` の関係と同じです)。chaff は公式、第三者の順に探して読みます。
|
|
71
77
|
|
|
72
78
|
## ドキュメント
|
|
73
79
|
|
|
74
|
-
https://github.
|
|
80
|
+
- 手引きとルールの一覧: https://isamu.github.io/lab/ja/ (English: https://isamu.github.io/lab/en/)
|
|
81
|
+
- リポジトリ: https://github.com/isamu/lab/tree/main/text
|
|
75
82
|
|
|
76
83
|
MIT
|
package/dist/adapter-load.d.ts
CHANGED
|
@@ -5,10 +5,21 @@ import type { LanguageAdapter } from "./plugin.ts";
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const checkAdapter: (value: unknown) => string | undefined;
|
|
7
7
|
export declare const packageFor: (language: string) => string | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* 探す順。公式(`@chaffjs/lang-<言語>`)が先で、無ければ第三者の `chaff-lang-<言語>`。
|
|
10
|
+
* `@typescript-eslint/*` と `eslint-plugin-*` の分け方と同じで、README にもそう書いてある。同梱の言語は表のものだけ。
|
|
11
|
+
*/
|
|
12
|
+
export declare const packagesFor: (language: string) => readonly string[];
|
|
13
|
+
export type Importer = (specifier: string) => Promise<unknown>;
|
|
14
|
+
/**
|
|
15
|
+
* そのパッケージ自体が入っていないときだけ真。入っているパッケージが自分の依存を見つけられないときも同じ
|
|
16
|
+
* ERR_MODULE_NOT_FOUND になるので、Node の文言が探した名前を挙げているかで分ける。
|
|
17
|
+
*/
|
|
18
|
+
export declare const isAbsent: (err: unknown, specifier: string) => boolean;
|
|
8
19
|
/**
|
|
9
20
|
* アダプタは「必要になったものだけ」を実行時に解決する。spec §17.2。
|
|
10
21
|
* core だけで起動し、文字種で言語を当ててから、その言語のアダプタを読む。
|
|
11
22
|
* 全言語を静的に import すると、使わない言語のぶんまで npx の初回取得が膨らむ。
|
|
12
23
|
*/
|
|
13
|
-
export declare const loadAdapter: (language: string) => Promise<LanguageAdapter>;
|
|
24
|
+
export declare const loadAdapter: (language: string, importer?: Importer) => Promise<LanguageAdapter>;
|
|
14
25
|
//# sourceMappingURL=adapter-load.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-load.d.ts","sourceRoot":"","sources":["../src/adapter-load.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkCnD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAOtD,CAAC;AAaF,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,KAAG,MAAM,GAAG,SAC8C,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter-load.d.ts","sourceRoot":"","sources":["../src/adapter-load.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkCnD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAAM,GAAG,SAOtD,CAAC;AAaF,eAAO,MAAM,UAAU,GAAI,UAAU,MAAM,KAAG,MAAM,GAAG,SAC8C,CAAC;AAEtG;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,SAAS,MAAM,EAG7D,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/D;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,OAAO,EAAE,WAAW,MAAM,KAAG,OAC6D,CAAC;AAsBzH;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAU,UAAU,MAAM,EAAE,WAAU,QAA2C,KAAG,OAAO,CAAC,eAAe,CAYlI,CAAC"}
|
package/dist/adapter-load.js
CHANGED
|
@@ -58,15 +58,40 @@ const pickExport = (module) => {
|
|
|
58
58
|
*/
|
|
59
59
|
const LANGUAGE_ID = /^[a-z]{2,3}$/u;
|
|
60
60
|
export const packageFor = (language) => ADAPTER_PACKAGE[language] ?? (LANGUAGE_ID.test(language) ? `@chaffjs/lang-${language}` : undefined);
|
|
61
|
-
|
|
61
|
+
/**
|
|
62
|
+
* 探す順。公式(`@chaffjs/lang-<言語>`)が先で、無ければ第三者の `chaff-lang-<言語>`。
|
|
63
|
+
* `@typescript-eslint/*` と `eslint-plugin-*` の分け方と同じで、README にもそう書いてある。同梱の言語は表のものだけ。
|
|
64
|
+
*/
|
|
65
|
+
export const packagesFor = (language) => {
|
|
66
|
+
if (ADAPTER_PACKAGE[language] !== undefined)
|
|
67
|
+
return [ADAPTER_PACKAGE[language]];
|
|
68
|
+
return LANGUAGE_ID.test(language) ? [`@chaffjs/lang-${language}`, `chaff-lang-${language}`] : [];
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* そのパッケージ自体が入っていないときだけ真。入っているパッケージが自分の依存を見つけられないときも同じ
|
|
72
|
+
* ERR_MODULE_NOT_FOUND になるので、Node の文言が探した名前を挙げているかで分ける。
|
|
73
|
+
*/
|
|
74
|
+
export const isAbsent = (err, specifier) => err instanceof Error && "code" in err && err.code === "ERR_MODULE_NOT_FOUND" && err.message.includes(`'${specifier}'`);
|
|
75
|
+
/** 入っている最初のものを読む。入っていないのは次へ。入っていて壊れているものは、次へ行かずにそのまま投げる。 */
|
|
76
|
+
const importFirst = async (specifiers, language, importer) => {
|
|
77
|
+
const [first, ...rest] = specifiers;
|
|
78
|
+
if (first === undefined)
|
|
79
|
+
throw new Error(`no adapter for language "${language}"`);
|
|
62
80
|
try {
|
|
63
|
-
return await
|
|
81
|
+
return { specifier: first, module: await importer(first) };
|
|
64
82
|
}
|
|
65
83
|
catch (err) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
84
|
+
if (!isAbsent(err, first))
|
|
85
|
+
throw err;
|
|
86
|
+
if (rest.length > 0)
|
|
87
|
+
return importFirst(rest, language, importer);
|
|
88
|
+
const all = packagesFor(language);
|
|
89
|
+
const install = `npm i -D ${all[0] ?? first}`;
|
|
90
|
+
// Only the requested language is known here; a Japanese message for Japanese, English for any other.
|
|
91
|
+
const message = language === "ja"
|
|
92
|
+
? `言語 ${language} のパッケージが入っていません(${all.join(" か ")}。${install})`
|
|
93
|
+
: `No package for language ${language} is installed (${all.join(" or ")}; ${install})`;
|
|
94
|
+
throw new Error(message, { cause: err });
|
|
70
95
|
}
|
|
71
96
|
};
|
|
72
97
|
/**
|
|
@@ -74,17 +99,16 @@ const importAdapter = async (specifier, language) => {
|
|
|
74
99
|
* core だけで起動し、文字種で言語を当ててから、その言語のアダプタを読む。
|
|
75
100
|
* 全言語を静的に import すると、使わない言語のぶんまで npx の初回取得が膨らむ。
|
|
76
101
|
*/
|
|
77
|
-
export const loadAdapter = async (language) => {
|
|
78
|
-
const specifier =
|
|
79
|
-
if (specifier === undefined)
|
|
80
|
-
throw new Error(`no adapter for language "${language}"`);
|
|
81
|
-
const module = await importAdapter(specifier, language);
|
|
102
|
+
export const loadAdapter = async (language, importer = (specifier) => import(__rewriteRelativeImportExtension(specifier))) => {
|
|
103
|
+
const { specifier, module } = await importFirst(packagesFor(language), language, importer);
|
|
82
104
|
if (typeof module !== "object" || module === null)
|
|
83
105
|
throw new Error(`${specifier} did not export a module`);
|
|
84
106
|
const candidate = pickExport(module);
|
|
85
107
|
const broken = checkAdapter(candidate);
|
|
86
|
-
if (broken !== undefined || !isAdapter(candidate))
|
|
87
|
-
|
|
108
|
+
if (broken !== undefined || !isAdapter(candidate)) {
|
|
109
|
+
const why = broken ?? "";
|
|
110
|
+
throw new Error(language === "ja" ? `${specifier} が LanguageAdapter を export していません: ${why}` : `${specifier} does not export a LanguageAdapter: ${why}`);
|
|
111
|
+
}
|
|
88
112
|
return candidate;
|
|
89
113
|
};
|
|
90
114
|
//# sourceMappingURL=adapter-load.js.map
|
package/dist/adapter-load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-load.js","sourceRoot":"","sources":["../src/adapter-load.ts"],"names":[],"mappings":";;;;;;;;AAEA,MAAM,eAAe,GAAqC,EAAE,EAAE,EAAE,kBAAkB,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC;AAE7G,+CAA+C;AAC/C,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,MAAM,cAAc,GAAG,CAAC,KAAc,EAAW,EAAE;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,MAAM,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAClC,OAAO,CACL,MAAM,CAAC,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAC7J,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,SAAS,GAAG,CAAC,KAAc,EAA4B,EAAE;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,MAAM,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IACrD,OAAO,CACL,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU;QAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ;QAChC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;QACnB,MAAM,CAAC,YAAY,CAAC,KAAK,WAAW;QACpC,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,UAAU;QACvC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU;QACtC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CACvC,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAsB,EAAE;IACjE,IAAI,SAAS,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,gBAAgB,CAAC;IACzE,MAAM,MAAM,GAA4B,EAAE,GAAG,KAAK,EAAE,CAAC;IACrD,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,WAAW;QAAE,OAAO,gBAAgB,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,cAAc,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;IAClI,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAC3E,OAAO,yCAAyC,CAAC;AACnD,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,MAAc,EAAW,EAAE;IAC7C,MAAM,MAAM,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACtD,OAAO,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,GAAG,eAAe,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAsB,EAAE,CACjE,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAEtG,MAAM,
|
|
1
|
+
{"version":3,"file":"adapter-load.js","sourceRoot":"","sources":["../src/adapter-load.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options of the commands that take files to check, whose value is the next argument. That value is not a file.
|
|
3
|
+
* `--why` (relax), `--format` and `--language` (tree) belong to commands that read their own arguments.
|
|
4
|
+
*/
|
|
5
|
+
export declare const VALUE_FLAGS: readonly string[];
|
|
6
|
+
/** The arguments that name what to check: everything that is neither an option nor an option's value. */
|
|
7
|
+
export declare const targetsOf: (args: readonly string[]) => string[];
|
|
8
|
+
//# sourceMappingURL=cli-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAAqC,CAAC;AAE/E,yGAAyG;AACzG,eAAO,MAAM,SAAS,GAAI,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM,EACyD,CAAC"}
|
package/dist/cli-args.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options of the commands that take files to check, whose value is the next argument. That value is not a file.
|
|
3
|
+
* `--why` (relax), `--format` and `--language` (tree) belong to commands that read their own arguments.
|
|
4
|
+
*/
|
|
5
|
+
export const VALUE_FLAGS = ["--sarif", "--genre", "--rule"];
|
|
6
|
+
/** The arguments that name what to check: everything that is neither an option nor an option's value. */
|
|
7
|
+
export const targetsOf = (args) => args.filter((arg, index) => !arg.startsWith("--") && !(index > 0 && VALUE_FLAGS.includes(args[index - 1] ?? "")));
|
|
8
|
+
//# sourceMappingURL=cli-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAsB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAE/E,yGAAyG;AACzG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAuB,EAAY,EAAE,CAC7D,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Texts } from "./ui.ts";
|
|
2
|
+
/** Where a file's genre came from, as the header names it. */
|
|
3
|
+
export type GenreSource = "--genre" | "by_path" | "config" | "default" | "front-matter" | "path" | "content";
|
|
4
|
+
export type CliText = {
|
|
5
|
+
readonly usage: string;
|
|
6
|
+
readonly languageName: (language: string) => string;
|
|
7
|
+
readonly genreSource: Readonly<Record<GenreSource, string>>;
|
|
8
|
+
readonly header: (path: string, genre: string, language: string, from: string, shelved: number, hushed: number) => string;
|
|
9
|
+
readonly noMarkdown: (targets: string) => string;
|
|
10
|
+
readonly noMarkdownHere: string;
|
|
11
|
+
readonly noAdapter: (language: string) => string;
|
|
12
|
+
readonly unknownGenre: (genre: string) => string;
|
|
13
|
+
readonly unknownRule: (id: string) => string;
|
|
14
|
+
readonly unknownRuleWithList: (id: string, list: string) => string;
|
|
15
|
+
readonly unnamed: string;
|
|
16
|
+
readonly sarifWritten: (path: string, count: number) => string;
|
|
17
|
+
readonly unchanged: string;
|
|
18
|
+
readonly findingsUnit: string;
|
|
19
|
+
readonly watching: (files: number, findings: number) => string;
|
|
20
|
+
readonly watchHint: string;
|
|
21
|
+
readonly baselineDone: (files: number, entries: number, file: string) => readonly string[];
|
|
22
|
+
readonly genres: (list: readonly string[]) => string;
|
|
23
|
+
readonly unit: (ruleId: string, language: string) => string;
|
|
24
|
+
};
|
|
25
|
+
export declare const CLI_TEXT: Texts<CliText>;
|
|
26
|
+
//# sourceMappingURL=cli-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-text.d.ts","sourceRoot":"","sources":["../src/cli-text.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,8DAA8D;AAC9D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;AAgE7G,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1H,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7C,QAAQ,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IAC3F,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC;IACrD,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7D,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,OAAO,CA0FnC,CAAC"}
|
package/dist/cli-text.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const USAGE_JA = `chaff — 文章の読みにくいところを見つけます。文章は書き換えません。
|
|
2
|
+
|
|
3
|
+
chaff <file|dir|glob>... 検査する(設定も API key も要りません)
|
|
4
|
+
chaff . この場所の Markdown を全部
|
|
5
|
+
chaff test <file|dir>... 意味を読む検査も動かす(API key が要ります)
|
|
6
|
+
判定役は chaff.yaml の ai_backend で選びます
|
|
7
|
+
chaff init chaff.yaml を作る
|
|
8
|
+
chaff eval <dir> 手元の文書で閾値を測り直す
|
|
9
|
+
chaff explain <rule> そのルールの意図と根拠を読む
|
|
10
|
+
chaff genres ジャンルの一覧
|
|
11
|
+
chaff tree <file> [--format sexp|json] 文書を番地の付いた木にする(条・項・定義・参照)
|
|
12
|
+
chaff cite <原文> <引用.json> 回答の引用(番地と引用文)が原文にあるかを確かめる
|
|
13
|
+
chaff rules --json いまの設定を JSON で出す(AI に渡す用)
|
|
14
|
+
chaff baseline <dir> いまある指摘を棚上げする(既存の repo に入れるとき)
|
|
15
|
+
chaff suppressions <dir> stet で黙らせている指摘を数える
|
|
16
|
+
chaff relax|strict|off <rule> [--why "理由"]
|
|
17
|
+
chaff skill [--global] Claude Code の skill を入れる(.claude/skills/chaff/、--global で ~/.claude/)
|
|
18
|
+
|
|
19
|
+
--compact エンジニア向けの 1 行形式
|
|
20
|
+
--experimental 試験中の rule も動かす
|
|
21
|
+
--genre <ジャンル> この実行だけジャンルを決める(chaff.yaml より優先)
|
|
22
|
+
--show-baseline 棚上げした分も含めて全部見る
|
|
23
|
+
--watch 保存のたびに見直し、変わったところだけ出す
|
|
24
|
+
--dry-run test で、何を AI に送るかだけを見る(API を呼びません)
|
|
25
|
+
--sarif <path> 指摘を SARIF で書き出す(GitHub の PR の行に出すため)
|
|
26
|
+
|
|
27
|
+
この箇所だけ黙らせる: <!-- stet: rule-id — 理由 -->
|
|
28
|
+
|
|
29
|
+
値は strict / normal / relaxed / off の 4 つから選びます。
|
|
30
|
+
`;
|
|
31
|
+
const USAGE_EN = `chaff — finds what makes writing hard to read. It never rewrites the text.
|
|
32
|
+
|
|
33
|
+
chaff <file|dir|glob>... check (no config or API key needed)
|
|
34
|
+
chaff . every Markdown file here
|
|
35
|
+
chaff test <file|dir>... also run the checks that read meaning (needs an API key)
|
|
36
|
+
the judge is chosen by ai_backend in chaff.yaml
|
|
37
|
+
chaff init create chaff.yaml
|
|
38
|
+
chaff eval <dir> re-measure the limits on your own documents
|
|
39
|
+
chaff explain <rule> read what a rule is for and why
|
|
40
|
+
chaff genres list the genres
|
|
41
|
+
chaff tree <file> [--format sexp|json] the document as a tree of addresses (sections, clauses, definitions, references)
|
|
42
|
+
chaff cite <source> <quotes.json> check that quoted passages (address and text) are in the source
|
|
43
|
+
chaff rules --json the current settings as JSON (to give to an AI)
|
|
44
|
+
chaff baseline <dir> shelve today's findings (when adding chaff to an existing repository)
|
|
45
|
+
chaff suppressions <dir> count the findings silenced with stet
|
|
46
|
+
chaff relax|strict|off <rule> [--why "reason"]
|
|
47
|
+
chaff skill [--global] install the Claude Code skill (.claude/skills/chaff/; --global for ~/.claude/)
|
|
48
|
+
|
|
49
|
+
--compact one line per finding, for engineers
|
|
50
|
+
--experimental run the experimental rules too
|
|
51
|
+
--genre <genre> the genre for this run only (wins over chaff.yaml)
|
|
52
|
+
--show-baseline show the shelved findings too
|
|
53
|
+
--watch re-check on every save and print only what changed
|
|
54
|
+
--dry-run with test, show what would be sent to the AI (no API call)
|
|
55
|
+
--sarif <path> write the findings as SARIF (for comments on a GitHub PR)
|
|
56
|
+
|
|
57
|
+
Silence one spot: <!-- stet: rule-id — reason -->
|
|
58
|
+
|
|
59
|
+
A rule's level is one of strict / normal / relaxed / off.
|
|
60
|
+
`;
|
|
61
|
+
export const CLI_TEXT = {
|
|
62
|
+
ja: {
|
|
63
|
+
usage: USAGE_JA,
|
|
64
|
+
languageName: (language) => (language === "ja" ? "日本語" : "英語"),
|
|
65
|
+
genreSource: {
|
|
66
|
+
"--genre": "--genre",
|
|
67
|
+
by_path: "chaff.yaml の by_path",
|
|
68
|
+
config: "chaff.yaml",
|
|
69
|
+
default: "既定",
|
|
70
|
+
"front-matter": "front matter",
|
|
71
|
+
path: "パス",
|
|
72
|
+
content: "内容",
|
|
73
|
+
},
|
|
74
|
+
header: (path, genre, language, from, shelved, hushed) => [`${path} ${genre} · ${language} ジャンルは${from}から`, shelved > 0 ? ` 棚上げ ${shelved} 件` : "", hushed > 0 ? ` stet ${hushed} 件` : ""].join(""),
|
|
75
|
+
noMarkdown: (targets) => `Markdown が 1 つも見つかりませんでした: ${targets}`,
|
|
76
|
+
noMarkdownHere: "Markdown が 1 つも見つかりませんでした。",
|
|
77
|
+
noAdapter: (language) => `言語 "${language}" のアダプタがありません。`,
|
|
78
|
+
unknownGenre: (genre) => `ジャンル "${genre}" はありません。npx chaff genres で一覧が出ます。`,
|
|
79
|
+
unknownRule: (id) => `${id} というルールはありません。npx chaff rules --json で一覧が出ます。`,
|
|
80
|
+
unknownRuleWithList: (id, list) => `${id} というルールはありません。\n一覧:\n${list}`,
|
|
81
|
+
unnamed: "(名前なし)",
|
|
82
|
+
sarifWritten: (path, count) => `\n SARIF を書きました: ${path}(${count} 件)`,
|
|
83
|
+
unchanged: "変わりませんでした",
|
|
84
|
+
findingsUnit: " 件",
|
|
85
|
+
watching: (files, findings) => `\n ${files} ファイルを見ています。いまの指摘は ${findings} 件です。`,
|
|
86
|
+
watchHint: " 保存するたびに、変わったところだけ出します。止めるには Ctrl-C。\n",
|
|
87
|
+
baselineDone: (files, entries, file) => [
|
|
88
|
+
"",
|
|
89
|
+
` ${files} ファイルを走査しました。`,
|
|
90
|
+
"",
|
|
91
|
+
` ${entries} 件の指摘を ${file} に記録しました。`,
|
|
92
|
+
" 以後、これらは報告されません。新しく増えたものだけが出ます。",
|
|
93
|
+
"",
|
|
94
|
+
` ${file} を commit してください。`,
|
|
95
|
+
"",
|
|
96
|
+
],
|
|
97
|
+
genres: (list) => ["", " 使えるジャンル:", ...list.map((genre) => ` ${genre}`), "", " chaff.yaml の genre に書くか、--genre で指定します。", ""].join("\n"),
|
|
98
|
+
unit: (ruleId, language) => {
|
|
99
|
+
if (ruleId === "bold-density")
|
|
100
|
+
return "1000 字あたりの箇所数";
|
|
101
|
+
if (ruleId !== "max-sentence-length")
|
|
102
|
+
return "回";
|
|
103
|
+
return language === "ja" ? "文字" : "語";
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
en: {
|
|
107
|
+
usage: USAGE_EN,
|
|
108
|
+
languageName: (language) => (language === "ja" ? "Japanese" : "English"),
|
|
109
|
+
genreSource: {
|
|
110
|
+
"--genre": "--genre",
|
|
111
|
+
by_path: "by_path in chaff.yaml",
|
|
112
|
+
config: "chaff.yaml",
|
|
113
|
+
default: "the default",
|
|
114
|
+
"front-matter": "front matter",
|
|
115
|
+
path: "the path",
|
|
116
|
+
content: "the content",
|
|
117
|
+
},
|
|
118
|
+
header: (path, genre, language, from, shelved, hushed) => [`${path} ${genre} · ${language} genre from ${from}`, shelved > 0 ? ` ${shelved} shelved` : "", hushed > 0 ? ` ${hushed} stet` : ""].join(""),
|
|
119
|
+
noMarkdown: (targets) => `No Markdown files found: ${targets}`,
|
|
120
|
+
noMarkdownHere: "No Markdown files found.",
|
|
121
|
+
noAdapter: (language) => `No language package for "${language}".`,
|
|
122
|
+
unknownGenre: (genre) => `There is no genre "${genre}". npx chaff genres lists them.`,
|
|
123
|
+
unknownRule: (id) => `There is no rule named ${id}. npx chaff rules --json lists them.`,
|
|
124
|
+
unknownRuleWithList: (id, list) => `There is no rule named ${id}.\nRules:\n${list}`,
|
|
125
|
+
unnamed: "(no name)",
|
|
126
|
+
sarifWritten: (path, count) => `\n Wrote SARIF: ${path} (${count} finding${count === 1 ? "" : "s"})`,
|
|
127
|
+
unchanged: "no change",
|
|
128
|
+
findingsUnit: " findings",
|
|
129
|
+
watching: (files, findings) => `\n Watching ${files} file${files === 1 ? "" : "s"}. ${findings} finding${findings === 1 ? "" : "s"} now.`,
|
|
130
|
+
watchHint: " Each save prints only what changed. Ctrl-C to stop.\n",
|
|
131
|
+
baselineDone: (files, entries, file) => [
|
|
132
|
+
"",
|
|
133
|
+
` Checked ${files} file${files === 1 ? "" : "s"}.`,
|
|
134
|
+
"",
|
|
135
|
+
` Recorded ${entries} finding${entries === 1 ? "" : "s"} in ${file}.`,
|
|
136
|
+
" They will not be reported again; only new ones will.",
|
|
137
|
+
"",
|
|
138
|
+
` Commit ${file}.`,
|
|
139
|
+
"",
|
|
140
|
+
],
|
|
141
|
+
genres: (list) => ["", " Genres:", ...list.map((genre) => ` ${genre}`), "", " Set one with genre in chaff.yaml, or with --genre.", ""].join("\n"),
|
|
142
|
+
unit: (ruleId, language) => {
|
|
143
|
+
if (ruleId === "bold-density")
|
|
144
|
+
return "places per 1000 characters";
|
|
145
|
+
if (ruleId !== "max-sentence-length")
|
|
146
|
+
return "times";
|
|
147
|
+
return language === "ja" ? "characters" : "words";
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=cli-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-text.js","sourceRoot":"","sources":["../src/cli-text.ts"],"names":[],"mappings":"AAOA,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BhB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BhB,CAAC;AAwBF,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,EAAE,EAAE;QACF,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,WAAW,EAAE;YACX,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,sBAAsB;YAC/B,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,cAAc;YAC9B,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,IAAI;SACd;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CACvD,CAAC,GAAG,IAAI,MAAM,KAAK,MAAM,QAAQ,WAAW,IAAI,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,MAAM,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAC3I,EAAE,CACH;QACH,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,8BAA8B,OAAO,EAAE;QAChE,cAAc,EAAE,4BAA4B;QAC5C,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,QAAQ,gBAAgB;QACxD,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,KAAK,oCAAoC;QAC3E,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,+CAA+C;QACzE,mBAAmB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,wBAAwB,IAAI,EAAE;QACtE,OAAO,EAAE,QAAQ;QACjB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,qBAAqB,IAAI,IAAI,KAAK,KAAK;QACtE,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,OAAO,KAAK,sBAAsB,QAAQ,OAAO;QAChF,SAAS,EAAE,yCAAyC;QACpD,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACtC,EAAE;YACF,KAAK,KAAK,eAAe;YACzB,EAAE;YACF,KAAK,OAAO,UAAU,IAAI,WAAW;YACrC,kCAAkC;YAClC,EAAE;YACF,KAAK,IAAI,mBAAmB;YAC5B,EAAE;SACH;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,2CAA2C,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5H,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACzB,IAAI,MAAM,KAAK,cAAc;gBAAE,OAAO,eAAe,CAAC;YACtD,IAAI,MAAM,KAAK,qBAAqB;gBAAE,OAAO,GAAG,CAAC;YACjD,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACxC,CAAC;KACF;IACD,EAAE,EAAE;QACF,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,WAAW,EAAE;YACX,SAAS,EAAE,SAAS;YACpB,OAAO,EAAE,uBAAuB;YAChC,MAAM,EAAE,YAAY;YACpB,OAAO,EAAE,aAAa;YACtB,cAAc,EAAE,cAAc;YAC9B,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,aAAa;SACvB;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CACvD,CAAC,GAAG,IAAI,MAAM,KAAK,MAAM,QAAQ,iBAAiB,IAAI,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvJ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,4BAA4B,OAAO,EAAE;QAC9D,cAAc,EAAE,0BAA0B;QAC1C,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,4BAA4B,QAAQ,IAAI;QACjE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,KAAK,iCAAiC;QACrF,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,0BAA0B,EAAE,sCAAsC;QACvF,mBAAmB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,0BAA0B,EAAE,cAAc,IAAI,EAAE;QACnF,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,IAAI,KAAK,KAAK,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QACrG,SAAS,EAAE,WAAW;QACtB,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,gBAAgB,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO;QAC1I,SAAS,EAAE,yDAAyD;QACpE,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACtC,EAAE;YACF,aAAa,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;YACnD,EAAE;YACF,cAAc,OAAO,WAAW,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG;YACtE,wDAAwD;YACxD,EAAE;YACF,YAAY,IAAI,GAAG;YACnB,EAAE;SACH;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,sDAAsD,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACtJ,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACzB,IAAI,MAAM,KAAK,cAAc;gBAAE,OAAO,4BAA4B,CAAC;YACnE,IAAI,MAAM,KAAK,qBAAqB;gBAAE,OAAO,OAAO,CAAC;YACrD,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;QACpD,CAAC;KACF;CACF,CAAC"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AA8SA,8EAA8E;AAC9E,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAA0B,CAAC;AAEjE,eAAO,MAAM,IAAI,GAAU,MAAM,SAAS,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAelE,CAAC"}
|