chaffjs 0.15.0 → 0.16.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 +27 -2
- package/dist/address-chain.js +1 -1
- package/dist/address-chain.js.map +1 -1
- package/dist/backends/anthropic.d.ts +2 -1
- package/dist/backends/anthropic.d.ts.map +1 -1
- package/dist/backends/anthropic.js +4 -1
- package/dist/backends/anthropic.js.map +1 -1
- package/dist/backends/openai.d.ts +2 -1
- package/dist/backends/openai.d.ts.map +1 -1
- package/dist/backends/openai.js +1 -1
- package/dist/backends/openai.js.map +1 -1
- package/dist/backends/types.d.ts +2 -1
- package/dist/backends/types.d.ts.map +1 -1
- package/dist/backends/types.js +1 -1
- package/dist/backends/types.js.map +1 -1
- package/dist/baseline.js +1 -1
- package/dist/baseline.js.map +1 -1
- package/dist/calendar-number.d.ts +26 -0
- package/dist/calendar-number.d.ts.map +1 -0
- package/dist/calendar-number.js +51 -0
- package/dist/calendar-number.js.map +1 -0
- package/dist/cli-args.d.ts +0 -5
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +2 -2
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-text.d.ts +6 -2
- package/dist/cli-text.d.ts.map +1 -1
- package/dist/cli-text.js +19 -12
- package/dist/cli-text.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +43 -37
- package/dist/cli.js.map +1 -1
- package/dist/commands/cite.d.ts.map +1 -1
- package/dist/commands/cite.js +4 -4
- package/dist/commands/cite.js.map +1 -1
- package/dist/commands/eval.js +1 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/init-ask.d.ts +19 -0
- package/dist/commands/init-ask.d.ts.map +1 -0
- package/dist/commands/init-ask.js +43 -0
- package/dist/commands/init-ask.js.map +1 -0
- package/dist/commands/test.d.ts +8 -0
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +70 -38
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/tree.d.ts +1 -8
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +7 -6
- package/dist/commands/tree.js.map +1 -1
- package/dist/config/by-path.d.ts.map +1 -1
- package/dist/config/by-path.js +10 -9
- package/dist/config/by-path.js.map +1 -1
- package/dist/config/load.d.ts +4 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +19 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/name-problems.d.ts +5 -0
- package/dist/config/name-problems.d.ts.map +1 -0
- package/dist/config/name-problems.js +11 -0
- package/dist/config/name-problems.js.map +1 -0
- package/dist/date-stamp.js +1 -1
- package/dist/date-stamp.js.map +1 -1
- package/dist/detectors/char-shape.d.ts.map +1 -1
- package/dist/detectors/char-shape.js +16 -6
- package/dist/detectors/char-shape.js.map +1 -1
- package/dist/detectors/en-shape.d.ts.map +1 -1
- package/dist/detectors/en-shape.js +101 -7
- package/dist/detectors/en-shape.js.map +1 -1
- package/dist/detectors/enumerated-runs.d.ts.map +1 -1
- package/dist/detectors/enumerated-runs.js +4 -2
- package/dist/detectors/enumerated-runs.js.map +1 -1
- package/dist/detectors/gram-place.js +1 -1
- package/dist/detectors/gram-place.js.map +1 -1
- package/dist/detectors/heading-case.d.ts.map +1 -1
- package/dist/detectors/heading-case.js +3 -1
- package/dist/detectors/heading-case.js.map +1 -1
- package/dist/detectors/index.d.ts.map +1 -1
- package/dist/detectors/index.js +4 -3
- package/dist/detectors/index.js.map +1 -1
- package/dist/detectors/lettered-index.d.ts +9 -0
- package/dist/detectors/lettered-index.d.ts.map +1 -0
- package/dist/detectors/lettered-index.js +54 -0
- package/dist/detectors/lettered-index.js.map +1 -0
- package/dist/detectors/lexicon.d.ts +5 -1
- package/dist/detectors/lexicon.d.ts.map +1 -1
- package/dist/detectors/lexicon.js +46 -3
- package/dist/detectors/lexicon.js.map +1 -1
- package/dist/detectors/orthography.d.ts.map +1 -1
- package/dist/detectors/orthography.js +24 -6
- package/dist/detectors/orthography.js.map +1 -1
- package/dist/detectors/phrase-match.d.ts +3 -1
- package/dist/detectors/phrase-match.d.ts.map +1 -1
- package/dist/detectors/phrase-match.js +20 -15
- package/dist/detectors/phrase-match.js.map +1 -1
- package/dist/detectors/repeated-head.d.ts.map +1 -1
- package/dist/detectors/repeated-head.js +5 -4
- package/dist/detectors/repeated-head.js.map +1 -1
- package/dist/detectors/signals.d.ts.map +1 -1
- package/dist/detectors/signals.js +16 -6
- package/dist/detectors/signals.js.map +1 -1
- package/dist/detectors/stacked-hedge.d.ts +23 -0
- package/dist/detectors/stacked-hedge.d.ts.map +1 -0
- package/dist/detectors/stacked-hedge.js +64 -0
- package/dist/detectors/stacked-hedge.js.map +1 -0
- package/dist/detectors/superlative-amount.d.ts +9 -0
- package/dist/detectors/superlative-amount.d.ts.map +1 -0
- package/dist/detectors/superlative-amount.js +20 -0
- package/dist/detectors/superlative-amount.js.map +1 -0
- package/dist/detectors/superlative-clause.d.ts +18 -0
- package/dist/detectors/superlative-clause.d.ts.map +1 -0
- package/dist/detectors/superlative-clause.js +61 -0
- package/dist/detectors/superlative-clause.js.map +1 -0
- package/dist/detectors/superlative-scope.d.ts +6 -0
- package/dist/detectors/superlative-scope.d.ts.map +1 -1
- package/dist/detectors/superlative-scope.js +3 -3
- package/dist/detectors/superlative-scope.js.map +1 -1
- package/dist/detectors/team.d.ts +0 -6
- package/dist/detectors/team.d.ts.map +1 -1
- package/dist/detectors/team.js +17 -1
- package/dist/detectors/team.js.map +1 -1
- package/dist/detectors/token-shape.d.ts.map +1 -1
- package/dist/detectors/token-shape.js +8 -6
- package/dist/detectors/token-shape.js.map +1 -1
- package/dist/document.d.ts +3 -0
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +18 -3
- package/dist/document.js.map +1 -1
- package/dist/eval.js +1 -1
- package/dist/eval.js.map +1 -1
- package/dist/feedback/draft.js +1 -1
- package/dist/feedback/draft.js.map +1 -1
- package/dist/feedback/excerpt.d.ts +0 -1
- package/dist/feedback/excerpt.d.ts.map +1 -1
- package/dist/feedback/excerpt.js +2 -2
- package/dist/feedback/excerpt.js.map +1 -1
- package/dist/file-header.d.ts +20 -0
- package/dist/file-header.d.ts.map +1 -0
- package/dist/file-header.js +21 -0
- package/dist/file-header.js.map +1 -0
- package/dist/files.js +3 -3
- package/dist/files.js.map +1 -1
- package/dist/genre-check.js +1 -1
- package/dist/genre-check.js.map +1 -1
- package/dist/genre-load.d.ts +6 -0
- package/dist/genre-load.d.ts.map +1 -0
- package/dist/genre-load.js +22 -0
- package/dist/genre-load.js.map +1 -0
- package/dist/genre-parse.d.ts +40 -0
- package/dist/genre-parse.d.ts.map +1 -0
- package/dist/genre-parse.js +104 -0
- package/dist/genre-parse.js.map +1 -0
- package/dist/genre-suggest.d.ts +15 -0
- package/dist/genre-suggest.d.ts.map +1 -0
- package/dist/genre-suggest.js +26 -0
- package/dist/genre-suggest.js.map +1 -0
- package/dist/genre.d.ts +1 -1
- package/dist/genre.d.ts.map +1 -1
- package/dist/genre.js +3 -13
- package/dist/genre.js.map +1 -1
- package/dist/init-choice.d.ts +12 -0
- package/dist/init-choice.d.ts.map +1 -0
- package/dist/init-choice.js +41 -0
- package/dist/init-choice.js.map +1 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +16 -5
- package/dist/init.js.map +1 -1
- package/dist/judge.d.ts +2 -1
- package/dist/judge.d.ts.map +1 -1
- package/dist/judge.js +1 -1
- package/dist/judge.js.map +1 -1
- package/dist/line-paragraphs.d.ts +4 -0
- package/dist/line-paragraphs.d.ts.map +1 -0
- package/dist/line-paragraphs.js +69 -0
- package/dist/line-paragraphs.js.map +1 -0
- package/dist/mask.d.ts.map +1 -1
- package/dist/mask.js +7 -6
- package/dist/mask.js.map +1 -1
- package/dist/plugin.d.ts +6 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/profile/check.d.ts +28 -0
- package/dist/profile/check.d.ts.map +1 -0
- package/dist/profile/check.js +12 -0
- package/dist/profile/check.js.map +1 -0
- package/dist/profile/for-file.d.ts +2 -2
- package/dist/profile/for-file.d.ts.map +1 -1
- package/dist/profile/for-file.js +9 -2
- package/dist/profile/for-file.js.map +1 -1
- package/dist/profile/load.js +1 -1
- package/dist/profile/load.js.map +1 -1
- package/dist/profile/select.d.ts +4 -2
- package/dist/profile/select.d.ts.map +1 -1
- package/dist/profile/select.js +8 -3
- package/dist/profile/select.js.map +1 -1
- package/dist/quoted-span.d.ts +15 -3
- package/dist/quoted-span.d.ts.map +1 -1
- package/dist/quoted-span.js +16 -11
- package/dist/quoted-span.js.map +1 -1
- package/dist/reasons.d.ts +1 -0
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +4 -1
- package/dist/reasons.js.map +1 -1
- package/dist/render/compact.d.ts.map +1 -1
- package/dist/render/compact.js +1 -2
- package/dist/render/compact.js.map +1 -1
- package/dist/render/eval.d.ts.map +1 -1
- package/dist/render/eval.js +4 -3
- package/dist/render/eval.js.map +1 -1
- package/dist/render/friendly.d.ts +2 -1
- package/dist/render/friendly.d.ts.map +1 -1
- package/dist/render/friendly.js +14 -6
- package/dist/render/friendly.js.map +1 -1
- package/dist/render/genres.d.ts +5 -0
- package/dist/render/genres.d.ts.map +1 -0
- package/dist/render/genres.js +28 -0
- package/dist/render/genres.js.map +1 -0
- package/dist/render/plural.d.ts +3 -0
- package/dist/render/plural.d.ts.map +1 -0
- package/dist/render/plural.js +5 -0
- package/dist/render/plural.js.map +1 -0
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +9 -3
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/semantic.d.ts +3 -2
- package/dist/render/semantic.d.ts.map +1 -1
- package/dist/render/semantic.js +94 -34
- package/dist/render/semantic.js.map +1 -1
- package/dist/render/summary.d.ts.map +1 -1
- package/dist/render/summary.js +4 -3
- package/dist/render/summary.js.map +1 -1
- package/dist/render/suppressions.d.ts.map +1 -1
- package/dist/render/suppressions.js +3 -2
- package/dist/render/suppressions.js.map +1 -1
- package/dist/render/text.d.ts +2 -0
- package/dist/render/text.d.ts.map +1 -1
- package/dist/render/text.js +11 -3
- package/dist/render/text.js.map +1 -1
- package/dist/rule-load.d.ts.map +1 -1
- package/dist/rule-load.js +4 -1
- package/dist/rule-load.js.map +1 -1
- package/dist/run-semantic.js +1 -1
- package/dist/run-semantic.js.map +1 -1
- package/dist/run.d.ts +2 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +25 -15
- package/dist/run.js.map +1 -1
- package/dist/sentence-shape.d.ts +0 -1
- package/dist/sentence-shape.d.ts.map +1 -1
- package/dist/sentence-shape.js +3 -5
- package/dist/sentence-shape.js.map +1 -1
- package/dist/setting-problems.d.ts +5 -0
- package/dist/setting-problems.d.ts.map +1 -0
- package/dist/setting-problems.js +15 -0
- package/dist/setting-problems.js.map +1 -0
- package/dist/structure/build.js +5 -5
- package/dist/structure/build.js.map +1 -1
- package/dist/structure/cite.js +1 -1
- package/dist/structure/cite.js.map +1 -1
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +5 -5
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/markdown-path.d.ts.map +1 -1
- package/dist/structure/markdown-path.js +2 -2
- package/dist/structure/markdown-path.js.map +1 -1
- package/dist/structure/numbering.d.ts.map +1 -1
- package/dist/structure/numbering.js +1 -1
- package/dist/structure/numbering.js.map +1 -1
- package/dist/structure/relative-find.js +1 -1
- package/dist/structure/relative-find.js.map +1 -1
- package/dist/structure/sexp.js +1 -1
- package/dist/structure/sexp.js.map +1 -1
- package/dist/structure/unnumbered.js +2 -2
- package/dist/structure/unnumbered.js.map +1 -1
- package/dist/team-names.d.ts +9 -0
- package/dist/team-names.d.ts.map +1 -0
- package/dist/team-names.js +34 -0
- package/dist/team-names.js.map +1 -0
- package/dist/ui.d.ts +2 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +6 -0
- package/dist/ui.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/watch.d.ts +2 -2
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +5 -5
- package/dist/watch.js.map +1 -1
- package/genres.yaml +363 -0
- package/package.json +4 -3
- package/rules/adverb-overuse.yaml +2 -2
- package/rules/agentless-passive.yaml +1 -1
- package/rules/ai-generated-composite.yaml +2 -2
- package/rules/ai-tell.yaml +2 -2
- package/rules/bold-density.yaml +2 -2
- package/rules/closing-cliche.yaml +1 -1
- package/rules/concrete-evidence-density.yaml +2 -2
- package/rules/contraction-consistency.yaml +1 -1
- package/rules/cushion-phrase-density.yaml +1 -1
- package/rules/dangling-reference.yaml +1 -1
- package/rules/date-order.yaml +1 -1
- package/rules/date-weekday-mismatch.yaml +1 -1
- package/rules/double-keigo.yaml +1 -1
- package/rules/doubled-word.yaml +1 -1
- package/rules/duplicate-definition.yaml +1 -1
- package/rules/emoji-density.yaml +1 -1
- package/rules/empty-conclusion.yaml +2 -1
- package/rules/empty-intensifier.yaml +1 -1
- package/rules/excessive-hedging.yaml +16 -6
- package/rules/expletive-construction.yaml +2 -2
- package/rules/heading-echo.yaml +1 -1
- package/rules/hiragana-fukushi.yaml +1 -1
- package/rules/internal-jargon.yaml +2 -2
- package/rules/latin-spacing.yaml +5 -4
- package/rules/max-kanji-continuous.yaml +4 -3
- package/rules/max-paragraph-length.yaml +9 -2
- package/rules/max-sentence-length.yaml +14 -2
- package/rules/ngram-repetition.yaml +4 -4
- package/rules/no-doubled-joshi.yaml +2 -2
- package/rules/no-em-dash.yaml +2 -2
- package/rules/no-mixed-desumasu.yaml +1 -1
- package/rules/no-nakaguro-parallel.yaml +2 -2
- package/rules/numbering-gap.yaml +1 -1
- package/rules/oxford-comma-consistency.yaml +2 -1
- package/rules/padded-intro.yaml +2 -1
- package/rules/paragraph-length-variance.yaml +1 -1
- package/rules/preamble-length.yaml +2 -2
- package/rules/preferred-term.yaml +1 -1
- package/rules/proper-noun-density.yaml +3 -2
- package/rules/repeated-conjunction.yaml +2 -2
- package/rules/repeated-sentence-head.yaml +2 -2
- package/rules/required-sections.yaml +1 -1
- package/rules/rule-of-three.yaml +2 -2
- package/rules/sasete-itadaku.yaml +3 -3
- package/rules/section-length-uniformity.yaml +1 -1
- package/rules/sentence-initial-conjunction-run.yaml +2 -2
- package/rules/sentence-rhythm.yaml +1 -1
- package/rules/taigen-dome-in-prose.yaml +2 -2
- package/rules/title-case-consistency.yaml +1 -1
- package/rules/total-mismatch.yaml +1 -1
- package/rules/undefined-acronym.yaml +4 -4
- package/rules/unqualified-superlative.yaml +2 -2
- package/skills/chaff/SKILL.md +28 -9
- package/src/address-chain.ts +1 -1
- package/src/backends/anthropic.ts +5 -1
- package/src/backends/openai.ts +2 -1
- package/src/backends/types.ts +3 -2
- package/src/baseline.ts +1 -1
- package/src/calendar-number.ts +75 -0
- package/src/cli-args.ts +2 -2
- package/src/cli-text.ts +29 -15
- package/src/cli.ts +42 -41
- package/src/commands/cite.ts +4 -4
- package/src/commands/eval.ts +1 -1
- package/src/commands/init-ask.ts +53 -0
- package/src/commands/test.ts +102 -45
- package/src/commands/tree.ts +7 -6
- package/src/config/by-path.ts +8 -9
- package/src/config/load.ts +24 -0
- package/src/config/name-problems.ts +15 -0
- package/src/date-stamp.ts +1 -1
- package/src/detectors/char-shape.ts +21 -9
- package/src/detectors/en-shape.ts +106 -8
- package/src/detectors/enumerated-runs.ts +3 -2
- package/src/detectors/gram-place.ts +1 -1
- package/src/detectors/heading-case.ts +4 -1
- package/src/detectors/index.ts +4 -3
- package/src/detectors/lettered-index.ts +78 -0
- package/src/detectors/lexicon.ts +63 -6
- package/src/detectors/orthography.ts +31 -7
- package/src/detectors/phrase-match.ts +23 -12
- package/src/detectors/repeated-head.ts +3 -4
- package/src/detectors/signals.ts +15 -6
- package/src/detectors/stacked-hedge.ts +93 -0
- package/src/detectors/superlative-amount.ts +24 -0
- package/src/detectors/superlative-clause.ts +82 -0
- package/src/detectors/superlative-scope.ts +3 -3
- package/src/detectors/team.ts +18 -2
- package/src/detectors/token-shape.ts +8 -10
- package/src/document.ts +29 -3
- package/src/eval.ts +1 -1
- package/src/feedback/draft.ts +1 -1
- package/src/feedback/excerpt.ts +2 -2
- package/src/file-header.ts +31 -0
- package/src/files.ts +3 -3
- package/src/genre-check.ts +1 -1
- package/src/genre-load.ts +24 -0
- package/src/genre-parse.ts +126 -0
- package/src/genre-suggest.ts +37 -0
- package/src/genre.ts +4 -13
- package/src/init-choice.ts +47 -0
- package/src/init.ts +20 -6
- package/src/judge.ts +3 -1
- package/src/line-paragraphs.ts +83 -0
- package/src/mask.ts +5 -6
- package/src/plugin.ts +6 -0
- package/src/profile/check.ts +34 -0
- package/src/profile/for-file.ts +10 -3
- package/src/profile/load.ts +1 -1
- package/src/profile/select.ts +11 -4
- package/src/quoted-span.ts +26 -12
- package/src/reasons.ts +5 -1
- package/src/render/compact.ts +1 -3
- package/src/render/eval.ts +4 -3
- package/src/render/friendly.ts +21 -6
- package/src/render/genres.ts +31 -0
- package/src/render/plural.ts +6 -0
- package/src/render/rules-json.ts +10 -3
- package/src/render/semantic.ts +117 -34
- package/src/render/summary.ts +4 -3
- package/src/render/suppressions.ts +3 -2
- package/src/render/text.ts +18 -3
- package/src/rule-load.ts +6 -1
- package/src/run-semantic.ts +1 -1
- package/src/run.ts +28 -15
- package/src/sentence-shape.ts +3 -7
- package/src/setting-problems.ts +24 -0
- package/src/structure/build.ts +5 -5
- package/src/structure/cite.ts +1 -1
- package/src/structure/issues.ts +6 -5
- package/src/structure/markdown-path.ts +2 -2
- package/src/structure/numbering.ts +1 -1
- package/src/structure/relative-find.ts +1 -1
- package/src/structure/sexp.ts +1 -1
- package/src/structure/unnumbered.ts +2 -2
- package/src/team-names.ts +39 -0
- package/src/ui.ts +7 -0
- package/src/version.ts +1 -1
- package/src/watch.ts +5 -5
package/dist/files.js
CHANGED
|
@@ -2,9 +2,9 @@ import { globSync, statSync } from "node:fs";
|
|
|
2
2
|
import { join, relative, sep } from "node:path";
|
|
3
3
|
const MARKDOWN = [".md", ".markdown", ".mdx"];
|
|
4
4
|
/** 走査から外す。ここを通すと node_modules の README を延々と検査することになる。 */
|
|
5
|
-
const SKIP = ["node_modules", "dist", "build", "coverage", ".git", ".chaff-cache"];
|
|
5
|
+
const SKIP = new Set(["node_modules", "dist", "build", "coverage", ".git", ".chaff-cache"]);
|
|
6
6
|
const isMarkdown = (path) => MARKDOWN.some((ext) => path.toLowerCase().endsWith(ext));
|
|
7
|
-
const isSkipped = (path) => path.split(sep).some((part) => SKIP.
|
|
7
|
+
const isSkipped = (path) => path.split(sep).some((part) => SKIP.has(part));
|
|
8
8
|
const expand = (target) => {
|
|
9
9
|
const stat = statSync(target, { throwIfNoEntry: false });
|
|
10
10
|
if (stat === undefined)
|
|
@@ -25,6 +25,6 @@ const expand = (target) => {
|
|
|
25
25
|
const byPath = (left, right) => left.localeCompare(right, "en");
|
|
26
26
|
export const collectTargets = (targets) => {
|
|
27
27
|
const found = targets.flatMap(expand).filter((path) => !isSkipped(path));
|
|
28
|
-
return [...new Set(found)].
|
|
28
|
+
return [...new Set(found)].toSorted((left, right) => byPath(relative(".", left), relative(".", right)));
|
|
29
29
|
};
|
|
30
30
|
//# sourceMappingURL=files.js.map
|
package/dist/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAE9C,yDAAyD;AACzD,MAAM,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhD,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;AAE9C,yDAAyD;AACzD,MAAM,IAAI,GAAwB,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;AAEjH,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvG,MAAM,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAE5F,MAAM,MAAM,GAAG,CAAC,MAAc,EAAY,EAAE;IAC1C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC7D,CAAC,CAAC;AAEF;;;;GAIG;AACH;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA0B,EAAY,EAAE;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1G,CAAC,CAAC"}
|
package/dist/genre-check.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { frontMatterValues } from "./genre.js";
|
|
2
2
|
/** Commands that never read a genre from chaff.yaml. A wrong one there must not stop them: genres is how to find the right name. */
|
|
3
|
-
const GENRE_FREE = new Set(["init", "genres", "skill", "relax", "strict", "off"
|
|
3
|
+
const GENRE_FREE = new Set(["init", "genres", "skill", "relax", "strict", "off"]);
|
|
4
4
|
/** The genres a command would read: --genre always (every command refuses a wrong one), chaff.yaml's only where the command reads a genre. */
|
|
5
5
|
export const writtenGenres = (command, flag, config) => (GENRE_FREE.has(command) ? { flag, config: undefined, byPath: [] } : { flag, config: config.genre, byPath: config.byPath });
|
|
6
6
|
const setting = (where, genre, files = []) => genre === undefined ? [] : [{ where, genre, files }];
|
package/dist/genre-check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genre-check.js","sourceRoot":"","sources":["../src/genre-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgB/C,oIAAoI;AACpI,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"genre-check.js","sourceRoot":"","sources":["../src/genre-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgB/C,oIAAoI;AACpI,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAEvG,8IAA8I;AAC9I,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAAe,EACf,IAAwB,EACxB,MAAqF,EACtE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAEhJ,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,KAAyB,EAAE,QAA2B,EAAE,EAAkB,EAAE,CAChH,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAsB,EAAE,KAAwB,EAAkB,EAAE,CAChG;IACE,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;IACnC,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;IACpC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACnF,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,KAAwB,EAAsB,EAAE,CACtG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type GenreData, type PresetLevels } from "./genre-parse.ts";
|
|
2
|
+
/** The bundled genres.yaml. Read once. */
|
|
3
|
+
export declare const loadGenres: () => GenreData;
|
|
4
|
+
export declare const presetLevels: (genre: string) => PresetLevels;
|
|
5
|
+
export declare const presetProfile: (genre: string) => string | undefined;
|
|
6
|
+
//# sourceMappingURL=genre-load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genre-load.d.ts","sourceRoot":"","sources":["../src/genre-load.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgD,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMnH,0CAA0C;AAC1C,eAAO,MAAM,UAAU,QAAO,SAQ7B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,YAAmD,CAAC;AAEjG,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,SAAiD,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { parse } from "yaml";
|
|
5
|
+
import { parseGenres, presetLevelsOf, presetProfileOf } from "./genre-parse.js";
|
|
6
|
+
const GENRES_FILE = join(dirname(fileURLToPath(import.meta.url)), "..", "genres.yaml");
|
|
7
|
+
const loaded = { value: undefined };
|
|
8
|
+
/** The bundled genres.yaml. Read once. */
|
|
9
|
+
export const loadGenres = () => {
|
|
10
|
+
if (loaded.value !== undefined)
|
|
11
|
+
return loaded.value;
|
|
12
|
+
try {
|
|
13
|
+
loaded.value = parseGenres(parse(readFileSync(GENRES_FILE, "utf8")));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw new Error(`cannot read ${GENRES_FILE}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
17
|
+
}
|
|
18
|
+
return loaded.value;
|
|
19
|
+
};
|
|
20
|
+
export const presetLevels = (genre) => presetLevelsOf(loadGenres(), genre);
|
|
21
|
+
export const presetProfile = (genre) => presetProfileOf(loadGenres(), genre);
|
|
22
|
+
//# sourceMappingURL=genre-load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genre-load.js","sourceRoot":"","sources":["../src/genre-load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAqC,MAAM,kBAAkB,CAAC;AAEnH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAEvF,MAAM,MAAM,GAAqC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAEtE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,UAAU,GAAG,GAAc,EAAE;IACxC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,eAAe,WAAW,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7H,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAgB,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;AAEjG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAsB,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Level, Localized } from "./plugin.ts";
|
|
2
|
+
/** A preset's rules: the level each named rule runs at, under whatever chaff.yaml's rules say. */
|
|
3
|
+
export type PresetLevels = Readonly<Record<string, Level>>;
|
|
4
|
+
/** A group of genres (legal, literature): its name, and the levels every genre in it shares. */
|
|
5
|
+
export type GenreGroup = {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly name: Localized;
|
|
8
|
+
readonly rules: PresetLevels;
|
|
9
|
+
};
|
|
10
|
+
/** One genre of genres.yaml: what it is for, the levels it sets on top of its group's, and the profile it reads with. */
|
|
11
|
+
export type GenreDefinition = {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly name: Localized;
|
|
14
|
+
readonly summary: Localized;
|
|
15
|
+
readonly rules: PresetLevels;
|
|
16
|
+
readonly profile: string | undefined;
|
|
17
|
+
readonly suggest: GenreSuggest;
|
|
18
|
+
};
|
|
19
|
+
/** A line shape that marks the genre, and how many lines must have it. */
|
|
20
|
+
type LineCue = {
|
|
21
|
+
readonly line: RegExp;
|
|
22
|
+
readonly minLines: number;
|
|
23
|
+
};
|
|
24
|
+
/** What makes a document look like this genre when no genre is set: its path, or enough lines of the genre's own shape, per language. */
|
|
25
|
+
export type GenreSuggest = {
|
|
26
|
+
readonly paths: readonly RegExp[];
|
|
27
|
+
readonly lines: Readonly<Record<string, LineCue>>;
|
|
28
|
+
};
|
|
29
|
+
export type GenreData = {
|
|
30
|
+
readonly groups: readonly GenreGroup[];
|
|
31
|
+
readonly genres: readonly GenreDefinition[];
|
|
32
|
+
};
|
|
33
|
+
/** genres.yaml as read by the yaml package. Throws on anything it cannot read: the file ships with chaff, so a wrong entry is chaff's bug. */
|
|
34
|
+
export declare const parseGenres: (raw: unknown) => GenreData;
|
|
35
|
+
/** The levels a genre's preset sets: its group's, then its own on top. Empty for a genre chaff does not know. */
|
|
36
|
+
export declare const presetLevelsOf: (data: GenreData, genre: string) => PresetLevels;
|
|
37
|
+
/** The profile a genre reads its documents with, when it names one. */
|
|
38
|
+
export declare const presetProfileOf: (data: GenreData, genre: string) => string | undefined;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=genre-parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genre-parse.d.ts","sourceRoot":"","sources":["../src/genre-parse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpD,kGAAkG;AAClG,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3D,gGAAgG;AAChG,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAEzG,yHAAyH;AACzH,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC,CAAC;AAEF,0EAA0E;AAC1E,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,yIAAyI;AACzI,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,CAAC;AAEpH,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAAE,CAAC;AAiFhH,8IAA8I;AAC9I,eAAO,MAAM,WAAW,GAAI,KAAK,OAAO,KAAG,SAO1C,CAAC;AAEF,iHAAiH;AACjH,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,KAAG,YAK/D,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SAAqE,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { isLevel } from "./levels.js";
|
|
2
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
3
|
+
const isLocalized = (value) => isRecord(value) && typeof value["ja"] === "string" && typeof value["en"] === "string" && value["ja"] !== "" && value["en"] !== "";
|
|
4
|
+
const levelsOf = (value, where) => {
|
|
5
|
+
if (value === undefined)
|
|
6
|
+
return {};
|
|
7
|
+
if (!isRecord(value))
|
|
8
|
+
throw new Error(`${where}: rules must be a map of rule ids to levels`);
|
|
9
|
+
const wrong = Object.entries(value).find(([, level]) => !isLevel(level));
|
|
10
|
+
if (wrong !== undefined)
|
|
11
|
+
throw new Error(`${where}: ${wrong[0]} has the level ${String(wrong[1])}; use strict, normal, relaxed or off`);
|
|
12
|
+
return Object.fromEntries(Object.entries(value).filter((entry) => isLevel(entry[1])));
|
|
13
|
+
};
|
|
14
|
+
const localizedOf = (value, field, where) => {
|
|
15
|
+
if (!isLocalized(value))
|
|
16
|
+
throw new Error(`${where}: ${field} needs a ja and an en text`);
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
const idOf = (value, index) => {
|
|
20
|
+
const id = isRecord(value) ? value["id"] : undefined;
|
|
21
|
+
if (typeof id !== "string" || id === "")
|
|
22
|
+
throw new Error(`entry ${String(index + 1)} has no id`);
|
|
23
|
+
return id;
|
|
24
|
+
};
|
|
25
|
+
const groupOf = (value, index) => {
|
|
26
|
+
const id = idOf(value, index);
|
|
27
|
+
const raw = isRecord(value) ? value : {};
|
|
28
|
+
return { id, name: localizedOf(raw["name"], "name", id), rules: levelsOf(raw["rules"], id) };
|
|
29
|
+
};
|
|
30
|
+
const patternOf = (value, flags, where) => {
|
|
31
|
+
if (typeof value !== "string" || value === "")
|
|
32
|
+
throw new Error(`${where}: a pattern must be a non-empty string`);
|
|
33
|
+
try {
|
|
34
|
+
return new RegExp(value, flags);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
throw new Error(`${where}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const lineCueOf = (value, where) => {
|
|
41
|
+
if (!isRecord(value))
|
|
42
|
+
throw new Error(`${where}: needs line and min_lines`);
|
|
43
|
+
const minLines = value["min_lines"];
|
|
44
|
+
if (typeof minLines !== "number" || !Number.isInteger(minLines) || minLines < 1)
|
|
45
|
+
throw new Error(`${where}: min_lines must be a whole number of 1 or more`);
|
|
46
|
+
return { line: patternOf(value["line"], "u", where), minLines };
|
|
47
|
+
};
|
|
48
|
+
const suggestOf = (value, where) => {
|
|
49
|
+
if (value === undefined)
|
|
50
|
+
return { paths: [], lines: {} };
|
|
51
|
+
if (!isRecord(value))
|
|
52
|
+
throw new Error(`${where}: suggest must be a map`);
|
|
53
|
+
const paths = value["paths"] ?? [];
|
|
54
|
+
if (!Array.isArray(paths))
|
|
55
|
+
throw new Error(`${where}: suggest.paths must be a list`);
|
|
56
|
+
const lines = Object.entries(value).filter(([key]) => key !== "paths");
|
|
57
|
+
return {
|
|
58
|
+
paths: paths.map((path) => patternOf(path, "iu", `${where} suggest.paths`)),
|
|
59
|
+
lines: Object.fromEntries(lines.map(([language, cue]) => [language, lineCueOf(cue, `${where} suggest.${language}`)])),
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
const genreOf = (value, index) => {
|
|
63
|
+
const id = idOf(value, index);
|
|
64
|
+
const raw = isRecord(value) ? value : {};
|
|
65
|
+
const profile = raw["profile"];
|
|
66
|
+
if (profile !== undefined && (typeof profile !== "string" || profile === ""))
|
|
67
|
+
throw new Error(`${id}: profile must be a profile's id`);
|
|
68
|
+
return {
|
|
69
|
+
id,
|
|
70
|
+
name: localizedOf(raw["name"], "name", id),
|
|
71
|
+
summary: localizedOf(raw["summary"], "summary", id),
|
|
72
|
+
rules: levelsOf(raw["rules"], id),
|
|
73
|
+
profile,
|
|
74
|
+
suggest: suggestOf(raw["suggest"], id),
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const listOf = (raw, key) => {
|
|
78
|
+
const value = raw[key];
|
|
79
|
+
if (!Array.isArray(value))
|
|
80
|
+
throw new Error(`genres.yaml needs a list under ${key}`);
|
|
81
|
+
return value;
|
|
82
|
+
};
|
|
83
|
+
/** genres.yaml as read by the yaml package. Throws on anything it cannot read: the file ships with chaff, so a wrong entry is chaff's bug. */
|
|
84
|
+
export const parseGenres = (raw) => {
|
|
85
|
+
if (!isRecord(raw))
|
|
86
|
+
throw new Error("genres.yaml must be a map with groups and genres");
|
|
87
|
+
const groups = listOf(raw, "groups").map(groupOf);
|
|
88
|
+
const genres = listOf(raw, "genres").map(genreOf);
|
|
89
|
+
const orphan = genres.find((genre) => !groups.some((group) => genre.id.startsWith(`${group.id}/`)));
|
|
90
|
+
if (orphan !== undefined)
|
|
91
|
+
throw new Error(`${orphan.id}: no group matches the part before its /`);
|
|
92
|
+
return { groups, genres };
|
|
93
|
+
};
|
|
94
|
+
/** The levels a genre's preset sets: its group's, then its own on top. Empty for a genre chaff does not know. */
|
|
95
|
+
export const presetLevelsOf = (data, genre) => {
|
|
96
|
+
const own = data.genres.find((entry) => entry.id === genre);
|
|
97
|
+
if (own === undefined)
|
|
98
|
+
return {};
|
|
99
|
+
const group = data.groups.find((entry) => genre.startsWith(`${entry.id}/`));
|
|
100
|
+
return { ...group?.rules, ...own.rules };
|
|
101
|
+
};
|
|
102
|
+
/** The profile a genre reads its documents with, when it names one. */
|
|
103
|
+
export const presetProfileOf = (data, genre) => data.genres.find((entry) => entry.id === genre)?.profile;
|
|
104
|
+
//# sourceMappingURL=genre-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genre-parse.js","sourceRoot":"","sources":["../src/genre-parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GenreData, GenreDefinition } from "./genre-parse.ts";
|
|
2
|
+
import { type ProfileDefinition } from "./profile/parse.ts";
|
|
3
|
+
/** The file a genre is suggested for: where it is, what it says, and its language. */
|
|
4
|
+
export type SuggestInput = {
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly source: string;
|
|
7
|
+
readonly language: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The genre a file with no genre set looks like, for the screen to suggest. Never used to check the file: switching silently
|
|
11
|
+
* would change what an existing run reports. The genre whose cues the file meets most strongly wins (a transcript that
|
|
12
|
+
* discusses a bill has more speaker lines than lines about "this Act"); a tie goes to the genre listed first in genres.yaml.
|
|
13
|
+
*/
|
|
14
|
+
export declare const suggestGenre: (input: SuggestInput, data: GenreData, profiles: readonly ProfileDefinition[]) => GenreDefinition | undefined;
|
|
15
|
+
//# sourceMappingURL=genre-suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genre-suggest.d.ts","sourceRoot":"","sources":["../src/genre-suggest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAY,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,sFAAsF;AACtF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAuBzG;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY,EAAE,MAAM,SAAS,EAAE,UAAU,SAAS,iBAAiB,EAAE,KAAG,eAAe,GAAG,SAIK,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { detected } from "./profile/parse.js";
|
|
2
|
+
/** A path cue names the kind outright, so it outweighs any count of lines. */
|
|
3
|
+
const BY_PATH = Number.POSITIVE_INFINITY;
|
|
4
|
+
/** How many times over the genre's lines reach their minimum: 1 is just enough, 0 is none of that shape. */
|
|
5
|
+
const linesScore = (genre, input) => {
|
|
6
|
+
const cue = genre.suggest.lines[input.language];
|
|
7
|
+
if (cue === undefined)
|
|
8
|
+
return 0;
|
|
9
|
+
return input.source.split("\n").filter((line) => cue.line.test(line)).length / cue.minLines;
|
|
10
|
+
};
|
|
11
|
+
/** A genre that reads with a profile has the profile's shape (a statute's article lines) as just-enough evidence. */
|
|
12
|
+
const profileScore = (genre, input, profiles) => {
|
|
13
|
+
const profile = profiles.find((definition) => definition.id === genre.profile);
|
|
14
|
+
return profile !== undefined && detected(profile, input.source, input.language) ? 1 : 0;
|
|
15
|
+
};
|
|
16
|
+
const scoreOf = (genre, input, profiles) => genre.suggest.paths.some((pattern) => pattern.test(input.path)) ? BY_PATH : Math.max(linesScore(genre, input), profileScore(genre, input, profiles));
|
|
17
|
+
/**
|
|
18
|
+
* The genre a file with no genre set looks like, for the screen to suggest. Never used to check the file: switching silently
|
|
19
|
+
* would change what an existing run reports. The genre whose cues the file meets most strongly wins (a transcript that
|
|
20
|
+
* discusses a bill has more speaker lines than lines about "this Act"); a tie goes to the genre listed first in genres.yaml.
|
|
21
|
+
*/
|
|
22
|
+
export const suggestGenre = (input, data, profiles) => data.genres
|
|
23
|
+
.map((genre) => ({ genre, score: scoreOf(genre, input, profiles) }))
|
|
24
|
+
.filter((entry) => entry.score >= 1)
|
|
25
|
+
.reduce((best, entry) => (best === undefined || entry.score > best.score ? entry : best), undefined)?.genre;
|
|
26
|
+
//# sourceMappingURL=genre-suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genre-suggest.js","sourceRoot":"","sources":["../src/genre-suggest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA0B,MAAM,oBAAoB,CAAC;AAKtE,8EAA8E;AAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEzC,4GAA4G;AAC5G,MAAM,UAAU,GAAG,CAAC,KAAsB,EAAE,KAAmB,EAAU,EAAE;IACzE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9F,CAAC,CAAC;AAEF,qHAAqH;AACrH,MAAM,YAAY,GAAG,CAAC,KAAsB,EAAE,KAAmB,EAAE,QAAsC,EAAU,EAAE;IACnH,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/E,OAAO,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,KAAsB,EAAE,KAAmB,EAAE,QAAsC,EAAU,EAAE,CAC9G,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAIvJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAE,IAAe,EAAE,QAAsC,EAA+B,EAAE,CACxI,IAAI,CAAC,MAAM;KACR,GAAG,CAAC,CAAC,KAAK,EAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC3E,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;KACnC,MAAM,CAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,CAAC"}
|
package/dist/genre.d.ts
CHANGED
package/dist/genre.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genre.d.ts","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"genre.d.ts","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"AAEA,mEAAmE;AACnE,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAAiD,CAAC;AAEtF,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AA4BxG,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,OAAO,MAAM,GAAG,SAAS,KAAG,UAAU,GAAG,SAOjG,CAAC;AAWF,sDAAsD;AACtD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,KAAG,MAAM,EAGrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAC4D,CAAC"}
|
package/dist/genre.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
"technical/readme",
|
|
5
|
-
"blog/tech",
|
|
6
|
-
"blog/essay",
|
|
7
|
-
"blog/owned-media",
|
|
8
|
-
"business/proposal",
|
|
9
|
-
"business/report",
|
|
10
|
-
"business/email",
|
|
11
|
-
"business/press-release",
|
|
12
|
-
"business/meeting-notes",
|
|
13
|
-
];
|
|
1
|
+
import { loadGenres } from "./genre-load.js";
|
|
2
|
+
/** chaff が知っているジャンル。genres.yaml の並び。rule の use_for はこの頭の部分で当てる。 */
|
|
3
|
+
export const GENRES = loadGenres().genres.map((genre) => genre.id);
|
|
14
4
|
/**
|
|
15
5
|
* 仕様書・README は「読ませる文章」ではなく「間違えさせない文章」。
|
|
16
6
|
* 書き出しのつかみもリズムも要らない。技術文書として別に見る。
|
package/dist/genre.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genre.js","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"genre.js","sourceRoot":"","sources":["../src/genre.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GenreData } from "./genre-parse.ts";
|
|
2
|
+
import type { UiLanguage } from "./ui.ts";
|
|
3
|
+
/** The genre init writes when nothing is chosen: the one a check uses when none is set. */
|
|
4
|
+
export declare const DEFAULT_GENRE = "blog/tech";
|
|
5
|
+
/** The numbered list init shows before it asks: every genre with what it is for, in genres.yaml's order. */
|
|
6
|
+
export declare const genreChoices: (data: GenreData, ui: UiLanguage) => string[];
|
|
7
|
+
export declare const choicePrompt: (ui: UiLanguage) => string;
|
|
8
|
+
export declare const notAGenre: (answer: string, ui: UiLanguage) => string;
|
|
9
|
+
export declare const noAnswer: (ui: UiLanguage) => string;
|
|
10
|
+
/** A number from the list, a genre's name, or nothing (the default). undefined for anything else: init then writes nothing. */
|
|
11
|
+
export declare const genreFromAnswer: (answer: string, ids: readonly string[]) => string | undefined;
|
|
12
|
+
//# sourceMappingURL=init-choice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-choice.d.ts","sourceRoot":"","sources":["../src/init-choice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAEjD,2FAA2F;AAC3F,eAAO,MAAM,aAAa,cAAc,CAAC;AAiBzC,4GAA4G;AAC5G,eAAO,MAAM,YAAY,GAAI,MAAM,SAAS,EAAE,IAAI,UAAU,KAAG,MAAM,EAUpE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,IAAI,UAAU,KAAG,MAAyB,CAAC;AAExE,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,EAAE,IAAI,UAAU,KAAG,MAAoC,CAAC;AAEhG,eAAO,MAAM,QAAQ,GAAI,IAAI,UAAU,KAAG,MAA2B,CAAC;AAEtE,+HAA+H;AAC/H,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAKjF,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** The genre init writes when nothing is chosen: the one a check uses when none is set. */
|
|
2
|
+
export const DEFAULT_GENRE = "blog/tech";
|
|
3
|
+
const TEXT = {
|
|
4
|
+
ja: {
|
|
5
|
+
heading: "どの種類の文書をここに置きますか? 選んだ種類の書き方に合わせて見ます。",
|
|
6
|
+
prompt: `番号か名前を入れてください(Enter で ${DEFAULT_GENRE}): `,
|
|
7
|
+
notAGenre: (answer) => `「${answer}」は一覧にありません。何も作っていません。npx chaffjs init --genre <ジャンル> でも選べます。`,
|
|
8
|
+
noAnswer: "答えが無いまま入力が終わったので、何も作っていません。",
|
|
9
|
+
},
|
|
10
|
+
en: {
|
|
11
|
+
heading: "What kind of document goes here? chaff checks it the way that kind is written.",
|
|
12
|
+
prompt: `Type a number or a name (Enter for ${DEFAULT_GENRE}): `,
|
|
13
|
+
notAGenre: (answer) => `"${answer}" is not in the list. Nothing was created. npx chaffjs init --genre <genre> chooses one too.`,
|
|
14
|
+
noAnswer: "The input ended without an answer, so nothing was created.",
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
/** The numbered list init shows before it asks: every genre with what it is for, in genres.yaml's order. */
|
|
18
|
+
export const genreChoices = (data, ui) => {
|
|
19
|
+
const width = Math.max(...data.genres.map((genre) => genre.id.length)) + 2;
|
|
20
|
+
const numberWidth = String(data.genres.length).length;
|
|
21
|
+
return [
|
|
22
|
+
"",
|
|
23
|
+
TEXT[ui].heading,
|
|
24
|
+
"",
|
|
25
|
+
...data.genres.map((genre, index) => ` ${String(index + 1).padStart(numberWidth)} ${genre.id.padEnd(width)}${genre.summary[ui] ?? ""}`),
|
|
26
|
+
"",
|
|
27
|
+
];
|
|
28
|
+
};
|
|
29
|
+
export const choicePrompt = (ui) => TEXT[ui].prompt;
|
|
30
|
+
export const notAGenre = (answer, ui) => TEXT[ui].notAGenre(answer);
|
|
31
|
+
export const noAnswer = (ui) => TEXT[ui].noAnswer;
|
|
32
|
+
/** A number from the list, a genre's name, or nothing (the default). undefined for anything else: init then writes nothing. */
|
|
33
|
+
export const genreFromAnswer = (answer, ids) => {
|
|
34
|
+
const typed = answer.trim();
|
|
35
|
+
if (typed === "")
|
|
36
|
+
return DEFAULT_GENRE;
|
|
37
|
+
if (ids.includes(typed))
|
|
38
|
+
return typed;
|
|
39
|
+
return /^\d+$/u.test(typed) ? ids[Number(typed) - 1] : undefined;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=init-choice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-choice.js","sourceRoot":"","sources":["../src/init-choice.ts"],"names":[],"mappings":"AAGA,2FAA2F;AAC3F,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC;AAEzC,MAAM,IAAI,GAA4I;IACpJ,EAAE,EAAE;QACF,OAAO,EAAE,sCAAsC;QAC/C,MAAM,EAAE,yBAAyB,aAAa,KAAK;QACnD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,8DAA8D;QAC/F,QAAQ,EAAE,6BAA6B;KACxC;IACD,EAAE,EAAE;QACF,OAAO,EAAE,gFAAgF;QACzF,MAAM,EAAE,sCAAsC,aAAa,KAAK;QAChE,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,8FAA8F;QAC/H,QAAQ,EAAE,4DAA4D;KACvE;CACF,CAAC;AAEF,4GAA4G;AAC5G,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAe,EAAE,EAAc,EAAY,EAAE;IACxE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACtD,OAAO;QACL,EAAE;QACF,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO;QAChB,EAAE;QACF,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACzI,EAAE;KACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAc,EAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC;AAExE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAc,EAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEhG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAc,EAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;AAEtE,+HAA+H;AAC/H,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,GAAsB,EAAsB,EAAE;IAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,aAAa,CAAC;IACvC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC,CAAC"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,SAAS,CAAC;AAwHjD,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,KAAI,UAAiB,KAAG,MAAM,EAkBjF,CAAC"}
|
package/dist/init.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
+
import { loadGenres } from "./genre-load.js";
|
|
3
4
|
const TEXT = {
|
|
4
5
|
ja: {
|
|
5
|
-
config: (genre) => `# chaff.yaml — このチームの文章規範
|
|
6
|
+
config: (genre, summary) => `# chaff.yaml — このチームの文章規範
|
|
6
7
|
#
|
|
7
8
|
# ここに書くのは「既定から変えたもの」だけです。書かなければ既定で動きます。
|
|
8
9
|
# このファイルを消しても chaff は動きます。
|
|
@@ -20,9 +21,13 @@ const TEXT = {
|
|
|
20
21
|
# npx chaff explain bold-density そのルールの意図を読む
|
|
21
22
|
# npx chaff rules --json AI に設定を書かせるときに渡す
|
|
22
23
|
|
|
23
|
-
#
|
|
24
|
+
# この場所に置く文書の種類(${summary})。ほかの種類: npx chaffjs genres
|
|
24
25
|
genre: ${genre}
|
|
25
26
|
|
|
27
|
+
# チームが書く固有名詞(組織名・製品名)。1 つの名前として読み、漢字の連なりに数えない。
|
|
28
|
+
# names:
|
|
29
|
+
# - 個人情報保護委員会
|
|
30
|
+
|
|
26
31
|
# 既定から変えたものだけを書く。
|
|
27
32
|
rules:
|
|
28
33
|
`,
|
|
@@ -37,7 +42,7 @@ rules:
|
|
|
37
42
|
nextCheck: " npx chaff . この場所の Markdown を全部見る",
|
|
38
43
|
},
|
|
39
44
|
en: {
|
|
40
|
-
config: (genre) => `# chaff.yaml — this team's writing rules
|
|
45
|
+
config: (genre, summary) => `# chaff.yaml — this team's writing rules
|
|
41
46
|
#
|
|
42
47
|
# Write only what differs from the defaults; anything left out uses the default.
|
|
43
48
|
# chaff still runs if this file is deleted.
|
|
@@ -55,9 +60,13 @@ rules:
|
|
|
55
60
|
# npx chaff explain bold-density read what the rule is for
|
|
56
61
|
# npx chaff rules --json give this to an AI that writes the settings
|
|
57
62
|
|
|
58
|
-
# The kind of document kept here.
|
|
63
|
+
# The kind of document kept here (${summary}). The others: npx chaffjs genres
|
|
59
64
|
genre: ${genre}
|
|
60
65
|
|
|
66
|
+
# The names your team writes (organisations, products). Each is read as one name, not as words to count.
|
|
67
|
+
# names:
|
|
68
|
+
# - Bank of England
|
|
69
|
+
|
|
61
70
|
# Only what differs from the defaults.
|
|
62
71
|
rules:
|
|
63
72
|
`,
|
|
@@ -92,9 +101,11 @@ const ensureGitignore = (dir, text) => {
|
|
|
92
101
|
appendFileSync(path, `${missing.join("\n")}\n`, "utf8");
|
|
93
102
|
return { path, note: text.appended(missing) };
|
|
94
103
|
};
|
|
104
|
+
/** What the genre is for, as chaff genres says it; the genre itself when chaff does not know it. */
|
|
105
|
+
const summaryOf = (genre, ui) => loadGenres().genres.find((entry) => entry.id === genre)?.summary[ui] ?? genre;
|
|
95
106
|
export const runInit = (dir, genre, ui = "ja") => {
|
|
96
107
|
const text = TEXT[ui];
|
|
97
|
-
const made = [writeIfAbsent(join(dir, "chaff.yaml"), text.config(genre), text.configNote), ensureGitignore(dir, text)].filter((entry) => entry !== undefined);
|
|
108
|
+
const made = [writeIfAbsent(join(dir, "chaff.yaml"), text.config(genre, summaryOf(genre, ui)), text.configNote), ensureGitignore(dir, text)].filter((entry) => entry !== undefined);
|
|
98
109
|
if (made.length === 0)
|
|
99
110
|
return [text.exists];
|
|
100
111
|
return [
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/judge.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AnthropicClient } from "./backends/anthropic.ts";
|
|
2
2
|
import type { OpenAIClient } from "./backends/openai.ts";
|
|
3
3
|
import type { BackendName, Failure } from "./backends/types.ts";
|
|
4
|
+
import type { UiLanguage } from "./ui.ts";
|
|
4
5
|
export declare const CACHE_DIR = ".chaff-cache";
|
|
5
6
|
/** 判定は必ずこの形で返させる。自由文を後から解釈しない。 */
|
|
6
7
|
export type Verdict = {
|
|
@@ -27,7 +28,7 @@ export declare const defaultModel: (backend: BackendName) => string;
|
|
|
27
28
|
export declare const hasCredentials: (backend: BackendName) => boolean;
|
|
28
29
|
export declare const isAuthFailure: (backend: BackendName, error: unknown) => boolean;
|
|
29
30
|
export declare const describeFailure: (backend: BackendName, error: unknown) => Failure | undefined;
|
|
30
|
-
export declare const credentialHint: (backend: BackendName) => string;
|
|
31
|
+
export declare const credentialHint: (backend: BackendName, language: UiLanguage) => string;
|
|
31
32
|
/**
|
|
32
33
|
* 同じ (model, rule, rubric, candidate) なら 2 度目は問い合わせない。
|
|
33
34
|
* CI でも使えるよう、キャッシュはファイルに置く。spec §14。
|
package/dist/judge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAqB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAqB,MAAM,qBAAqB,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,eAAO,MAAM,SAAS,iBAAiB,CAAC;AAExC,kCAAkC;AAClC,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAuB3G,MAAM,MAAM,GAAG,GAAG;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AA0BF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClD,CAAC;AAKF,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,MAAiF,CAAC;AAEtI,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,KAAG,OAAwF,CAAC;AAE/I,eAAO,MAAM,aAAa,GAAI,SAAS,WAAW,EAAE,OAAO,OAAO,KAAG,OACgB,CAAC;AAEtF,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,EAAE,OAAO,OAAO,KAAG,OAAO,GAAG,SACQ,CAAC;AAE1F,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,EAAE,UAAU,UAAU,KAAG,MACC,CAAC;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,GAAG,GAAU,SAAS,GAAG,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,OAAO,CAU9E,CAAC"}
|
package/dist/judge.js
CHANGED
|
@@ -47,7 +47,7 @@ export const defaultModel = (backend) => (backend === "openai" ? openai.DEFAULT_
|
|
|
47
47
|
export const hasCredentials = (backend) => (backend === "openai" ? openai.hasCredentials() : anthropic.hasCredentials());
|
|
48
48
|
export const isAuthFailure = (backend, error) => backend === "openai" ? openai.isAuthFailure(error) : anthropic.isAuthFailure(error);
|
|
49
49
|
export const describeFailure = (backend, error) => backend === "openai" ? openai.describeFailure(error) : anthropic.describeFailure(error);
|
|
50
|
-
export const credentialHint = (backend) => (backend === "openai" ? openai.SETUP_HINT : anthropic.SETUP_HINT);
|
|
50
|
+
export const credentialHint = (backend, language) => (backend === "openai" ? openai.SETUP_HINT : anthropic.SETUP_HINT)[language];
|
|
51
51
|
/**
|
|
52
52
|
* 同じ (model, rule, rubric, candidate) なら 2 度目は問い合わせない。
|
|
53
53
|
* CI でも使えるよう、キャッシュはファイルに置く。spec §14。
|
package/dist/judge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../src/judge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Span } from "./plugin.ts";
|
|
2
|
+
/** paragraph を、書いた人が段落のつもりで改めた行ごとに割る。そう読めなければ paragraph 1 つ。sentences は段落の中の文。 */
|
|
3
|
+
export declare const lineParagraphs: (source: string, paragraph: Span, sentences: readonly Span[]) => Span[];
|
|
4
|
+
//# sourceMappingURL=line-paragraphs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-paragraphs.d.ts","sourceRoot":"","sources":["../src/line-paragraphs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA2ExC,kFAAkF;AAClF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,WAAW,IAAI,EAAE,WAAW,SAAS,IAAI,EAAE,KAAG,IAAI,EAMhG,CAAC"}
|