qfai 0.4.6 → 0.4.9

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.
Files changed (156) hide show
  1. package/README.md +3 -1
  2. package/assets/init/.qfai/promptpack/steering/traceability.md +10 -1
  3. package/dist/cli/index.cjs +2 -2
  4. package/dist/cli/index.d.ts +0 -2
  5. package/dist/cli/index.mjs +2 -2
  6. package/dist/index.cjs +2 -2
  7. package/dist/index.d.ts +167 -2
  8. package/dist/index.mjs +2 -2
  9. package/package.json +3 -1
  10. package/dist/cli/commands/init.d.ts +0 -8
  11. package/dist/cli/commands/init.d.ts.map +0 -1
  12. package/dist/cli/commands/init.js +0 -30
  13. package/dist/cli/commands/init.js.map +0 -1
  14. package/dist/cli/commands/report.d.ts +0 -7
  15. package/dist/cli/commands/report.d.ts.map +0 -1
  16. package/dist/cli/commands/report.js +0 -108
  17. package/dist/cli/commands/report.js.map +0 -1
  18. package/dist/cli/commands/validate.d.ts +0 -9
  19. package/dist/cli/commands/validate.d.ts.map +0 -1
  20. package/dist/cli/commands/validate.js +0 -57
  21. package/dist/cli/commands/validate.js.map +0 -1
  22. package/dist/cli/index.d.ts.map +0 -1
  23. package/dist/cli/index.js +0 -7
  24. package/dist/cli/index.js.map +0 -1
  25. package/dist/cli/lib/args.d.ts +0 -18
  26. package/dist/cli/lib/args.d.ts.map +0 -1
  27. package/dist/cli/lib/args.js +0 -98
  28. package/dist/cli/lib/args.js.map +0 -1
  29. package/dist/cli/lib/assets.d.ts +0 -2
  30. package/dist/cli/lib/assets.d.ts.map +0 -1
  31. package/dist/cli/lib/assets.js +0 -24
  32. package/dist/cli/lib/assets.js.map +0 -1
  33. package/dist/cli/lib/failOn.d.ts +0 -5
  34. package/dist/cli/lib/failOn.d.ts.map +0 -1
  35. package/dist/cli/lib/failOn.js +0 -10
  36. package/dist/cli/lib/failOn.js.map +0 -1
  37. package/dist/cli/lib/fs.d.ts +0 -11
  38. package/dist/cli/lib/fs.d.ts.map +0 -1
  39. package/dist/cli/lib/fs.js +0 -91
  40. package/dist/cli/lib/fs.js.map +0 -1
  41. package/dist/cli/lib/logger.d.ts +0 -4
  42. package/dist/cli/lib/logger.d.ts.map +0 -1
  43. package/dist/cli/lib/logger.js +0 -10
  44. package/dist/cli/lib/logger.js.map +0 -1
  45. package/dist/cli/main.d.ts +0 -2
  46. package/dist/cli/main.d.ts.map +0 -1
  47. package/dist/cli/main.js +0 -66
  48. package/dist/cli/main.js.map +0 -1
  49. package/dist/core/config.d.ts +0 -47
  50. package/dist/core/config.d.ts.map +0 -1
  51. package/dist/core/config.js +0 -224
  52. package/dist/core/config.js.map +0 -1
  53. package/dist/core/contractIndex.d.ts +0 -12
  54. package/dist/core/contractIndex.d.ts.map +0 -1
  55. package/dist/core/contractIndex.js +0 -38
  56. package/dist/core/contractIndex.js.map +0 -1
  57. package/dist/core/contracts.d.ts +0 -5
  58. package/dist/core/contracts.d.ts.map +0 -1
  59. package/dist/core/contracts.js +0 -42
  60. package/dist/core/contracts.js.map +0 -1
  61. package/dist/core/contractsDecl.d.ts +0 -3
  62. package/dist/core/contractsDecl.d.ts.map +0 -1
  63. package/dist/core/contractsDecl.js +0 -19
  64. package/dist/core/contractsDecl.js.map +0 -1
  65. package/dist/core/discovery.d.ts +0 -14
  66. package/dist/core/discovery.d.ts.map +0 -1
  67. package/dist/core/discovery.js +0 -55
  68. package/dist/core/discovery.js.map +0 -1
  69. package/dist/core/fs.d.ts +0 -11
  70. package/dist/core/fs.d.ts.map +0 -1
  71. package/dist/core/fs.js +0 -68
  72. package/dist/core/fs.js.map +0 -1
  73. package/dist/core/gherkin/parse.d.ts +0 -7
  74. package/dist/core/gherkin/parse.d.ts.map +0 -1
  75. package/dist/core/gherkin/parse.js +0 -25
  76. package/dist/core/gherkin/parse.js.map +0 -1
  77. package/dist/core/ids.d.ts +0 -6
  78. package/dist/core/ids.d.ts.map +0 -1
  79. package/dist/core/ids.js +0 -52
  80. package/dist/core/ids.js.map +0 -1
  81. package/dist/core/index.d.ts +0 -13
  82. package/dist/core/index.d.ts.map +0 -1
  83. package/dist/core/index.js +0 -13
  84. package/dist/core/index.js.map +0 -1
  85. package/dist/core/parse/adr.d.ts +0 -13
  86. package/dist/core/parse/adr.d.ts.map +0 -1
  87. package/dist/core/parse/adr.js +0 -33
  88. package/dist/core/parse/adr.js.map +0 -1
  89. package/dist/core/parse/gherkin.d.ts +0 -12
  90. package/dist/core/parse/gherkin.d.ts.map +0 -1
  91. package/dist/core/parse/gherkin.js +0 -22
  92. package/dist/core/parse/gherkin.js.map +0 -1
  93. package/dist/core/parse/markdown.d.ts +0 -14
  94. package/dist/core/parse/markdown.d.ts.map +0 -1
  95. package/dist/core/parse/markdown.js +0 -45
  96. package/dist/core/parse/markdown.js.map +0 -1
  97. package/dist/core/parse/spec.d.ts +0 -36
  98. package/dist/core/parse/spec.d.ts.map +0 -1
  99. package/dist/core/parse/spec.js +0 -123
  100. package/dist/core/parse/spec.js.map +0 -1
  101. package/dist/core/report.d.ts +0 -55
  102. package/dist/core/report.d.ts.map +0 -1
  103. package/dist/core/report.js +0 -393
  104. package/dist/core/report.js.map +0 -1
  105. package/dist/core/scenarioModel.d.ts +0 -33
  106. package/dist/core/scenarioModel.d.ts.map +0 -1
  107. package/dist/core/scenarioModel.js +0 -128
  108. package/dist/core/scenarioModel.js.map +0 -1
  109. package/dist/core/specLayout.d.ts +0 -8
  110. package/dist/core/specLayout.d.ts.map +0 -1
  111. package/dist/core/specLayout.js +0 -36
  112. package/dist/core/specLayout.js.map +0 -1
  113. package/dist/core/traceability.d.ts +0 -26
  114. package/dist/core/traceability.d.ts.map +0 -1
  115. package/dist/core/traceability.js +0 -157
  116. package/dist/core/traceability.js.map +0 -1
  117. package/dist/core/types.d.ts +0 -31
  118. package/dist/core/types.d.ts.map +0 -1
  119. package/dist/core/types.js +0 -2
  120. package/dist/core/types.js.map +0 -1
  121. package/dist/core/validate.d.ts +0 -4
  122. package/dist/core/validate.d.ts.map +0 -1
  123. package/dist/core/validate.js +0 -45
  124. package/dist/core/validate.js.map +0 -1
  125. package/dist/core/validators/contracts.d.ts +0 -5
  126. package/dist/core/validators/contracts.d.ts.map +0 -1
  127. package/dist/core/validators/contracts.js +0 -189
  128. package/dist/core/validators/contracts.js.map +0 -1
  129. package/dist/core/validators/delta.d.ts +0 -4
  130. package/dist/core/validators/delta.d.ts.map +0 -1
  131. package/dist/core/validators/delta.js +0 -68
  132. package/dist/core/validators/delta.js.map +0 -1
  133. package/dist/core/validators/ids.d.ts +0 -4
  134. package/dist/core/validators/ids.d.ts.map +0 -1
  135. package/dist/core/validators/ids.js +0 -88
  136. package/dist/core/validators/ids.js.map +0 -1
  137. package/dist/core/validators/scenario.d.ts +0 -5
  138. package/dist/core/validators/scenario.d.ts.map +0 -1
  139. package/dist/core/validators/scenario.js +0 -127
  140. package/dist/core/validators/scenario.js.map +0 -1
  141. package/dist/core/validators/spec.d.ts +0 -5
  142. package/dist/core/validators/spec.d.ts.map +0 -1
  143. package/dist/core/validators/spec.js +0 -94
  144. package/dist/core/validators/spec.js.map +0 -1
  145. package/dist/core/validators/traceability.d.ts +0 -4
  146. package/dist/core/validators/traceability.d.ts.map +0 -1
  147. package/dist/core/validators/traceability.js +0 -222
  148. package/dist/core/validators/traceability.js.map +0 -1
  149. package/dist/core/version.d.ts +0 -2
  150. package/dist/core/version.d.ts.map +0 -1
  151. package/dist/core/version.js +0 -25
  152. package/dist/core/version.js.map +0 -1
  153. package/dist/index.d.ts.map +0 -1
  154. package/dist/index.js +0 -2
  155. package/dist/index.js.map +0 -1
  156. package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md CHANGED
@@ -42,7 +42,9 @@ Contract ID prefix は `UI-0001` / `API-0001` / `DB-0001` です。
42
42
  契約関連の検証は `validation.traceability` で制御します。
43
43
 
44
44
  - `validation.traceability.allowOrphanContracts`: Spec から参照されない契約の許可(default: `false`)
45
- - `validation.traceability.unknownContractIdSeverity`: Spec が参照した契約 ID が存在しない場合の severity(default: `error`、`error` / `warning` のみ)
45
+ - `validation.traceability.unknownContractIdSeverity`: Scenario が参照した契約 ID が存在しない場合の severity(default: `error`、`error` / `warning` のみ)
46
+ - Spec の `QFAI-CONTRACT-REF` が未知 ID を参照した場合は常に error(`QFAI-TRACE-021`)
47
+ - `unknownContractIdSeverity` は Scenario 側(`QFAI-TRACE-008`)のみを制御
46
48
 
47
49
  `npx qfai init` は `.qfai/contracts/` 配下に UI/API/DB のサンプルを生成します。
48
50
 
@@ -7,4 +7,13 @@
7
7
  - テスト/コードは QFAI:SC-xxxx で SC を参照する
8
8
  - Spec はテスト/実装(src/tests)を参照しない
9
9
 
10
- 違反は CI で検出される前提で運用する。
10
+ ## CIで検出する範囲
11
+
12
+ - BR→SC のトレーサビリティ
13
+ - Spec→Contract の参照(QFAI-CONTRACT-REF/ID形式)
14
+ - SC→Test の参照(QFAI:SC-xxxx/ID形式)
15
+ - 参照IDの形式などの整合
16
+
17
+ ## CIで検出しないため運用で担保する範囲
18
+
19
+ - Spec→下流参照禁止(Spec がテスト/実装を参照しないこと)
@@ -1280,8 +1280,8 @@ var import_promises8 = require("fs/promises");
1280
1280
  var import_node_path9 = __toESM(require("path"), 1);
1281
1281
  var import_node_url2 = require("url");
1282
1282
  async function resolveToolVersion() {
1283
- if ("0.4.6".length > 0) {
1284
- return "0.4.6";
1283
+ if ("0.4.9".length > 0) {
1284
+ return "0.4.9";
1285
1285
  }
1286
1286
  try {
1287
1287
  const packagePath = resolvePackageJsonPath();
@@ -1,3 +1 @@
1
1
  #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=index.d.ts.map
@@ -1261,8 +1261,8 @@ import { readFile as readFile4 } from "fs/promises";
1261
1261
  import path9 from "path";
1262
1262
  import { fileURLToPath as fileURLToPath2 } from "url";
1263
1263
  async function resolveToolVersion() {
1264
- if ("0.4.6".length > 0) {
1265
- return "0.4.6";
1264
+ if ("0.4.9".length > 0) {
1265
+ return "0.4.9";
1266
1266
  }
1267
1267
  try {
1268
1268
  const packagePath = resolvePackageJsonPath();
package/dist/index.cjs CHANGED
@@ -1154,8 +1154,8 @@ var import_promises7 = require("fs/promises");
1154
1154
  var import_node_path6 = __toESM(require("path"), 1);
1155
1155
  var import_node_url = require("url");
1156
1156
  async function resolveToolVersion() {
1157
- if ("0.4.6".length > 0) {
1158
- return "0.4.6";
1157
+ if ("0.4.9".length > 0) {
1158
+ return "0.4.9";
1159
1159
  }
1160
1160
  try {
1161
1161
  const packagePath = resolvePackageJsonPath();
package/dist/index.d.ts CHANGED
@@ -1,2 +1,167 @@
1
- export * from "./core/index.js";
2
- //# sourceMappingURL=index.d.ts.map
1
+ type ScCoverage = {
2
+ total: number;
3
+ covered: number;
4
+ missing: number;
5
+ missingIds: string[];
6
+ refs: Record<string, string[]>;
7
+ };
8
+ type TestFileScan = {
9
+ globs: string[];
10
+ excludeGlobs: string[];
11
+ matchedFileCount: number;
12
+ };
13
+
14
+ type IssueSeverity = "info" | "warning" | "error";
15
+ type IssueLocation = {
16
+ line: number;
17
+ column?: number;
18
+ };
19
+ type Issue = {
20
+ code: string;
21
+ severity: IssueSeverity;
22
+ message: string;
23
+ file?: string;
24
+ refs?: string[];
25
+ rule?: string;
26
+ loc?: IssueLocation;
27
+ };
28
+ type ValidationCounts = {
29
+ info: number;
30
+ warning: number;
31
+ error: number;
32
+ };
33
+ type ValidationTraceability = {
34
+ sc: ScCoverage;
35
+ testFiles: TestFileScan;
36
+ };
37
+ type ValidationResult = {
38
+ toolVersion: string;
39
+ issues: Issue[];
40
+ counts: ValidationCounts;
41
+ traceability: ValidationTraceability;
42
+ };
43
+
44
+ type FailOn = "never" | "warning" | "error";
45
+ type OutputFormat = "text" | "github";
46
+ type TraceabilitySeverity = "warning" | "error";
47
+ type QfaiPaths = {
48
+ contractsDir: string;
49
+ specsDir: string;
50
+ rulesDir: string;
51
+ outDir: string;
52
+ promptsDir: string;
53
+ srcDir: string;
54
+ testsDir: string;
55
+ };
56
+ type QfaiValidationConfig = {
57
+ failOn: FailOn;
58
+ require: {
59
+ specSections: string[];
60
+ };
61
+ traceability: {
62
+ brMustHaveSc: boolean;
63
+ scMustHaveTest: boolean;
64
+ testFileGlobs: string[];
65
+ testFileExcludeGlobs: string[];
66
+ scNoTestSeverity: TraceabilitySeverity;
67
+ allowOrphanContracts: boolean;
68
+ unknownContractIdSeverity: TraceabilitySeverity;
69
+ };
70
+ };
71
+ type QfaiOutputConfig = {
72
+ validateJsonPath: string;
73
+ };
74
+ type QfaiConfig = {
75
+ paths: QfaiPaths;
76
+ validation: QfaiValidationConfig;
77
+ output: QfaiOutputConfig;
78
+ };
79
+ type ConfigPathKey = keyof QfaiPaths;
80
+ type ConfigLoadResult = {
81
+ config: QfaiConfig;
82
+ issues: Issue[];
83
+ configPath: string;
84
+ };
85
+ declare const defaultConfig: QfaiConfig;
86
+ declare function getConfigPath(root: string): string;
87
+ declare function loadConfig(root: string): Promise<ConfigLoadResult>;
88
+ declare function resolvePath(root: string, config: QfaiConfig, key: ConfigPathKey): string;
89
+
90
+ type IdPrefix = "SPEC" | "BR" | "SC" | "UI" | "API" | "DB";
91
+ type IdFormatPrefix = IdPrefix | "ADR";
92
+ declare function extractIds(text: string, prefix: IdPrefix): string[];
93
+ declare function extractAllIds(text: string): string[];
94
+ declare function extractInvalidIds(text: string, prefixes: IdFormatPrefix[]): string[];
95
+
96
+ type ReportSummary = {
97
+ specs: number;
98
+ scenarios: number;
99
+ contracts: {
100
+ api: number;
101
+ ui: number;
102
+ db: number;
103
+ };
104
+ counts: ValidationCounts;
105
+ };
106
+ type ReportIds = {
107
+ spec: string[];
108
+ br: string[];
109
+ sc: string[];
110
+ ui: string[];
111
+ api: string[];
112
+ db: string[];
113
+ };
114
+ type ReportContractCoverage = {
115
+ total: number;
116
+ referenced: number;
117
+ orphan: number;
118
+ idToSpecs: Record<string, string[]>;
119
+ };
120
+ type ReportSpecCoverage = {
121
+ contractRefMissing: number;
122
+ specToContractIds: Record<string, string[]>;
123
+ };
124
+ type ReportTraceability = {
125
+ upstreamIdsFound: number;
126
+ referencedInCodeOrTests: boolean;
127
+ sc: ScCoverage;
128
+ scSources: Record<string, string[]>;
129
+ testFiles: TestFileScan;
130
+ contracts: ReportContractCoverage;
131
+ specs: ReportSpecCoverage;
132
+ };
133
+ type ReportData = {
134
+ tool: "qfai";
135
+ version: string;
136
+ generatedAt: string;
137
+ root: string;
138
+ configPath: string;
139
+ summary: ReportSummary;
140
+ ids: ReportIds;
141
+ traceability: ReportTraceability;
142
+ issues: Issue[];
143
+ };
144
+ declare function createReportData(root: string, validation?: ValidationResult, configResult?: ConfigLoadResult): Promise<ReportData>;
145
+ declare function formatReportMarkdown(data: ReportData): string;
146
+ declare function formatReportJson(data: ReportData): string;
147
+
148
+ declare function validateProject(root: string, configResult?: ConfigLoadResult): Promise<ValidationResult>;
149
+
150
+ declare function resolveToolVersion(): Promise<string>;
151
+
152
+ declare function validateContracts(root: string, config: QfaiConfig): Promise<Issue[]>;
153
+ declare function lintSql(text: string, file: string): Issue[];
154
+
155
+ declare function validateDeltas(root: string, config: QfaiConfig): Promise<Issue[]>;
156
+
157
+ declare function validateDefinedIds(root: string, config: QfaiConfig): Promise<Issue[]>;
158
+
159
+ declare function validateScenarios(root: string, config: QfaiConfig): Promise<Issue[]>;
160
+ declare function validateScenarioContent(text: string, file: string): Issue[];
161
+
162
+ declare function validateSpecs(root: string, config: QfaiConfig): Promise<Issue[]>;
163
+ declare function validateSpecContent(text: string, file: string, requiredSections: string[]): Issue[];
164
+
165
+ declare function validateTraceability(root: string, config: QfaiConfig): Promise<Issue[]>;
166
+
167
+ export { type ConfigLoadResult, type ConfigPathKey, type FailOn, type IdFormatPrefix, type IdPrefix, type Issue, type IssueLocation, type IssueSeverity, type OutputFormat, type QfaiConfig, type QfaiOutputConfig, type QfaiPaths, type QfaiValidationConfig, type ReportContractCoverage, type ReportData, type ReportIds, type ReportSpecCoverage, type ReportSummary, type ReportTraceability, type TraceabilitySeverity, type ValidationCounts, type ValidationResult, type ValidationTraceability, createReportData, defaultConfig, extractAllIds, extractIds, extractInvalidIds, formatReportJson, formatReportMarkdown, getConfigPath, lintSql, loadConfig, resolvePath, resolveToolVersion, validateContracts, validateDefinedIds, validateDeltas, validateProject, validateScenarioContent, validateScenarios, validateSpecContent, validateSpecs, validateTraceability };
package/dist/index.mjs CHANGED
@@ -1102,8 +1102,8 @@ import { readFile as readFile4 } from "fs/promises";
1102
1102
  import path6 from "path";
1103
1103
  import { fileURLToPath } from "url";
1104
1104
  async function resolveToolVersion() {
1105
- if ("0.4.6".length > 0) {
1106
- return "0.4.6";
1105
+ if ("0.4.9".length > 0) {
1106
+ return "0.4.9";
1107
1107
  }
1108
1108
  try {
1109
1109
  const packagePath = resolvePackageJsonPath();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qfai",
3
- "version": "0.4.6",
3
+ "version": "0.4.9",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "qfai": "./dist/cli/index.mjs"
@@ -23,6 +23,7 @@
23
23
  },
24
24
  "scripts": {
25
25
  "build": "tsup",
26
+ "prepack": "npm run build",
26
27
  "lint": "eslint src",
27
28
  "check-types": "tsc --noEmit",
28
29
  "test": "vitest run"
@@ -34,6 +35,7 @@
34
35
  "yaml": "^2.5.1"
35
36
  },
36
37
  "devDependencies": {
38
+ "@types/node": "^18.19.41",
37
39
  "tsup": "^8.3.5",
38
40
  "typescript": "^5.6.3",
39
41
  "vitest": "^2.1.8"
@@ -1,8 +0,0 @@
1
- export type InitOptions = {
2
- dir: string;
3
- force: boolean;
4
- dryRun: boolean;
5
- yes: boolean;
6
- };
7
- export declare function runInit(options: InitOptions): Promise<void>;
8
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjE"}
@@ -1,30 +0,0 @@
1
- import path from "node:path";
2
- import { copyTemplateTree } from "../lib/fs.js";
3
- import { getInitAssetsDir } from "../lib/assets.js";
4
- import { info } from "../lib/logger.js";
5
- export async function runInit(options) {
6
- const assetsRoot = getInitAssetsDir();
7
- const rootAssets = path.join(assetsRoot, "root");
8
- const qfaiAssets = path.join(assetsRoot, ".qfai");
9
- const destRoot = path.resolve(options.dir);
10
- const destQfai = path.join(destRoot, ".qfai");
11
- const rootResult = await copyTemplateTree(rootAssets, destRoot, {
12
- force: options.force,
13
- dryRun: options.dryRun,
14
- });
15
- const qfaiResult = await copyTemplateTree(qfaiAssets, destQfai, {
16
- force: options.force,
17
- dryRun: options.dryRun,
18
- });
19
- report([...rootResult.copied, ...qfaiResult.copied], [...rootResult.skipped, ...qfaiResult.skipped], options.dryRun, "init");
20
- }
21
- function report(copied, skipped, dryRun, label) {
22
- info(`qfai ${label}: ${dryRun ? "dry-run" : "done"}`);
23
- if (copied.length > 0) {
24
- info(` created: ${copied.length}`);
25
- }
26
- if (skipped.length > 0) {
27
- info(` skipped: ${skipped.length}`);
28
- }
29
- }
30
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AASxC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE;QAC9D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE;QAC9D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,CACJ,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,EAC5C,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAC9C,OAAO,CAAC,MAAM,EACd,MAAM,CACP,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CACb,MAAgB,EAChB,OAAiB,EACjB,MAAe,EACf,KAAa;IAEb,IAAI,CAAC,QAAQ,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
@@ -1,7 +0,0 @@
1
- export type ReportOptions = {
2
- root: string;
3
- format: "md" | "json";
4
- outPath?: string;
5
- };
6
- export declare function runReport(options: ReportOptions): Promise<void>;
7
- //# sourceMappingURL=report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDrE"}
@@ -1,108 +0,0 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { loadConfig, resolvePath } from "../../core/config.js";
4
- import { createReportData, formatReportJson, formatReportMarkdown, } from "../../core/report.js";
5
- import { error, info } from "../lib/logger.js";
6
- export async function runReport(options) {
7
- const root = path.resolve(options.root);
8
- const configResult = await loadConfig(root);
9
- const input = configResult.config.output.validateJsonPath;
10
- const inputPath = path.isAbsolute(input) ? input : path.resolve(root, input);
11
- let validation;
12
- try {
13
- validation = await readValidationResult(inputPath);
14
- }
15
- catch (err) {
16
- if (isMissingFileError(err)) {
17
- error([
18
- `qfai report: 入力ファイルが見つかりません: ${inputPath}`,
19
- "",
20
- "まず qfai validate を実行してください。例:",
21
- " qfai validate",
22
- "(デフォルトの出力先: .qfai/out/validate.json)",
23
- "",
24
- "GitHub Actions テンプレを使っている場合は、workflow の validate ジョブを先に実行してください。",
25
- ].join("\n"));
26
- process.exitCode = 2;
27
- return;
28
- }
29
- throw err;
30
- }
31
- const data = await createReportData(root, validation, configResult);
32
- const output = options.format === "json"
33
- ? formatReportJson(data)
34
- : formatReportMarkdown(data);
35
- const outRoot = resolvePath(root, configResult.config, "outDir");
36
- const defaultOut = options.format === "json"
37
- ? path.join(outRoot, "report.json")
38
- : path.join(outRoot, "report.md");
39
- const out = options.outPath ?? defaultOut;
40
- const outPath = path.isAbsolute(out) ? out : path.resolve(root, out);
41
- await mkdir(path.dirname(outPath), { recursive: true });
42
- await writeFile(outPath, `${output}\n`, "utf-8");
43
- info(`report: info=${validation.counts.info} warning=${validation.counts.warning} error=${validation.counts.error}`);
44
- info(`wrote report: ${outPath}`);
45
- }
46
- async function readValidationResult(inputPath) {
47
- const raw = await readFile(inputPath, "utf-8");
48
- const parsed = JSON.parse(raw);
49
- if (!isValidationResult(parsed)) {
50
- throw new Error(`validate.json の形式が不正です: ${inputPath}`);
51
- }
52
- return parsed;
53
- }
54
- function isValidationResult(value) {
55
- if (!value || typeof value !== "object") {
56
- return false;
57
- }
58
- const record = value;
59
- if (typeof record.toolVersion !== "string") {
60
- return false;
61
- }
62
- if (!Array.isArray(record.issues)) {
63
- return false;
64
- }
65
- const counts = record.counts;
66
- if (!counts) {
67
- return false;
68
- }
69
- if (typeof counts.info !== "number" ||
70
- typeof counts.warning !== "number" ||
71
- typeof counts.error !== "number") {
72
- return false;
73
- }
74
- const traceability = record.traceability;
75
- if (!traceability || typeof traceability !== "object") {
76
- return false;
77
- }
78
- const sc = traceability.sc;
79
- const testFiles = traceability.testFiles;
80
- if (!sc || !testFiles) {
81
- return false;
82
- }
83
- if (typeof sc.total !== "number" ||
84
- typeof sc.covered !== "number" ||
85
- typeof sc.missing !== "number") {
86
- return false;
87
- }
88
- if (!Array.isArray(sc.missingIds)) {
89
- return false;
90
- }
91
- if (!sc.refs || typeof sc.refs !== "object") {
92
- return false;
93
- }
94
- if (!Array.isArray(testFiles.globs) ||
95
- !Array.isArray(testFiles.excludeGlobs) ||
96
- typeof testFiles.matchedFileCount !== "number") {
97
- return false;
98
- }
99
- return true;
100
- }
101
- function isMissingFileError(error) {
102
- if (!error || typeof error !== "object") {
103
- return false;
104
- }
105
- const record = error;
106
- return record.code === "ENOENT";
107
- }
108
- //# sourceMappingURL=report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/commands/report.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import type { FailOn, OutputFormat } from "../../core/config.js";
2
- export type ValidateOptions = {
3
- root: string;
4
- strict: boolean;
5
- failOn?: FailOn;
6
- format?: OutputFormat;
7
- };
8
- export declare function runValidate(options: ValidateOptions): Promise<number>;
9
- //# sourceMappingURL=validate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMjE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,wBAAsB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3E"}
@@ -1,57 +0,0 @@
1
- import { mkdir, writeFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { loadConfig } from "../../core/config.js";
4
- import { validateProject } from "../../core/validate.js";
5
- import { shouldFail } from "../lib/failOn.js";
6
- export async function runValidate(options) {
7
- const root = path.resolve(options.root);
8
- const configResult = await loadConfig(root);
9
- const result = await validateProject(root, configResult);
10
- const format = options.format ?? "text";
11
- if (format === "text") {
12
- emitText(result);
13
- }
14
- if (format === "github") {
15
- result.issues.forEach(emitGitHub);
16
- }
17
- await emitJson(result, root, configResult.config.output.validateJsonPath);
18
- const failOn = resolveFailOn(options, configResult.config.validation.failOn);
19
- return shouldFail(result, failOn) ? 1 : 0;
20
- }
21
- function resolveFailOn(options, fallback) {
22
- if (options.failOn) {
23
- return options.failOn;
24
- }
25
- if (options.strict) {
26
- return "warning";
27
- }
28
- return fallback;
29
- }
30
- function emitText(result) {
31
- for (const item of result.issues) {
32
- const location = item.file ? ` (${item.file})` : "";
33
- const refs = item.refs && item.refs.length > 0 ? ` refs=${item.refs.join(",")}` : "";
34
- process.stdout.write(`[${item.severity}] ${item.code} ${item.message}${location}${refs}\n`);
35
- }
36
- process.stdout.write(`counts: info=${result.counts.info} warning=${result.counts.warning} error=${result.counts.error}\n`);
37
- }
38
- function emitGitHub(issue) {
39
- const level = issue.severity === "error"
40
- ? "error"
41
- : issue.severity === "warning"
42
- ? "warning"
43
- : "notice";
44
- const file = issue.file ? `file=${issue.file}` : "";
45
- const line = issue.loc?.line ? `,line=${issue.loc.line}` : "";
46
- const column = issue.loc?.column ? `,col=${issue.loc.column}` : "";
47
- const location = file ? ` ${file}${line}${column}` : "";
48
- process.stdout.write(`::${level}${location}::${issue.code}: ${issue.message}\n`);
49
- }
50
- async function emitJson(result, root, jsonPath) {
51
- const abs = path.isAbsolute(jsonPath)
52
- ? jsonPath
53
- : path.resolve(root, jsonPath);
54
- await mkdir(path.dirname(abs), { recursive: true });
55
- await writeFile(abs, `${JSON.stringify(result, null, 2)}\n`, "utf-8");
56
- }
57
- //# sourceMappingURL=validate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
package/dist/cli/index.js DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env node
2
- import { run } from "./main.js";
3
- run(process.argv.slice(2), process.cwd()).catch((err) => {
4
- process.stderr.write(`${err instanceof Error ? err.message : String(err)}\n`);
5
- process.exitCode = 1;
6
- });
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -1,18 +0,0 @@
1
- export type ParsedArgs = {
2
- command: string | null;
3
- options: {
4
- root: string;
5
- dir: string;
6
- force: boolean;
7
- yes: boolean;
8
- dryRun: boolean;
9
- reportFormat: "md" | "json";
10
- reportOut?: string;
11
- validateFormat: "text" | "github";
12
- strict: boolean;
13
- failOn?: "never" | "warning" | "error";
14
- help: boolean;
15
- };
16
- };
17
- export declare function parseArgs(argv: string[], cwd: string): ParsedArgs;
18
- //# sourceMappingURL=args.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,YAAY,EAAE,IAAI,GAAG,MAAM,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,GAAG,QAAQ,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;QACvC,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;CACH,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CA6EjE"}