@imolko/create-ultra-reporter 2.1.23-beta

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 (182) hide show
  1. package/README.md +219 -0
  2. package/bin/classes/index.d.ts +0 -0
  3. package/bin/classes/index.js +2 -0
  4. package/bin/classes/index.js.map +1 -0
  5. package/bin/classes/logger.d.ts +42 -0
  6. package/bin/classes/logger.js +185 -0
  7. package/bin/classes/logger.js.map +1 -0
  8. package/bin/cli.d.ts +2 -0
  9. package/bin/cli.js +48 -0
  10. package/bin/cli.js.map +1 -0
  11. package/bin/commands/build.d.ts +2 -0
  12. package/bin/commands/build.js +151 -0
  13. package/bin/commands/build.js.map +1 -0
  14. package/bin/commands/create.d.ts +60 -0
  15. package/bin/commands/create.js +368 -0
  16. package/bin/commands/create.js.map +1 -0
  17. package/bin/commands/generate-documentation.d.ts +2 -0
  18. package/bin/commands/generate-documentation.js +249 -0
  19. package/bin/commands/generate-documentation.js.map +1 -0
  20. package/bin/commands/generate.d.ts +2 -0
  21. package/bin/commands/generate.js +79 -0
  22. package/bin/commands/generate.js.map +1 -0
  23. package/bin/commands/index.d.ts +6 -0
  24. package/bin/commands/index.js +16 -0
  25. package/bin/commands/index.js.map +1 -0
  26. package/bin/commands/init.d.ts +2 -0
  27. package/bin/commands/init.js +54 -0
  28. package/bin/commands/init.js.map +1 -0
  29. package/bin/commands/serve.d.ts +2 -0
  30. package/bin/commands/serve.js +124 -0
  31. package/bin/commands/serve.js.map +1 -0
  32. package/bin/commands/types.d.ts +65 -0
  33. package/bin/commands/types.js +9 -0
  34. package/bin/commands/types.js.map +1 -0
  35. package/bin/config/reader.d.ts +17 -0
  36. package/bin/config/reader.js +166 -0
  37. package/bin/config/reader.js.map +1 -0
  38. package/bin/config/types.d.ts +57 -0
  39. package/bin/config/types.js +21 -0
  40. package/bin/config/types.js.map +1 -0
  41. package/bin/data/documentation-folder.d.ts +1 -0
  42. package/bin/data/documentation-folder.js +5 -0
  43. package/bin/data/documentation-folder.js.map +1 -0
  44. package/bin/data/files-generated.d.ts +1 -0
  45. package/bin/data/files-generated.js +10 -0
  46. package/bin/data/files-generated.js.map +1 -0
  47. package/bin/data/index.d.ts +2 -0
  48. package/bin/data/index.js +8 -0
  49. package/bin/data/index.js.map +1 -0
  50. package/bin/pipeline/generate.d.ts +26 -0
  51. package/bin/pipeline/generate.js +269 -0
  52. package/bin/pipeline/generate.js.map +1 -0
  53. package/bin/reporters/data-loading.d.ts +121 -0
  54. package/bin/reporters/data-loading.js +398 -0
  55. package/bin/reporters/data-loading.js.map +1 -0
  56. package/bin/reporters/data-transformation.d.ts +101 -0
  57. package/bin/reporters/data-transformation.js +392 -0
  58. package/bin/reporters/data-transformation.js.map +1 -0
  59. package/bin/reporters/file-writing.d.ts +29 -0
  60. package/bin/reporters/file-writing.js +100 -0
  61. package/bin/reporters/file-writing.js.map +1 -0
  62. package/bin/reporters/generate-domain-documentation.d.ts +17 -0
  63. package/bin/reporters/generate-domain-documentation.js +161 -0
  64. package/bin/reporters/generate-domain-documentation.js.map +1 -0
  65. package/bin/reporters/generate-use-cases-documentation.d.ts +18 -0
  66. package/bin/reporters/generate-use-cases-documentation.js +123 -0
  67. package/bin/reporters/generate-use-cases-documentation.js.map +1 -0
  68. package/bin/reporters/rendering.d.ts +116 -0
  69. package/bin/reporters/rendering.js +385 -0
  70. package/bin/reporters/rendering.js.map +1 -0
  71. package/bin/reporters/templates/README.md +28 -0
  72. package/bin/reporters/templates/card.template.jsx +5 -0
  73. package/bin/reporters/templates/cards-container.template.jsx +5 -0
  74. package/bin/reporters/types.d.ts +190 -0
  75. package/bin/reporters/types.js +8 -0
  76. package/bin/reporters/types.js.map +1 -0
  77. package/bin/scaffold/assembler.d.ts +13 -0
  78. package/bin/scaffold/assembler.js +371 -0
  79. package/bin/scaffold/assembler.js.map +1 -0
  80. package/bin/scaffold/doc-assembler.d.ts +10 -0
  81. package/bin/scaffold/doc-assembler.js +113 -0
  82. package/bin/scaffold/doc-assembler.js.map +1 -0
  83. package/bin/scripts/add-import.d.ts +1 -0
  84. package/bin/scripts/add-import.js +26 -0
  85. package/bin/scripts/add-import.js.map +1 -0
  86. package/bin/scripts/converter.d.ts +6 -0
  87. package/bin/scripts/converter.js +120 -0
  88. package/bin/scripts/converter.js.map +1 -0
  89. package/bin/scripts/copy-files.d.ts +1 -0
  90. package/bin/scripts/copy-files.js +96 -0
  91. package/bin/scripts/copy-files.js.map +1 -0
  92. package/bin/scripts/create-folder.d.ts +1 -0
  93. package/bin/scripts/create-folder.js +23 -0
  94. package/bin/scripts/create-folder.js.map +1 -0
  95. package/bin/scripts/delete-paths.d.ts +1 -0
  96. package/bin/scripts/delete-paths.js +34 -0
  97. package/bin/scripts/delete-paths.js.map +1 -0
  98. package/bin/scripts/exists-file.d.ts +5 -0
  99. package/bin/scripts/exists-file.js +12 -0
  100. package/bin/scripts/exists-file.js.map +1 -0
  101. package/bin/scripts/generate-track-artifacts.d.ts +1 -0
  102. package/bin/scripts/generate-track-artifacts.js +59 -0
  103. package/bin/scripts/generate-track-artifacts.js.map +1 -0
  104. package/bin/scripts/get-artifacts.d.ts +1 -0
  105. package/bin/scripts/get-artifacts.js +38 -0
  106. package/bin/scripts/get-artifacts.js.map +1 -0
  107. package/bin/scripts/get-directories.d.ts +1 -0
  108. package/bin/scripts/get-directories.js +10 -0
  109. package/bin/scripts/get-directories.js.map +1 -0
  110. package/bin/scripts/get-file.d.ts +9 -0
  111. package/bin/scripts/get-file.js +38 -0
  112. package/bin/scripts/get-file.js.map +1 -0
  113. package/bin/scripts/labels.d.ts +35 -0
  114. package/bin/scripts/labels.js +108 -0
  115. package/bin/scripts/labels.js.map +1 -0
  116. package/bin/scripts/markdown.d.ts +34 -0
  117. package/bin/scripts/markdown.js +99 -0
  118. package/bin/scripts/markdown.js.map +1 -0
  119. package/bin/scripts/names.d.ts +18 -0
  120. package/bin/scripts/names.js +64 -0
  121. package/bin/scripts/names.js.map +1 -0
  122. package/bin/scripts/track-artifacts.d.ts +2 -0
  123. package/bin/scripts/track-artifacts.js +101 -0
  124. package/bin/scripts/track-artifacts.js.map +1 -0
  125. package/bin/utils/create-folder.d.ts +1 -0
  126. package/bin/utils/create-folder.js +23 -0
  127. package/bin/utils/create-folder.js.map +1 -0
  128. package/bin/utils/delete-markdown-files.d.ts +1 -0
  129. package/bin/utils/delete-markdown-files.js +46 -0
  130. package/bin/utils/delete-markdown-files.js.map +1 -0
  131. package/bin/utils/delete-paths.d.ts +5 -0
  132. package/bin/utils/delete-paths.js +26 -0
  133. package/bin/utils/delete-paths.js.map +1 -0
  134. package/bin/utils/exists-file.d.ts +6 -0
  135. package/bin/utils/exists-file.js +13 -0
  136. package/bin/utils/exists-file.js.map +1 -0
  137. package/bin/utils/exists-folder.d.ts +6 -0
  138. package/bin/utils/exists-folder.js +13 -0
  139. package/bin/utils/exists-folder.js.map +1 -0
  140. package/bin/utils/get-internal-resource-path.d.ts +1 -0
  141. package/bin/utils/get-internal-resource-path.js +43 -0
  142. package/bin/utils/get-internal-resource-path.js.map +1 -0
  143. package/bin/utils/get-json-file.d.ts +1 -0
  144. package/bin/utils/get-json-file.js +27 -0
  145. package/bin/utils/get-json-file.js.map +1 -0
  146. package/bin/utils/index.d.ts +6 -0
  147. package/bin/utils/index.js +16 -0
  148. package/bin/utils/index.js.map +1 -0
  149. package/bin/utils/run-command.d.ts +5 -0
  150. package/bin/utils/run-command.js +36 -0
  151. package/bin/utils/run-command.js.map +1 -0
  152. package/jsdoc.conf.json +30 -0
  153. package/package.json +75 -0
  154. package/templates/documentation/README.md +41 -0
  155. package/templates/documentation/docs/.gitkeep +0 -0
  156. package/templates/documentation/docusaurus.config.ts +127 -0
  157. package/templates/documentation/package-lock.json +19431 -0
  158. package/templates/documentation/package.json +49 -0
  159. package/templates/documentation/sidebars.ts +33 -0
  160. package/templates/documentation/src/components/ArtifactTable/FilterBar.tsx +185 -0
  161. package/templates/documentation/src/components/ArtifactTable/index.tsx +298 -0
  162. package/templates/documentation/src/components/ArtifactTable/styles.module.css +282 -0
  163. package/templates/documentation/src/components/ArtifactTable/types.ts +31 -0
  164. package/templates/documentation/src/components/HomepageFeatures/index.tsx +77 -0
  165. package/templates/documentation/src/components/HomepageFeatures/styles.module.css +11 -0
  166. package/templates/documentation/src/css/custom.css +30 -0
  167. package/templates/documentation/src/pages/index.module.css +23 -0
  168. package/templates/documentation/src/pages/index.tsx +43 -0
  169. package/templates/documentation/src/pages/markdown-page.md +7 -0
  170. package/templates/documentation/static/.nojekyll +0 -0
  171. package/templates/documentation/static/img/docusaurus-social-card.jpg +0 -0
  172. package/templates/documentation/static/img/docusaurus.png +0 -0
  173. package/templates/documentation/static/img/favicon.ico +0 -0
  174. package/templates/documentation/static/img/logo.svg +1 -0
  175. package/templates/documentation/static/img/logo_imolko_azul.png +0 -0
  176. package/templates/documentation/static/img/undraw_docusaurus_mountain.svg +171 -0
  177. package/templates/documentation/static/img/undraw_docusaurus_react.svg +170 -0
  178. package/templates/documentation/static/img/undraw_docusaurus_tree.svg +40 -0
  179. package/templates/documentation/tsconfig.json +8 -0
  180. package/templates/documentation/ultra-reporter.config.json +55 -0
  181. package/templates/track-artifacts-script.ts +44 -0
  182. package/tsconfig.build-track.json +39 -0
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ // ---------------------------------------------------------------------------
3
+ // Data-loading layer — I/O functions that read files from disk.
4
+ // All functions are independently testable.
5
+ // ---------------------------------------------------------------------------
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.loadArtifacts = loadArtifacts;
41
+ exports.loadTemplates = loadTemplates;
42
+ exports.loadYamlDefinition = loadYamlDefinition;
43
+ exports.loadAttachments = loadAttachments;
44
+ exports.loadJsdocReport = loadJsdocReport;
45
+ exports.loadTestResults = loadTestResults;
46
+ exports.cleanJsdocOutput = cleanJsdocOutput;
47
+ exports.loadUseCaseFolders = loadUseCaseFolders;
48
+ exports.loadUseCaseDefinition = loadUseCaseDefinition;
49
+ exports.loadUseCaseAttachments = loadUseCaseAttachments;
50
+ exports.parseMarkdownFrontmatter = parseMarkdownFrontmatter;
51
+ exports.loadMarkdownFilesFromFolder = loadMarkdownFilesFromFolder;
52
+ exports.loadArtifactMetadataAndContent = loadArtifactMetadataAndContent;
53
+ exports.loadUseCaseMetadataAndContent = loadUseCaseMetadataAndContent;
54
+ const fs = __importStar(require("fs"));
55
+ const path = __importStar(require("path"));
56
+ const yaml = __importStar(require("js-yaml"));
57
+ const get_file_1 = require("../scripts/get-file");
58
+ // ---------------------------------------------------------------------------
59
+ // loadArtifacts — reads artifacts.json
60
+ // ---------------------------------------------------------------------------
61
+ /**
62
+ * Reads and parses an artifacts.json file.
63
+ */
64
+ async function loadArtifacts(pathStr) {
65
+ const fileData = await (0, get_file_1.getFile)(pathStr);
66
+ if (!fileData) {
67
+ throw new Error(`File ${pathStr} not found`);
68
+ }
69
+ try {
70
+ const data = JSON.parse(fileData);
71
+ return data;
72
+ }
73
+ catch (err) {
74
+ throw new Error(`Can not parse file ${pathStr}, error: ${err}`);
75
+ }
76
+ }
77
+ // ---------------------------------------------------------------------------
78
+ // loadTemplates — reads template files from a directory
79
+ // ---------------------------------------------------------------------------
80
+ const TEMPLATE_FILES = {
81
+ artifactTemplate: 'artifact.template.jsx',
82
+ testTemplate: 'test.template.jsx',
83
+ propertiesTemplate: 'properties.template.jsx',
84
+ methodDefinitionTemplate: 'method-definition.template.jsx',
85
+ exampleTemplate: 'example.template.jsx',
86
+ };
87
+ /**
88
+ * Reads all required template files from the given directory.
89
+ * Returns a Templates object with each template as a string.
90
+ */
91
+ async function loadTemplates(templateDir) {
92
+ const templates = {};
93
+ for (const [key, filename] of Object.entries(TEMPLATE_FILES)) {
94
+ const filePath = path.resolve(templateDir, filename);
95
+ const content = await (0, get_file_1.getFile)(filePath);
96
+ if (content === '') {
97
+ throw new Error(`Template file ${filename} not found or empty, path: ${filePath}`);
98
+ }
99
+ templates[key] = content;
100
+ }
101
+ return templates;
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // loadYamlDefinition — reads an artifact's definition.yaml
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Reads and parses an artifact's definition.yaml file.
108
+ * Returns {} if the file doesn't exist, is empty, or contains invalid YAML.
109
+ */
110
+ async function loadYamlDefinition(name, basePath, cwd) {
111
+ const filePath = path.resolve(cwd, basePath, name, 'definition.yaml');
112
+ // definition.yaml is optional (backward compat), don't warn when missing
113
+ const fileData = await (0, get_file_1.getFile)(filePath, { warnOnMissing: false });
114
+ if (!fileData) {
115
+ return {};
116
+ }
117
+ try {
118
+ const doc = yaml.load(fileData);
119
+ if (!doc) {
120
+ return {};
121
+ }
122
+ return doc;
123
+ }
124
+ catch {
125
+ return {};
126
+ }
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // loadAttachments — reads an artifact's attachments.md
130
+ // ---------------------------------------------------------------------------
131
+ /**
132
+ * Reads an artifact's attachments.md file.
133
+ * Returns empty string if the file doesn't exist or is empty.
134
+ */
135
+ async function loadAttachments(name, basePath, cwd) {
136
+ const filePath = path.resolve(cwd, basePath, name, 'attachments.md');
137
+ // attachments.md is optional, don't warn when missing
138
+ const fileData = await (0, get_file_1.getFile)(filePath, { warnOnMissing: false });
139
+ return fileData || '';
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // loadJsdocReport — reads and cleans JSDoc output
143
+ // ---------------------------------------------------------------------------
144
+ /**
145
+ * Reads a jsdoc-to-json output file, strips progress lines, and parses the JSON.
146
+ */
147
+ async function loadJsdocReport(pathStr) {
148
+ const fileData = await (0, get_file_1.getFile)(pathStr);
149
+ if (!fileData) {
150
+ throw new Error(`File ${pathStr} not found`);
151
+ }
152
+ let jsonTxt;
153
+ try {
154
+ jsonTxt = cleanJsdocOutput(fileData);
155
+ }
156
+ catch (err) {
157
+ throw new Error(`Cleaning file ${pathStr}, error: ${err}`);
158
+ }
159
+ try {
160
+ const data = JSON.parse(jsonTxt.trim());
161
+ return data;
162
+ }
163
+ catch (err) {
164
+ throw new Error(`Parsing data from file ${pathStr}, error: ${err}`);
165
+ }
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // loadTestResults — reads test-results.json
169
+ // ---------------------------------------------------------------------------
170
+ /**
171
+ * Reads a jest test-results.json file and extracts the testResults array.
172
+ */
173
+ async function loadTestResults(pathStr) {
174
+ const fileData = await (0, get_file_1.getFile)(pathStr);
175
+ if (!fileData) {
176
+ throw new Error(`File ${pathStr} not found`);
177
+ }
178
+ try {
179
+ const resultParsed = JSON.parse(fileData);
180
+ const testResultsCurrent = resultParsed.testResults || [];
181
+ return testResultsCurrent;
182
+ }
183
+ catch (err) {
184
+ throw new Error(`Error reading file ${pathStr}, error: ${err}`);
185
+ }
186
+ }
187
+ // ---------------------------------------------------------------------------
188
+ // cleanJsdocOutput — strips JSDoc CLI progress noise
189
+ // ---------------------------------------------------------------------------
190
+ /**
191
+ * Removes "Parsing ..." and "Finished running in..." progress lines from
192
+ * jsdoc-to-json raw output, leaving only valid JSON.
193
+ */
194
+ function cleanJsdocOutput(raw) {
195
+ const lines = raw.split('\n');
196
+ const cleaned = lines
197
+ .filter((line) => !/^Parsing /.test(line) && !/^Finished running in/.test(line))
198
+ .join('\n');
199
+ return cleaned;
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // Use-cases data-loading functions
203
+ // ---------------------------------------------------------------------------
204
+ /**
205
+ * Lists folder names inside a use-cases directory.
206
+ * Returns an empty array if the directory does not exist or is empty.
207
+ */
208
+ async function loadUseCaseFolders(basePath) {
209
+ try {
210
+ const entries = await fs.promises.readdir(basePath, { withFileTypes: true });
211
+ return entries
212
+ .filter((entry) => entry.isDirectory())
213
+ .map((entry) => entry.name);
214
+ }
215
+ catch {
216
+ return [];
217
+ }
218
+ }
219
+ /**
220
+ * Reads and parses a use-case's definition.yaml file.
221
+ * Returns {} if the file doesn't exist, is empty, or contains invalid YAML.
222
+ */
223
+ async function loadUseCaseDefinition(useCaseDirPath) {
224
+ const filePath = path.resolve(useCaseDirPath, 'definition.yaml');
225
+ // definition.yaml is optional (backward compat), don't warn when missing
226
+ const fileData = await (0, get_file_1.getFile)(filePath, { warnOnMissing: false });
227
+ if (!fileData) {
228
+ return {};
229
+ }
230
+ try {
231
+ const doc = yaml.load(fileData);
232
+ if (!doc) {
233
+ return {};
234
+ }
235
+ return doc;
236
+ }
237
+ catch {
238
+ return {};
239
+ }
240
+ }
241
+ /**
242
+ * Reads a use-case's attachments.md file.
243
+ * Returns empty string if the file doesn't exist or is empty.
244
+ */
245
+ async function loadUseCaseAttachments(useCaseDirPath) {
246
+ const filePath = path.resolve(useCaseDirPath, 'attachments.md');
247
+ // attachments.md is optional, don't warn when missing
248
+ const fileData = await (0, get_file_1.getFile)(filePath, { warnOnMissing: false });
249
+ return fileData || '';
250
+ }
251
+ /**
252
+ * Parses YAML frontmatter from a markdown string.
253
+ *
254
+ * Frontmatter is a YAML block delimited by `---` at the very start of the
255
+ * file. Only the first `---...---` block is treated as frontmatter;
256
+ * subsequent `---` lines in the body are left as literal content.
257
+ *
258
+ * If there is no opening `---` on line 1, or the YAML is invalid, the
259
+ * entire content is returned as `body` with an empty `frontmatter`.
260
+ *
261
+ * @param rawContent - The raw markdown file content as a string.
262
+ * @returns Parsed frontmatter and body.
263
+ */
264
+ function parseMarkdownFrontmatter(rawContent) {
265
+ if (rawContent === '') {
266
+ return { frontmatter: {}, body: '' };
267
+ }
268
+ // Frontmatter must start on line 1
269
+ if (!rawContent.startsWith('---')) {
270
+ return { frontmatter: {}, body: rawContent };
271
+ }
272
+ // Find closing --- (must be on its own line after the opening ---)
273
+ const afterOpening = rawContent.slice(3); // strip leading '---'
274
+ const closingMatch = afterOpening.match(/\n---/);
275
+ if (!closingMatch || closingMatch.index === undefined) {
276
+ // No closing delimiter found — treat entire content as body
277
+ return { frontmatter: {}, body: rawContent };
278
+ }
279
+ const yamlBlock = afterOpening.slice(0, closingMatch.index);
280
+ const bodyStart = closingMatch.index + closingMatch[0].length;
281
+ // Skip the newline after closing --- if present
282
+ const body = afterOpening.slice(bodyStart).replace(/^\n/, '');
283
+ let frontmatter = {};
284
+ if (yamlBlock.trim() !== '') {
285
+ try {
286
+ const parsed = yaml.load(yamlBlock);
287
+ if (parsed && typeof parsed === 'object') {
288
+ frontmatter = parsed;
289
+ }
290
+ }
291
+ catch {
292
+ // Invalid YAML — return empty frontmatter and raw content as body
293
+ return { frontmatter: {}, body: rawContent };
294
+ }
295
+ }
296
+ return { frontmatter, body };
297
+ }
298
+ /**
299
+ * Scans a folder for all `.md` files, extracts frontmatter from each, and
300
+ * merges the results into a single frontmatter object (first file
301
+ * alphabetically wins on key conflicts) and a concatenated body string.
302
+ *
303
+ * Files with an empty body (after stripping frontmatter) are excluded from
304
+ * the concatenated body but their frontmatter is still merged.
305
+ *
306
+ * @param folderPath - Absolute path to the folder to scan.
307
+ * @returns Merged frontmatter and concatenated bodies.
308
+ */
309
+ async function loadMarkdownFilesFromFolder(folderPath) {
310
+ let entries;
311
+ try {
312
+ entries = await fs.promises.readdir(folderPath, { withFileTypes: true });
313
+ }
314
+ catch {
315
+ return { mergedFrontmatter: {}, concatenatedBodies: '' };
316
+ }
317
+ // Filter to .md files (case-insensitive), sort alphabetically
318
+ const mdFiles = entries
319
+ .filter((entry) => entry.isFile() && entry.name.toLowerCase().endsWith('.md'))
320
+ .map((entry) => entry.name)
321
+ .sort((a, b) => a.localeCompare(b));
322
+ if (mdFiles.length === 0) {
323
+ return { mergedFrontmatter: {}, concatenatedBodies: '' };
324
+ }
325
+ const mergedFrontmatter = {};
326
+ const bodies = [];
327
+ for (const fileName of mdFiles) {
328
+ const filePath = path.resolve(folderPath, fileName);
329
+ const rawContent = await (0, get_file_1.getFile)(filePath);
330
+ if (!rawContent) {
331
+ continue;
332
+ }
333
+ const { frontmatter, body } = parseMarkdownFrontmatter(rawContent);
334
+ // Merge frontmatter: first-file-wins per key
335
+ for (const key of Object.keys(frontmatter)) {
336
+ if (!(key in mergedFrontmatter)) {
337
+ mergedFrontmatter[key] = frontmatter[key];
338
+ }
339
+ }
340
+ // Only include non-empty bodies
341
+ if (body.trim() !== '') {
342
+ bodies.push(body);
343
+ }
344
+ }
345
+ return {
346
+ mergedFrontmatter,
347
+ concatenatedBodies: bodies.join(''),
348
+ };
349
+ }
350
+ /**
351
+ * Loads metadata and markdown content for a domain artifact by composing
352
+ * legacy `definition.yaml` loading with `.md` frontmatter scanning.
353
+ *
354
+ * 1. Loads `definition.yaml` as the base metadata.
355
+ * 2. Scans all `.md` files in the artifact folder for frontmatter.
356
+ * 3. Merges: `.md` frontmatter overrides `definition.yaml` on key conflicts.
357
+ * 4. Concatenates all `.md` file bodies (alphabetical, empty bodies excluded).
358
+ *
359
+ * @param name - Artifact folder name (e.g., "MyEntity").
360
+ * @param basePath - Base path relative to cwd (e.g., "domain/src").
361
+ * @param cwd - Working directory.
362
+ * @returns Merged definition and concatenated markdown bodies.
363
+ */
364
+ async function loadArtifactMetadataAndContent(name, basePath, cwd) {
365
+ // Load legacy definition.yaml
366
+ const definitionYaml = await loadYamlDefinition(name, basePath, cwd);
367
+ // Scan .md files
368
+ const folderPath = path.resolve(cwd, basePath, name);
369
+ const { mergedFrontmatter, concatenatedBodies } = await loadMarkdownFilesFromFolder(folderPath);
370
+ // Merge: definition.yaml is base, .md frontmatter overrides
371
+ const definition = { ...definitionYaml, ...mergedFrontmatter };
372
+ return { definition, attachmentsMd: concatenatedBodies };
373
+ }
374
+ // ---------------------------------------------------------------------------
375
+ // loadUseCaseMetadataAndContent — use-cases composed loader
376
+ // ---------------------------------------------------------------------------
377
+ /**
378
+ * Loads metadata and markdown content for a use-case by composing legacy
379
+ * `definition.yaml` loading with `.md` frontmatter scanning.
380
+ *
381
+ * 1. Loads `definition.yaml` as the base metadata.
382
+ * 2. Scans all `.md` files in the use-case folder for frontmatter.
383
+ * 3. Merges: `.md` frontmatter overrides `definition.yaml` on key conflicts.
384
+ * 4. Concatenates all `.md` file bodies (alphabetical, empty bodies excluded).
385
+ *
386
+ * @param useCaseDirPath - Absolute path to the use-case folder.
387
+ * @returns Merged definition and concatenated markdown bodies.
388
+ */
389
+ async function loadUseCaseMetadataAndContent(useCaseDirPath) {
390
+ // Load legacy definition.yaml
391
+ const definitionYaml = await loadUseCaseDefinition(useCaseDirPath);
392
+ // Scan .md files
393
+ const { mergedFrontmatter, concatenatedBodies } = await loadMarkdownFilesFromFolder(useCaseDirPath);
394
+ // Merge: definition.yaml is base, .md frontmatter overrides
395
+ const definition = { ...definitionYaml, ...mergedFrontmatter };
396
+ return { definition, attachmentsMd: concatenatedBodies };
397
+ }
398
+ //# sourceMappingURL=data-loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-loading.js","sourceRoot":"","sources":["../../src/reporters/data-loading.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { ArtifactManifestEntry, ArtifactRaw, ClassProperty, EnrichedArtifact, EnrichedUseCase, JsdocElem, MethodDefinition, Property, TestFile, UseCaseRaw } from './types';
2
+ /**
3
+ * Extracts property definitions from JSDoc elements whose meta.filename is 'props.ts'.
4
+ * Iterates over each matching element's `.properties` array and maps them
5
+ * to typed Property objects.
6
+ */
7
+ export declare function extractProperties(jsdocElems: JsdocElem[]): Property[];
8
+ /**
9
+ * Extracts ClassProperty definitions from JSDoc elements whose
10
+ * meta.filename is 'definition.ts' and meta.code.type is 'ClassProperty'.
11
+ */
12
+ export declare function extractClassProperties(jsdocElems: JsdocElem[]): ClassProperty[];
13
+ /**
14
+ * Extracts MethodDefinition from JSDoc elements whose meta.filename is
15
+ * 'definition.ts' and meta.code.type is 'MethodDefinition'.
16
+ */
17
+ export declare function extractMethodDefinitions(jsdocElems: JsdocElem[]): MethodDefinition[];
18
+ /**
19
+ * Matches JSDoc elements to artifacts using directory-based path matching.
20
+ *
21
+ * For each artifact with jsondocMustMatchPath (e.g. "/MyEntity"), the function
22
+ * checks if the JSDoc element's meta.path contains that directory as a path
23
+ * segment (e.g. ".../MyEntity/definition.ts" matches "/MyEntity").
24
+ *
25
+ * This replaces the broken exact-suffix regex approach in the original code.
26
+ */
27
+ export declare function matchJsdocToArtifacts(jsdocData: JsdocElem[], artifacts: ArtifactRaw[]): Map<string, JsdocElem[]>;
28
+ /**
29
+ * Returns test files whose testFilePath includes the given artifactPath.
30
+ * The original code uses `artifactPath + '/'` to prevent matching similar names.
31
+ */
32
+ export declare function matchTests(artifactPath: string, testResults: TestFile[]): TestFile[];
33
+ /** Return type for aggregateTestCounts. */
34
+ export interface TestCounts {
35
+ numPassingTests: number;
36
+ numFailingTests: number;
37
+ numPendingTests: number;
38
+ numTodoTests: number;
39
+ }
40
+ /**
41
+ * Sums pass/fail/pending/todo test counts across a list of test files.
42
+ */
43
+ export declare function aggregateTestCounts(tests: TestFile[]): TestCounts;
44
+ /** Return type for buildArtifactId. */
45
+ export interface ArtifactId {
46
+ id: string;
47
+ idMarkdown: string;
48
+ }
49
+ /**
50
+ * Generates an anchor-safe id and a filename-safe idMarkdown from the
51
+ * artifact name and context name.
52
+ *
53
+ * - `id`: "contextName-artifactName" lowered, spaces→hyphens, stripped of special chars
54
+ * - `idMarkdown`: "artifactName" lowered, spaces→hyphens, stripped of special chars
55
+ */
56
+ export declare function buildArtifactId(name: string, contextName: string): ArtifactId;
57
+ /**
58
+ * Enriches a raw artifact with JSDoc data, YAML definition, attachments,
59
+ * matched test results, and computed IDs.
60
+ *
61
+ * Calls data-loading functions (loadArtifactMetadataAndContent) for I/O
62
+ * and pure transformation functions for data processing.
63
+ */
64
+ export declare function enrichArtifact(artifact: ArtifactRaw, jsdocElems: JsdocElem[], allTestResults: TestFile[], cwd: string, basePath: string, contextName: string): Promise<EnrichedArtifact>;
65
+ /**
66
+ * Enriches a raw use-case with matched test results, aggregated test counts,
67
+ * and computed IDs.
68
+ *
69
+ * Uses the same matchTests and aggregateTestCounts as the domain pipeline.
70
+ * The ID-building differs from buildArtifactId: use-case IDs include the
71
+ * index (for uniqueness within a context) and idMarkdown uses the title
72
+ * instead of an artifact name.
73
+ */
74
+ export declare function enrichUseCase(raw: UseCaseRaw, allTestResults: TestFile[], index: number, contextName: string): EnrichedUseCase;
75
+ /**
76
+ * Matches JSDoc elements from .spec.ts files to individual test results.
77
+ *
78
+ * For each test result in each test file, finds the first JSDoc element
79
+ * whose `name` (from @name tag) is contained in the test's `fullName`
80
+ * AND whose `meta.path` shares at least one path segment with the test
81
+ * file's directory path.
82
+ *
83
+ * Matching annotations are attached as `result.annotation`.
84
+ *
85
+ * @param testFiles - Array of test files with their test results
86
+ * @param jsdocElems - JSDoc elements (may include spec.ts entries with annotations)
87
+ * @returns The test files with annotations attached (mutated in place)
88
+ */
89
+ export declare function matchTestAnnotations(testFiles: TestFile[], jsdocElems: JsdocElem[]): TestFile[];
90
+ /**
91
+ * Converts a list of enriched artifacts to manifest entries for the
92
+ * searchable artifact table.
93
+ *
94
+ * Aggregate artifacts get `categories: ["domain-artifacts", "aggregates"]`;
95
+ * all other types get `categories: ["domain-artifacts"]`.
96
+ *
97
+ * @param artifacts - The fully enriched artifacts
98
+ * @param contextName - The bounded context name for this package root
99
+ * @returns Manifest entries ready for serialization to JSON
100
+ */
101
+ export declare function buildManifestEntries(artifacts: EnrichedArtifact[], contextName: string): ArtifactManifestEntry[];