chaffjs 0.25.0 → 0.27.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 +179 -42
- package/dist/adapter-import.d.ts +2 -0
- package/dist/adapter-import.d.ts.map +1 -0
- package/dist/adapter-import.js +11 -0
- package/dist/adapter-import.js.map +1 -0
- package/dist/adapter-load.d.ts.map +1 -1
- package/dist/adapter-load.js +2 -9
- package/dist/adapter-load.js.map +1 -1
- package/dist/ai-score/human-shares.d.ts +4 -0
- package/dist/ai-score/human-shares.d.ts.map +1 -0
- package/dist/ai-score/human-shares.js +205 -0
- package/dist/ai-score/human-shares.js.map +1 -0
- package/dist/ai-score/lint-line.d.ts +4 -0
- package/dist/ai-score/lint-line.d.ts.map +1 -0
- package/dist/ai-score/lint-line.js +9 -0
- package/dist/ai-score/lint-line.js.map +1 -0
- package/dist/ai-score/of-document.d.ts +7 -0
- package/dist/ai-score/of-document.d.ts.map +1 -0
- package/dist/ai-score/of-document.js +40 -0
- package/dist/ai-score/of-document.js.map +1 -0
- package/dist/ai-score/render.d.ts +24 -0
- package/dist/ai-score/render.d.ts.map +1 -0
- package/dist/ai-score/render.js +100 -0
- package/dist/ai-score/render.js.map +1 -0
- package/dist/ai-score/score.d.ts +77 -0
- package/dist/ai-score/score.d.ts.map +1 -0
- package/dist/ai-score/score.js +52 -0
- package/dist/ai-score/score.js.map +1 -0
- package/dist/ai-score/signals.d.ts +19 -0
- package/dist/ai-score/signals.d.ts.map +1 -0
- package/dist/ai-score/signals.js +30 -0
- package/dist/ai-score/signals.js.map +1 -0
- package/dist/ai-score/text.d.ts +37 -0
- package/dist/ai-score/text.d.ts.map +1 -0
- package/dist/ai-score/text.js +59 -0
- package/dist/ai-score/text.js.map +1 -0
- package/dist/ai-score/view.d.ts +5 -0
- package/dist/ai-score/view.d.ts.map +1 -0
- package/dist/ai-score/view.js +19 -0
- package/dist/ai-score/view.js.map +1 -0
- package/dist/backends/anthropic.d.ts +0 -1
- package/dist/backends/anthropic.d.ts.map +1 -1
- package/dist/backends/anthropic.js +0 -1
- package/dist/backends/anthropic.js.map +1 -1
- package/dist/backends/default-model.d.ts +3 -0
- package/dist/backends/default-model.d.ts.map +1 -0
- package/dist/backends/default-model.js +5 -0
- package/dist/backends/default-model.js.map +1 -0
- package/dist/backends/openai.d.ts +0 -1
- package/dist/backends/openai.d.ts.map +1 -1
- package/dist/backends/openai.js +0 -1
- package/dist/backends/openai.js.map +1 -1
- package/dist/browser/adapter-import.d.ts +2 -0
- package/dist/browser/adapter-import.d.ts.map +1 -0
- package/dist/browser/adapter-import.js +17 -0
- package/dist/browser/adapter-import.js.map +1 -0
- package/dist/browser/bounded-match.d.ts +3 -0
- package/dist/browser/bounded-match.d.ts.map +1 -0
- package/dist/browser/bounded-match.js +4 -0
- package/dist/browser/bounded-match.js.map +1 -0
- package/dist/browser/check-text.d.ts +43 -0
- package/dist/browser/check-text.d.ts.map +1 -0
- package/dist/browser/check-text.js +50 -0
- package/dist/browser/check-text.js.map +1 -0
- package/dist/browser/detectors.d.ts +4 -0
- package/dist/browser/detectors.d.ts.map +1 -0
- package/dist/browser/detectors.js +22 -0
- package/dist/browser/detectors.js.map +1 -0
- package/dist/browser/package-files.d.ts +5 -0
- package/dist/browser/package-files.d.ts.map +1 -0
- package/dist/browser/package-files.js +8 -0
- package/dist/browser/package-files.js.map +1 -0
- package/dist/browser/path.d.ts +9 -0
- package/dist/browser/path.d.ts.map +1 -0
- package/dist/browser/path.js +70 -0
- package/dist/browser/path.js.map +1 -0
- package/dist/browser/working-dir.d.ts +2 -0
- package/dist/browser/working-dir.d.ts.map +1 -0
- package/dist/browser/working-dir.js +3 -0
- package/dist/browser/working-dir.js.map +1 -0
- package/dist/browser-files.d.ts +21 -0
- package/dist/browser-files.d.ts.map +1 -0
- package/dist/browser-files.js +65 -0
- package/dist/browser-files.js.map +1 -0
- package/dist/browser.d.ts +9 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +13 -0
- package/dist/browser.js.map +1 -0
- package/dist/capitals-with-small.d.ts +8 -0
- package/dist/capitals-with-small.d.ts.map +1 -0
- package/dist/capitals-with-small.js +20 -0
- package/dist/capitals-with-small.js.map +1 -0
- package/dist/cli-text.d.ts.map +1 -1
- package/dist/cli-text.js +2 -0
- package/dist/cli-text.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/ai-score.d.ts +8 -0
- package/dist/commands/ai-score.d.ts.map +1 -0
- package/dist/commands/ai-score.js +59 -0
- package/dist/commands/ai-score.js.map +1 -0
- package/dist/commands/document-commands.d.ts.map +1 -1
- package/dist/commands/document-commands.js +2 -0
- package/dist/commands/document-commands.js.map +1 -1
- package/dist/config/by-path-problems.d.ts +5 -0
- package/dist/config/by-path-problems.d.ts.map +1 -0
- package/dist/config/by-path-problems.js +11 -0
- package/dist/config/by-path-problems.js.map +1 -0
- package/dist/config/load.d.ts +9 -2
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +21 -8
- package/dist/config/load.js.map +1 -1
- package/dist/config/read.d.ts +2 -0
- package/dist/config/read.d.ts.map +1 -1
- package/dist/config/read.js +4 -1
- package/dist/config/read.js.map +1 -1
- package/dist/config/warnings.d.ts +1 -1
- package/dist/config/warnings.d.ts.map +1 -1
- package/dist/config/warnings.js +3 -1
- package/dist/config/warnings.js.map +1 -1
- package/dist/config/working-dir.d.ts +2 -0
- package/dist/config/working-dir.d.ts.map +1 -0
- package/dist/config/working-dir.js +3 -0
- package/dist/config/working-dir.js.map +1 -0
- package/dist/custom/bounded-match.d.ts +1 -12
- package/dist/custom/bounded-match.d.ts.map +1 -1
- package/dist/custom/bounded-match.js +1 -11
- package/dist/custom/bounded-match.js.map +1 -1
- package/dist/custom/pattern-timeout.d.ts +13 -0
- package/dist/custom/pattern-timeout.d.ts.map +1 -0
- package/dist/custom/pattern-timeout.js +13 -0
- package/dist/custom/pattern-timeout.js.map +1 -0
- package/dist/derived/relative-weekdays.d.ts +16 -0
- package/dist/derived/relative-weekdays.d.ts.map +1 -0
- package/dist/derived/relative-weekdays.js +52 -0
- package/dist/derived/relative-weekdays.js.map +1 -0
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +4 -5
- package/dist/detect.js.map +1 -1
- package/dist/detectors/change-rate.d.ts +3 -0
- package/dist/detectors/change-rate.d.ts.map +1 -0
- package/dist/detectors/change-rate.js +102 -0
- package/dist/detectors/change-rate.js.map +1 -0
- package/dist/detectors/date-year.d.ts +10 -2
- package/dist/detectors/date-year.d.ts.map +1 -1
- package/dist/detectors/date-year.js +44 -8
- package/dist/detectors/date-year.js.map +1 -1
- package/dist/detectors/defined-term-form.d.ts +5 -0
- package/dist/detectors/defined-term-form.d.ts.map +1 -1
- package/dist/detectors/defined-term-form.js +22 -5
- package/dist/detectors/defined-term-form.js.map +1 -1
- package/dist/detectors/derived-numbers.d.ts.map +1 -1
- package/dist/detectors/derived-numbers.js +3 -7
- package/dist/detectors/derived-numbers.js.map +1 -1
- package/dist/detectors/document-date.d.ts +4 -0
- package/dist/detectors/document-date.d.ts.map +1 -0
- package/dist/detectors/document-date.js +12 -0
- package/dist/detectors/document-date.js.map +1 -0
- package/dist/detectors/orthographic-variant.d.ts.map +1 -1
- package/dist/detectors/orthographic-variant.js +60 -28
- package/dist/detectors/orthographic-variant.js.map +1 -1
- package/dist/detectors/party-role-name.d.ts +3 -0
- package/dist/detectors/party-role-name.d.ts.map +1 -0
- package/dist/detectors/party-role-name.js +35 -0
- package/dist/detectors/party-role-name.js.map +1 -0
- package/dist/detectors/quote-without-source.d.ts +17 -0
- package/dist/detectors/quote-without-source.d.ts.map +1 -0
- package/dist/detectors/quote-without-source.js +64 -0
- package/dist/detectors/quote-without-source.js.map +1 -0
- package/dist/detectors/reference-text.js +1 -1
- package/dist/detectors/reference-text.js.map +1 -1
- package/dist/detectors/registry/change-rate.d.ts +3 -0
- package/dist/detectors/registry/change-rate.d.ts.map +1 -0
- package/dist/detectors/registry/change-rate.js +3 -0
- package/dist/detectors/registry/change-rate.js.map +1 -0
- package/dist/detectors/registry/party-role-name.d.ts +3 -0
- package/dist/detectors/registry/party-role-name.d.ts.map +1 -0
- package/dist/detectors/registry/party-role-name.js +3 -0
- package/dist/detectors/registry/party-role-name.js.map +1 -0
- package/dist/detectors/registry/quote-without-source.d.ts +3 -0
- package/dist/detectors/registry/quote-without-source.d.ts.map +1 -0
- package/dist/detectors/registry/quote-without-source.js +3 -0
- package/dist/detectors/registry/quote-without-source.js.map +1 -0
- package/dist/detectors/registry/vague-deadline.d.ts +3 -0
- package/dist/detectors/registry/vague-deadline.d.ts.map +1 -0
- package/dist/detectors/registry/vague-deadline.js +3 -0
- package/dist/detectors/registry/vague-deadline.js.map +1 -0
- package/dist/detectors/registry/version-mismatch.d.ts +3 -0
- package/dist/detectors/registry/version-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/version-mismatch.js +3 -0
- package/dist/detectors/registry/version-mismatch.js.map +1 -0
- package/dist/detectors/relative-dates.d.ts.map +1 -1
- package/dist/detectors/relative-dates.js +3 -1
- package/dist/detectors/relative-dates.js.map +1 -1
- package/dist/detectors/relative-day-words.d.ts +4 -0
- package/dist/detectors/relative-day-words.d.ts.map +1 -0
- package/dist/detectors/relative-day-words.js +105 -0
- package/dist/detectors/relative-day-words.js.map +1 -0
- package/dist/detectors/run-in-label.d.ts +7 -0
- package/dist/detectors/run-in-label.d.ts.map +1 -0
- package/dist/detectors/run-in-label.js +53 -0
- package/dist/detectors/run-in-label.js.map +1 -0
- package/dist/detectors/sentence-counts.d.ts +3 -1
- package/dist/detectors/sentence-counts.d.ts.map +1 -1
- package/dist/detectors/sentence-counts.js +11 -4
- package/dist/detectors/sentence-counts.js.map +1 -1
- package/dist/detectors/sentence-ending.d.ts +1 -1
- package/dist/detectors/sentence-ending.d.ts.map +1 -1
- package/dist/detectors/sentence-ending.js +2 -1
- package/dist/detectors/sentence-ending.js.map +1 -1
- package/dist/detectors/structure-tree.d.ts +8 -2
- package/dist/detectors/structure-tree.d.ts.map +1 -1
- package/dist/detectors/structure-tree.js +86 -5
- package/dist/detectors/structure-tree.js.map +1 -1
- package/dist/detectors/unbalanced-bracket.d.ts +1 -1
- package/dist/detectors/unbalanced-bracket.d.ts.map +1 -1
- package/dist/detectors/unbalanced-bracket.js +23 -11
- package/dist/detectors/unbalanced-bracket.js.map +1 -1
- package/dist/detectors/vague-deadline.d.ts +25 -0
- package/dist/detectors/vague-deadline.d.ts.map +1 -0
- package/dist/detectors/vague-deadline.js +97 -0
- package/dist/detectors/vague-deadline.js.map +1 -0
- package/dist/detectors/version-mismatch.d.ts +3 -0
- package/dist/detectors/version-mismatch.d.ts.map +1 -0
- package/dist/detectors/version-mismatch.js +19 -0
- package/dist/detectors/version-mismatch.js.map +1 -0
- package/dist/furigana.d.ts +7 -0
- package/dist/furigana.d.ts.map +1 -0
- package/dist/furigana.js +16 -0
- package/dist/furigana.js.map +1 -0
- package/dist/genre-load.d.ts.map +1 -1
- package/dist/genre-load.js +5 -7
- package/dist/genre-load.js.map +1 -1
- package/dist/grade/ai-score.d.ts +16 -0
- package/dist/grade/ai-score.d.ts.map +1 -0
- package/dist/grade/ai-score.js +17 -0
- package/dist/grade/ai-score.js.map +1 -0
- package/dist/grade/finding.d.ts +6 -0
- package/dist/grade/finding.d.ts.map +1 -0
- package/dist/grade/finding.js +13 -0
- package/dist/grade/finding.js.map +1 -0
- package/dist/grade/grade-item.d.ts.map +1 -1
- package/dist/grade/grade-item.js +4 -11
- package/dist/grade/grade-item.js.map +1 -1
- package/dist/grade/render-variants.d.ts.map +1 -1
- package/dist/grade/render-variants.js +3 -0
- package/dist/grade/render-variants.js.map +1 -1
- package/dist/grade/render.d.ts.map +1 -1
- package/dist/grade/render.js +1 -0
- package/dist/grade/render.js.map +1 -1
- package/dist/grade/result.d.ts +3 -0
- package/dist/grade/result.d.ts.map +1 -1
- package/dist/grade/results-read.d.ts.map +1 -1
- package/dist/grade/results-read.js +13 -2
- package/dist/grade/results-read.js.map +1 -1
- package/dist/grade/summary.d.ts +3 -0
- package/dist/grade/summary.d.ts.map +1 -1
- package/dist/grade/summary.js +6 -0
- package/dist/grade/summary.js.map +1 -1
- package/dist/grade/text.d.ts +2 -0
- package/dist/grade/text.d.ts.map +1 -1
- package/dist/grade/text.js +2 -0
- package/dist/grade/text.js.map +1 -1
- package/dist/grade/variants-text.d.ts +3 -0
- package/dist/grade/variants-text.d.ts.map +1 -1
- package/dist/grade/variants-text.js +4 -0
- package/dist/grade/variants-text.js.map +1 -1
- package/dist/grade/variants.d.ts +3 -0
- package/dist/grade/variants.d.ts.map +1 -1
- package/dist/grade/variants.js +1 -0
- package/dist/grade/variants.js.map +1 -1
- package/dist/grade-api.d.ts +1 -0
- package/dist/grade-api.d.ts.map +1 -1
- package/dist/grade-api.js +2 -1
- package/dist/grade-api.js.map +1 -1
- package/dist/judge.d.ts +0 -1
- package/dist/judge.d.ts.map +1 -1
- package/dist/judge.js +0 -1
- package/dist/judge.js.map +1 -1
- package/dist/known-genres.js +2 -2
- package/dist/known-genres.js.map +1 -1
- package/dist/package-files.d.ts +6 -0
- package/dist/package-files.d.ts.map +1 -0
- package/dist/package-files.js +11 -0
- package/dist/package-files.js.map +1 -0
- package/dist/profile/load.d.ts.map +1 -1
- package/dist/profile/load.js +5 -6
- package/dist/profile/load.js.map +1 -1
- package/dist/rule-load.d.ts.map +1 -1
- package/dist/rule-load.js +5 -6
- package/dist/rule-load.js.map +1 -1
- package/dist/rule-offs.js +3 -3
- package/dist/rule-offs.js.map +1 -1
- package/dist/run.js +1 -1
- package/dist/run.js.map +1 -1
- package/dist/structure/change-rate.d.ts +33 -0
- package/dist/structure/change-rate.d.ts.map +1 -0
- package/dist/structure/change-rate.js +71 -0
- package/dist/structure/change-rate.js.map +1 -0
- package/dist/structure/date-range.d.ts +4 -0
- package/dist/structure/date-range.d.ts.map +1 -1
- package/dist/structure/date-range.js +23 -3
- package/dist/structure/date-range.js.map +1 -1
- package/dist/structure/issues.d.ts +17 -1
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +54 -5
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/list-numbering.d.ts +17 -0
- package/dist/structure/list-numbering.d.ts.map +1 -0
- package/dist/structure/list-numbering.js +27 -0
- package/dist/structure/list-numbering.js.map +1 -0
- package/dist/structure/party-role.d.ts +30 -0
- package/dist/structure/party-role.d.ts.map +1 -0
- package/dist/structure/party-role.js +58 -0
- package/dist/structure/party-role.js.map +1 -0
- package/dist/structure/percent-sum-prose.d.ts +7 -0
- package/dist/structure/percent-sum-prose.d.ts.map +1 -0
- package/dist/structure/percent-sum-prose.js +44 -0
- package/dist/structure/percent-sum-prose.js.map +1 -0
- package/dist/structure/prose-total.d.ts +28 -0
- package/dist/structure/prose-total.d.ts.map +1 -0
- package/dist/structure/prose-total.js +99 -0
- package/dist/structure/prose-total.js.map +1 -0
- package/dist/structure/reference-text.d.ts +5 -0
- package/dist/structure/reference-text.d.ts.map +1 -1
- package/dist/structure/reference-text.js +17 -4
- package/dist/structure/reference-text.js.map +1 -1
- package/dist/structure/term-prefix.d.ts +18 -0
- package/dist/structure/term-prefix.d.ts.map +1 -0
- package/dist/structure/term-prefix.js +40 -0
- package/dist/structure/term-prefix.js.map +1 -0
- package/dist/structure/total.d.ts +2 -0
- package/dist/structure/total.d.ts.map +1 -1
- package/dist/structure/total.js +2 -0
- package/dist/structure/total.js.map +1 -1
- package/dist/structure/version-mismatch.d.ts +23 -0
- package/dist/structure/version-mismatch.d.ts.map +1 -0
- package/dist/structure/version-mismatch.js +74 -0
- package/dist/structure/version-mismatch.js.map +1 -0
- package/dist/structure/weekday.d.ts +21 -2
- package/dist/structure/weekday.d.ts.map +1 -1
- package/dist/structure/weekday.js +70 -8
- package/dist/structure/weekday.js.map +1 -1
- package/dist/structure-shape/baseline-load.d.ts.map +1 -1
- package/dist/structure-shape/baseline-load.js +4 -5
- package/dist/structure-shape/baseline-load.js.map +1 -1
- package/dist/style-load.d.ts.map +1 -1
- package/dist/style-load.js +5 -6
- package/dist/style-load.js.map +1 -1
- package/package.json +24 -3
- package/rules/agreement-slip.yaml +2 -2
- package/rules/change-rate-mismatch.yaml +44 -0
- package/rules/cliche.yaml +28 -8
- package/rules/date-weekday-mismatch.yaml +4 -4
- package/rules/date-without-year.yaml +28 -3
- package/rules/defined-term-form.yaml +9 -6
- package/rules/demonstrative-opener-run.yaml +24 -7
- package/rules/max-sentence-length.yaml +1 -0
- package/rules/no-mixed-desumasu.yaml +2 -2
- package/rules/numbering-gap.yaml +4 -4
- package/rules/one-sentence-paragraph-run.yaml +1 -0
- package/rules/orthographic-variant.yaml +3 -3
- package/rules/party-role-name.yaml +94 -0
- package/rules/percent-sum-mismatch.yaml +4 -4
- package/rules/quote-without-source.yaml +61 -0
- package/rules/relative-date-mismatch.yaml +4 -4
- package/rules/total-mismatch.yaml +8 -8
- package/rules/undefined-acronym.yaml +1 -0
- package/rules/vague-deadline.yaml +95 -0
- package/rules/version-mismatch.yaml +77 -0
- package/rules/weasel-word.yaml +25 -7
- package/skills/chaff/SKILL.md +12 -2
- package/src/adapter-import.ts +3 -0
- package/src/adapter-load.ts +2 -1
- package/src/ai-score/human-shares.ts +207 -0
- package/src/ai-score/lint-line.ts +10 -0
- package/src/ai-score/of-document.ts +46 -0
- package/src/ai-score/render.ts +124 -0
- package/src/ai-score/score.ts +121 -0
- package/src/ai-score/signals.ts +39 -0
- package/src/ai-score/text.ts +103 -0
- package/src/ai-score/view.ts +21 -0
- package/src/backends/anthropic.ts +0 -2
- package/src/backends/default-model.ts +9 -0
- package/src/backends/openai.ts +0 -2
- package/src/browser/adapter-import.ts +19 -0
- package/src/browser/bounded-match.ts +9 -0
- package/src/browser/check-text.ts +106 -0
- package/src/browser/detectors.ts +40 -0
- package/src/browser/import-meta-glob.d.ts +5 -0
- package/src/browser/package-files.ts +13 -0
- package/src/browser/path.ts +73 -0
- package/src/browser/working-dir.ts +3 -0
- package/src/browser-files.ts +87 -0
- package/src/browser.ts +19 -0
- package/src/capitals-with-small.ts +23 -0
- package/src/cli-text.ts +2 -0
- package/src/cli.ts +4 -1
- package/src/commands/ai-score.ts +77 -0
- package/src/commands/document-commands.ts +2 -0
- package/src/config/by-path-problems.ts +17 -0
- package/src/config/load.ts +21 -8
- package/src/config/read.ts +5 -1
- package/src/config/warnings.ts +3 -1
- package/src/config/working-dir.ts +3 -0
- package/src/custom/bounded-match.ts +1 -16
- package/src/custom/pattern-timeout.ts +17 -0
- package/src/derived/relative-weekdays.ts +65 -0
- package/src/detect.ts +4 -5
- package/src/detectors/change-rate.ts +122 -0
- package/src/detectors/date-year.ts +51 -12
- package/src/detectors/defined-term-form.ts +28 -6
- package/src/detectors/derived-numbers.ts +3 -11
- package/src/detectors/document-date.ts +18 -0
- package/src/detectors/orthographic-variant.ts +67 -22
- package/src/detectors/party-role-name.ts +44 -0
- package/src/detectors/quote-without-source.ts +90 -0
- package/src/detectors/reference-text.ts +1 -1
- package/src/detectors/registry/change-rate.ts +4 -0
- package/src/detectors/registry/party-role-name.ts +4 -0
- package/src/detectors/registry/quote-without-source.ts +4 -0
- package/src/detectors/registry/vague-deadline.ts +4 -0
- package/src/detectors/registry/version-mismatch.ts +4 -0
- package/src/detectors/relative-dates.ts +3 -1
- package/src/detectors/relative-day-words.ts +126 -0
- package/src/detectors/run-in-label.ts +60 -0
- package/src/detectors/sentence-counts.ts +13 -4
- package/src/detectors/sentence-ending.ts +3 -2
- package/src/detectors/structure-tree.ts +104 -10
- package/src/detectors/unbalanced-bracket.ts +25 -10
- package/src/detectors/vague-deadline.ts +132 -0
- package/src/detectors/version-mismatch.ts +23 -0
- package/src/furigana.ts +20 -0
- package/src/genre-load.ts +5 -7
- package/src/grade/ai-score.ts +32 -0
- package/src/grade/finding.ts +16 -0
- package/src/grade/grade-item.ts +4 -13
- package/src/grade/render-variants.ts +5 -0
- package/src/grade/render.ts +1 -0
- package/src/grade/result.ts +3 -0
- package/src/grade/results-read.ts +17 -2
- package/src/grade/summary.ts +9 -0
- package/src/grade/text.ts +6 -0
- package/src/grade/variants-text.ts +7 -0
- package/src/grade/variants.ts +4 -0
- package/src/grade-api.ts +3 -1
- package/src/judge.ts +0 -2
- package/src/known-genres.ts +2 -2
- package/src/package-files.ts +15 -0
- package/src/profile/load.ts +5 -6
- package/src/rule-load.ts +5 -6
- package/src/rule-offs.ts +3 -3
- package/src/run.ts +1 -1
- package/src/structure/change-rate.ts +103 -0
- package/src/structure/date-range.ts +28 -3
- package/src/structure/issues.ts +61 -6
- package/src/structure/list-numbering.ts +34 -0
- package/src/structure/party-role.ts +94 -0
- package/src/structure/percent-sum-prose.ts +54 -0
- package/src/structure/prose-total.ts +135 -0
- package/src/structure/reference-text.ts +17 -4
- package/src/structure/term-prefix.ts +54 -0
- package/src/structure/total.ts +4 -0
- package/src/structure/version-mismatch.ts +103 -0
- package/src/structure/weekday.ts +83 -6
- package/src/structure-shape/baseline-load.ts +4 -5
- package/src/style-load.ts +5 -6
|
@@ -4,7 +4,6 @@ import { join } from "node:path";
|
|
|
4
4
|
import Anthropic from "@anthropic-ai/sdk";
|
|
5
5
|
import { toFailure } from "./types.js";
|
|
6
6
|
const isTextBlock = (block) => typeof block === "object" && block !== null && "text" in block && typeof block.text === "string";
|
|
7
|
-
export const DEFAULT_MODEL = "claude-opus-5";
|
|
8
7
|
/**
|
|
9
8
|
* 認証情報があるか。
|
|
10
9
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/backends/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AASvC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAsC,EAAE,CACzE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAEnG
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/backends/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-model.d.ts","sourceRoot":"","sources":["../../src/backends/default-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAQ9C,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,MAAiF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Apart from the backends, so reading settings does not load the providers' SDKs.
|
|
2
|
+
const ANTHROPIC_DEFAULT_MODEL = "claude-opus-5";
|
|
3
|
+
const OPENAI_DEFAULT_MODEL = "gpt-5";
|
|
4
|
+
export const defaultModel = (backend) => (backend === "openai" ? OPENAI_DEFAULT_MODEL : ANTHROPIC_DEFAULT_MODEL);
|
|
5
|
+
//# sourceMappingURL=default-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-model.js","sourceRoot":"","sources":["../../src/backends/default-model.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAElF,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEhD,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAoB,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC"}
|
|
@@ -16,7 +16,6 @@ export type OpenAIClient = {
|
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
export declare const DEFAULT_MODEL = "gpt-5";
|
|
20
19
|
export declare const hasCredentials: () => boolean;
|
|
21
20
|
export declare const isAuthFailure: (error: unknown) => boolean;
|
|
22
21
|
/** API が返した失敗だけを拾う。ネットワーク断やコードの誤りは、握りつぶさずそのまま投げる。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/backends/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAU,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,KAAK,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC;AAEjH,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE;YAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,sCAAsC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;CAClJ,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/backends/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAU,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,KAAK,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE;YAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC;AAEjH,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE;YAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,sCAAsC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;CAClJ,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,OAA2D,CAAC;AAE9F,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,OAAmE,CAAC;AAEnH,qDAAqD;AACrD,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,OAAO,GAAG,SAI1D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,GACf,SAAS,YAAY,KAAG,KAcxB,CAAC;AAEJ,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,MAAM,CAAkE,CAAC"}
|
package/dist/backends/openai.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import OpenAI from "openai";
|
|
2
2
|
import { toFailure } from "./types.js";
|
|
3
|
-
export const DEFAULT_MODEL = "gpt-5";
|
|
4
3
|
export const hasCredentials = () => (process.env["OPENAI_API_KEY"] ?? "").length > 0;
|
|
5
4
|
export const isAuthFailure = (error) => error instanceof OpenAI.APIError && error.status === 401;
|
|
6
5
|
/** API が返した失敗だけを拾う。ネットワーク断やコードの誤りは、握りつぶさずそのまま投げる。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/backends/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAWvC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/backends/openai.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAWvC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAE9F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,YAAY,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC;AAEnH,qDAAqD;AACrD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAuB,EAAE;IACrE,IAAI,CAAC,CAAC,KAAK,YAAY,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,GAAG,GAA0C,KAAK,CAAC;IACzD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAChB,CAAC,MAAqB,EAAS,EAAE,CACjC,KAAK,EAAE,MAAc,EAAmB,EAAE;IACxC,MAAM,MAAM,GAAiB,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACpD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAC1C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;SACvC;QACD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;KAChH,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC;IAClD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACxE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,UAAU,GAAkB,EAAE,EAAE,EAAE,2BAA2B,EAAE,EAAE,EAAE,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-import.d.ts","sourceRoot":"","sources":["../../src/browser/adapter-import.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,aAAa,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,CAKtE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ensurePackageFiles } from "chaffjs/browser-files";
|
|
2
|
+
// adapter-import.ts in a bundle: a bundler cannot follow an import by a name known only at run time, so the bundled
|
|
3
|
+
// languages are named here, each loaded only when a document in it is checked, after its files.
|
|
4
|
+
const ADAPTERS = {
|
|
5
|
+
"@chaffjs/lang-ja": () => import("@chaffjs/lang-ja"),
|
|
6
|
+
"@chaffjs/lang-en": () => import("@chaffjs/lang-en"),
|
|
7
|
+
};
|
|
8
|
+
/** The error Node gives for a package that is not installed, which adapter-load.ts reads as "not installed". */
|
|
9
|
+
const notInstalled = (specifier) => Object.assign(new Error(`Cannot find package '${specifier}'`), { code: "ERR_MODULE_NOT_FOUND" });
|
|
10
|
+
export const importPackage = async (specifier) => {
|
|
11
|
+
const load = Object.hasOwn(ADAPTERS, specifier) ? ADAPTERS[specifier] : undefined;
|
|
12
|
+
if (load === undefined)
|
|
13
|
+
throw notInstalled(specifier);
|
|
14
|
+
await ensurePackageFiles(specifier);
|
|
15
|
+
return load();
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=adapter-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-import.js","sourceRoot":"","sources":["../../src/browser/adapter-import.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,oHAAoH;AACpH,gGAAgG;AAEhG,MAAM,QAAQ,GAAqD;IACjE,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;IACpD,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC;CACrD,CAAC;AAEF,gHAAgH;AAChH,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,SAAS,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAEpJ,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;IACzE,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClF,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounded-match.d.ts","sourceRoot":"","sources":["../../src/browser/bounded-match.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,OAAO,SAAS,MAAM,EAAE,KAAG,WAGtF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// custom/bounded-match.ts in a browser, which has no vm to stop a pattern: the same matches, without the time limit.
|
|
2
|
+
// regex-safety.ts still refuses the shapes known to run away before a pattern is used.
|
|
3
|
+
export const boundedMatches = (source, flags, texts) => texts.map((text) => [...text.matchAll(new RegExp(source, `g${flags}`))].filter((match) => match[0] !== "").map((match) => ({ index: match.index, text: match[0] })));
|
|
4
|
+
//# sourceMappingURL=bounded-match.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bounded-match.js","sourceRoot":"","sources":["../../src/browser/bounded-match.ts"],"names":[],"mappings":"AAEA,qHAAqH;AACrH,uFAAuF;AAEvF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,KAAwB,EAAe,EAAE,CACrG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAChJ,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type GradeAiScore } from "../grade/ai-score.ts";
|
|
2
|
+
import type { GradeFinding, NotRunEntry } from "../grade/result.ts";
|
|
3
|
+
export type BrowserCheckOptions = {
|
|
4
|
+
/** ja or en. Guessed from the text when left out, as the command line guesses. */
|
|
5
|
+
readonly language?: string | undefined;
|
|
6
|
+
/** A genre (business/report…), as --genre. */
|
|
7
|
+
readonly genre?: string | undefined;
|
|
8
|
+
/** chaff.yaml's contents, already parsed. Without it chaff's defaults apply, as with no chaff.yaml. */
|
|
9
|
+
readonly config?: unknown;
|
|
10
|
+
/** The document's name: rules for Markdown run only on a .md name. document.md when left out. */
|
|
11
|
+
readonly path?: string | undefined;
|
|
12
|
+
/** Run the experimental rules too, as --experimental. */
|
|
13
|
+
readonly experimental?: boolean | undefined;
|
|
14
|
+
};
|
|
15
|
+
/** A finding as `chaff grade` gives it, with the rule's name and its explanation, filled as the command line fills them. */
|
|
16
|
+
export type BrowserFinding = GradeFinding & {
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly why: string;
|
|
19
|
+
readonly howToFix: string;
|
|
20
|
+
/** The passage the finding is about. */
|
|
21
|
+
readonly quote: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The AI-likeness quick score as chaff grade gives it, with the lint report's words in the document's language: the
|
|
25
|
+
* level or why it was not scored, the signs, and the note that it is not a verdict on who wrote the text.
|
|
26
|
+
*/
|
|
27
|
+
export type BrowserAiScore = GradeAiScore & {
|
|
28
|
+
readonly headline: string;
|
|
29
|
+
/** The signs and the thresholds, when the text was scored. */
|
|
30
|
+
readonly signsLine: string | undefined;
|
|
31
|
+
readonly disclaimer: string;
|
|
32
|
+
};
|
|
33
|
+
export type BrowserCheck = {
|
|
34
|
+
readonly language: string;
|
|
35
|
+
readonly genre: string;
|
|
36
|
+
readonly findings: readonly BrowserFinding[];
|
|
37
|
+
readonly aiScore: BrowserAiScore;
|
|
38
|
+
/** Each rule that did not run, and why: so no finding is never read as "checked and fine". */
|
|
39
|
+
readonly notRun: readonly NotRunEntry[];
|
|
40
|
+
};
|
|
41
|
+
export declare const DEFAULT_PATH = "document.md";
|
|
42
|
+
export declare const checkText: (text: string, options: BrowserCheckOptions) => Promise<BrowserCheck>;
|
|
43
|
+
//# sourceMappingURL=check-text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-text.d.ts","sourceRoot":"","sources":["../../src/browser/check-text.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AASpE,MAAM,MAAM,mBAAmB,GAAG;IAChC,kFAAkF;IAClF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,uGAAuG;IACvG,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC7C,CAAC;AAEF,4HAA4H;AAC5H,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC,CAAC;AAEF,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAmC1C,eAAO,MAAM,SAAS,GAAU,MAAM,MAAM,EAAE,SAAS,mBAAmB,KAAG,OAAO,CAAC,YAAY,CAUhG,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { aiScoreOfDocument } from "../ai-score/of-document.js";
|
|
2
|
+
import { aiScoreHeadline } from "../ai-score/render.js";
|
|
3
|
+
import { HIGH_SIGNS, MEDIUM_SIGNS } from "../ai-score/score.js";
|
|
4
|
+
import { scoreViewOf } from "../ai-score/view.js";
|
|
5
|
+
import { checkSource } from "../check-source.js";
|
|
6
|
+
import { configOf, CONFIG_FILE, EMPTY } from "../config/load.js";
|
|
7
|
+
import { withStyle } from "../config/style.js";
|
|
8
|
+
import { gradeAiScoreOf } from "../grade/ai-score.js";
|
|
9
|
+
import { findingOf } from "../grade/finding.js";
|
|
10
|
+
import { filledText } from "../render/text.js";
|
|
11
|
+
import { loadStyles } from "../style-load.js";
|
|
12
|
+
import { uiLanguageOf } from "../ui.js";
|
|
13
|
+
export const DEFAULT_PATH = "document.md";
|
|
14
|
+
/** The settings chaff.yaml can hold that name files or code: a browser has neither, so they are reported, not applied. */
|
|
15
|
+
const NEEDS_FILES = ["plugins", "include", "by_path"];
|
|
16
|
+
const REASON = {
|
|
17
|
+
ja: "ファイルを読む設定で、ブラウザでは使えないため",
|
|
18
|
+
en: "it reads files, which a browser does not have",
|
|
19
|
+
};
|
|
20
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
21
|
+
/** by_path is dropped: it matches file paths, and a text checked here has none. plugins and include act only on files. */
|
|
22
|
+
const configFrom = (raw) => (raw === undefined ? EMPTY : withStyle({ ...configOf(raw, `/${CONFIG_FILE}`), byPath: [] }, loadStyles()));
|
|
23
|
+
const unappliedSettings = (raw, language) => isRecord(raw) ? NEEDS_FILES.filter((key) => raw[key] !== undefined).map((key) => ({ rule: key, reason: REASON[uiLanguageOf(language)] })) : [];
|
|
24
|
+
const browserFindingOf = (finding, check) => {
|
|
25
|
+
const rule = check.rules.find((entry) => entry.id === finding.rule);
|
|
26
|
+
const fill = (field) => (field === undefined ? "" : filledText(field, finding, check.language));
|
|
27
|
+
return { ...findingOf(finding, check), name: fill(rule?.name), why: fill(rule?.why), howToFix: fill(rule?.how_to_fix), quote: finding.quote };
|
|
28
|
+
};
|
|
29
|
+
const aiScoreFor = (check) => {
|
|
30
|
+
const score = aiScoreOfDocument(check.doc, check.rules, check.genre.genre);
|
|
31
|
+
const view = scoreViewOf(check.language, check.doc.lengthUnit, score.group, check.rules);
|
|
32
|
+
return {
|
|
33
|
+
...gradeAiScoreOf(score),
|
|
34
|
+
headline: aiScoreHeadline(score, view),
|
|
35
|
+
signsLine: score.level === undefined ? undefined : view.text.signs(score.signs, score.compared, MEDIUM_SIGNS, HIGH_SIGNS),
|
|
36
|
+
disclaimer: view.text.disclaimer,
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export const checkText = async (text, options) => {
|
|
40
|
+
const choice = { language: options.language, genre: options.genre, experimental: options.experimental ?? false };
|
|
41
|
+
const check = await checkSource(options.path ?? DEFAULT_PATH, text, configFrom(options.config), choice);
|
|
42
|
+
return {
|
|
43
|
+
language: check.language,
|
|
44
|
+
genre: check.genre.genre,
|
|
45
|
+
findings: check.applied.kept.map((finding) => browserFindingOf(finding, check)),
|
|
46
|
+
aiScore: aiScoreFor(check),
|
|
47
|
+
notRun: [...check.raw.skipped.map((skipped) => ({ rule: skipped.rule, reason: skipped.why })), ...unappliedSettings(options.config, check.language)],
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=check-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-text.js","sourceRoot":"","sources":["../../src/browser/check-text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../../src/browser/detectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AA4B5D,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAGxD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAMnE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { registryEntries } from "../detectors/registry-files.js";
|
|
2
|
+
const isDetector = (value) => typeof value === "function";
|
|
3
|
+
const isCrossDetector = (value) => typeof value === "function";
|
|
4
|
+
const fileName = (path) => path.slice(path.lastIndexOf("/") + 1);
|
|
5
|
+
/** From src the files end in .ts, from dist in .js (with .d.ts beside them, which registryEntries leaves out). */
|
|
6
|
+
const registryOf = (loaded, isWanted) => {
|
|
7
|
+
const byName = new Map(Object.entries(loaded).map(([path, detector]) => [fileName(path), detector]));
|
|
8
|
+
const names = [...byName.keys()];
|
|
9
|
+
const extension = names.some((name) => name.endsWith(".js")) ? ".js" : ".ts";
|
|
10
|
+
return Object.fromEntries(registryEntries(names, extension).map(({ file, howToFind }) => {
|
|
11
|
+
const detector = byName.get(file);
|
|
12
|
+
if (!isWanted(detector))
|
|
13
|
+
throw new Error(`chaff: ${file} must export a function named detector`);
|
|
14
|
+
return [howToFind, detector];
|
|
15
|
+
}));
|
|
16
|
+
};
|
|
17
|
+
export const DETECTORS = registryOf(import.meta.glob(["../detectors/registry/*.ts", "../detectors/registry/*.js", "!../detectors/registry/*.d.ts"], { eager: true, import: "detector" }), isDetector);
|
|
18
|
+
export const CROSS_DETECTORS = registryOf(import.meta.glob(["../detectors/cross-registry/*.ts", "../detectors/cross-registry/*.js", "!../detectors/cross-registry/*.d.ts"], {
|
|
19
|
+
eager: true,
|
|
20
|
+
import: "detector",
|
|
21
|
+
}), isCrossDetector);
|
|
22
|
+
//# sourceMappingURL=detectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectors.js","sourceRoot":"","sources":["../../src/browser/detectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOjE,MAAM,UAAU,GAAG,CAAC,KAAc,EAAqB,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC;AAEtF,MAAM,eAAe,GAAG,CAAC,KAAc,EAA0B,EAAE,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC;AAEhG,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjF,kHAAkH;AAClH,MAAM,UAAU,GAAG,CAAI,MAAc,EAAE,QAAwC,EAA+B,EAAE;IAC9G,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,OAAO,MAAM,CAAC,WAAW,CACvB,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,wCAAwC,CAAC,CAAC;QACjG,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAuC,UAAU,CACrE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,4BAA4B,EAAE,4BAA4B,EAAE,+BAA+B,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EACpJ,UAAU,CACX,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA4C,UAAU,CAChF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,kCAAkC,EAAE,kCAAkC,EAAE,qCAAqC,CAAC,EAAE;IAChI,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,UAAU;CACnB,CAAC,EACF,eAAe,CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-files.d.ts","sourceRoot":"","sources":["../../src/browser/package-files.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,QAAa,CAAC;AAEtC,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,MAA8B,CAAC;AAEvE,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAAM,EAAyB,CAAC;AAEvE,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,OAA6B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { packageFiles } from "chaffjs/browser-files";
|
|
2
|
+
// package-files.ts in a build without a file system: chaff's files from memory, rooted at /chaffjs.
|
|
3
|
+
const files = packageFiles("chaffjs");
|
|
4
|
+
export const PACKAGE_DIR = files.root;
|
|
5
|
+
export const readText = (path) => files.readText(path);
|
|
6
|
+
export const readDir = (path) => files.readDir(path);
|
|
7
|
+
export const exists = (path) => files.exists(path);
|
|
8
|
+
//# sourceMappingURL=package-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-files.js","sourceRoot":"","sources":["../../src/browser/package-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,oGAAoG;AAEpG,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;AAEtC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAY,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const sep = "/";
|
|
2
|
+
export declare const normalize: (path: string) => string;
|
|
3
|
+
export declare const join: (...parts: readonly string[]) => string;
|
|
4
|
+
export declare const isAbsolute: (path: string) => boolean;
|
|
5
|
+
export declare const resolve: (...parts: readonly string[]) => string;
|
|
6
|
+
export declare const relative: (from: string, to: string) => string;
|
|
7
|
+
export declare const dirname: (path: string) => string;
|
|
8
|
+
export declare const extname: (path: string) => string;
|
|
9
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/browser/path.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,GAAG,MAAM,CAAC;AAWvB,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAOxC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,GAAG,OAAO,SAAS,MAAM,EAAE,KAAG,MAGlD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OAA+B,CAAC;AAE1E,eAAO,MAAM,OAAO,GAAI,GAAG,OAAO,SAAS,MAAM,EAAE,KAAG,MAOrD,CAAC;AAOF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,KAAG,MAMnD,CAAC;AASF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAMtC,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAKtC,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// node:path for a build without Node: the POSIX functions chaff imports, over the in-memory files of chaffjs/browser-files.
|
|
2
|
+
// The working folder is "/". test/test_browser_path.ts holds each function to node:path's posix one on generated paths.
|
|
3
|
+
export const sep = "/";
|
|
4
|
+
const normalizedParts = (parts, absolute) => parts.reduce((kept, part) => {
|
|
5
|
+
if (part === "" || part === ".")
|
|
6
|
+
return kept;
|
|
7
|
+
if (part !== "..")
|
|
8
|
+
return [...kept, part];
|
|
9
|
+
const last = kept.at(-1);
|
|
10
|
+
if (last !== undefined && last !== "..")
|
|
11
|
+
return kept.slice(0, -1);
|
|
12
|
+
return absolute ? kept : [...kept, ".."];
|
|
13
|
+
}, []);
|
|
14
|
+
export const normalize = (path) => {
|
|
15
|
+
if (path === "")
|
|
16
|
+
return ".";
|
|
17
|
+
const absolute = path.startsWith("/");
|
|
18
|
+
const body = normalizedParts(path.split("/"), absolute).join("/");
|
|
19
|
+
const trailing = path.endsWith("/") ? "/" : "";
|
|
20
|
+
if (absolute)
|
|
21
|
+
return body === "" ? "/" : `/${body}${trailing}`;
|
|
22
|
+
return `${body === "" ? "." : body}${trailing}`;
|
|
23
|
+
};
|
|
24
|
+
export const join = (...parts) => {
|
|
25
|
+
const joined = parts.filter((part) => part !== "").join("/");
|
|
26
|
+
return joined === "" ? "." : normalize(joined);
|
|
27
|
+
};
|
|
28
|
+
export const isAbsolute = (path) => path.startsWith("/");
|
|
29
|
+
export const resolve = (...parts) => {
|
|
30
|
+
const from = parts.reduceRight((acc, part) => {
|
|
31
|
+
if (acc.startsWith("/") || part === "")
|
|
32
|
+
return acc;
|
|
33
|
+
return acc === "" ? part : `${part}/${acc}`;
|
|
34
|
+
}, "");
|
|
35
|
+
const resolved = normalize(from.startsWith("/") ? from : `/${from}`);
|
|
36
|
+
return resolved.length > 1 && resolved.endsWith("/") ? resolved.slice(0, -1) : resolved;
|
|
37
|
+
};
|
|
38
|
+
const segmentsOf = (path) => resolve(path)
|
|
39
|
+
.split("/")
|
|
40
|
+
.filter((part) => part !== "");
|
|
41
|
+
export const relative = (from, to) => {
|
|
42
|
+
const fromParts = segmentsOf(from);
|
|
43
|
+
const toParts = segmentsOf(to);
|
|
44
|
+
const differs = fromParts.findIndex((part, index) => toParts[index] !== part);
|
|
45
|
+
const shared = differs === -1 ? Math.min(fromParts.length, toParts.length) : differs;
|
|
46
|
+
return [...fromParts.slice(shared).map(() => ".."), ...toParts.slice(shared)].join("/");
|
|
47
|
+
};
|
|
48
|
+
/** The index of the last character that is not a slash, or -1. */
|
|
49
|
+
const lastNonSlash = (path) => {
|
|
50
|
+
let at = path.length - 1;
|
|
51
|
+
while (at >= 0 && path[at] === "/")
|
|
52
|
+
at -= 1;
|
|
53
|
+
return at;
|
|
54
|
+
};
|
|
55
|
+
export const dirname = (path) => {
|
|
56
|
+
if (path === "")
|
|
57
|
+
return ".";
|
|
58
|
+
const last = lastNonSlash(path);
|
|
59
|
+
const end = last <= 0 ? -1 : path.lastIndexOf("/", last);
|
|
60
|
+
if (end < 1)
|
|
61
|
+
return path.startsWith("/") ? "/" : ".";
|
|
62
|
+
return end === 1 && path.startsWith("/") ? "//" : path.slice(0, end);
|
|
63
|
+
};
|
|
64
|
+
export const extname = (path) => {
|
|
65
|
+
const end = lastNonSlash(path) + 1;
|
|
66
|
+
const name = path.slice(path.lastIndexOf("/", end - 1) + 1, end);
|
|
67
|
+
const dot = name.lastIndexOf(".");
|
|
68
|
+
return dot <= 0 || name === ".." ? "" : name.slice(dot);
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/browser/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-dir.d.ts","sourceRoot":"","sources":["../../src/browser/working-dir.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,QAAO,MAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-dir.js","sourceRoot":"","sources":["../../src/browser/working-dir.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,GAAG,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** One package's files: path in the package (rules/max-sentence-length.yaml) → text. */
|
|
2
|
+
export type PackageFiles = Readonly<Record<string, string>>;
|
|
3
|
+
/** Where the files come from, and where kuromoji's dictionary is served (a URL ending in /). */
|
|
4
|
+
export type BrowserSetup = {
|
|
5
|
+
readonly files: (packageName: string) => Promise<PackageFiles>;
|
|
6
|
+
readonly kuromojiDictionaryUrl: string;
|
|
7
|
+
};
|
|
8
|
+
/** Each dictionary file is fetched at new URL(file name, kuromojiDictionaryUrl), so that URL must be absolute and end in /. */
|
|
9
|
+
export declare const setupBrowserFiles: (setup: BrowserSetup) => void;
|
|
10
|
+
/** Asks for a package's files the first time they are needed, and keeps them. */
|
|
11
|
+
export declare const ensurePackageFiles: (packageName: string) => Promise<void>;
|
|
12
|
+
export declare const kuromojiDictionaryUrl: () => string;
|
|
13
|
+
/** A package's files as a read-only file system rooted at /<package name>. */
|
|
14
|
+
export type PackageFileReader = {
|
|
15
|
+
readonly root: string;
|
|
16
|
+
readonly readText: (path: string) => string;
|
|
17
|
+
readonly readDir: (path: string) => string[];
|
|
18
|
+
readonly exists: (path: string) => boolean;
|
|
19
|
+
};
|
|
20
|
+
export declare const packageFiles: (packageName: string) => PackageFileReader;
|
|
21
|
+
//# sourceMappingURL=browser-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-files.d.ts","sourceRoot":"","sources":["../src/browser-files.ts"],"names":[],"mappings":"AAIA,wFAAwF;AACxF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,gGAAgG;AAChG,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC,CAAC;AAMF,+HAA+H;AAC/H,eAAO,MAAM,iBAAiB,GAAI,OAAO,YAAY,KAAG,IAIvD,CAAC;AAOF,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAI1E,CAAC;AAEF,eAAO,MAAM,qBAAqB,QAAO,MAAyC,CAAC;AAEnF,8EAA8E;AAC9E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC5C,CAAC;AAmBF,eAAO,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,iBAuBlD,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// The files chaff and its language packages ship (rules, genres, lexicons), held in memory for a build without a file
|
|
2
|
+
// system. Every package reads its own through `packageFiles`, with the same paths the file system would give: one store,
|
|
3
|
+
// imported by name (chaffjs/browser-files) so the browser entry and each package's reads meet in the same module.
|
|
4
|
+
const store = { setup: undefined, installed: new Map() };
|
|
5
|
+
/** Each dictionary file is fetched at new URL(file name, kuromojiDictionaryUrl), so that URL must be absolute and end in /. */
|
|
6
|
+
export const setupBrowserFiles = (setup) => {
|
|
7
|
+
if (!URL.canParse(setup.kuromojiDictionaryUrl) || !setup.kuromojiDictionaryUrl.endsWith("/"))
|
|
8
|
+
throw new Error(`chaff: kuromojiDictionaryUrl must be an absolute URL ending in /: ${setup.kuromojiDictionaryUrl}`);
|
|
9
|
+
store.setup = setup;
|
|
10
|
+
};
|
|
11
|
+
const setupOf = () => {
|
|
12
|
+
if (store.setup === undefined)
|
|
13
|
+
throw new Error("chaff: call setupBrowser() before check()");
|
|
14
|
+
return store.setup;
|
|
15
|
+
};
|
|
16
|
+
/** Asks for a package's files the first time they are needed, and keeps them. */
|
|
17
|
+
export const ensurePackageFiles = async (packageName) => {
|
|
18
|
+
if (store.installed.has(packageName))
|
|
19
|
+
return;
|
|
20
|
+
const files = await setupOf().files(packageName);
|
|
21
|
+
store.installed.set(packageName, files);
|
|
22
|
+
};
|
|
23
|
+
export const kuromojiDictionaryUrl = () => setupOf().kuromojiDictionaryUrl;
|
|
24
|
+
const filesOf = (packageName) => {
|
|
25
|
+
const files = store.installed.get(packageName);
|
|
26
|
+
if (files === undefined)
|
|
27
|
+
throw new Error(`chaff: the files of ${packageName} are not loaded`);
|
|
28
|
+
return files;
|
|
29
|
+
};
|
|
30
|
+
const inPackage = (root, path) => (path.startsWith(`${root}/`) ? path.slice(root.length + 1) : undefined);
|
|
31
|
+
const childrenOf = (files, dir) => Object.keys(files).flatMap((key) => {
|
|
32
|
+
if (!key.startsWith(`${dir}/`))
|
|
33
|
+
return [];
|
|
34
|
+
const name = key.slice(dir.length + 1);
|
|
35
|
+
return name.includes("/") ? [] : [name];
|
|
36
|
+
});
|
|
37
|
+
const noSuchFile = (path) => Object.assign(new Error(`ENOENT: no such file or directory, '${path}'`), { code: "ENOENT" });
|
|
38
|
+
export const packageFiles = (packageName) => {
|
|
39
|
+
const root = `/${packageName}`;
|
|
40
|
+
return {
|
|
41
|
+
root,
|
|
42
|
+
readText: (path) => {
|
|
43
|
+
const key = inPackage(root, path);
|
|
44
|
+
const text = key === undefined ? undefined : filesOf(packageName)[key];
|
|
45
|
+
if (text === undefined)
|
|
46
|
+
throw noSuchFile(path);
|
|
47
|
+
return text;
|
|
48
|
+
},
|
|
49
|
+
readDir: (path) => {
|
|
50
|
+
const key = inPackage(root, path);
|
|
51
|
+
const names = key === undefined ? [] : childrenOf(filesOf(packageName), key);
|
|
52
|
+
if (names.length === 0)
|
|
53
|
+
throw noSuchFile(path);
|
|
54
|
+
return names;
|
|
55
|
+
},
|
|
56
|
+
exists: (path) => {
|
|
57
|
+
const key = inPackage(root, path);
|
|
58
|
+
if (key === undefined)
|
|
59
|
+
return false;
|
|
60
|
+
const files = filesOf(packageName);
|
|
61
|
+
return Object.hasOwn(files, key) || childrenOf(files, key).length > 0;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=browser-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-files.js","sourceRoot":"","sources":["../src/browser-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type BrowserSetup } from "chaffjs/browser-files";
|
|
2
|
+
import type { BrowserCheck, BrowserCheckOptions } from "./browser/check-text.ts";
|
|
3
|
+
export type { BrowserSetup, PackageFiles } from "chaffjs/browser-files";
|
|
4
|
+
export type { BrowserAiScore, BrowserCheck, BrowserCheckOptions, BrowserFinding } from "./browser/check-text.ts";
|
|
5
|
+
export type { NotRunEntry } from "./grade/result.ts";
|
|
6
|
+
export declare const setupBrowser: (setup: BrowserSetup) => void;
|
|
7
|
+
/** Checks one text as `chaff <file>` does, and returns its findings and the rules that did not run, with why. */
|
|
8
|
+
export declare const check: (text: string, options?: BrowserCheckOptions) => Promise<BrowserCheck>;
|
|
9
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyC,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACjH,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,YAAY,GAAI,OAAO,YAAY,KAAG,IAAgC,CAAC;AAEpF,iHAAiH;AACjH,eAAO,MAAM,KAAK,GAAU,MAAM,MAAM,EAAE,UAAS,mBAAwB,KAAG,OAAO,CAAC,YAAY,CAIjG,CAAC"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// `chaffjs/browser`: chaff in a web page, with no file system and no server. Each package's files (rules, lexicons)
|
|
2
|
+
// come from setupBrowser's `files`, asked for only when needed: chaff's own at the first check, a language's at the
|
|
3
|
+
// first text in it. Nothing the page checks is sent anywhere. Built for a bundler that reads package.json's "browser"
|
|
4
|
+
// field and import.meta.glob (Vite).
|
|
5
|
+
import { ensurePackageFiles, setupBrowserFiles } from "chaffjs/browser-files";
|
|
6
|
+
export const setupBrowser = (setup) => setupBrowserFiles(setup);
|
|
7
|
+
/** Checks one text as `chaff <file>` does, and returns its findings and the rules that did not run, with why. */
|
|
8
|
+
export const check = async (text, options = {}) => {
|
|
9
|
+
await ensurePackageFiles("chaffjs");
|
|
10
|
+
const { checkText } = await import("./browser/check-text.js");
|
|
11
|
+
return checkText(text, options);
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,oHAAoH;AACpH,sHAAsH;AACtH,qCAAqC;AACrC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAOjG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAmB,EAAQ,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAEpF,iHAAiH;AACjH,MAAM,CAAC,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAE,UAA+B,EAAE,EAAyB,EAAE;IACpG,MAAM,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** The words of a stretch of text written in capitals only (CLIPER, CAMEX), which a picked-out expansion spells. */
|
|
2
|
+
export declare const acronymsIn: (text: string) => string[];
|
|
3
|
+
/**
|
|
4
|
+
* Whether a word is capitals with an ending, or the letters of an acronym among acronyms. A hyphenated word is compared
|
|
5
|
+
* as written: leaving it out for one part would hide a variant in another (GitHub-SENDs, Github-SENDs).
|
|
6
|
+
*/
|
|
7
|
+
export declare const isCapitalsNotSpelling: (word: string, acronyms: readonly string[]) => boolean;
|
|
8
|
+
//# sourceMappingURL=capitals-with-small.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capitals-with-small.d.ts","sourceRoot":"","sources":["../src/capitals-with-small.ts"],"names":[],"mappings":"AAUA,oHAAoH;AACpH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAM,EAAuG,CAAC;AAOxJ;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,MAAM,EAAE,UAAU,SAAS,MAAM,EAAE,KAAG,OAAyE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Words that start with two capitals or more and go on in small letters, where the capitals are not a spelling of the
|
|
2
|
+
// plain word: a name in capitals with an English ending (SENDs, OPENed), or the letters of an acronym picked out in its
|
|
3
|
+
// expansion (CLImatology and PERsistence for CLIPER: part of a longer acronym). A name written that way (HBase, RSpec,
|
|
4
|
+
// SCIMple beside SCIM) is a spelling, and stays one.
|
|
5
|
+
const CAPITALS_THEN_SMALL = /^(\p{Lu}{2,})\p{Ll}+$/u;
|
|
6
|
+
const CAPITALS_WITH_ENDING = /^\p{Lu}{2,}(?:s|es|d|ed|ing)$/u;
|
|
7
|
+
const CAPITALS_ONLY = /^\p{Lu}[\p{Lu}\d]+$/u;
|
|
8
|
+
const LATIN_RUN = /[\p{L}\d]+/gu;
|
|
9
|
+
/** The words of a stretch of text written in capitals only (CLIPER, CAMEX), which a picked-out expansion spells. */
|
|
10
|
+
export const acronymsIn = (text) => [...text.matchAll(LATIN_RUN)].map((match) => match[0]).filter((word) => CAPITALS_ONLY.test(word));
|
|
11
|
+
const isPickedOut = (word, acronyms) => {
|
|
12
|
+
const capitals = CAPITALS_THEN_SMALL.exec(word)?.[1];
|
|
13
|
+
return capitals !== undefined && acronyms.some((acronym) => acronym.length > capitals.length && acronym.includes(capitals));
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Whether a word is capitals with an ending, or the letters of an acronym among acronyms. A hyphenated word is compared
|
|
17
|
+
* as written: leaving it out for one part would hide a variant in another (GitHub-SENDs, Github-SENDs).
|
|
18
|
+
*/
|
|
19
|
+
export const isCapitalsNotSpelling = (word, acronyms) => CAPITALS_WITH_ENDING.test(word) || isPickedOut(word, acronyms);
|
|
20
|
+
//# sourceMappingURL=capitals-with-small.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capitals-with-small.js","sourceRoot":"","sources":["../src/capitals-with-small.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,wHAAwH;AACxH,uHAAuH;AACvH,qDAAqD;AAErD,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AACrD,MAAM,oBAAoB,GAAG,gCAAgC,CAAC;AAC9D,MAAM,aAAa,GAAG,sBAAsB,CAAC;AAC7C,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC,oHAAoH;AACpH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAY,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAExJ,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,QAA2B,EAAW,EAAE;IACzE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC9H,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,QAA2B,EAAW,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC"}
|