@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,392 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Data-transformation layer — pure functions that enrich and transform data.
|
|
4
|
+
// All functions are stateless and have no I/O side effects.
|
|
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.extractProperties = extractProperties;
|
|
41
|
+
exports.extractClassProperties = extractClassProperties;
|
|
42
|
+
exports.extractMethodDefinitions = extractMethodDefinitions;
|
|
43
|
+
exports.matchJsdocToArtifacts = matchJsdocToArtifacts;
|
|
44
|
+
exports.matchTests = matchTests;
|
|
45
|
+
exports.aggregateTestCounts = aggregateTestCounts;
|
|
46
|
+
exports.buildArtifactId = buildArtifactId;
|
|
47
|
+
exports.enrichArtifact = enrichArtifact;
|
|
48
|
+
exports.enrichUseCase = enrichUseCase;
|
|
49
|
+
exports.matchTestAnnotations = matchTestAnnotations;
|
|
50
|
+
exports.buildManifestEntries = buildManifestEntries;
|
|
51
|
+
const path = __importStar(require("path"));
|
|
52
|
+
const data_loading_1 = require("./data-loading");
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// extractProperties — extracts Property[] from JSDoc props.ts entries
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Extracts property definitions from JSDoc elements whose meta.filename is 'props.ts'.
|
|
58
|
+
* Iterates over each matching element's `.properties` array and maps them
|
|
59
|
+
* to typed Property objects.
|
|
60
|
+
*/
|
|
61
|
+
function extractProperties(jsdocElems) {
|
|
62
|
+
const properties = [];
|
|
63
|
+
for (const jsdocElem of jsdocElems) {
|
|
64
|
+
if (jsdocElem.meta?.filename !== 'props.ts') {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
if (!jsdocElem.properties) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
for (const prop of jsdocElem.properties) {
|
|
71
|
+
const elem = {
|
|
72
|
+
name: prop.name || '',
|
|
73
|
+
description: prop.description || '',
|
|
74
|
+
type: prop.type?.names?.[0]
|
|
75
|
+
? prop.type.names[0]
|
|
76
|
+
: '',
|
|
77
|
+
};
|
|
78
|
+
properties.push(elem);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return properties;
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// extractClassProperties — extracts ClassProperty[] from JSDoc definition.ts
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
/**
|
|
87
|
+
* Extracts ClassProperty definitions from JSDoc elements whose
|
|
88
|
+
* meta.filename is 'definition.ts' and meta.code.type is 'ClassProperty'.
|
|
89
|
+
*/
|
|
90
|
+
function extractClassProperties(jsdocElems) {
|
|
91
|
+
const classProperties = [];
|
|
92
|
+
for (const jsdocElem of jsdocElems) {
|
|
93
|
+
const type = jsdocElem.meta?.code?.type ?? '';
|
|
94
|
+
if (jsdocElem.meta?.filename !== 'definition.ts') {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
if (type !== 'ClassProperty') {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const elem = {
|
|
101
|
+
name: jsdocElem.name,
|
|
102
|
+
type: 'ClassProperty',
|
|
103
|
+
comment: jsdocElem.comment,
|
|
104
|
+
deprecated: jsdocElem.deprecated || '',
|
|
105
|
+
description: jsdocElem.description || '',
|
|
106
|
+
params: jsdocElem.params || [],
|
|
107
|
+
examples: jsdocElem.examples || [],
|
|
108
|
+
returns: jsdocElem.returns || [],
|
|
109
|
+
};
|
|
110
|
+
classProperties.push(elem);
|
|
111
|
+
}
|
|
112
|
+
return classProperties;
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// extractMethodDefinitions — extracts MethodDefinition[] from JSDoc
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
/**
|
|
118
|
+
* Extracts MethodDefinition from JSDoc elements whose meta.filename is
|
|
119
|
+
* 'definition.ts' and meta.code.type is 'MethodDefinition'.
|
|
120
|
+
*/
|
|
121
|
+
function extractMethodDefinitions(jsdocElems) {
|
|
122
|
+
const methodDefinitions = [];
|
|
123
|
+
for (const jsdocElem of jsdocElems) {
|
|
124
|
+
const codeType = jsdocElem.meta?.code?.type ?? '';
|
|
125
|
+
if (jsdocElem.meta?.filename !== 'definition.ts') {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (codeType !== 'MethodDefinition') {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const elem = {
|
|
132
|
+
name: jsdocElem.name,
|
|
133
|
+
type: 'MethodDefinition',
|
|
134
|
+
comment: jsdocElem.comment,
|
|
135
|
+
deprecated: jsdocElem.deprecated || '',
|
|
136
|
+
description: jsdocElem.description || '',
|
|
137
|
+
params: jsdocElem.params || [],
|
|
138
|
+
examples: jsdocElem.examples || [],
|
|
139
|
+
returns: jsdocElem.returns || [],
|
|
140
|
+
};
|
|
141
|
+
methodDefinitions.push(elem);
|
|
142
|
+
}
|
|
143
|
+
return methodDefinitions;
|
|
144
|
+
}
|
|
145
|
+
// ---------------------------------------------------------------------------
|
|
146
|
+
// matchJsdocToArtifacts — directory-based JSDoc path matching (FIXED)
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
/**
|
|
149
|
+
* Matches JSDoc elements to artifacts using directory-based path matching.
|
|
150
|
+
*
|
|
151
|
+
* For each artifact with jsondocMustMatchPath (e.g. "/MyEntity"), the function
|
|
152
|
+
* checks if the JSDoc element's meta.path contains that directory as a path
|
|
153
|
+
* segment (e.g. ".../MyEntity/definition.ts" matches "/MyEntity").
|
|
154
|
+
*
|
|
155
|
+
* This replaces the broken exact-suffix regex approach in the original code.
|
|
156
|
+
*/
|
|
157
|
+
function matchJsdocToArtifacts(jsdocData, artifacts) {
|
|
158
|
+
const result = new Map();
|
|
159
|
+
for (const jsdocElem of jsdocData) {
|
|
160
|
+
const jsdocPath = jsdocElem.meta?.path ?? '';
|
|
161
|
+
if (!jsdocPath) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
for (const artifact of artifacts) {
|
|
165
|
+
const targetPath = artifact.jsondocMustMatchPath;
|
|
166
|
+
if (!targetPath) {
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
// Strip leading slash for segment matching
|
|
170
|
+
const dirName = targetPath.replace(/^\//, '');
|
|
171
|
+
// Split path into segments and check for exact directory match
|
|
172
|
+
const segments = jsdocPath.split('/');
|
|
173
|
+
if (!segments.includes(dirName)) {
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
if (!result.has(targetPath)) {
|
|
177
|
+
result.set(targetPath, []);
|
|
178
|
+
}
|
|
179
|
+
result.get(targetPath).push(jsdocElem);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return result;
|
|
183
|
+
}
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
// matchTests — matches test files to an artifact by path inclusion
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
/**
|
|
188
|
+
* Returns test files whose testFilePath includes the given artifactPath.
|
|
189
|
+
* The original code uses `artifactPath + '/'` to prevent matching similar names.
|
|
190
|
+
*/
|
|
191
|
+
function matchTests(artifactPath, testResults) {
|
|
192
|
+
const matched = [];
|
|
193
|
+
for (const testFile of testResults) {
|
|
194
|
+
if ((testFile.testFilePath || '').includes(artifactPath)) {
|
|
195
|
+
matched.push(testFile);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return matched;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Sums pass/fail/pending/todo test counts across a list of test files.
|
|
202
|
+
*/
|
|
203
|
+
function aggregateTestCounts(tests) {
|
|
204
|
+
const counts = {
|
|
205
|
+
numPassingTests: 0,
|
|
206
|
+
numFailingTests: 0,
|
|
207
|
+
numPendingTests: 0,
|
|
208
|
+
numTodoTests: 0,
|
|
209
|
+
};
|
|
210
|
+
for (const test of tests) {
|
|
211
|
+
counts.numPassingTests += test.numPassingTests || 0;
|
|
212
|
+
counts.numFailingTests += test.numFailingTests || 0;
|
|
213
|
+
counts.numPendingTests += test.numPendingTests || 0;
|
|
214
|
+
counts.numTodoTests += test.numTodoTests || 0;
|
|
215
|
+
}
|
|
216
|
+
return counts;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Generates an anchor-safe id and a filename-safe idMarkdown from the
|
|
220
|
+
* artifact name and context name.
|
|
221
|
+
*
|
|
222
|
+
* - `id`: "contextName-artifactName" lowered, spaces→hyphens, stripped of special chars
|
|
223
|
+
* - `idMarkdown`: "artifactName" lowered, spaces→hyphens, stripped of special chars
|
|
224
|
+
*/
|
|
225
|
+
function buildArtifactId(name, contextName) {
|
|
226
|
+
const sanitize = (input) => input
|
|
227
|
+
.trim()
|
|
228
|
+
.toLocaleLowerCase()
|
|
229
|
+
.replace(/[\s\t]+/g, '-')
|
|
230
|
+
.replace(/[^a-zA-Z0-9\-]/g, '');
|
|
231
|
+
return {
|
|
232
|
+
id: sanitize(`${contextName}-${name}`),
|
|
233
|
+
idMarkdown: sanitize(name),
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
// enrichArtifact — composes extraction, loading, matching into EnrichedArtifact
|
|
238
|
+
// ---------------------------------------------------------------------------
|
|
239
|
+
/**
|
|
240
|
+
* Enriches a raw artifact with JSDoc data, YAML definition, attachments,
|
|
241
|
+
* matched test results, and computed IDs.
|
|
242
|
+
*
|
|
243
|
+
* Calls data-loading functions (loadArtifactMetadataAndContent) for I/O
|
|
244
|
+
* and pure transformation functions for data processing.
|
|
245
|
+
*/
|
|
246
|
+
async function enrichArtifact(artifact, jsdocElems, allTestResults, cwd, basePath, contextName) {
|
|
247
|
+
const properties = extractProperties(jsdocElems);
|
|
248
|
+
const classProperties = extractClassProperties(jsdocElems);
|
|
249
|
+
const methodDefinitions = extractMethodDefinitions(jsdocElems);
|
|
250
|
+
const { definition: definitionData, attachmentsMd } = await (0, data_loading_1.loadArtifactMetadataAndContent)(artifact.name, basePath, cwd);
|
|
251
|
+
// Build relative path so it matches test file paths (which are relative to cwd)
|
|
252
|
+
const artifactPath = path.relative(cwd, path.resolve(cwd, basePath, artifact.name)) + '/';
|
|
253
|
+
const testResults = matchTests(artifactPath, allTestResults);
|
|
254
|
+
const annotatedTestResults = matchTestAnnotations(testResults, jsdocElems);
|
|
255
|
+
const testCounts = aggregateTestCounts(annotatedTestResults);
|
|
256
|
+
const { id, idMarkdown } = buildArtifactId(artifact.name, contextName);
|
|
257
|
+
return {
|
|
258
|
+
name: artifact.name,
|
|
259
|
+
type: artifact.type,
|
|
260
|
+
jsondocMustMatchPath: artifact.jsondocMustMatchPath,
|
|
261
|
+
category: artifact.category,
|
|
262
|
+
description: definitionData.description || artifact.description || '',
|
|
263
|
+
id,
|
|
264
|
+
idMarkdown,
|
|
265
|
+
title: definitionData.title || artifact.name,
|
|
266
|
+
properties,
|
|
267
|
+
classProperties,
|
|
268
|
+
methodDefinitions,
|
|
269
|
+
tags: definitionData.tags || [],
|
|
270
|
+
hasAttachments: attachmentsMd.trim() !== '',
|
|
271
|
+
attachmentsMd,
|
|
272
|
+
testResults: annotatedTestResults,
|
|
273
|
+
...testCounts,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
// ---------------------------------------------------------------------------
|
|
277
|
+
// enrichUseCase — enriches a raw use-case with test data and computed IDs
|
|
278
|
+
// ---------------------------------------------------------------------------
|
|
279
|
+
/**
|
|
280
|
+
* Enriches a raw use-case with matched test results, aggregated test counts,
|
|
281
|
+
* and computed IDs.
|
|
282
|
+
*
|
|
283
|
+
* Uses the same matchTests and aggregateTestCounts as the domain pipeline.
|
|
284
|
+
* The ID-building differs from buildArtifactId: use-case IDs include the
|
|
285
|
+
* index (for uniqueness within a context) and idMarkdown uses the title
|
|
286
|
+
* instead of an artifact name.
|
|
287
|
+
*/
|
|
288
|
+
function enrichUseCase(raw, allTestResults, index, contextName) {
|
|
289
|
+
const sanitize = (input) => input
|
|
290
|
+
.trim()
|
|
291
|
+
.toLocaleLowerCase()
|
|
292
|
+
.replace(/[\s\t]+/g, '-')
|
|
293
|
+
.replace(/[^a-zA-Z0-9\-]/g, '');
|
|
294
|
+
const testResults = matchTests(raw.path, allTestResults);
|
|
295
|
+
const counts = aggregateTestCounts(testResults);
|
|
296
|
+
return {
|
|
297
|
+
...raw,
|
|
298
|
+
id: sanitize(`${contextName}-${raw.title}-${index}`),
|
|
299
|
+
idMarkdown: sanitize(raw.title),
|
|
300
|
+
testResults,
|
|
301
|
+
...counts,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// ---------------------------------------------------------------------------
|
|
305
|
+
// matchTestAnnotations — matches spec.ts JSDoc elements to test results
|
|
306
|
+
// ---------------------------------------------------------------------------
|
|
307
|
+
/**
|
|
308
|
+
* Matches JSDoc elements from .spec.ts files to individual test results.
|
|
309
|
+
*
|
|
310
|
+
* For each test result in each test file, finds the first JSDoc element
|
|
311
|
+
* whose `name` (from @name tag) is contained in the test's `fullName`
|
|
312
|
+
* AND whose `meta.path` shares at least one path segment with the test
|
|
313
|
+
* file's directory path.
|
|
314
|
+
*
|
|
315
|
+
* Matching annotations are attached as `result.annotation`.
|
|
316
|
+
*
|
|
317
|
+
* @param testFiles - Array of test files with their test results
|
|
318
|
+
* @param jsdocElems - JSDoc elements (may include spec.ts entries with annotations)
|
|
319
|
+
* @returns The test files with annotations attached (mutated in place)
|
|
320
|
+
*/
|
|
321
|
+
function matchTestAnnotations(testFiles, jsdocElems) {
|
|
322
|
+
// Filter to spec.ts JSDoc elements that have a name (@name tag required)
|
|
323
|
+
const specDocs = jsdocElems.filter((elem) => elem.meta?.filename?.includes('spec.ts') &&
|
|
324
|
+
!!elem.name);
|
|
325
|
+
if (specDocs.length === 0) {
|
|
326
|
+
return testFiles;
|
|
327
|
+
}
|
|
328
|
+
for (const testFile of testFiles) {
|
|
329
|
+
// Extract the directory path from the test file path
|
|
330
|
+
const testDir = extractDir(testFile.testFilePath);
|
|
331
|
+
for (const testResult of testFile.testResults) {
|
|
332
|
+
const match = specDocs.find((doc) => {
|
|
333
|
+
// Name matching: testFullName must include the JSDoc element's name
|
|
334
|
+
if (!testResult.fullName.includes(doc.name)) {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
// Path matching: test file's directory must be contained within
|
|
338
|
+
// the JSDoc element's meta.path (or vice versa), ensuring they
|
|
339
|
+
// belong to the same artifact directory.
|
|
340
|
+
const docPath = doc.meta?.path || '';
|
|
341
|
+
return testDir !== '' && docPath !== '' &&
|
|
342
|
+
(docPath.includes(testDir) || testDir.includes(docPath));
|
|
343
|
+
});
|
|
344
|
+
if (match) {
|
|
345
|
+
testResult.annotation = {
|
|
346
|
+
description: match.description || '',
|
|
347
|
+
tags: match.tags || [],
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return testFiles;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Extracts the directory portion of a file path (strips filename).
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* extractDir('/project/domain/src/MyEntity/entity.spec.ts')
|
|
359
|
+
* // => '/project/domain/src/MyEntity'
|
|
360
|
+
*/
|
|
361
|
+
function extractDir(filePath) {
|
|
362
|
+
const lastSlash = filePath.lastIndexOf('/');
|
|
363
|
+
return lastSlash >= 0 ? filePath.slice(0, lastSlash) : filePath;
|
|
364
|
+
}
|
|
365
|
+
// ---------------------------------------------------------------------------
|
|
366
|
+
// buildManifestEntries — converts enriched artifacts to manifest entries
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
/**
|
|
369
|
+
* Converts a list of enriched artifacts to manifest entries for the
|
|
370
|
+
* searchable artifact table.
|
|
371
|
+
*
|
|
372
|
+
* Aggregate artifacts get `categories: ["domain-artifacts", "aggregates"]`;
|
|
373
|
+
* all other types get `categories: ["domain-artifacts"]`.
|
|
374
|
+
*
|
|
375
|
+
* @param artifacts - The fully enriched artifacts
|
|
376
|
+
* @param contextName - The bounded context name for this package root
|
|
377
|
+
* @returns Manifest entries ready for serialization to JSON
|
|
378
|
+
*/
|
|
379
|
+
function buildManifestEntries(artifacts, contextName) {
|
|
380
|
+
return artifacts.map((artifact) => ({
|
|
381
|
+
name: artifact.name,
|
|
382
|
+
type: artifact.type,
|
|
383
|
+
tags: artifact.tags || [],
|
|
384
|
+
contextName,
|
|
385
|
+
description: artifact.description || '',
|
|
386
|
+
idMarkdown: artifact.idMarkdown,
|
|
387
|
+
categories: artifact.type === 'aggregate'
|
|
388
|
+
? ['domain-artifacts', 'aggregates']
|
|
389
|
+
: ['domain-artifacts'],
|
|
390
|
+
}));
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=data-transformation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-transformation.js","sourceRoot":"","sources":["../../src/reporters/data-transformation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ArtifactManifestEntry, UseCasePage } from './types';
|
|
2
|
+
/** A rendered artifact page ready for writing. */
|
|
3
|
+
export interface ArtifactPage {
|
|
4
|
+
markdown: string;
|
|
5
|
+
destPaths: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Writes each artifact page to its destination paths.
|
|
9
|
+
* Creates parent directories as needed and overwrites existing files.
|
|
10
|
+
*
|
|
11
|
+
* Aggregates get written to multiple destinations (domain + aggregates tabs).
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeArtifactPages(pages: ArtifactPage[]): void;
|
|
14
|
+
/**
|
|
15
|
+
* Writes each use-case page to its destination path.
|
|
16
|
+
* Creates parent directories as needed and overwrites existing files.
|
|
17
|
+
*/
|
|
18
|
+
export declare function writeUseCasePages(pages: UseCasePage[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* Appends artifact manifest entries to `static/data/artifacts-manifest.json`
|
|
21
|
+
* inside the given documentation path.
|
|
22
|
+
*
|
|
23
|
+
* Reads the existing manifest if it exists, appends the new entries, and
|
|
24
|
+
* writes the combined array back. Creates parent directories as needed.
|
|
25
|
+
*
|
|
26
|
+
* @param entries - The manifest entries to append
|
|
27
|
+
* @param documentationPath - Root path of the documentation site
|
|
28
|
+
*/
|
|
29
|
+
export declare function appendManifestToStatic(entries: ArtifactManifestEntry[], documentationPath: string): void;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// File-writing layer — writes rendered artifact pages to disk.
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.writeArtifactPages = writeArtifactPages;
|
|
40
|
+
exports.writeUseCasePages = writeUseCasePages;
|
|
41
|
+
exports.appendManifestToStatic = appendManifestToStatic;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
/**
|
|
45
|
+
* Writes each artifact page to its destination paths.
|
|
46
|
+
* Creates parent directories as needed and overwrites existing files.
|
|
47
|
+
*
|
|
48
|
+
* Aggregates get written to multiple destinations (domain + aggregates tabs).
|
|
49
|
+
*/
|
|
50
|
+
function writeArtifactPages(pages) {
|
|
51
|
+
for (const page of pages) {
|
|
52
|
+
for (const destPath of page.destPaths) {
|
|
53
|
+
const dir = path.dirname(destPath);
|
|
54
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
55
|
+
fs.writeFileSync(destPath, page.markdown);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Writes each use-case page to its destination path.
|
|
61
|
+
* Creates parent directories as needed and overwrites existing files.
|
|
62
|
+
*/
|
|
63
|
+
function writeUseCasePages(pages) {
|
|
64
|
+
for (const page of pages) {
|
|
65
|
+
const dir = path.dirname(page.destPath);
|
|
66
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
67
|
+
fs.writeFileSync(page.destPath, page.markdown);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// appendManifestToStatic — appends artifact entries to the static manifest
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
/**
|
|
74
|
+
* Appends artifact manifest entries to `static/data/artifacts-manifest.json`
|
|
75
|
+
* inside the given documentation path.
|
|
76
|
+
*
|
|
77
|
+
* Reads the existing manifest if it exists, appends the new entries, and
|
|
78
|
+
* writes the combined array back. Creates parent directories as needed.
|
|
79
|
+
*
|
|
80
|
+
* @param entries - The manifest entries to append
|
|
81
|
+
* @param documentationPath - Root path of the documentation site
|
|
82
|
+
*/
|
|
83
|
+
function appendManifestToStatic(entries, documentationPath) {
|
|
84
|
+
const manifestDir = path.join(documentationPath, 'static', 'data');
|
|
85
|
+
const manifestPath = path.join(manifestDir, 'artifacts-manifest.json');
|
|
86
|
+
let existing = [];
|
|
87
|
+
if (fs.existsSync(manifestPath)) {
|
|
88
|
+
try {
|
|
89
|
+
const raw = fs.readFileSync(manifestPath, 'utf8');
|
|
90
|
+
existing = JSON.parse(raw);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
existing = [];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const combined = [...existing, ...entries];
|
|
97
|
+
fs.mkdirSync(manifestDir, { recursive: true });
|
|
98
|
+
fs.writeFileSync(manifestPath, JSON.stringify(combined, null, 2));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=file-writing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-writing.js","sourceRoot":"","sources":["../../src/reporters/file-writing.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkB9E,gDAQC;AAMD,8CAMC;AAgBD,wDAsBC;AA1ED,uCAAyB;AACzB,2CAA6B;AAS7B;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,KAAqB;IACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,KAAoB;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,SAAgB,sBAAsB,CACpC,OAAgC,EAChC,iBAAyB;IAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IAEvE,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAE3C,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAClD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;IAE3C,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface DomainReporterArgs {
|
|
2
|
+
packageRootName: string;
|
|
3
|
+
contextName: string;
|
|
4
|
+
documentationPath: string;
|
|
5
|
+
domainPath: string;
|
|
6
|
+
domainTabName: string;
|
|
7
|
+
aggregateTabName: string;
|
|
8
|
+
templateDir: string;
|
|
9
|
+
repoSourceUrl?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Generates domain documentation by composing the full pipeline:
|
|
13
|
+
* load artifacts/JSDoc/tests → match & enrich → render → write.
|
|
14
|
+
*
|
|
15
|
+
* @param args - Paths and naming configuration
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateDomainDocumentation(args: DomainReporterArgs): Promise<void>;
|