qfai 0.3.8 → 0.4.2
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 +12 -0
- package/assets/init/.qfai/README.md +5 -0
- package/assets/init/.qfai/prompts/README.md +1 -0
- package/assets/init/.qfai/prompts/qfai-generate-test-globs.md +29 -0
- package/assets/init/.qfai/specs/README.md +1 -1
- package/assets/init/root/qfai.config.yaml +8 -0
- package/assets/init/root/tests/qfai-traceability.sample.test.ts +2 -0
- package/dist/cli/index.cjs +717 -364
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.mjs +719 -366
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.cjs +710 -351
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -3
- package/dist/index.d.ts +156 -2
- package/dist/index.mjs +714 -354
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
- package/dist/cli/commands/init.d.ts +0 -8
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -30
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/report.d.ts +0 -7
- package/dist/cli/commands/report.d.ts.map +0 -1
- package/dist/cli/commands/report.js +0 -80
- package/dist/cli/commands/report.js.map +0 -1
- package/dist/cli/commands/validate.d.ts +0 -9
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -57
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js +0 -7
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/lib/args.d.ts +0 -18
- package/dist/cli/lib/args.d.ts.map +0 -1
- package/dist/cli/lib/args.js +0 -98
- package/dist/cli/lib/args.js.map +0 -1
- package/dist/cli/lib/assets.d.ts +0 -2
- package/dist/cli/lib/assets.d.ts.map +0 -1
- package/dist/cli/lib/assets.js +0 -24
- package/dist/cli/lib/assets.js.map +0 -1
- package/dist/cli/lib/failOn.d.ts +0 -5
- package/dist/cli/lib/failOn.d.ts.map +0 -1
- package/dist/cli/lib/failOn.js +0 -10
- package/dist/cli/lib/failOn.js.map +0 -1
- package/dist/cli/lib/fs.d.ts +0 -11
- package/dist/cli/lib/fs.d.ts.map +0 -1
- package/dist/cli/lib/fs.js +0 -91
- package/dist/cli/lib/fs.js.map +0 -1
- package/dist/cli/lib/logger.d.ts +0 -4
- package/dist/cli/lib/logger.d.ts.map +0 -1
- package/dist/cli/lib/logger.js +0 -10
- package/dist/cli/lib/logger.js.map +0 -1
- package/dist/cli/main.d.ts +0 -2
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -66
- package/dist/cli/main.js.map +0 -1
- package/dist/core/config.d.ts +0 -44
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -218
- package/dist/core/config.js.map +0 -1
- package/dist/core/contractIndex.d.ts +0 -13
- package/dist/core/contractIndex.d.ts.map +0 -1
- package/dist/core/contractIndex.js +0 -66
- package/dist/core/contractIndex.js.map +0 -1
- package/dist/core/contracts.d.ts +0 -5
- package/dist/core/contracts.d.ts.map +0 -1
- package/dist/core/contracts.js +0 -42
- package/dist/core/contracts.js.map +0 -1
- package/dist/core/discovery.d.ts +0 -14
- package/dist/core/discovery.d.ts.map +0 -1
- package/dist/core/discovery.js +0 -55
- package/dist/core/discovery.js.map +0 -1
- package/dist/core/fs.d.ts +0 -6
- package/dist/core/fs.d.ts.map +0 -1
- package/dist/core/fs.js +0 -55
- package/dist/core/fs.js.map +0 -1
- package/dist/core/gherkin/parse.d.ts +0 -7
- package/dist/core/gherkin/parse.d.ts.map +0 -1
- package/dist/core/gherkin/parse.js +0 -25
- package/dist/core/gherkin/parse.js.map +0 -1
- package/dist/core/ids.d.ts +0 -6
- package/dist/core/ids.d.ts.map +0 -1
- package/dist/core/ids.js +0 -52
- package/dist/core/ids.js.map +0 -1
- package/dist/core/index.d.ts +0 -13
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -13
- package/dist/core/index.js.map +0 -1
- package/dist/core/parse/adr.d.ts +0 -13
- package/dist/core/parse/adr.d.ts.map +0 -1
- package/dist/core/parse/adr.js +0 -33
- package/dist/core/parse/adr.js.map +0 -1
- package/dist/core/parse/gherkin.d.ts +0 -12
- package/dist/core/parse/gherkin.d.ts.map +0 -1
- package/dist/core/parse/gherkin.js +0 -22
- package/dist/core/parse/gherkin.js.map +0 -1
- package/dist/core/parse/markdown.d.ts +0 -14
- package/dist/core/parse/markdown.d.ts.map +0 -1
- package/dist/core/parse/markdown.js +0 -45
- package/dist/core/parse/markdown.js.map +0 -1
- package/dist/core/parse/spec.d.ts +0 -28
- package/dist/core/parse/spec.d.ts.map +0 -1
- package/dist/core/parse/spec.js +0 -80
- package/dist/core/parse/spec.js.map +0 -1
- package/dist/core/report.d.ts +0 -39
- package/dist/core/report.d.ts.map +0 -1
- package/dist/core/report.js +0 -226
- package/dist/core/report.js.map +0 -1
- package/dist/core/scenarioModel.d.ts +0 -33
- package/dist/core/scenarioModel.d.ts.map +0 -1
- package/dist/core/scenarioModel.js +0 -130
- package/dist/core/scenarioModel.js.map +0 -1
- package/dist/core/specLayout.d.ts +0 -8
- package/dist/core/specLayout.d.ts.map +0 -1
- package/dist/core/specLayout.js +0 -36
- package/dist/core/specLayout.js.map +0 -1
- package/dist/core/types.d.ts +0 -25
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -2
- package/dist/core/types.js.map +0 -1
- package/dist/core/validate.d.ts +0 -4
- package/dist/core/validate.d.ts.map +0 -1
- package/dist/core/validate.js +0 -34
- package/dist/core/validate.js.map +0 -1
- package/dist/core/validators/contracts.d.ts +0 -5
- package/dist/core/validators/contracts.d.ts.map +0 -1
- package/dist/core/validators/contracts.js +0 -162
- package/dist/core/validators/contracts.js.map +0 -1
- package/dist/core/validators/delta.d.ts +0 -4
- package/dist/core/validators/delta.d.ts.map +0 -1
- package/dist/core/validators/delta.js +0 -68
- package/dist/core/validators/delta.js.map +0 -1
- package/dist/core/validators/ids.d.ts +0 -4
- package/dist/core/validators/ids.d.ts.map +0 -1
- package/dist/core/validators/ids.js +0 -88
- package/dist/core/validators/ids.js.map +0 -1
- package/dist/core/validators/scenario.d.ts +0 -5
- package/dist/core/validators/scenario.d.ts.map +0 -1
- package/dist/core/validators/scenario.js +0 -140
- package/dist/core/validators/scenario.js.map +0 -1
- package/dist/core/validators/spec.d.ts +0 -5
- package/dist/core/validators/spec.d.ts.map +0 -1
- package/dist/core/validators/spec.js +0 -94
- package/dist/core/validators/spec.js.map +0 -1
- package/dist/core/validators/traceability.d.ts +0 -4
- package/dist/core/validators/traceability.d.ts.map +0 -1
- package/dist/core/validators/traceability.js +0 -180
- package/dist/core/validators/traceability.js.map +0 -1
- package/dist/core/version.d.ts +0 -2
- package/dist/core/version.d.ts.map +0 -1
- package/dist/core/version.js +0 -25
- package/dist/core/version.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/dist/cli/main.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { runInit } from "./commands/init.js";
|
|
2
|
-
import { runReport } from "./commands/report.js";
|
|
3
|
-
import { runValidate } from "./commands/validate.js";
|
|
4
|
-
import { parseArgs } from "./lib/args.js";
|
|
5
|
-
import { error, info } from "./lib/logger.js";
|
|
6
|
-
export async function run(argv, cwd) {
|
|
7
|
-
const { command, options } = parseArgs(argv, cwd);
|
|
8
|
-
if (!command || options.help) {
|
|
9
|
-
info(usage());
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
switch (command) {
|
|
13
|
-
case "init":
|
|
14
|
-
await runInit({
|
|
15
|
-
dir: options.dir,
|
|
16
|
-
force: options.force,
|
|
17
|
-
dryRun: options.dryRun,
|
|
18
|
-
yes: options.yes,
|
|
19
|
-
});
|
|
20
|
-
return;
|
|
21
|
-
case "validate":
|
|
22
|
-
process.exitCode = await runValidate({
|
|
23
|
-
root: options.root,
|
|
24
|
-
strict: options.strict,
|
|
25
|
-
format: options.validateFormat,
|
|
26
|
-
...(options.failOn !== undefined ? { failOn: options.failOn } : {}),
|
|
27
|
-
});
|
|
28
|
-
return;
|
|
29
|
-
case "report":
|
|
30
|
-
await runReport({
|
|
31
|
-
root: options.root,
|
|
32
|
-
format: options.reportFormat,
|
|
33
|
-
...(options.reportOut !== undefined
|
|
34
|
-
? { outPath: options.reportOut }
|
|
35
|
-
: {}),
|
|
36
|
-
});
|
|
37
|
-
return;
|
|
38
|
-
default:
|
|
39
|
-
error(`Unknown command: ${command}`);
|
|
40
|
-
info(usage());
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function usage() {
|
|
45
|
-
return `qfai <command> [options]
|
|
46
|
-
|
|
47
|
-
Commands:
|
|
48
|
-
init テンプレを生成
|
|
49
|
-
validate 仕様/契約/参照の検査
|
|
50
|
-
report 検証結果と集計を出力
|
|
51
|
-
|
|
52
|
-
Options:
|
|
53
|
-
--root <path> 対象ディレクトリ
|
|
54
|
-
--dir <path> init の出力先
|
|
55
|
-
--force 既存ファイルを上書き
|
|
56
|
-
--yes init: 予約フラグ(現状は非対話のため挙動差なし。将来の対話導入時に自動Yes)
|
|
57
|
-
--dry-run 変更を行わず表示のみ
|
|
58
|
-
--format <text|github> validate の出力形式
|
|
59
|
-
--format <md|json> report の出力形式
|
|
60
|
-
--strict validate: warning 以上で exit 1
|
|
61
|
-
--fail-on <error|warning|never> validate: 失敗条件
|
|
62
|
-
--out <path> report: 出力先
|
|
63
|
-
-h, --help ヘルプ表示
|
|
64
|
-
`;
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=main.js.map
|
package/dist/cli/main.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc,EAAE,GAAW;IACnD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACd,OAAO;IACT,CAAC;IAED,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,MAAM,OAAO,CAAC;gBACZ,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,OAAO;QACT,KAAK,UAAU;YACb,OAAO,CAAC,QAAQ,GAAG,MAAM,WAAW,CAAC;gBACnC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,cAAc;gBAC9B,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC,CAAC;YACH,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,SAAS,CAAC;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,YAAY;gBAC5B,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;oBACjC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE;oBAChC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;YACH,OAAO;QACT;YACE,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACd,OAAO;IACX,CAAC;AACH,CAAC;AAED,SAAS,KAAK;IACZ,OAAO;;;;;;;;;;;;;;;;;;;CAmBR,CAAC;AACF,CAAC"}
|
package/dist/core/config.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Issue } from "./types.js";
|
|
2
|
-
export type FailOn = "never" | "warning" | "error";
|
|
3
|
-
export type OutputFormat = "text" | "github";
|
|
4
|
-
export type TraceabilitySeverity = "warning" | "error";
|
|
5
|
-
export type QfaiPaths = {
|
|
6
|
-
contractsDir: string;
|
|
7
|
-
specsDir: string;
|
|
8
|
-
rulesDir: string;
|
|
9
|
-
outDir: string;
|
|
10
|
-
promptsDir: string;
|
|
11
|
-
srcDir: string;
|
|
12
|
-
testsDir: string;
|
|
13
|
-
};
|
|
14
|
-
export type QfaiValidationConfig = {
|
|
15
|
-
failOn: FailOn;
|
|
16
|
-
require: {
|
|
17
|
-
specSections: string[];
|
|
18
|
-
};
|
|
19
|
-
traceability: {
|
|
20
|
-
brMustHaveSc: boolean;
|
|
21
|
-
scMustTouchContracts: boolean;
|
|
22
|
-
allowOrphanContracts: boolean;
|
|
23
|
-
unknownContractIdSeverity: TraceabilitySeverity;
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
export type QfaiOutputConfig = {
|
|
27
|
-
validateJsonPath: string;
|
|
28
|
-
};
|
|
29
|
-
export type QfaiConfig = {
|
|
30
|
-
paths: QfaiPaths;
|
|
31
|
-
validation: QfaiValidationConfig;
|
|
32
|
-
output: QfaiOutputConfig;
|
|
33
|
-
};
|
|
34
|
-
export type ConfigPathKey = keyof QfaiPaths;
|
|
35
|
-
export type ConfigLoadResult = {
|
|
36
|
-
config: QfaiConfig;
|
|
37
|
-
issues: Issue[];
|
|
38
|
-
configPath: string;
|
|
39
|
-
};
|
|
40
|
-
export declare const defaultConfig: QfaiConfig;
|
|
41
|
-
export declare function getConfigPath(root: string): string;
|
|
42
|
-
export declare function loadConfig(root: string): Promise<ConfigLoadResult>;
|
|
43
|
-
export declare function resolvePath(root: string, config: QfaiConfig, key: ConfigPathKey): string;
|
|
44
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AACnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;AAC7C,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,YAAY,EAAE,OAAO,CAAC;QACtB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,oBAAoB,EAAE,OAAO,CAAC;QAC9B,yBAAyB,EAAE,oBAAoB,CAAC;KACjD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE,gBAAgB,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,UAiC3B,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBxE;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,aAAa,GACjB,MAAM,CAER"}
|
package/dist/core/config.js
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { parse as parseYaml } from "yaml";
|
|
4
|
-
export const defaultConfig = {
|
|
5
|
-
paths: {
|
|
6
|
-
contractsDir: ".qfai/contracts",
|
|
7
|
-
specsDir: ".qfai/specs",
|
|
8
|
-
rulesDir: ".qfai/rules",
|
|
9
|
-
outDir: ".qfai/out",
|
|
10
|
-
promptsDir: ".qfai/prompts",
|
|
11
|
-
srcDir: "src",
|
|
12
|
-
testsDir: "tests",
|
|
13
|
-
},
|
|
14
|
-
validation: {
|
|
15
|
-
failOn: "error",
|
|
16
|
-
require: {
|
|
17
|
-
specSections: [
|
|
18
|
-
"背景",
|
|
19
|
-
"スコープ",
|
|
20
|
-
"非ゴール",
|
|
21
|
-
"用語",
|
|
22
|
-
"前提",
|
|
23
|
-
"決定事項",
|
|
24
|
-
"業務ルール",
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
traceability: {
|
|
28
|
-
brMustHaveSc: true,
|
|
29
|
-
scMustTouchContracts: true,
|
|
30
|
-
allowOrphanContracts: false,
|
|
31
|
-
unknownContractIdSeverity: "error",
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
output: {
|
|
35
|
-
validateJsonPath: ".qfai/out/validate.json",
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
export function getConfigPath(root) {
|
|
39
|
-
return path.join(root, "qfai.config.yaml");
|
|
40
|
-
}
|
|
41
|
-
export async function loadConfig(root) {
|
|
42
|
-
const configPath = getConfigPath(root);
|
|
43
|
-
const issues = [];
|
|
44
|
-
let parsed;
|
|
45
|
-
try {
|
|
46
|
-
const raw = await readFile(configPath, "utf-8");
|
|
47
|
-
parsed = parseYaml(raw);
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
if (isMissingFile(error)) {
|
|
51
|
-
return { config: defaultConfig, issues, configPath };
|
|
52
|
-
}
|
|
53
|
-
issues.push(configIssue(configPath, formatError(error)));
|
|
54
|
-
return { config: defaultConfig, issues, configPath };
|
|
55
|
-
}
|
|
56
|
-
const normalized = normalizeConfig(parsed, configPath, issues);
|
|
57
|
-
return { config: normalized, issues, configPath };
|
|
58
|
-
}
|
|
59
|
-
export function resolvePath(root, config, key) {
|
|
60
|
-
return path.resolve(root, config.paths[key]);
|
|
61
|
-
}
|
|
62
|
-
function normalizeConfig(raw, configPath, issues) {
|
|
63
|
-
if (!isRecord(raw)) {
|
|
64
|
-
issues.push(configIssue(configPath, "設定ファイルの形式が不正です。"));
|
|
65
|
-
return defaultConfig;
|
|
66
|
-
}
|
|
67
|
-
return {
|
|
68
|
-
paths: normalizePaths(raw.paths, configPath, issues),
|
|
69
|
-
validation: normalizeValidation(raw.validation, configPath, issues),
|
|
70
|
-
output: normalizeOutput(raw.output, configPath, issues),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function normalizePaths(raw, configPath, issues) {
|
|
74
|
-
const base = defaultConfig.paths;
|
|
75
|
-
if (!raw) {
|
|
76
|
-
return base;
|
|
77
|
-
}
|
|
78
|
-
if (!isRecord(raw)) {
|
|
79
|
-
issues.push(configIssue(configPath, "paths はオブジェクトである必要があります。"));
|
|
80
|
-
return base;
|
|
81
|
-
}
|
|
82
|
-
return {
|
|
83
|
-
contractsDir: readString(raw.contractsDir, base.contractsDir, "paths.contractsDir", configPath, issues),
|
|
84
|
-
specsDir: readString(raw.specsDir, base.specsDir, "paths.specsDir", configPath, issues),
|
|
85
|
-
rulesDir: readString(raw.rulesDir, base.rulesDir, "paths.rulesDir", configPath, issues),
|
|
86
|
-
outDir: readString(raw.outDir, base.outDir, "paths.outDir", configPath, issues),
|
|
87
|
-
promptsDir: readString(raw.promptsDir, base.promptsDir, "paths.promptsDir", configPath, issues),
|
|
88
|
-
srcDir: readString(raw.srcDir, base.srcDir, "paths.srcDir", configPath, issues),
|
|
89
|
-
testsDir: readString(raw.testsDir, base.testsDir, "paths.testsDir", configPath, issues),
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
function normalizeValidation(raw, configPath, issues) {
|
|
93
|
-
const base = defaultConfig.validation;
|
|
94
|
-
if (!raw) {
|
|
95
|
-
return base;
|
|
96
|
-
}
|
|
97
|
-
if (!isRecord(raw)) {
|
|
98
|
-
issues.push(configIssue(configPath, "validation はオブジェクトである必要があります。"));
|
|
99
|
-
return base;
|
|
100
|
-
}
|
|
101
|
-
let requireRaw;
|
|
102
|
-
if (raw.require === undefined) {
|
|
103
|
-
requireRaw = undefined;
|
|
104
|
-
}
|
|
105
|
-
else if (isRecord(raw.require)) {
|
|
106
|
-
requireRaw = raw.require;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
issues.push(configIssue(configPath, "validation.require はオブジェクトである必要があります。"));
|
|
110
|
-
requireRaw = undefined;
|
|
111
|
-
}
|
|
112
|
-
let traceabilityRaw;
|
|
113
|
-
if (raw.traceability === undefined) {
|
|
114
|
-
traceabilityRaw = undefined;
|
|
115
|
-
}
|
|
116
|
-
else if (isRecord(raw.traceability)) {
|
|
117
|
-
traceabilityRaw = raw.traceability;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
issues.push(configIssue(configPath, "validation.traceability はオブジェクトである必要があります。"));
|
|
121
|
-
traceabilityRaw = undefined;
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
failOn: readFailOn(raw.failOn, base.failOn, "validation.failOn", configPath, issues),
|
|
125
|
-
require: {
|
|
126
|
-
specSections: readStringArray(requireRaw?.specSections, base.require.specSections, "validation.require.specSections", configPath, issues),
|
|
127
|
-
},
|
|
128
|
-
traceability: {
|
|
129
|
-
brMustHaveSc: readBoolean(traceabilityRaw?.brMustHaveSc, base.traceability.brMustHaveSc, "validation.traceability.brMustHaveSc", configPath, issues),
|
|
130
|
-
scMustTouchContracts: readBoolean(traceabilityRaw?.scMustTouchContracts, base.traceability.scMustTouchContracts, "validation.traceability.scMustTouchContracts", configPath, issues),
|
|
131
|
-
allowOrphanContracts: readBoolean(traceabilityRaw?.allowOrphanContracts, base.traceability.allowOrphanContracts, "validation.traceability.allowOrphanContracts", configPath, issues),
|
|
132
|
-
unknownContractIdSeverity: readTraceabilitySeverity(traceabilityRaw?.unknownContractIdSeverity, base.traceability.unknownContractIdSeverity, "validation.traceability.unknownContractIdSeverity", configPath, issues),
|
|
133
|
-
},
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
function normalizeOutput(raw, configPath, issues) {
|
|
137
|
-
const base = defaultConfig.output;
|
|
138
|
-
if (!raw) {
|
|
139
|
-
return base;
|
|
140
|
-
}
|
|
141
|
-
if (!isRecord(raw)) {
|
|
142
|
-
issues.push(configIssue(configPath, "output はオブジェクトである必要があります。"));
|
|
143
|
-
return base;
|
|
144
|
-
}
|
|
145
|
-
return {
|
|
146
|
-
validateJsonPath: readString(raw.validateJsonPath, base.validateJsonPath, "output.validateJsonPath", configPath, issues),
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
function readString(value, fallback, label, configPath, issues) {
|
|
150
|
-
if (typeof value === "string" && value.trim().length > 0) {
|
|
151
|
-
return value;
|
|
152
|
-
}
|
|
153
|
-
if (value !== undefined) {
|
|
154
|
-
issues.push(configIssue(configPath, `${label} は文字列である必要があります。`));
|
|
155
|
-
}
|
|
156
|
-
return fallback;
|
|
157
|
-
}
|
|
158
|
-
function readStringArray(value, fallback, label, configPath, issues) {
|
|
159
|
-
if (Array.isArray(value) && value.every((item) => typeof item === "string")) {
|
|
160
|
-
return value;
|
|
161
|
-
}
|
|
162
|
-
if (value !== undefined) {
|
|
163
|
-
issues.push(configIssue(configPath, `${label} は文字列配列である必要があります。`));
|
|
164
|
-
}
|
|
165
|
-
return fallback;
|
|
166
|
-
}
|
|
167
|
-
function readBoolean(value, fallback, label, configPath, issues) {
|
|
168
|
-
if (typeof value === "boolean") {
|
|
169
|
-
return value;
|
|
170
|
-
}
|
|
171
|
-
if (value !== undefined) {
|
|
172
|
-
issues.push(configIssue(configPath, `${label} は真偽値である必要があります。`));
|
|
173
|
-
}
|
|
174
|
-
return fallback;
|
|
175
|
-
}
|
|
176
|
-
function readFailOn(value, fallback, label, configPath, issues) {
|
|
177
|
-
if (value === "never" || value === "warning" || value === "error") {
|
|
178
|
-
return value;
|
|
179
|
-
}
|
|
180
|
-
if (value !== undefined) {
|
|
181
|
-
issues.push(configIssue(configPath, `${label} は never|warning|error のいずれかである必要があります。`));
|
|
182
|
-
}
|
|
183
|
-
return fallback;
|
|
184
|
-
}
|
|
185
|
-
function readTraceabilitySeverity(value, fallback, label, configPath, issues) {
|
|
186
|
-
if (value === "warning" || value === "error") {
|
|
187
|
-
return value;
|
|
188
|
-
}
|
|
189
|
-
if (value !== undefined) {
|
|
190
|
-
issues.push(configIssue(configPath, `${label} は warning|error のいずれかである必要があります。`));
|
|
191
|
-
}
|
|
192
|
-
return fallback;
|
|
193
|
-
}
|
|
194
|
-
function configIssue(file, message) {
|
|
195
|
-
return {
|
|
196
|
-
code: "QFAI_CONFIG_INVALID",
|
|
197
|
-
severity: "error",
|
|
198
|
-
message,
|
|
199
|
-
file,
|
|
200
|
-
rule: "config.invalid",
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
function isMissingFile(error) {
|
|
204
|
-
if (error && typeof error === "object" && "code" in error) {
|
|
205
|
-
return error.code === "ENOENT";
|
|
206
|
-
}
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
function formatError(error) {
|
|
210
|
-
if (error instanceof Error) {
|
|
211
|
-
return error.message;
|
|
212
|
-
}
|
|
213
|
-
return String(error);
|
|
214
|
-
}
|
|
215
|
-
function isRecord(value) {
|
|
216
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
217
|
-
}
|
|
218
|
-
//# sourceMappingURL=config.js.map
|
package/dist/core/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { QfaiConfig } from "./config.js";
|
|
2
|
-
export type ContractIndex = {
|
|
3
|
-
ids: Set<string>;
|
|
4
|
-
idToFiles: Map<string, Set<string>>;
|
|
5
|
-
files: {
|
|
6
|
-
ui: string[];
|
|
7
|
-
api: string[];
|
|
8
|
-
data: string[];
|
|
9
|
-
};
|
|
10
|
-
structuredParseFailedFiles: Set<string>;
|
|
11
|
-
};
|
|
12
|
-
export declare function buildContractIndex(root: string, config: QfaiConfig): Promise<ContractIndex>;
|
|
13
|
-
//# sourceMappingURL=contractIndex.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contractIndex.d.ts","sourceRoot":"","sources":["../../src/core/contractIndex.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAc9C,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACpC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACvD,0BAA0B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACzC,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,aAAa,CAAC,CAwBxB"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { resolvePath } from "./config.js";
|
|
4
|
-
import { collectApiContractFiles, collectDataContractFiles, collectUiContractFiles, } from "./discovery.js";
|
|
5
|
-
import { extractApiContractIds, extractUiContractIds, parseStructuredContract, } from "./contracts.js";
|
|
6
|
-
import { extractIds } from "./ids.js";
|
|
7
|
-
export async function buildContractIndex(root, config) {
|
|
8
|
-
const contractsRoot = resolvePath(root, config, "contractsDir");
|
|
9
|
-
const uiRoot = path.join(contractsRoot, "ui");
|
|
10
|
-
const apiRoot = path.join(contractsRoot, "api");
|
|
11
|
-
const dataRoot = path.join(contractsRoot, "db");
|
|
12
|
-
const [uiFiles, apiFiles, dataFiles] = await Promise.all([
|
|
13
|
-
collectUiContractFiles(uiRoot),
|
|
14
|
-
collectApiContractFiles(apiRoot),
|
|
15
|
-
collectDataContractFiles(dataRoot),
|
|
16
|
-
]);
|
|
17
|
-
const index = {
|
|
18
|
-
ids: new Set(),
|
|
19
|
-
idToFiles: new Map(),
|
|
20
|
-
files: { ui: uiFiles, api: apiFiles, data: dataFiles },
|
|
21
|
-
structuredParseFailedFiles: new Set(),
|
|
22
|
-
};
|
|
23
|
-
await indexUiContracts(uiFiles, index);
|
|
24
|
-
await indexApiContracts(apiFiles, index);
|
|
25
|
-
await indexDataContracts(dataFiles, index);
|
|
26
|
-
return index;
|
|
27
|
-
}
|
|
28
|
-
async function indexUiContracts(files, index) {
|
|
29
|
-
for (const file of files) {
|
|
30
|
-
const text = await readFile(file, "utf-8");
|
|
31
|
-
try {
|
|
32
|
-
const doc = parseStructuredContract(file, text);
|
|
33
|
-
extractUiContractIds(doc).forEach((id) => record(index, id, file));
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
index.structuredParseFailedFiles.add(file);
|
|
37
|
-
extractIds(text, "UI").forEach((id) => record(index, id, file));
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async function indexApiContracts(files, index) {
|
|
42
|
-
for (const file of files) {
|
|
43
|
-
const text = await readFile(file, "utf-8");
|
|
44
|
-
try {
|
|
45
|
-
const doc = parseStructuredContract(file, text);
|
|
46
|
-
extractApiContractIds(doc).forEach((id) => record(index, id, file));
|
|
47
|
-
}
|
|
48
|
-
catch {
|
|
49
|
-
index.structuredParseFailedFiles.add(file);
|
|
50
|
-
extractIds(text, "API").forEach((id) => record(index, id, file));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async function indexDataContracts(files, index) {
|
|
55
|
-
for (const file of files) {
|
|
56
|
-
const text = await readFile(file, "utf-8");
|
|
57
|
-
extractIds(text, "DATA").forEach((id) => record(index, id, file));
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
function record(index, id, file) {
|
|
61
|
-
index.ids.add(id);
|
|
62
|
-
const current = index.idToFiles.get(id) ?? new Set();
|
|
63
|
-
current.add(file);
|
|
64
|
-
index.idToFiles.set(id, current);
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=contractIndex.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contractIndex.js","sourceRoot":"","sources":["../../src/core/contractIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAStC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,MAAkB;IAElB,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAChE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAEhD,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvD,sBAAsB,CAAC,MAAM,CAAC;QAC9B,uBAAuB,CAAC,OAAO,CAAC;QAChC,wBAAwB,CAAC,QAAQ,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAkB;QAC3B,GAAG,EAAE,IAAI,GAAG,EAAU;QACtB,SAAS,EAAE,IAAI,GAAG,EAAuB;QACzC,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;QACtD,0BAA0B,EAAE,IAAI,GAAG,EAAU;KAC9C,CAAC;IAEF,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAE3C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,KAAe,EACf,KAAoB;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChD,oBAAoB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,KAAe,EACf,KAAoB;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChD,qBAAqB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAe,EACf,KAAoB;IAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAoB,EAAE,EAAU,EAAE,IAAY;IAC5D,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/core/contracts.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare function parseStructuredContract(file: string, text: string): Record<string, unknown>;
|
|
2
|
-
export declare function extractUiContractIds(doc: Record<string, unknown>): string[];
|
|
3
|
-
export declare function extractApiContractIds(doc: Record<string, unknown>): string[];
|
|
4
|
-
export declare function collectOperationIds(value: unknown, out: Set<string>): void;
|
|
5
|
-
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/core/contracts.ts"],"names":[],"mappings":"AAMA,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAG3E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAS5E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAkB1E"}
|
package/dist/core/contracts.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import path from "node:path";
|
|
2
|
-
import { parse as parseYaml } from "yaml";
|
|
3
|
-
import { extractIds } from "./ids.js";
|
|
4
|
-
export function parseStructuredContract(file, text) {
|
|
5
|
-
const ext = path.extname(file).toLowerCase();
|
|
6
|
-
if (ext === ".json") {
|
|
7
|
-
return JSON.parse(text);
|
|
8
|
-
}
|
|
9
|
-
return parseYaml(text);
|
|
10
|
-
}
|
|
11
|
-
export function extractUiContractIds(doc) {
|
|
12
|
-
const id = typeof doc.id === "string" ? doc.id : "";
|
|
13
|
-
return extractIds(id, "UI");
|
|
14
|
-
}
|
|
15
|
-
export function extractApiContractIds(doc) {
|
|
16
|
-
const operationIds = new Set();
|
|
17
|
-
collectOperationIds(doc, operationIds);
|
|
18
|
-
const ids = new Set();
|
|
19
|
-
for (const operationId of operationIds) {
|
|
20
|
-
extractIds(operationId, "API").forEach((id) => ids.add(id));
|
|
21
|
-
}
|
|
22
|
-
return Array.from(ids);
|
|
23
|
-
}
|
|
24
|
-
export function collectOperationIds(value, out) {
|
|
25
|
-
if (!value || typeof value !== "object") {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (Array.isArray(value)) {
|
|
29
|
-
for (const item of value) {
|
|
30
|
-
collectOperationIds(item, out);
|
|
31
|
-
}
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
for (const [key, entry] of Object.entries(value)) {
|
|
35
|
-
if (key === "operationId" && typeof entry === "string") {
|
|
36
|
-
out.add(entry);
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
collectOperationIds(entry, out);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=contracts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/core/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,IAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAA4B,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAA4B;IAC/D,MAAM,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAA4B;IAChE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc,EAAE,GAAgB;IAClE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,aAAa,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
|
package/dist/core/discovery.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export type ContractFiles = {
|
|
2
|
-
api: string[];
|
|
3
|
-
ui: string[];
|
|
4
|
-
db: string[];
|
|
5
|
-
};
|
|
6
|
-
export declare function collectSpecPackDirs(specsRoot: string): Promise<string[]>;
|
|
7
|
-
export declare function collectSpecFiles(specsRoot: string): Promise<string[]>;
|
|
8
|
-
export declare function collectDeltaFiles(specsRoot: string): Promise<string[]>;
|
|
9
|
-
export declare function collectScenarioFiles(specsRoot: string): Promise<string[]>;
|
|
10
|
-
export declare function collectUiContractFiles(uiRoot: string): Promise<string[]>;
|
|
11
|
-
export declare function collectApiContractFiles(apiRoot: string): Promise<string[]>;
|
|
12
|
-
export declare function collectDataContractFiles(dataRoot: string): Promise<string[]>;
|
|
13
|
-
export declare function collectContractFiles(uiRoot: string, apiRoot: string, dataRoot: string): Promise<ContractFiles>;
|
|
14
|
-
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;CACd,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG3E;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAG5E;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CAOxB"}
|
package/dist/core/discovery.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { access } from "node:fs/promises";
|
|
2
|
-
import { collectFiles } from "./fs.js";
|
|
3
|
-
import { collectSpecEntries } from "./specLayout.js";
|
|
4
|
-
export async function collectSpecPackDirs(specsRoot) {
|
|
5
|
-
const entries = await collectSpecEntries(specsRoot);
|
|
6
|
-
return entries.map((entry) => entry.dir);
|
|
7
|
-
}
|
|
8
|
-
export async function collectSpecFiles(specsRoot) {
|
|
9
|
-
const entries = await collectSpecEntries(specsRoot);
|
|
10
|
-
return filterExisting(entries.map((entry) => entry.specPath));
|
|
11
|
-
}
|
|
12
|
-
export async function collectDeltaFiles(specsRoot) {
|
|
13
|
-
const entries = await collectSpecEntries(specsRoot);
|
|
14
|
-
return filterExisting(entries.map((entry) => entry.deltaPath));
|
|
15
|
-
}
|
|
16
|
-
export async function collectScenarioFiles(specsRoot) {
|
|
17
|
-
const entries = await collectSpecEntries(specsRoot);
|
|
18
|
-
return filterExisting(entries.map((entry) => entry.scenarioPath));
|
|
19
|
-
}
|
|
20
|
-
export async function collectUiContractFiles(uiRoot) {
|
|
21
|
-
return collectFiles(uiRoot, { extensions: [".yaml", ".yml"] });
|
|
22
|
-
}
|
|
23
|
-
export async function collectApiContractFiles(apiRoot) {
|
|
24
|
-
return collectFiles(apiRoot, { extensions: [".yaml", ".yml", ".json"] });
|
|
25
|
-
}
|
|
26
|
-
export async function collectDataContractFiles(dataRoot) {
|
|
27
|
-
return collectFiles(dataRoot, { extensions: [".sql"] });
|
|
28
|
-
}
|
|
29
|
-
export async function collectContractFiles(uiRoot, apiRoot, dataRoot) {
|
|
30
|
-
const [ui, api, db] = await Promise.all([
|
|
31
|
-
collectUiContractFiles(uiRoot),
|
|
32
|
-
collectApiContractFiles(apiRoot),
|
|
33
|
-
collectDataContractFiles(dataRoot),
|
|
34
|
-
]);
|
|
35
|
-
return { ui, api, db };
|
|
36
|
-
}
|
|
37
|
-
async function filterExisting(files) {
|
|
38
|
-
const existing = [];
|
|
39
|
-
for (const file of files) {
|
|
40
|
-
if (await exists(file)) {
|
|
41
|
-
existing.push(file);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return existing;
|
|
45
|
-
}
|
|
46
|
-
async function exists(target) {
|
|
47
|
-
try {
|
|
48
|
-
await access(target);
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=discovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../src/core/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/core/fs.d.ts
DELETED
package/dist/core/fs.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/core/fs.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB"}
|
package/dist/core/fs.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { access, readdir } from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
const DEFAULT_IGNORE_DIRS = new Set([
|
|
4
|
-
"node_modules",
|
|
5
|
-
".git",
|
|
6
|
-
"dist",
|
|
7
|
-
".pnpm",
|
|
8
|
-
"tmp",
|
|
9
|
-
".mcp-tools",
|
|
10
|
-
]);
|
|
11
|
-
export async function collectFiles(root, options = {}) {
|
|
12
|
-
const entries = [];
|
|
13
|
-
if (!(await exists(root))) {
|
|
14
|
-
return entries;
|
|
15
|
-
}
|
|
16
|
-
const ignoreDirs = new Set([
|
|
17
|
-
...DEFAULT_IGNORE_DIRS,
|
|
18
|
-
...(options.ignoreDirs ?? []),
|
|
19
|
-
]);
|
|
20
|
-
const extensions = options.extensions?.map((ext) => ext.toLowerCase()) ?? [];
|
|
21
|
-
await walk(root, root, ignoreDirs, extensions, entries);
|
|
22
|
-
return entries;
|
|
23
|
-
}
|
|
24
|
-
async function walk(base, current, ignoreDirs, extensions, out) {
|
|
25
|
-
const items = await readdir(current, { withFileTypes: true });
|
|
26
|
-
for (const item of items) {
|
|
27
|
-
const fullPath = path.join(current, item.name);
|
|
28
|
-
if (item.isDirectory()) {
|
|
29
|
-
if (ignoreDirs.has(item.name)) {
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
await walk(base, fullPath, ignoreDirs, extensions, out);
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
if (item.isFile()) {
|
|
36
|
-
if (extensions.length > 0) {
|
|
37
|
-
const ext = path.extname(item.name).toLowerCase();
|
|
38
|
-
if (!extensions.includes(ext)) {
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
out.push(fullPath);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
async function exists(target) {
|
|
47
|
-
try {
|
|
48
|
-
await access(target);
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=fs.js.map
|