chaffjs 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -4
- package/dist/adapter-load.d.ts +12 -1
- package/dist/adapter-load.d.ts.map +1 -1
- package/dist/adapter-load.js +37 -13
- package/dist/adapter-load.js.map +1 -1
- package/dist/address-chain.d.ts +9 -0
- package/dist/address-chain.d.ts.map +1 -0
- package/dist/address-chain.js +105 -0
- package/dist/address-chain.js.map +1 -0
- package/dist/cli-args.d.ts +8 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +8 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-text.d.ts +26 -0
- package/dist/cli-text.d.ts.map +1 -0
- package/dist/cli-text.js +155 -0
- package/dist/cli-text.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -87
- package/dist/cli.js.map +1 -1
- package/dist/commands/cite.d.ts +2 -1
- package/dist/commands/cite.d.ts.map +1 -1
- package/dist/commands/cite.js +39 -18
- package/dist/commands/cite.js.map +1 -1
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +2 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/feedback.d.ts +35 -0
- package/dist/commands/feedback.d.ts.map +1 -0
- package/dist/commands/feedback.js +157 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/skill.d.ts +22 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +68 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +3 -2
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/tree.d.ts +11 -1
- package/dist/commands/tree.d.ts.map +1 -1
- package/dist/commands/tree.js +21 -7
- package/dist/commands/tree.js.map +1 -1
- package/dist/config/by-path.d.ts +5 -1
- package/dist/config/by-path.d.ts.map +1 -1
- package/dist/config/by-path.js +1 -4
- package/dist/config/by-path.js.map +1 -1
- package/dist/config/load.d.ts +2 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +3 -1
- package/dist/config/load.js.map +1 -1
- package/dist/config/rule-problems.d.ts +2 -1
- package/dist/config/rule-problems.d.ts.map +1 -1
- package/dist/config/rule-problems.js +17 -6
- package/dist/config/rule-problems.js.map +1 -1
- package/dist/config/write.d.ts.map +1 -1
- package/dist/config/write.js +29 -9
- package/dist/config/write.js.map +1 -1
- package/dist/detectors/char-shape.d.ts.map +1 -1
- package/dist/detectors/char-shape.js +3 -2
- package/dist/detectors/char-shape.js.map +1 -1
- package/dist/document.d.ts +2 -2
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +4 -2
- package/dist/document.js.map +1 -1
- package/dist/feedback/draft.d.ts +28 -0
- package/dist/feedback/draft.d.ts.map +1 -0
- package/dist/feedback/draft.js +66 -0
- package/dist/feedback/draft.js.map +1 -0
- package/dist/feedback/excerpt.d.ts +10 -0
- package/dist/feedback/excerpt.d.ts.map +1 -0
- package/dist/feedback/excerpt.js +20 -0
- package/dist/feedback/excerpt.js.map +1 -0
- package/dist/genre.d.ts +1 -1
- package/dist/genre.d.ts.map +1 -1
- package/dist/genre.js +3 -3
- package/dist/genre.js.map +1 -1
- package/dist/init.d.ts +2 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +62 -13
- package/dist/init.js.map +1 -1
- package/dist/legal-address.d.ts +2 -0
- package/dist/legal-address.d.ts.map +1 -0
- package/dist/legal-address.js +16 -0
- package/dist/legal-address.js.map +1 -0
- package/dist/orthography.d.ts.map +1 -1
- package/dist/orthography.js +15 -0
- package/dist/orthography.js.map +1 -1
- package/dist/plugin.d.ts +94 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/profile/for-file.d.ts +7 -0
- package/dist/profile/for-file.d.ts.map +1 -0
- package/dist/profile/for-file.js +6 -0
- package/dist/profile/for-file.js.map +1 -0
- package/dist/profile/load.d.ts +4 -0
- package/dist/profile/load.d.ts.map +1 -0
- package/dist/profile/load.js +25 -0
- package/dist/profile/load.js.map +1 -0
- package/dist/profile/parse.d.ts +19 -0
- package/dist/profile/parse.d.ts.map +1 -0
- package/dist/profile/parse.js +82 -0
- package/dist/profile/parse.js.map +1 -0
- package/dist/profile/select.d.ts +22 -0
- package/dist/profile/select.d.ts.map +1 -0
- package/dist/profile/select.js +21 -0
- package/dist/profile/select.js.map +1 -0
- package/dist/reasons.d.ts +16 -0
- package/dist/reasons.d.ts.map +1 -0
- package/dist/reasons.js +31 -0
- package/dist/reasons.js.map +1 -0
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +36 -12
- package/dist/render/explain.js.map +1 -1
- package/dist/render/friendly.d.ts.map +1 -1
- package/dist/render/friendly.js +32 -9
- package/dist/render/friendly.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +47 -27
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/summary.d.ts +3 -2
- package/dist/render/summary.d.ts.map +1 -1
- package/dist/render/summary.js +24 -9
- package/dist/render/summary.js.map +1 -1
- package/dist/render/suppressions.d.ts +2 -1
- package/dist/render/suppressions.d.ts.map +1 -1
- package/dist/render/suppressions.js +34 -10
- package/dist/render/suppressions.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +41 -12
- package/dist/run.js.map +1 -1
- package/dist/structure/build.d.ts +2 -1
- package/dist/structure/build.d.ts.map +1 -1
- package/dist/structure/build.js +102 -9
- package/dist/structure/build.js.map +1 -1
- package/dist/structure/cite.d.ts.map +1 -1
- package/dist/structure/cite.js +3 -1
- package/dist/structure/cite.js.map +1 -1
- package/dist/structure/issues.d.ts +5 -2
- package/dist/structure/issues.d.ts.map +1 -1
- package/dist/structure/issues.js +35 -10
- package/dist/structure/issues.js.map +1 -1
- package/dist/structure/numbering.d.ts.map +1 -1
- package/dist/structure/numbering.js +11 -6
- package/dist/structure/numbering.js.map +1 -1
- package/dist/structure/of.d.ts +2 -1
- package/dist/structure/of.d.ts.map +1 -1
- package/dist/structure/of.js +7 -1
- package/dist/structure/of.js.map +1 -1
- package/dist/structure/relative-find.d.ts +6 -0
- package/dist/structure/relative-find.d.ts.map +1 -0
- package/dist/structure/relative-find.js +179 -0
- package/dist/structure/relative-find.js.map +1 -0
- package/dist/structure/relative-resolve.d.ts +3 -0
- package/dist/structure/relative-resolve.d.ts.map +1 -0
- package/dist/structure/relative-resolve.js +175 -0
- package/dist/structure/relative-resolve.js.map +1 -0
- package/dist/structure/unread.d.ts +8 -0
- package/dist/structure/unread.d.ts.map +1 -0
- package/dist/structure/unread.js +34 -0
- package/dist/structure/unread.js.map +1 -0
- package/dist/ui.d.ts +14 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +14 -0
- package/dist/ui.js.map +1 -0
- package/dist/watch.d.ts +1 -1
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +2 -2
- package/dist/watch.js.map +1 -1
- package/package.json +5 -3
- package/profiles/statute.yaml +62 -0
- package/skills/chaff/SKILL.md +81 -0
- package/src/adapter-load.ts +41 -10
- package/src/address-chain.ts +113 -0
- package/src/cli-args.ts +9 -0
- package/src/cli-text.ts +186 -0
- package/src/cli.ts +111 -90
- package/src/commands/cite.ts +51 -18
- package/src/commands/eval.ts +2 -1
- package/src/commands/feedback.ts +210 -0
- package/src/commands/skill.ts +74 -0
- package/src/commands/test.ts +3 -2
- package/src/commands/tree.ts +30 -8
- package/src/config/by-path.ts +11 -3
- package/src/config/load.ts +5 -1
- package/src/config/rule-problems.ts +24 -5
- package/src/config/write.ts +33 -9
- package/src/detectors/char-shape.ts +5 -4
- package/src/document.ts +11 -3
- package/src/feedback/draft.ts +102 -0
- package/src/feedback/excerpt.ts +23 -0
- package/src/genre.ts +4 -4
- package/src/init.ts +74 -15
- package/src/orthography.ts +15 -0
- package/src/plugin.ts +88 -0
- package/src/profile/for-file.ts +11 -0
- package/src/profile/load.ts +26 -0
- package/src/profile/parse.ts +106 -0
- package/src/profile/select.ts +35 -0
- package/src/reasons.ts +49 -0
- package/src/render/explain.ts +46 -12
- package/src/render/friendly.ts +42 -10
- package/src/render/rules-json.ts +35 -9
- package/src/render/summary.ts +34 -9
- package/src/render/suppressions.ts +45 -10
- package/src/run.ts +44 -11
- package/src/structure/build.ts +128 -12
- package/src/structure/cite.ts +3 -1
- package/src/structure/issues.ts +42 -15
- package/src/structure/numbering.ts +12 -7
- package/src/structure/of.ts +15 -3
- package/src/structure/relative-find.ts +224 -0
- package/src/structure/relative-resolve.ts +209 -0
- package/src/structure/unread.ts +39 -0
- package/src/ui.ts +23 -0
- package/src/watch.ts +2 -2
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Finding, RuleDefinition } from "../plugin.ts";
|
|
2
|
+
import type { Config } from "../config/load.ts";
|
|
3
|
+
import type { UiLanguage } from "../ui.ts";
|
|
4
|
+
export declare const FEEDBACK_FILE = ".chaff-feedback.md";
|
|
5
|
+
/** GitHub cuts long titles, and a title can carry document text through a rule's message. */
|
|
6
|
+
export declare const MAX_TITLE_LENGTH = 120;
|
|
7
|
+
export type Checked = {
|
|
8
|
+
readonly findings: readonly Finding[];
|
|
9
|
+
readonly rules: readonly RuleDefinition[];
|
|
10
|
+
readonly language: string;
|
|
11
|
+
readonly genre: string;
|
|
12
|
+
};
|
|
13
|
+
export type FeedbackContext = {
|
|
14
|
+
readonly cwd: string;
|
|
15
|
+
readonly ui: UiLanguage;
|
|
16
|
+
readonly version: string;
|
|
17
|
+
readonly runtime: string;
|
|
18
|
+
readonly flag: (argv: readonly string[], name: string) => string | undefined;
|
|
19
|
+
readonly check: (path: string) => Promise<Checked>;
|
|
20
|
+
/** The reported rules' own settings in chaff.yaml (one line each), or undefined when none are set. */
|
|
21
|
+
readonly settingsOf: (ruleIds: readonly string[]) => string | undefined;
|
|
22
|
+
};
|
|
23
|
+
/** Pure: the reported rules' own lines of chaff.yaml's rules (a numeric limit wins over a level), or undefined when none is set. */
|
|
24
|
+
export declare const settingsOf: (config: Pick<Config, "rules" | "limits">, ruleIds: readonly string[]) => string | undefined;
|
|
25
|
+
/** Pure: a title on one line, no longer than GitHub shows. */
|
|
26
|
+
export declare const titleLine: (title: string) => string;
|
|
27
|
+
/** Pure: a string a POSIX shell reads literally — single quotes, with any single quote closed, escaped and reopened. */
|
|
28
|
+
export declare const shellQuoted: (text: string) => string;
|
|
29
|
+
/**
|
|
30
|
+
* `chaff feedback`: an issue draft from a run on the person's own document. It writes a file and prints how to
|
|
31
|
+
* send it; it never sends anything itself. Only the lines around the reported spot are copied from the document,
|
|
32
|
+
* and from chaff.yaml only the reported rules' settings unless --with-config is given.
|
|
33
|
+
*/
|
|
34
|
+
export declare const runFeedback: (targets: readonly string[], argv: readonly string[], context: FeedbackContext) => Promise<number>;
|
|
35
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAIlD,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD,6FAA6F;AAC7F,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,sGAAsG;IACtG,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,GAAG,SAAS,CAAC;CACzE,CAAC;AAyDF,oIAAoI;AACpI,eAAO,MAAM,UAAU,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC,EAAE,SAAS,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAQ1G,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,SAAS,GAAI,OAAO,MAAM,KAAG,MAGzC,CAAC;AAEF,wHAAwH;AACxH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAA8C,CAAC;AA2D1F;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAU,SAAS,SAAS,MAAM,EAAE,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,eAAe,KAAG,OAAO,CAAC,MAAM,CAwC/H,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import { messageOf } from "../render/text.js";
|
|
4
|
+
import { excerptsAround } from "../feedback/excerpt.js";
|
|
5
|
+
import { feedbackDraft } from "../feedback/draft.js";
|
|
6
|
+
export const FEEDBACK_FILE = ".chaff-feedback.md";
|
|
7
|
+
const NEW_ISSUE = "https://github.com/isamu/lab/issues/new";
|
|
8
|
+
/** GitHub cuts long titles, and a title can carry document text through a rule's message. */
|
|
9
|
+
export const MAX_TITLE_LENGTH = 120;
|
|
10
|
+
const TEXT = {
|
|
11
|
+
ja: {
|
|
12
|
+
usage: [
|
|
13
|
+
"使い方: chaff feedback <file> --rule <rule-id> [--line N] [--with-config] 誤った指摘を報告する",
|
|
14
|
+
" chaff feedback <file> --missed --line N [--with-config] 見逃しを報告する",
|
|
15
|
+
].join("\n"),
|
|
16
|
+
notFound: (path) => `${path} がありません。`,
|
|
17
|
+
badLine: (lines) => `--line には 1〜${String(lines)} の行番号を書いてください。`,
|
|
18
|
+
noMatch: (list) => `その指摘が見つかりません。この文書の指摘:\n${list}`,
|
|
19
|
+
several: (list) => `その rule の指摘がいくつもあります。--line で一つ選んでください:\n${list}`,
|
|
20
|
+
none: " (指摘はありません)",
|
|
21
|
+
written: (file, lines) => `報告の下書きを ${file} に書きました。文書から載せたのは ${lines} だけです。送る前に読んで、要らない所は消してください。`,
|
|
22
|
+
send: "送るには(どちらか):",
|
|
23
|
+
link: (file) => `ブラウザで(開いたページに ${file} の中身を貼ります):`,
|
|
24
|
+
neverSent: "chaff は何も送っていません。",
|
|
25
|
+
},
|
|
26
|
+
en: {
|
|
27
|
+
usage: [
|
|
28
|
+
"usage: chaff feedback <file> --rule <rule-id> [--line N] [--with-config] report a wrong finding",
|
|
29
|
+
" chaff feedback <file> --missed --line N [--with-config] report something chaff missed",
|
|
30
|
+
].join("\n"),
|
|
31
|
+
notFound: (path) => `${path} does not exist.`,
|
|
32
|
+
badLine: (lines) => `--line must be a line number from 1 to ${String(lines)}.`,
|
|
33
|
+
noMatch: (list) => `No such finding. The findings in this document:\n${list}`,
|
|
34
|
+
several: (list) => `That rule has several findings here. Pick one with --line:\n${list}`,
|
|
35
|
+
none: " (no findings)",
|
|
36
|
+
written: (file, lines) => `Wrote a draft report to ${file}. From the document it includes only ${lines}. Read it before sending, and delete anything you do not want to share.`,
|
|
37
|
+
send: "To send it (either):",
|
|
38
|
+
link: (file) => `In a browser (paste the contents of ${file} into the page):`,
|
|
39
|
+
neverSent: "chaff has not sent anything.",
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
const lineList = (lines, ui) => ui === "ja" ? `${lines.join("、")} 行目の前後` : `the lines around ${lines.join(", ")}`;
|
|
43
|
+
/** The findings the person picked: by rule, by line, or both. */
|
|
44
|
+
const chosen = (findings, rule, line) => findings.filter((finding) => (rule === undefined || finding.rule === rule) && (line === undefined || finding.line === line));
|
|
45
|
+
const describe = (findings, none) => findings.length === 0 ? none : findings.map((finding) => ` ${String(finding.line)} ${finding.rule}`).join("\n");
|
|
46
|
+
/** Pure: the reported rules' own lines of chaff.yaml's rules (a numeric limit wins over a level), or undefined when none is set. */
|
|
47
|
+
export const settingsOf = (config, ruleIds) => {
|
|
48
|
+
const lines = [...new Set(ruleIds)].flatMap((id) => {
|
|
49
|
+
const limit = config.limits[id];
|
|
50
|
+
const level = config.rules[id];
|
|
51
|
+
if (limit !== undefined)
|
|
52
|
+
return [` ${id}: ${String(limit)}`];
|
|
53
|
+
return level === undefined ? [] : [` ${id}: ${level}`];
|
|
54
|
+
});
|
|
55
|
+
return lines.length === 0 ? undefined : ["rules:", ...lines].join("\n");
|
|
56
|
+
};
|
|
57
|
+
/** Pure: a title on one line, no longer than GitHub shows. */
|
|
58
|
+
export const titleLine = (title) => {
|
|
59
|
+
const flat = title.replace(/\s+/gu, " ").trim();
|
|
60
|
+
return flat.length <= MAX_TITLE_LENGTH ? flat : `${flat.slice(0, MAX_TITLE_LENGTH - 1)}…`;
|
|
61
|
+
};
|
|
62
|
+
/** Pure: a string a POSIX shell reads literally — single quotes, with any single quote closed, escaped and reopened. */
|
|
63
|
+
export const shellQuoted = (text) => `'${text.replaceAll("'", "'\\''")}'`;
|
|
64
|
+
/** What the person asked to report. A wrong finding is picked by rule or line; a miss needs the line. */
|
|
65
|
+
const requestOf = (targets, argv, context) => {
|
|
66
|
+
const [path] = targets;
|
|
67
|
+
const kind = argv.includes("--missed") ? "missed" : "false-positive";
|
|
68
|
+
const rule = context.flag(argv, "--rule");
|
|
69
|
+
const lineFlag = context.flag(argv, "--line");
|
|
70
|
+
const line = lineFlag === undefined ? undefined : Number(lineFlag);
|
|
71
|
+
const lineMissing = kind === "missed" ? line === undefined : rule === undefined && line === undefined;
|
|
72
|
+
if (path === undefined || targets.length !== 1 || lineMissing || (line !== undefined && !Number.isInteger(line)))
|
|
73
|
+
return undefined;
|
|
74
|
+
return { path, kind, rule, line, withConfig: argv.includes("--with-config") };
|
|
75
|
+
};
|
|
76
|
+
const reported = (findings, checked) => {
|
|
77
|
+
const byId = new Map(checked.rules.map((definition) => [definition.id, definition]));
|
|
78
|
+
return findings.flatMap((finding) => {
|
|
79
|
+
const definition = byId.get(finding.rule);
|
|
80
|
+
return definition === undefined ? [] : [{ rule: finding.rule, line: finding.line, message: messageOf(definition, finding, checked.language) }];
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
/** The link carries the title only: the body holds document lines, and a URL ends up in history and logs. */
|
|
84
|
+
const sendInstructions = (title, lines, ui) => {
|
|
85
|
+
const text = TEXT[ui];
|
|
86
|
+
return [
|
|
87
|
+
"",
|
|
88
|
+
` ${text.written(FEEDBACK_FILE, lineList([...new Set(lines)], ui))}`,
|
|
89
|
+
"",
|
|
90
|
+
` ${text.send}`,
|
|
91
|
+
` gh issue create -R isamu/lab --title ${shellQuoted(title)} --body-file ${FEEDBACK_FILE}`,
|
|
92
|
+
` ${text.link(FEEDBACK_FILE)}`,
|
|
93
|
+
` ${NEW_ISSUE}?title=${encodeURIComponent(title)}`,
|
|
94
|
+
"",
|
|
95
|
+
` ${text.neverSent}`,
|
|
96
|
+
"",
|
|
97
|
+
].join("\n");
|
|
98
|
+
};
|
|
99
|
+
/** Why the request cannot be drafted, or the findings to report. */
|
|
100
|
+
const pick = (request, checked, lineCount, ui) => {
|
|
101
|
+
const text = TEXT[ui];
|
|
102
|
+
if (request.line !== undefined && (request.line < 1 || request.line > lineCount))
|
|
103
|
+
return { error: text.badLine(lineCount) };
|
|
104
|
+
const picked = chosen(checked.findings, request.rule, request.line);
|
|
105
|
+
if (request.kind === "missed")
|
|
106
|
+
return { findings: picked };
|
|
107
|
+
if (picked.length === 0)
|
|
108
|
+
return { error: text.noMatch(describe(checked.findings, text.none)) };
|
|
109
|
+
// One finding per report: a rule picked alone could otherwise pull excerpts from all over the document.
|
|
110
|
+
if (picked.length > 1)
|
|
111
|
+
return { error: text.several(describe(picked, text.none)) };
|
|
112
|
+
return { findings: picked };
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* `chaff feedback`: an issue draft from a run on the person's own document. It writes a file and prints how to
|
|
116
|
+
* send it; it never sends anything itself. Only the lines around the reported spot are copied from the document,
|
|
117
|
+
* and from chaff.yaml only the reported rules' settings unless --with-config is given.
|
|
118
|
+
*/
|
|
119
|
+
export const runFeedback = async (targets, argv, context) => {
|
|
120
|
+
const text = TEXT[context.ui];
|
|
121
|
+
const request = requestOf(targets, argv, context);
|
|
122
|
+
if (request === undefined) {
|
|
123
|
+
console.error(text.usage);
|
|
124
|
+
return 1;
|
|
125
|
+
}
|
|
126
|
+
if (!existsSync(request.path)) {
|
|
127
|
+
console.error(text.notFound(request.path));
|
|
128
|
+
return 1;
|
|
129
|
+
}
|
|
130
|
+
const source = readFileSync(request.path, "utf8");
|
|
131
|
+
const checked = await context.check(request.path);
|
|
132
|
+
const picked = pick(request, checked, source.split("\n").length, context.ui);
|
|
133
|
+
if ("error" in picked) {
|
|
134
|
+
console.error(picked.error);
|
|
135
|
+
return 1;
|
|
136
|
+
}
|
|
137
|
+
const findings = reported(picked.findings, checked);
|
|
138
|
+
const lines = request.kind === "missed" && request.line !== undefined ? [request.line] : findings.map((finding) => finding.line);
|
|
139
|
+
const configPath = join(context.cwd, "chaff.yaml");
|
|
140
|
+
const wholeConfig = request.withConfig && existsSync(configPath) ? readFileSync(configPath, "utf8") : undefined;
|
|
141
|
+
const draft = feedbackDraft({
|
|
142
|
+
kind: request.kind,
|
|
143
|
+
version: context.version,
|
|
144
|
+
runtime: context.runtime,
|
|
145
|
+
fileName: basename(request.path),
|
|
146
|
+
language: checked.language,
|
|
147
|
+
genre: checked.genre,
|
|
148
|
+
findings,
|
|
149
|
+
line: lines[0] ?? 0,
|
|
150
|
+
excerpts: excerptsAround(source, lines),
|
|
151
|
+
config: wholeConfig ?? context.settingsOf(findings.map((finding) => finding.rule)),
|
|
152
|
+
}, context.ui);
|
|
153
|
+
writeFileSync(join(context.cwd, FEEDBACK_FILE), draft.body, "utf8");
|
|
154
|
+
console.log(sendInstructions(titleLine(draft.title), lines, context.ui));
|
|
155
|
+
return 0;
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/commands/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { UiLanguage } from "../ui.ts";
|
|
2
|
+
/** The skill ships in the package, beside rules/. Two levels up from src/commands or dist/commands. */
|
|
3
|
+
export declare const SKILL_SOURCE: string;
|
|
4
|
+
/** Where Claude Code reads a skill: this folder's .claude/skills, or the user's. */
|
|
5
|
+
export declare const skillTarget: (root: string) => string;
|
|
6
|
+
export type SkillOutcome = {
|
|
7
|
+
readonly status: "written" | "updated" | "same" | "kept";
|
|
8
|
+
readonly path: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Writes the skill. A file that is already there and differs may have been edited by hand, so it is replaced
|
|
12
|
+
* only with `force`; the same file is left alone.
|
|
13
|
+
*/
|
|
14
|
+
export declare const installSkill: (skill: string, target: string, force: boolean) => SkillOutcome;
|
|
15
|
+
export type SkillContext = {
|
|
16
|
+
readonly cwd: string;
|
|
17
|
+
readonly home: string;
|
|
18
|
+
readonly ui: UiLanguage;
|
|
19
|
+
};
|
|
20
|
+
/** `chaff skill [--global] [--force]`: installs or updates the skill. Exit 1 when a differing file was kept. */
|
|
21
|
+
export declare const runSkill: (argv: readonly string[], context: SkillContext) => number;
|
|
22
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,uGAAuG;AACvG,eAAO,MAAM,YAAY,QAA2F,CAAC;AAErH,oFAAoF;AACpF,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAA8D,CAAC;AAE1G,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/G;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,OAAO,OAAO,KAAG,YAW5E,CAAC;AA+BF,MAAM,MAAM,YAAY,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAA;CAAE,CAAC;AAEpG,gHAAgH;AAChH,eAAO,MAAM,QAAQ,GAAI,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,YAAY,KAAG,MAWzE,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
/** The skill ships in the package, beside rules/. Two levels up from src/commands or dist/commands. */
|
|
5
|
+
export const SKILL_SOURCE = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "skills", "chaff", "SKILL.md");
|
|
6
|
+
/** Where Claude Code reads a skill: this folder's .claude/skills, or the user's. */
|
|
7
|
+
export const skillTarget = (root) => join(root, ".claude", "skills", "chaff", "SKILL.md");
|
|
8
|
+
/**
|
|
9
|
+
* Writes the skill. A file that is already there and differs may have been edited by hand, so it is replaced
|
|
10
|
+
* only with `force`; the same file is left alone.
|
|
11
|
+
*/
|
|
12
|
+
export const installSkill = (skill, target, force) => {
|
|
13
|
+
if (existsSync(target)) {
|
|
14
|
+
const current = readFileSync(target, "utf8");
|
|
15
|
+
if (current === skill)
|
|
16
|
+
return { status: "same", path: target };
|
|
17
|
+
if (!force)
|
|
18
|
+
return { status: "kept", path: target };
|
|
19
|
+
writeFileSync(target, skill, "utf8");
|
|
20
|
+
return { status: "updated", path: target };
|
|
21
|
+
}
|
|
22
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
23
|
+
writeFileSync(target, skill, "utf8");
|
|
24
|
+
return { status: "written", path: target };
|
|
25
|
+
};
|
|
26
|
+
const TEXT = {
|
|
27
|
+
ja: {
|
|
28
|
+
written: (path) => `Claude Code の skill を書きました: ${path}\nClaude Code を開き直すと /chaff で使えます。`,
|
|
29
|
+
updated: (path) => `skill を新しい版に置き換えました: ${path}`,
|
|
30
|
+
same: (path) => `skill は既に最新です: ${path}`,
|
|
31
|
+
kept: (path) => `${path} は手で直されているかもしれないので、置き換えていません。\n置き換えるときは --force を付けてください。`,
|
|
32
|
+
},
|
|
33
|
+
en: {
|
|
34
|
+
written: (path) => `Wrote the Claude Code skill: ${path}\nReopen Claude Code and it is available as /chaff.`,
|
|
35
|
+
updated: (path) => `Replaced the skill with the new version: ${path}`,
|
|
36
|
+
same: (path) => `The skill is up to date: ${path}`,
|
|
37
|
+
kept: (path) => `${path} may have been edited by hand, so it was not replaced.\nAdd --force to replace it.`,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const FAILED = {
|
|
41
|
+
ja: (path, why) => `skill を ${path} に書けませんでした: ${why}`,
|
|
42
|
+
en: (path, why) => `Could not write the skill to ${path}: ${why}`,
|
|
43
|
+
};
|
|
44
|
+
/** The outcome, or why the file system refused. */
|
|
45
|
+
const attempt = (install) => {
|
|
46
|
+
try {
|
|
47
|
+
return install();
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
return { failure: err instanceof Error ? err.message : String(err) };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
/** `chaff skill [--global] [--force]`: installs or updates the skill. Exit 1 when a differing file was kept. */
|
|
54
|
+
export const runSkill = (argv, context) => {
|
|
55
|
+
const target = skillTarget(argv.includes("--global") ? context.home : context.cwd);
|
|
56
|
+
const outcome = attempt(() => installSkill(readFileSync(SKILL_SOURCE, "utf8"), target, argv.includes("--force")));
|
|
57
|
+
if ("failure" in outcome) {
|
|
58
|
+
console.error(FAILED[context.ui](target, outcome.failure));
|
|
59
|
+
return 1;
|
|
60
|
+
}
|
|
61
|
+
const say = TEXT[context.ui][outcome.status](outcome.path);
|
|
62
|
+
if (outcome.status === "kept")
|
|
63
|
+
console.error(say);
|
|
64
|
+
else
|
|
65
|
+
console.log(say);
|
|
66
|
+
return outcome.status === "kept" ? 1 : 0;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,uGAAuG;AACvG,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAErH,oFAAoF;AACpF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAI1G;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,KAAc,EAAgB,EAAE;IAC1F,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,OAAO,KAAK,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACpD,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IACD,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,IAAI,GAA8E;IACtF,EAAE,EAAE;QACF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,+BAA+B,IAAI,oCAAoC;QAC1F,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,IAAI,EAAE;QACjD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,IAAI,EAAE;QACxC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,2DAA2D;KACnF;IACD,EAAE,EAAE;QACF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAgC,IAAI,qDAAqD;QAC5G,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,4CAA4C,IAAI,EAAE;QACrE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,4BAA4B,IAAI,EAAE;QAClD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,oFAAoF;KAC5G;CACF,CAAC;AAEF,MAAM,MAAM,GAAiD;IAC3D,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,IAAI,eAAe,GAAG,EAAE;IACtD,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,gCAAgC,IAAI,KAAK,GAAG,EAAE;CAClE,CAAC;AAEF,mDAAmD;AACnD,MAAM,OAAO,GAAG,CAAC,OAA2B,EAA+C,EAAE;IAC3F,IAAI,CAAC;QACH,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AAIF,gHAAgH;AAChH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAuB,EAAE,OAAqB,EAAU,EAAE;IACjF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClH,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;QAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,cAAc,CAAC;AAI5D,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzG,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACnJ,CAAC;AA0DF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAU,SAAS,SAAS,MAAM,EAAE,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,MAAM,CA+DvH,CAAC"}
|
package/dist/commands/test.js
CHANGED
|
@@ -11,11 +11,12 @@ import { CACHE_DIR, credentialHint, describeFailure, hasCredentials } from "../j
|
|
|
11
11
|
import { ENV_FILE, loadEnvFile } from "../env.js";
|
|
12
12
|
import { planSemantic, runSemantic } from "../run-semantic.js";
|
|
13
13
|
import { MACHINE_BANNER, renderPlan, renderSemantic } from "../render/semantic.js";
|
|
14
|
+
import { profileFor } from "../profile/for-file.js";
|
|
14
15
|
const judgeAll = async (paths, config, checks, options, resolveGenre) => Promise.all(paths.map(async (path) => {
|
|
15
16
|
const source = await readFile(path, "utf8");
|
|
16
17
|
const language = applyByPath(config.byPath, config.baseDir, path).language ?? config.language ?? guessLanguage(source).language;
|
|
17
18
|
const adapter = await loadAdapter(language);
|
|
18
|
-
const doc = buildDocument(path, source, adapter, teamRules(config));
|
|
19
|
+
const doc = buildDocument(path, source, adapter, teamRules(config), profileFor(config, path, source, language));
|
|
19
20
|
const { genre } = resolveGenre(path, source, config);
|
|
20
21
|
const rules = loadRules(language);
|
|
21
22
|
return { path, outcome: await runSemantic(doc, rules, checks, config.rules, genre, options), rules, language };
|
|
@@ -26,7 +27,7 @@ const dryRun = async (paths, config, checks, resolveGenre, envFile) => {
|
|
|
26
27
|
const source = await readFile(path, "utf8");
|
|
27
28
|
const language = applyByPath(config.byPath, config.baseDir, path).language ?? config.language ?? guessLanguage(source).language;
|
|
28
29
|
const adapter = await loadAdapter(language);
|
|
29
|
-
const doc = buildDocument(path, source, adapter, teamRules(config));
|
|
30
|
+
const doc = buildDocument(path, source, adapter, teamRules(config), profileFor(config, path, source, language));
|
|
30
31
|
const { genre } = resolveGenre(path, source, config);
|
|
31
32
|
return { path, jobs: planSemantic(doc, loadRules(language), checks, config.rules, genre), sentences: doc.sentences.length };
|
|
32
33
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAkB,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/tree.d.ts
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import type { Config } from "../config/load.ts";
|
|
2
2
|
import type { StructureNode } from "../plugin.ts";
|
|
3
|
+
import type { Texts, UiLanguage } from "../ui.ts";
|
|
3
4
|
export type TreeContext = {
|
|
4
5
|
readonly config: Config;
|
|
5
6
|
readonly flag: (argv: readonly string[], name: string) => string | undefined;
|
|
7
|
+
/** The language chaff speaks in here. Japanese when left out. */
|
|
8
|
+
readonly ui?: UiLanguage;
|
|
6
9
|
};
|
|
10
|
+
declare const TEXT: Texts<{
|
|
11
|
+
readonly usage: string;
|
|
12
|
+
readonly unreadable: (path: string, why: string) => string;
|
|
13
|
+
readonly noStructure: (path: string, language: string) => string;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const treeText: (context: TreeContext) => (typeof TEXT)["ja"];
|
|
7
16
|
export declare const treeTargets: (argv: readonly string[]) => string[];
|
|
8
|
-
export declare const readSource: (path: string) => Promise<string | undefined>;
|
|
17
|
+
export declare const readSource: (path: string, context: TreeContext) => Promise<string | undefined>;
|
|
9
18
|
/**
|
|
10
19
|
* 言語の決め方は lint / test / eval と同じ。そのファイルの by_path、全体の language、中身からの推定の順で、
|
|
11
20
|
* その前に --language を置く。混在するリポジトリで、英語の契約書を日本語として読まないため。
|
|
@@ -30,4 +39,5 @@ export declare const inOrder: (paths: readonly string[], each: (path: string) =>
|
|
|
30
39
|
* 書き換えはしない。Markdown でない .txt(見出しの無い契約書)も、行頭の番号で木にする。
|
|
31
40
|
*/
|
|
32
41
|
export declare const runTree: (paths: readonly string[], argv: readonly string[], context: TreeContext) => Promise<number>;
|
|
42
|
+
export {};
|
|
33
43
|
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7E,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;CAC1B,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAClE,CAWA,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,SAAS,WAAW,KAAG,CAAC,OAAO,IAAI,EAAE,IAAI,CAA6B,CAAC;AAOhG,eAAO,MAAM,WAAW,GAAI,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM,EACgD,CAAC;AAE7G,eAAO,MAAM,UAAU,GAAU,MAAM,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAO/F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,MAI3E,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAEnF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAU,MAAM,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAa1H,CAAC;AASF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAU,OAAO,SAAS,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KAAG,OAAO,CAAC,OAAO,CAIvF,CAAC;AAE5B;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAU,OAAO,SAAS,MAAM,EAAE,EAAE,MAAM,SAAS,MAAM,EAAE,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,MAAM,CAQrH,CAAC"}
|
package/dist/commands/tree.js
CHANGED
|
@@ -1,21 +1,34 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { loadAdapter } from "../adapter-load.js";
|
|
3
3
|
import { applyByPath } from "../config/by-path.js";
|
|
4
|
+
import { profileFor } from "../profile/for-file.js";
|
|
4
5
|
import { guessLanguage } from "../detect.js";
|
|
5
6
|
import { isMarkdownPath } from "../structure/markdown-path.js";
|
|
6
7
|
import { buildStructure } from "../structure/of.js";
|
|
7
8
|
import { toSexp } from "../structure/sexp.js";
|
|
9
|
+
const TEXT = {
|
|
10
|
+
ja: {
|
|
11
|
+
usage: "使い方: chaff tree <file>... [--format sexp|json] [--language ja|en|…]",
|
|
12
|
+
unreadable: (path, why) => `${path} を読めませんでした: ${why}`,
|
|
13
|
+
noStructure: (path, language) => `${path}: 言語 ${language} のパッケージは文書の構造を読めません(structure がありません)`,
|
|
14
|
+
},
|
|
15
|
+
en: {
|
|
16
|
+
usage: "usage: chaff tree <file>... [--format sexp|json] [--language ja|en|…]",
|
|
17
|
+
unreadable: (path, why) => `Could not read ${path}: ${why}`,
|
|
18
|
+
noStructure: (path, language) => `${path}: the ${language} package cannot read a document's structure (it has no structure)`,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
export const treeText = (context) => TEXT[context.ui ?? "ja"];
|
|
8
22
|
const FORMATS = ["sexp", "json"];
|
|
9
|
-
const USAGE = "使い方: chaff tree <file>... [--format sexp|json] [--language ja|en|…]";
|
|
10
23
|
/** 値を取るフラグ。その次の引数は値で、対象のファイルではない。 */
|
|
11
24
|
const VALUED = ["--format", "--language"];
|
|
12
25
|
export const treeTargets = (argv) => argv.slice(1).filter((arg, index, all) => !arg.startsWith("--") && !VALUED.includes(all[index - 1] ?? ""));
|
|
13
|
-
export const readSource = async (path) => {
|
|
26
|
+
export const readSource = async (path, context) => {
|
|
14
27
|
try {
|
|
15
28
|
return await readFile(path, "utf8");
|
|
16
29
|
}
|
|
17
30
|
catch (err) {
|
|
18
|
-
console.error(
|
|
31
|
+
console.error(treeText(context).unreadable(path, err instanceof Error ? err.message : String(err)));
|
|
19
32
|
return undefined;
|
|
20
33
|
}
|
|
21
34
|
};
|
|
@@ -32,18 +45,19 @@ export const treeLanguage = (path, source, argv, context) => context.flag(argv,
|
|
|
32
45
|
* chaff tree と chaff cite が同じ木を見るように、ここを一つにしておく。
|
|
33
46
|
*/
|
|
34
47
|
export const readTree = async (path, argv, context) => {
|
|
35
|
-
const source = await readSource(path);
|
|
48
|
+
const source = await readSource(path, context);
|
|
36
49
|
if (source === undefined)
|
|
37
50
|
return undefined;
|
|
38
51
|
const language = treeLanguage(path, source, argv, context);
|
|
39
52
|
const adapter = await loadAdapter(language);
|
|
40
53
|
if (adapter.structure === undefined) {
|
|
41
|
-
console.error(
|
|
54
|
+
console.error(treeText(context).noStructure(path, language));
|
|
42
55
|
return undefined;
|
|
43
56
|
}
|
|
44
57
|
// 日本語は形態素で数量と日付を読む。解析器が無ければ単位の表で読むので、木は作れる。
|
|
45
58
|
await adapter.prepare?.({ pos: true });
|
|
46
|
-
|
|
59
|
+
const profile = profileFor(context.config, path, source, language);
|
|
60
|
+
return { source, tree: buildStructure({ path, source, language, markdown: isMarkdownPath(path), profile }, adapter.structure) };
|
|
47
61
|
};
|
|
48
62
|
const printTree = async (path, argv, context) => {
|
|
49
63
|
const read = await readTree(path, argv, context);
|
|
@@ -67,7 +81,7 @@ export const inOrder = async (paths, each) => paths.reduce(async (previous, path
|
|
|
67
81
|
export const runTree = async (paths, argv, context) => {
|
|
68
82
|
const format = context.flag(argv, "--format") ?? "sexp";
|
|
69
83
|
if (paths.length === 0 || !FORMATS.includes(format)) {
|
|
70
|
-
console.error(
|
|
84
|
+
console.error(treeText(context).usage);
|
|
71
85
|
return 1;
|
|
72
86
|
}
|
|
73
87
|
const printed = await inOrder(paths, (path) => printTree(path, argv, context));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/config/by-path.d.ts
CHANGED
|
@@ -2,14 +2,18 @@ export type PathRule = {
|
|
|
2
2
|
readonly files: readonly string[];
|
|
3
3
|
readonly genre: string | undefined;
|
|
4
4
|
readonly language: string | undefined;
|
|
5
|
+
readonly profile?: string | undefined;
|
|
5
6
|
};
|
|
6
7
|
export declare const matches: (glob: string, base: string, path: string) => boolean;
|
|
7
8
|
/**
|
|
8
9
|
* 後に書いたものが勝つ。上から順に当て、最後に当たったものを使う。
|
|
9
10
|
* 「全体はこう、ここだけは違う」と書けるようにするため。
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
|
+
type PathSettings = {
|
|
12
13
|
genre?: string;
|
|
13
14
|
language?: string;
|
|
15
|
+
profile?: string;
|
|
14
16
|
};
|
|
17
|
+
export declare const applyByPath: (rules: readonly PathRule[], base: string, path: string) => PathSettings;
|
|
18
|
+
export {};
|
|
15
19
|
//# sourceMappingURL=by-path.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"by-path.d.ts","sourceRoot":"","sources":["../../src/config/by-path.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;
|
|
1
|
+
{"version":3,"file":"by-path.d.ts","sourceRoot":"","sources":["../../src/config/by-path.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,CAAC;AA8BF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAAsD,CAAC;AAE1H;;;GAGG;AACH,KAAK,YAAY,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5E,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,QAAQ,EAAE,EAAE,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,YAS7E,CAAC"}
|
package/dist/config/by-path.js
CHANGED
|
@@ -25,10 +25,6 @@ const toPattern = (glob) => {
|
|
|
25
25
|
/** 設定ファイルからの相対で照合する。実行した場所に左右されないため。 */
|
|
26
26
|
const normalize = (base, path) => relative(base, path).split(sep).join("/");
|
|
27
27
|
export const matches = (glob, base, path) => toPattern(glob).test(normalize(base, path));
|
|
28
|
-
/**
|
|
29
|
-
* 後に書いたものが勝つ。上から順に当て、最後に当たったものを使う。
|
|
30
|
-
* 「全体はこう、ここだけは違う」と書けるようにするため。
|
|
31
|
-
*/
|
|
32
28
|
export const applyByPath = (rules, base, path) => rules.reduce((acc, rule) => {
|
|
33
29
|
if (!rule.files.some((glob) => matches(glob, base, path)))
|
|
34
30
|
return acc;
|
|
@@ -36,6 +32,7 @@ export const applyByPath = (rules, base, path) => rules.reduce((acc, rule) => {
|
|
|
36
32
|
...acc,
|
|
37
33
|
...(rule.genre === undefined ? {} : { genre: rule.genre }),
|
|
38
34
|
...(rule.language === undefined ? {} : { language: rule.language }),
|
|
35
|
+
...(rule.profile === undefined ? {} : { profile: rule.profile }),
|
|
39
36
|
};
|
|
40
37
|
}, {});
|
|
41
38
|
//# sourceMappingURL=by-path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"by-path.js","sourceRoot":"","sources":["../../src/config/by-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"by-path.js","sourceRoot":"","sources":["../../src/config/by-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAS1C;;;;;;;;;GASG;AACH,MAAM,IAAI,GAAG,QAAQ,CAAC;AACtB,MAAM,GAAG,GAAG,QAAQ,CAAC;AAErB,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE;IACzC,MAAM,IAAI,GAAG,IAAI;SACd,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;SACrC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;SACzB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;SACvB,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC;SAC/B,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzB,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF,wCAAwC;AACxC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,IAAY,EAAW,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAQ1H,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAA0B,EAAE,IAAY,EAAE,IAAY,EAAgB,EAAE,CAClG,KAAK,CAAC,MAAM,CAAe,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACvC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC;IACtE,OAAO;QACL,GAAG,GAAG;QACN,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnE,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC,EAAE,EAAE,CAAC,CAAC"}
|
package/dist/config/load.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import type { PathRule } from "./by-path.ts";
|
|
|
4
4
|
export declare const CONFIG_FILE = "chaff.yaml";
|
|
5
5
|
export type Config = {
|
|
6
6
|
readonly genre: string | undefined;
|
|
7
|
+
/** 文書の種類(profiles/*.yaml の id)。none なら内容からも選ばない。 */
|
|
8
|
+
readonly profile: string | undefined;
|
|
7
9
|
readonly aiBackend: BackendName;
|
|
8
10
|
readonly language: string | undefined;
|
|
9
11
|
readonly rules: Readonly<Record<string, Level>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,eAAO,MAAM,WAAW,eAAe,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,0DAA0D;IAC1D,QAAQ,CAAC,eAAe,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,mCAAmC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,eAAO,MAAM,WAAW,eAAe,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAChD,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,0DAA0D;IAC1D,QAAQ,CAAC,eAAe,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrF,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,mCAAmC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAMF,eAAO,MAAM,KAAK,EAAE,MAiBnB,CAAC;AA4DF,sDAAsD;AACtD,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAuBzC,CAAC"}
|