@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.
- package/README.md +219 -0
- package/bin/classes/index.d.ts +0 -0
- package/bin/classes/index.js +2 -0
- package/bin/classes/index.js.map +1 -0
- package/bin/classes/logger.d.ts +42 -0
- package/bin/classes/logger.js +185 -0
- package/bin/classes/logger.js.map +1 -0
- package/bin/cli.d.ts +2 -0
- package/bin/cli.js +48 -0
- package/bin/cli.js.map +1 -0
- package/bin/commands/build.d.ts +2 -0
- package/bin/commands/build.js +151 -0
- package/bin/commands/build.js.map +1 -0
- package/bin/commands/create.d.ts +60 -0
- package/bin/commands/create.js +368 -0
- package/bin/commands/create.js.map +1 -0
- package/bin/commands/generate-documentation.d.ts +2 -0
- package/bin/commands/generate-documentation.js +249 -0
- package/bin/commands/generate-documentation.js.map +1 -0
- package/bin/commands/generate.d.ts +2 -0
- package/bin/commands/generate.js +79 -0
- package/bin/commands/generate.js.map +1 -0
- package/bin/commands/index.d.ts +6 -0
- package/bin/commands/index.js +16 -0
- package/bin/commands/index.js.map +1 -0
- package/bin/commands/init.d.ts +2 -0
- package/bin/commands/init.js +54 -0
- package/bin/commands/init.js.map +1 -0
- package/bin/commands/serve.d.ts +2 -0
- package/bin/commands/serve.js +124 -0
- package/bin/commands/serve.js.map +1 -0
- package/bin/commands/types.d.ts +65 -0
- package/bin/commands/types.js +9 -0
- package/bin/commands/types.js.map +1 -0
- package/bin/config/reader.d.ts +17 -0
- package/bin/config/reader.js +166 -0
- package/bin/config/reader.js.map +1 -0
- package/bin/config/types.d.ts +57 -0
- package/bin/config/types.js +21 -0
- package/bin/config/types.js.map +1 -0
- package/bin/data/documentation-folder.d.ts +1 -0
- package/bin/data/documentation-folder.js +5 -0
- package/bin/data/documentation-folder.js.map +1 -0
- package/bin/data/files-generated.d.ts +1 -0
- package/bin/data/files-generated.js +10 -0
- package/bin/data/files-generated.js.map +1 -0
- package/bin/data/index.d.ts +2 -0
- package/bin/data/index.js +8 -0
- package/bin/data/index.js.map +1 -0
- package/bin/pipeline/generate.d.ts +26 -0
- package/bin/pipeline/generate.js +269 -0
- package/bin/pipeline/generate.js.map +1 -0
- package/bin/reporters/data-loading.d.ts +121 -0
- package/bin/reporters/data-loading.js +398 -0
- package/bin/reporters/data-loading.js.map +1 -0
- package/bin/reporters/data-transformation.d.ts +101 -0
- package/bin/reporters/data-transformation.js +392 -0
- package/bin/reporters/data-transformation.js.map +1 -0
- package/bin/reporters/file-writing.d.ts +29 -0
- package/bin/reporters/file-writing.js +100 -0
- package/bin/reporters/file-writing.js.map +1 -0
- package/bin/reporters/generate-domain-documentation.d.ts +17 -0
- package/bin/reporters/generate-domain-documentation.js +161 -0
- package/bin/reporters/generate-domain-documentation.js.map +1 -0
- package/bin/reporters/generate-use-cases-documentation.d.ts +18 -0
- package/bin/reporters/generate-use-cases-documentation.js +123 -0
- package/bin/reporters/generate-use-cases-documentation.js.map +1 -0
- package/bin/reporters/rendering.d.ts +116 -0
- package/bin/reporters/rendering.js +385 -0
- package/bin/reporters/rendering.js.map +1 -0
- package/bin/reporters/templates/README.md +28 -0
- package/bin/reporters/templates/card.template.jsx +5 -0
- package/bin/reporters/templates/cards-container.template.jsx +5 -0
- package/bin/reporters/types.d.ts +190 -0
- package/bin/reporters/types.js +8 -0
- package/bin/reporters/types.js.map +1 -0
- package/bin/scaffold/assembler.d.ts +13 -0
- package/bin/scaffold/assembler.js +371 -0
- package/bin/scaffold/assembler.js.map +1 -0
- package/bin/scaffold/doc-assembler.d.ts +10 -0
- package/bin/scaffold/doc-assembler.js +113 -0
- package/bin/scaffold/doc-assembler.js.map +1 -0
- package/bin/scripts/add-import.d.ts +1 -0
- package/bin/scripts/add-import.js +26 -0
- package/bin/scripts/add-import.js.map +1 -0
- package/bin/scripts/converter.d.ts +6 -0
- package/bin/scripts/converter.js +120 -0
- package/bin/scripts/converter.js.map +1 -0
- package/bin/scripts/copy-files.d.ts +1 -0
- package/bin/scripts/copy-files.js +96 -0
- package/bin/scripts/copy-files.js.map +1 -0
- package/bin/scripts/create-folder.d.ts +1 -0
- package/bin/scripts/create-folder.js +23 -0
- package/bin/scripts/create-folder.js.map +1 -0
- package/bin/scripts/delete-paths.d.ts +1 -0
- package/bin/scripts/delete-paths.js +34 -0
- package/bin/scripts/delete-paths.js.map +1 -0
- package/bin/scripts/exists-file.d.ts +5 -0
- package/bin/scripts/exists-file.js +12 -0
- package/bin/scripts/exists-file.js.map +1 -0
- package/bin/scripts/generate-track-artifacts.d.ts +1 -0
- package/bin/scripts/generate-track-artifacts.js +59 -0
- package/bin/scripts/generate-track-artifacts.js.map +1 -0
- package/bin/scripts/get-artifacts.d.ts +1 -0
- package/bin/scripts/get-artifacts.js +38 -0
- package/bin/scripts/get-artifacts.js.map +1 -0
- package/bin/scripts/get-directories.d.ts +1 -0
- package/bin/scripts/get-directories.js +10 -0
- package/bin/scripts/get-directories.js.map +1 -0
- package/bin/scripts/get-file.d.ts +9 -0
- package/bin/scripts/get-file.js +38 -0
- package/bin/scripts/get-file.js.map +1 -0
- package/bin/scripts/labels.d.ts +35 -0
- package/bin/scripts/labels.js +108 -0
- package/bin/scripts/labels.js.map +1 -0
- package/bin/scripts/markdown.d.ts +34 -0
- package/bin/scripts/markdown.js +99 -0
- package/bin/scripts/markdown.js.map +1 -0
- package/bin/scripts/names.d.ts +18 -0
- package/bin/scripts/names.js +64 -0
- package/bin/scripts/names.js.map +1 -0
- package/bin/scripts/track-artifacts.d.ts +2 -0
- package/bin/scripts/track-artifacts.js +101 -0
- package/bin/scripts/track-artifacts.js.map +1 -0
- package/bin/utils/create-folder.d.ts +1 -0
- package/bin/utils/create-folder.js +23 -0
- package/bin/utils/create-folder.js.map +1 -0
- package/bin/utils/delete-markdown-files.d.ts +1 -0
- package/bin/utils/delete-markdown-files.js +46 -0
- package/bin/utils/delete-markdown-files.js.map +1 -0
- package/bin/utils/delete-paths.d.ts +5 -0
- package/bin/utils/delete-paths.js +26 -0
- package/bin/utils/delete-paths.js.map +1 -0
- package/bin/utils/exists-file.d.ts +6 -0
- package/bin/utils/exists-file.js +13 -0
- package/bin/utils/exists-file.js.map +1 -0
- package/bin/utils/exists-folder.d.ts +6 -0
- package/bin/utils/exists-folder.js +13 -0
- package/bin/utils/exists-folder.js.map +1 -0
- package/bin/utils/get-internal-resource-path.d.ts +1 -0
- package/bin/utils/get-internal-resource-path.js +43 -0
- package/bin/utils/get-internal-resource-path.js.map +1 -0
- package/bin/utils/get-json-file.d.ts +1 -0
- package/bin/utils/get-json-file.js +27 -0
- package/bin/utils/get-json-file.js.map +1 -0
- package/bin/utils/index.d.ts +6 -0
- package/bin/utils/index.js +16 -0
- package/bin/utils/index.js.map +1 -0
- package/bin/utils/run-command.d.ts +5 -0
- package/bin/utils/run-command.js +36 -0
- package/bin/utils/run-command.js.map +1 -0
- package/jsdoc.conf.json +30 -0
- package/package.json +75 -0
- package/templates/documentation/README.md +41 -0
- package/templates/documentation/docs/.gitkeep +0 -0
- package/templates/documentation/docusaurus.config.ts +127 -0
- package/templates/documentation/package-lock.json +19431 -0
- package/templates/documentation/package.json +49 -0
- package/templates/documentation/sidebars.ts +33 -0
- package/templates/documentation/src/components/ArtifactTable/FilterBar.tsx +185 -0
- package/templates/documentation/src/components/ArtifactTable/index.tsx +298 -0
- package/templates/documentation/src/components/ArtifactTable/styles.module.css +282 -0
- package/templates/documentation/src/components/ArtifactTable/types.ts +31 -0
- package/templates/documentation/src/components/HomepageFeatures/index.tsx +77 -0
- package/templates/documentation/src/components/HomepageFeatures/styles.module.css +11 -0
- package/templates/documentation/src/css/custom.css +30 -0
- package/templates/documentation/src/pages/index.module.css +23 -0
- package/templates/documentation/src/pages/index.tsx +43 -0
- package/templates/documentation/src/pages/markdown-page.md +7 -0
- package/templates/documentation/static/.nojekyll +0 -0
- package/templates/documentation/static/img/docusaurus-social-card.jpg +0 -0
- package/templates/documentation/static/img/docusaurus.png +0 -0
- package/templates/documentation/static/img/favicon.ico +0 -0
- package/templates/documentation/static/img/logo.svg +1 -0
- package/templates/documentation/static/img/logo_imolko_azul.png +0 -0
- package/templates/documentation/static/img/undraw_docusaurus_mountain.svg +171 -0
- package/templates/documentation/static/img/undraw_docusaurus_react.svg +170 -0
- package/templates/documentation/static/img/undraw_docusaurus_tree.svg +40 -0
- package/templates/documentation/tsconfig.json +8 -0
- package/templates/documentation/ultra-reporter.config.json +55 -0
- package/templates/track-artifacts-script.ts +44 -0
- 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[];
|