chaffjs 0.0.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/LICENSE +21 -0
- package/README.md +76 -0
- package/bin/chaff.js +4 -0
- package/dist/adapter-load.d.ts +9 -0
- package/dist/adapter-load.d.ts.map +1 -0
- package/dist/adapter-load.js +38 -0
- package/dist/adapter-load.js.map +1 -0
- package/dist/baseline.d.ts +23 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +41 -0
- package/dist/baseline.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +234 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/load.d.ts +13 -0
- package/dist/config/load.d.ts.map +1 -0
- package/dist/config/load.js +26 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/write.d.ts +12 -0
- package/dist/config/write.d.ts.map +1 -0
- package/dist/config/write.js +60 -0
- package/dist/config/write.js.map +1 -0
- package/dist/detect-language.d.ts +3 -0
- package/dist/detect-language.d.ts.map +1 -0
- package/dist/detect-language.js +26 -0
- package/dist/detect-language.js.map +1 -0
- package/dist/detect.d.ts +7 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +13 -0
- package/dist/detect.js.map +1 -0
- package/dist/detectors/count-per-section.d.ts +4 -0
- package/dist/detectors/count-per-section.d.ts.map +1 -0
- package/dist/detectors/count-per-section.js +13 -0
- package/dist/detectors/count-per-section.js.map +1 -0
- package/dist/detectors/heading-echo.d.ts +3 -0
- package/dist/detectors/heading-echo.d.ts.map +1 -0
- package/dist/detectors/heading-echo.js +36 -0
- package/dist/detectors/heading-echo.js.map +1 -0
- package/dist/detectors/index.d.ts +4 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +16 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/phrase-match.d.ts +7 -0
- package/dist/detectors/phrase-match.d.ts.map +1 -0
- package/dist/detectors/phrase-match.js +38 -0
- package/dist/detectors/phrase-match.js.map +1 -0
- package/dist/detectors/repeated-head.d.ts +3 -0
- package/dist/detectors/repeated-head.d.ts.map +1 -0
- package/dist/detectors/repeated-head.js +21 -0
- package/dist/detectors/repeated-head.js.map +1 -0
- package/dist/detectors/sentence-length.d.ts +3 -0
- package/dist/detectors/sentence-length.d.ts.map +1 -0
- package/dist/detectors/sentence-length.js +19 -0
- package/dist/detectors/sentence-length.js.map +1 -0
- package/dist/detectors/sentence-rhythm.d.ts +3 -0
- package/dist/detectors/sentence-rhythm.d.ts.map +1 -0
- package/dist/detectors/sentence-rhythm.js +28 -0
- package/dist/detectors/sentence-rhythm.js.map +1 -0
- package/dist/document.d.ts +3 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +138 -0
- package/dist/document.js.map +1 -0
- package/dist/files.d.ts +12 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +30 -0
- package/dist/files.js.map +1 -0
- package/dist/genre.d.ts +8 -0
- package/dist/genre.d.ts.map +1 -0
- package/dist/genre.js +35 -0
- package/dist/genre.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +3 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +71 -0
- package/dist/init.js.map +1 -0
- package/dist/levels.d.ts +20 -0
- package/dist/levels.d.ts.map +1 -0
- package/dist/levels.js +24 -0
- package/dist/levels.js.map +1 -0
- package/dist/mask.d.ts +3 -0
- package/dist/mask.d.ts.map +1 -0
- package/dist/mask.js +26 -0
- package/dist/mask.js.map +1 -0
- package/dist/plugin.d.ts +116 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +4 -0
- package/dist/plugin.js.map +1 -0
- package/dist/position.d.ts +8 -0
- package/dist/position.d.ts.map +1 -0
- package/dist/position.js +7 -0
- package/dist/position.js.map +1 -0
- package/dist/render/compact.d.ts +5 -0
- package/dist/render/compact.d.ts.map +1 -0
- package/dist/render/compact.js +15 -0
- package/dist/render/compact.js.map +1 -0
- package/dist/render/explain.d.ts +4 -0
- package/dist/render/explain.d.ts.map +1 -0
- package/dist/render/explain.js +29 -0
- package/dist/render/explain.js.map +1 -0
- package/dist/render/friendly.d.ts +4 -0
- package/dist/render/friendly.d.ts.map +1 -0
- package/dist/render/friendly.js +55 -0
- package/dist/render/friendly.js.map +1 -0
- package/dist/render/rules-json.d.ts +6 -0
- package/dist/render/rules-json.d.ts.map +1 -0
- package/dist/render/rules-json.js +39 -0
- package/dist/render/rules-json.js.map +1 -0
- package/dist/render/summary.d.ts +10 -0
- package/dist/render/summary.d.ts.map +1 -0
- package/dist/render/summary.js +18 -0
- package/dist/render/summary.js.map +1 -0
- package/dist/render/suppressions.d.ts +13 -0
- package/dist/render/suppressions.d.ts.map +1 -0
- package/dist/render/suppressions.js +50 -0
- package/dist/render/suppressions.js.map +1 -0
- package/dist/render/text.d.ts +6 -0
- package/dist/render/text.d.ts.map +1 -0
- package/dist/render/text.js +8 -0
- package/dist/render/text.js.map +1 -0
- package/dist/rule-load.d.ts +3 -0
- package/dist/rule-load.d.ts.map +1 -0
- package/dist/rule-load.js +68 -0
- package/dist/rule-load.js.map +1 -0
- package/dist/run.d.ts +14 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +47 -0
- package/dist/run.js.map +1 -0
- package/dist/stet.d.ts +19 -0
- package/dist/stet.d.ts.map +1 -0
- package/dist/stet.js +61 -0
- package/dist/stet.js.map +1 -0
- package/dist/watch.d.ts +12 -0
- package/dist/watch.d.ts.map +1 -0
- package/dist/watch.js +40 -0
- package/dist/watch.js.map +1 -0
- package/package.json +63 -0
- package/rules/bold-density.yaml +28 -0
- package/rules/closing-cliche.yaml +30 -0
- package/rules/empty-intensifier.yaml +29 -0
- package/rules/heading-echo.yaml +30 -0
- package/rules/max-sentence-length.yaml +28 -0
- package/rules/padded-intro.yaml +30 -0
- package/rules/repeated-sentence-head.yaml +28 -0
- package/rules/sentence-rhythm.yaml +30 -0
- package/src/adapter-load.ts +31 -0
- package/src/baseline.ts +51 -0
- package/src/cli.ts +259 -0
- package/src/config/load.ts +38 -0
- package/src/config/write.ts +63 -0
- package/src/detect-language.ts +28 -0
- package/src/detect.ts +15 -0
- package/src/detectors/count-per-section.ts +15 -0
- package/src/detectors/heading-echo.ts +40 -0
- package/src/detectors/index.ts +17 -0
- package/src/detectors/phrase-match.ts +41 -0
- package/src/detectors/repeated-head.ts +29 -0
- package/src/detectors/sentence-length.ts +21 -0
- package/src/detectors/sentence-rhythm.ts +28 -0
- package/src/document.ts +154 -0
- package/src/files.ts +34 -0
- package/src/genre.ts +36 -0
- package/src/index.ts +4 -0
- package/src/init.ts +76 -0
- package/src/levels.ts +27 -0
- package/src/mask.ts +33 -0
- package/src/plugin.ts +124 -0
- package/src/position.ts +9 -0
- package/src/render/compact.ts +18 -0
- package/src/render/explain.ts +31 -0
- package/src/render/friendly.ts +62 -0
- package/src/render/rules-json.ts +46 -0
- package/src/render/summary.ts +22 -0
- package/src/render/suppressions.ts +57 -0
- package/src/render/text.ts +13 -0
- package/src/rule-load.ts +78 -0
- package/src/run.ts +61 -0
- package/src/stet.ts +79 -0
- package/src/watch.ts +52 -0
package/src/watch.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { watch } from "node:fs";
|
|
2
|
+
import type { Finding } from "./plugin.ts";
|
|
3
|
+
|
|
4
|
+
/** 保存は 1 回でも複数イベントになる。まとめて 1 回だけ走らせる。 */
|
|
5
|
+
const SETTLE_MS = 120;
|
|
6
|
+
|
|
7
|
+
export type Snapshot = Readonly<Record<string, number>>;
|
|
8
|
+
|
|
9
|
+
export const snapshotOf = (findings: readonly Finding[]): Snapshot =>
|
|
10
|
+
findings.reduce<Record<string, number>>((acc, finding) => ({ ...acc, [finding.rule]: (acc[finding.rule] ?? 0) + 1 }), {});
|
|
11
|
+
|
|
12
|
+
const total = (snapshot: Snapshot): number => Object.values(snapshot).reduce((sum, count) => sum + count, 0);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 差分だけを出す。書いている最中に全件を出し直されると、何が変わったのか分からない。
|
|
16
|
+
* workflow spec §11。
|
|
17
|
+
*/
|
|
18
|
+
export const describeChange = (before: Snapshot, after: Snapshot): string | undefined => {
|
|
19
|
+
const rules = [...new Set([...Object.keys(before), ...Object.keys(after)])];
|
|
20
|
+
const moved = rules
|
|
21
|
+
.map((rule) => ({ rule, delta: (after[rule] ?? 0) - (before[rule] ?? 0) }))
|
|
22
|
+
.filter((entry) => entry.delta !== 0)
|
|
23
|
+
.sort((left, right) => left.rule.localeCompare(right.rule, "en"));
|
|
24
|
+
if (moved.length === 0) return undefined;
|
|
25
|
+
const detail = moved.map((entry) => `${entry.delta > 0 ? "+" : ""}${entry.delta} ${entry.rule}`).join(", ");
|
|
26
|
+
const mark = total(after) < total(before) ? "✓" : "✗";
|
|
27
|
+
return `${mark} ${total(before)} → ${total(after)} 件 (${detail})`;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export const clock = (): string => new Date().toTimeString().slice(0, 8);
|
|
31
|
+
|
|
32
|
+
/** 変更が落ち着いてから 1 度だけ呼ぶ。 */
|
|
33
|
+
export const watchPaths = (paths: readonly string[], onChange: (path: string) => void): (() => void) => {
|
|
34
|
+
const timers = new Map<string, NodeJS.Timeout>();
|
|
35
|
+
const watchers = paths.map((path) =>
|
|
36
|
+
watch(path, () => {
|
|
37
|
+
const pending = timers.get(path);
|
|
38
|
+
if (pending !== undefined) clearTimeout(pending);
|
|
39
|
+
timers.set(
|
|
40
|
+
path,
|
|
41
|
+
setTimeout(() => {
|
|
42
|
+
timers.delete(path);
|
|
43
|
+
onChange(path);
|
|
44
|
+
}, SETTLE_MS),
|
|
45
|
+
);
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
return (): void => {
|
|
49
|
+
timers.forEach((timer) => clearTimeout(timer));
|
|
50
|
+
watchers.forEach((watcher) => watcher.close());
|
|
51
|
+
};
|
|
52
|
+
};
|