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
@@ -1,224 +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
- scMustHaveTest: true,
30
- testFileGlobs: [],
31
- testFileExcludeGlobs: [],
32
- scNoTestSeverity: "error",
33
- allowOrphanContracts: false,
34
- unknownContractIdSeverity: "error",
35
- },
36
- },
37
- output: {
38
- validateJsonPath: ".qfai/out/validate.json",
39
- },
40
- };
41
- export function getConfigPath(root) {
42
- return path.join(root, "qfai.config.yaml");
43
- }
44
- export async function loadConfig(root) {
45
- const configPath = getConfigPath(root);
46
- const issues = [];
47
- let parsed;
48
- try {
49
- const raw = await readFile(configPath, "utf-8");
50
- parsed = parseYaml(raw);
51
- }
52
- catch (error) {
53
- if (isMissingFile(error)) {
54
- return { config: defaultConfig, issues, configPath };
55
- }
56
- issues.push(configIssue(configPath, formatError(error)));
57
- return { config: defaultConfig, issues, configPath };
58
- }
59
- const normalized = normalizeConfig(parsed, configPath, issues);
60
- return { config: normalized, issues, configPath };
61
- }
62
- export function resolvePath(root, config, key) {
63
- return path.resolve(root, config.paths[key]);
64
- }
65
- function normalizeConfig(raw, configPath, issues) {
66
- if (!isRecord(raw)) {
67
- issues.push(configIssue(configPath, "設定ファイルの形式が不正です。"));
68
- return defaultConfig;
69
- }
70
- return {
71
- paths: normalizePaths(raw.paths, configPath, issues),
72
- validation: normalizeValidation(raw.validation, configPath, issues),
73
- output: normalizeOutput(raw.output, configPath, issues),
74
- };
75
- }
76
- function normalizePaths(raw, configPath, issues) {
77
- const base = defaultConfig.paths;
78
- if (!raw) {
79
- return base;
80
- }
81
- if (!isRecord(raw)) {
82
- issues.push(configIssue(configPath, "paths はオブジェクトである必要があります。"));
83
- return base;
84
- }
85
- return {
86
- contractsDir: readString(raw.contractsDir, base.contractsDir, "paths.contractsDir", configPath, issues),
87
- specsDir: readString(raw.specsDir, base.specsDir, "paths.specsDir", configPath, issues),
88
- rulesDir: readString(raw.rulesDir, base.rulesDir, "paths.rulesDir", configPath, issues),
89
- outDir: readString(raw.outDir, base.outDir, "paths.outDir", configPath, issues),
90
- promptsDir: readString(raw.promptsDir, base.promptsDir, "paths.promptsDir", configPath, issues),
91
- srcDir: readString(raw.srcDir, base.srcDir, "paths.srcDir", configPath, issues),
92
- testsDir: readString(raw.testsDir, base.testsDir, "paths.testsDir", configPath, issues),
93
- };
94
- }
95
- function normalizeValidation(raw, configPath, issues) {
96
- const base = defaultConfig.validation;
97
- if (!raw) {
98
- return base;
99
- }
100
- if (!isRecord(raw)) {
101
- issues.push(configIssue(configPath, "validation はオブジェクトである必要があります。"));
102
- return base;
103
- }
104
- let requireRaw;
105
- if (raw.require === undefined) {
106
- requireRaw = undefined;
107
- }
108
- else if (isRecord(raw.require)) {
109
- requireRaw = raw.require;
110
- }
111
- else {
112
- issues.push(configIssue(configPath, "validation.require はオブジェクトである必要があります。"));
113
- requireRaw = undefined;
114
- }
115
- let traceabilityRaw;
116
- if (raw.traceability === undefined) {
117
- traceabilityRaw = undefined;
118
- }
119
- else if (isRecord(raw.traceability)) {
120
- traceabilityRaw = raw.traceability;
121
- }
122
- else {
123
- issues.push(configIssue(configPath, "validation.traceability はオブジェクトである必要があります。"));
124
- traceabilityRaw = undefined;
125
- }
126
- return {
127
- failOn: readFailOn(raw.failOn, base.failOn, "validation.failOn", configPath, issues),
128
- require: {
129
- specSections: readStringArray(requireRaw?.specSections, base.require.specSections, "validation.require.specSections", configPath, issues),
130
- },
131
- traceability: {
132
- brMustHaveSc: readBoolean(traceabilityRaw?.brMustHaveSc, base.traceability.brMustHaveSc, "validation.traceability.brMustHaveSc", configPath, issues),
133
- scMustHaveTest: readBoolean(traceabilityRaw?.scMustHaveTest, base.traceability.scMustHaveTest, "validation.traceability.scMustHaveTest", configPath, issues),
134
- testFileGlobs: readStringArray(traceabilityRaw?.testFileGlobs, base.traceability.testFileGlobs, "validation.traceability.testFileGlobs", configPath, issues),
135
- testFileExcludeGlobs: readStringArray(traceabilityRaw?.testFileExcludeGlobs, base.traceability.testFileExcludeGlobs, "validation.traceability.testFileExcludeGlobs", configPath, issues),
136
- scNoTestSeverity: readTraceabilitySeverity(traceabilityRaw?.scNoTestSeverity, base.traceability.scNoTestSeverity, "validation.traceability.scNoTestSeverity", configPath, issues),
137
- allowOrphanContracts: readBoolean(traceabilityRaw?.allowOrphanContracts, base.traceability.allowOrphanContracts, "validation.traceability.allowOrphanContracts", configPath, issues),
138
- unknownContractIdSeverity: readTraceabilitySeverity(traceabilityRaw?.unknownContractIdSeverity, base.traceability.unknownContractIdSeverity, "validation.traceability.unknownContractIdSeverity", configPath, issues),
139
- },
140
- };
141
- }
142
- function normalizeOutput(raw, configPath, issues) {
143
- const base = defaultConfig.output;
144
- if (!raw) {
145
- return base;
146
- }
147
- if (!isRecord(raw)) {
148
- issues.push(configIssue(configPath, "output はオブジェクトである必要があります。"));
149
- return base;
150
- }
151
- return {
152
- validateJsonPath: readString(raw.validateJsonPath, base.validateJsonPath, "output.validateJsonPath", configPath, issues),
153
- };
154
- }
155
- function readString(value, fallback, label, configPath, issues) {
156
- if (typeof value === "string" && value.trim().length > 0) {
157
- return value;
158
- }
159
- if (value !== undefined) {
160
- issues.push(configIssue(configPath, `${label} は文字列である必要があります。`));
161
- }
162
- return fallback;
163
- }
164
- function readStringArray(value, fallback, label, configPath, issues) {
165
- if (Array.isArray(value) && value.every((item) => typeof item === "string")) {
166
- return value;
167
- }
168
- if (value !== undefined) {
169
- issues.push(configIssue(configPath, `${label} は文字列配列である必要があります。`));
170
- }
171
- return fallback;
172
- }
173
- function readBoolean(value, fallback, label, configPath, issues) {
174
- if (typeof value === "boolean") {
175
- return value;
176
- }
177
- if (value !== undefined) {
178
- issues.push(configIssue(configPath, `${label} は真偽値である必要があります。`));
179
- }
180
- return fallback;
181
- }
182
- function readFailOn(value, fallback, label, configPath, issues) {
183
- if (value === "never" || value === "warning" || value === "error") {
184
- return value;
185
- }
186
- if (value !== undefined) {
187
- issues.push(configIssue(configPath, `${label} は never|warning|error のいずれかである必要があります。`));
188
- }
189
- return fallback;
190
- }
191
- function readTraceabilitySeverity(value, fallback, label, configPath, issues) {
192
- if (value === "warning" || value === "error") {
193
- return value;
194
- }
195
- if (value !== undefined) {
196
- issues.push(configIssue(configPath, `${label} は warning|error のいずれかである必要があります。`));
197
- }
198
- return fallback;
199
- }
200
- function configIssue(file, message) {
201
- return {
202
- code: "QFAI_CONFIG_INVALID",
203
- severity: "error",
204
- message,
205
- file,
206
- rule: "config.invalid",
207
- };
208
- }
209
- function isMissingFile(error) {
210
- if (error && typeof error === "object" && "code" in error) {
211
- return error.code === "ENOENT";
212
- }
213
- return false;
214
- }
215
- function formatError(error) {
216
- if (error instanceof Error) {
217
- return error.message;
218
- }
219
- return String(error);
220
- }
221
- function isRecord(value) {
222
- return value !== null && typeof value === "object" && !Array.isArray(value);
223
- }
224
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -1,12 +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
- db: string[];
9
- };
10
- };
11
- export declare function buildContractIndex(root: string, config: QfaiConfig): Promise<ContractIndex>;
12
- //# 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;AAS9C,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,EAAE,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACtD,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
@@ -1,38 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { resolvePath } from "./config.js";
4
- import { collectApiContractFiles, collectDbContractFiles, collectUiContractFiles, } from "./discovery.js";
5
- import { extractDeclaredContractIds } from "./contractsDecl.js";
6
- export async function buildContractIndex(root, config) {
7
- const contractsRoot = resolvePath(root, config, "contractsDir");
8
- const uiRoot = path.join(contractsRoot, "ui");
9
- const apiRoot = path.join(contractsRoot, "api");
10
- const dbRoot = path.join(contractsRoot, "db");
11
- const [uiFiles, apiFiles, dbFiles] = await Promise.all([
12
- collectUiContractFiles(uiRoot),
13
- collectApiContractFiles(apiRoot),
14
- collectDbContractFiles(dbRoot),
15
- ]);
16
- const index = {
17
- ids: new Set(),
18
- idToFiles: new Map(),
19
- files: { ui: uiFiles, api: apiFiles, db: dbFiles },
20
- };
21
- await indexContractFiles(uiFiles, index);
22
- await indexContractFiles(apiFiles, index);
23
- await indexContractFiles(dbFiles, index);
24
- return index;
25
- }
26
- async function indexContractFiles(files, index) {
27
- for (const file of files) {
28
- const text = await readFile(file, "utf-8");
29
- extractDeclaredContractIds(text).forEach((id) => record(index, id, file));
30
- }
31
- }
32
- function record(index, id, file) {
33
- index.ids.add(id);
34
- const current = index.idToFiles.get(id) ?? new Set();
35
- current.add(file);
36
- index.idToFiles.set(id, current);
37
- }
38
- //# 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,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAQhE,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,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAE9C,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,sBAAsB,CAAC,MAAM,CAAC;QAC9B,uBAAuB,CAAC,OAAO,CAAC;QAChC,sBAAsB,CAAC,MAAM,CAAC;KAC/B,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,EAAE,EAAE,OAAO,EAAE;KACnD,CAAC;IAEF,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEzC,OAAO,KAAK,CAAC;AACf,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,0BAA0B,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5E,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"}
@@ -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"}
@@ -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"}
@@ -1,3 +0,0 @@
1
- export declare function extractDeclaredContractIds(text: string): string[];
2
- export declare function stripContractDeclarationLines(text: string): string;
3
- //# sourceMappingURL=contractsDecl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contractsDecl.d.ts","sourceRoot":"","sources":["../../src/core/contractsDecl.ts"],"names":[],"mappings":"AAKA,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASjE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlE"}
@@ -1,19 +0,0 @@
1
- const CONTRACT_DECLARATION_RE = /^\s*(?:#|\/\/|--|\/\*+|\*+)?\s*QFAI-CONTRACT-ID:\s*((?:API|UI|DB)-\d{4})\s*(?:\*\/)?\s*$/gm;
2
- const CONTRACT_DECLARATION_LINE_RE = /^\s*(?:#|\/\/|--|\/\*+|\*+)?\s*QFAI-CONTRACT-ID:\s*(?:API|UI|DB)-\d{4}\s*(?:\*\/)?\s*$/;
3
- export function extractDeclaredContractIds(text) {
4
- const ids = [];
5
- for (const match of text.matchAll(CONTRACT_DECLARATION_RE)) {
6
- const id = match[1];
7
- if (id) {
8
- ids.push(id);
9
- }
10
- }
11
- return ids;
12
- }
13
- export function stripContractDeclarationLines(text) {
14
- return text
15
- .split(/\r?\n/)
16
- .filter((line) => !CONTRACT_DECLARATION_LINE_RE.test(line))
17
- .join("\n");
18
- }
19
- //# sourceMappingURL=contractsDecl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contractsDecl.js","sourceRoot":"","sources":["../../src/core/contractsDecl.ts"],"names":[],"mappings":"AAAA,MAAM,uBAAuB,GAC3B,4FAA4F,CAAC;AAC/F,MAAM,4BAA4B,GAChC,wFAAwF,CAAC;AAE3F,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC3D,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,EAAE,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAY;IACxD,OAAO,IAAI;SACR,KAAK,CAAC,OAAO,CAAC;SACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
@@ -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 collectDbContractFiles(dbRoot: string): Promise<string[]>;
13
- export declare function collectContractFiles(uiRoot: string, apiRoot: string, dbRoot: 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,sBAAsB,CAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAEnB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC,CAOxB"}
@@ -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 collectDbContractFiles(dbRoot) {
27
- return collectFiles(dbRoot, { extensions: [".sql"] });
28
- }
29
- export async function collectContractFiles(uiRoot, apiRoot, dbRoot) {
30
- const [ui, api, db] = await Promise.all([
31
- collectUiContractFiles(uiRoot),
32
- collectApiContractFiles(apiRoot),
33
- collectDbContractFiles(dbRoot),
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
@@ -1,11 +0,0 @@
1
- export type CollectFilesOptions = {
2
- extensions?: string[];
3
- ignoreDirs?: string[];
4
- };
5
- export type CollectFilesByGlobOptions = {
6
- globs: string[];
7
- ignore?: string[];
8
- };
9
- export declare function collectFiles(root: string, options?: CollectFilesOptions): Promise<string[]>;
10
- export declare function collectFilesByGlobs(root: string, options: CollectFilesByGlobOptions): Promise<string[]>;
11
- //# sourceMappingURL=fs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/core/fs.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,mBAAmB,GAAG;IAChC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB"}
package/dist/core/fs.js DELETED
@@ -1,68 +0,0 @@
1
- import { access, readdir } from "node:fs/promises";
2
- import path from "node:path";
3
- import fg from "fast-glob";
4
- const DEFAULT_IGNORE_DIRS = new Set([
5
- "node_modules",
6
- ".git",
7
- "dist",
8
- ".pnpm",
9
- "tmp",
10
- ".mcp-tools",
11
- ]);
12
- export async function collectFiles(root, options = {}) {
13
- const entries = [];
14
- if (!(await exists(root))) {
15
- return entries;
16
- }
17
- const ignoreDirs = new Set([
18
- ...DEFAULT_IGNORE_DIRS,
19
- ...(options.ignoreDirs ?? []),
20
- ]);
21
- const extensions = options.extensions?.map((ext) => ext.toLowerCase()) ?? [];
22
- await walk(root, root, ignoreDirs, extensions, entries);
23
- return entries;
24
- }
25
- export async function collectFilesByGlobs(root, options) {
26
- if (options.globs.length === 0) {
27
- return [];
28
- }
29
- return fg(options.globs, {
30
- cwd: root,
31
- ignore: options.ignore ?? [],
32
- onlyFiles: true,
33
- absolute: true,
34
- unique: true,
35
- });
36
- }
37
- async function walk(base, current, ignoreDirs, extensions, out) {
38
- const items = await readdir(current, { withFileTypes: true });
39
- for (const item of items) {
40
- const fullPath = path.join(current, item.name);
41
- if (item.isDirectory()) {
42
- if (ignoreDirs.has(item.name)) {
43
- continue;
44
- }
45
- await walk(base, fullPath, ignoreDirs, extensions, out);
46
- continue;
47
- }
48
- if (item.isFile()) {
49
- if (extensions.length > 0) {
50
- const ext = path.extname(item.name).toLowerCase();
51
- if (!extensions.includes(ext)) {
52
- continue;
53
- }
54
- }
55
- out.push(fullPath);
56
- }
57
- }
58
- }
59
- async function exists(target) {
60
- try {
61
- await access(target);
62
- return true;
63
- }
64
- catch {
65
- return false;
66
- }
67
- }
68
- //# sourceMappingURL=fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/core/fs.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import type { GherkinDocument } from "@cucumber/messages";
2
- export type ParsedGherkin = {
3
- gherkinDocument: GherkinDocument | null;
4
- errors: string[];
5
- };
6
- export declare function parseGherkin(source: string, uri: string): ParsedGherkin;
7
- //# sourceMappingURL=parse.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/core/gherkin/parse.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,aAAa,GAAG;IAC1B,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAevE"}
@@ -1,25 +0,0 @@
1
- import { AstBuilder, GherkinClassicTokenMatcher, Parser, } from "@cucumber/gherkin";
2
- import { randomUUID } from "node:crypto";
3
- export function parseGherkin(source, uri) {
4
- const errors = [];
5
- const uuidFn = () => randomUUID();
6
- const builder = new AstBuilder(uuidFn);
7
- const matcher = new GherkinClassicTokenMatcher();
8
- const parser = new Parser(builder, matcher);
9
- try {
10
- const gherkinDocument = parser.parse(source);
11
- gherkinDocument.uri = uri;
12
- return { gherkinDocument, errors };
13
- }
14
- catch (error) {
15
- errors.push(formatError(error));
16
- return { gherkinDocument: null, errors };
17
- }
18
- }
19
- function formatError(error) {
20
- if (error instanceof Error) {
21
- return error.message;
22
- }
23
- return String(error);
24
- }
25
- //# sourceMappingURL=parse.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/core/gherkin/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,0BAA0B,EAC1B,MAAM,GACP,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,GAAW;IACtD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,0BAA0B,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7C,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC;QAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -1,6 +0,0 @@
1
- export type IdPrefix = "SPEC" | "BR" | "SC" | "UI" | "API" | "DB";
2
- export type IdFormatPrefix = IdPrefix | "ADR";
3
- export declare function extractIds(text: string, prefix: IdPrefix): string[];
4
- export declare function extractAllIds(text: string): string[];
5
- export declare function extractInvalidIds(text: string, prefixes: IdFormatPrefix[]): string[];
6
- //# sourceMappingURL=ids.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/core/ids.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAC;AAwB9C,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,EAAE,CAInE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMpD;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,EAAE,CAWV"}