@rawsql-ts/test-evidence-renderer-md 0.3.0

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 ADDED
@@ -0,0 +1,22 @@
1
+ # @rawsql-ts/test-evidence-renderer-md
2
+
3
+ Markdown projection renderers for test evidence models and diffs.
4
+
5
+ ## Scope
6
+
7
+ - Markdown output only
8
+ - Depends on semantic models from `@rawsql-ts/test-evidence-core`
9
+ - Does not compute diffs or normalize semantics
10
+
11
+ ## Projection Rule
12
+
13
+ Renderer output is a projection. Source of truth remains core models (`SpecificationModel` / `DiffJson`).
14
+
15
+ ## Options Policy
16
+
17
+ Renderer options are presentation-only.
18
+
19
+ - Allowed: layout, verbosity, ordering style
20
+ - Not allowed: semantic transforms, model normalization, diff computation changes
21
+
22
+ For specification markdown, `expected: "throws"` cases render `error` blocks and never render `output` blocks.
@@ -0,0 +1,14 @@
1
+ export type DefinitionLinkOptions = {
2
+ mode?: 'path' | 'github';
3
+ path?: {
4
+ markdownDir: string;
5
+ sourceRootDir: string;
6
+ };
7
+ github?: {
8
+ serverUrl: string;
9
+ repository: string;
10
+ ref: string;
11
+ };
12
+ };
13
+ export declare function formatDefinitionMarkdown(definitionPath: string | undefined, options?: DefinitionLinkOptions): string;
14
+ export declare function formatFileLinkMarkdown(definitionPath: string | undefined, options?: DefinitionLinkOptions): string;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.formatDefinitionMarkdown = formatDefinitionMarkdown;
7
+ exports.formatFileLinkMarkdown = formatFileLinkMarkdown;
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ function normalizePosixPath(input) {
10
+ return input.replace(/\\/g, '/').replace(/^\/+/, '');
11
+ }
12
+ function trimTrailingSlash(input) {
13
+ return input.endsWith('/') ? input.slice(0, -1) : input;
14
+ }
15
+ function toRelativePath(definitionPath, options) {
16
+ const normalizedPath = normalizePosixPath(definitionPath);
17
+ if (options.mode !== 'path' || !options.path) {
18
+ return normalizedPath;
19
+ }
20
+ const absoluteTarget = node_path_1.default.resolve(options.path.sourceRootDir, normalizedPath);
21
+ const absoluteMarkdownDir = node_path_1.default.resolve(options.path.markdownDir);
22
+ const relative = node_path_1.default.relative(absoluteMarkdownDir, absoluteTarget);
23
+ return normalizePosixPath(relative || normalizedPath);
24
+ }
25
+ function toGithubBlobUrl(definitionPath, options) {
26
+ if (options.mode !== 'github' || !options.github) {
27
+ return undefined;
28
+ }
29
+ const normalizedPath = normalizePosixPath(definitionPath);
30
+ const serverUrl = trimTrailingSlash(options.github.serverUrl);
31
+ const repository = options.github.repository.trim();
32
+ const ref = options.github.ref.trim();
33
+ if (!serverUrl || !repository || !ref || !normalizedPath) {
34
+ return undefined;
35
+ }
36
+ const encodedPath = normalizedPath.split('/').map((part) => encodeURIComponent(part)).join('/');
37
+ return `${serverUrl}/${repository}/blob/${encodeURIComponent(ref)}/${encodedPath}`;
38
+ }
39
+ function formatDefinitionMarkdown(definitionPath, options) {
40
+ if (!definitionPath) {
41
+ return '(unknown)';
42
+ }
43
+ const normalizedPath = normalizePosixPath(definitionPath);
44
+ if (!normalizedPath) {
45
+ return '(unknown)';
46
+ }
47
+ const resolvedOptions = options !== null && options !== void 0 ? options : {};
48
+ const githubUrl = toGithubBlobUrl(normalizedPath, resolvedOptions);
49
+ if (githubUrl) {
50
+ return `[${normalizedPath}](${githubUrl})`;
51
+ }
52
+ const relativePath = toRelativePath(normalizedPath, resolvedOptions);
53
+ return `[${normalizedPath}](${relativePath})`;
54
+ }
55
+ function formatFileLinkMarkdown(definitionPath, options) {
56
+ if (!definitionPath) {
57
+ return '(unknown)';
58
+ }
59
+ const normalizedPath = normalizePosixPath(definitionPath);
60
+ if (!normalizedPath) {
61
+ return '(unknown)';
62
+ }
63
+ const resolvedOptions = options !== null && options !== void 0 ? options : {};
64
+ const githubUrl = toGithubBlobUrl(normalizedPath, resolvedOptions);
65
+ if (githubUrl) {
66
+ return `[File](${githubUrl})`;
67
+ }
68
+ const relativePath = toRelativePath(normalizedPath, resolvedOptions);
69
+ return `[File](${relativePath})`;
70
+ }
71
+ //# sourceMappingURL=definitionLink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitionLink.js","sourceRoot":"","sources":["../src/definitionLink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { renderDiffMarkdown, renderLegacyDiffMarkdown, type RemovedDetailLevel } from './prDiffMarkdown';
2
+ export { type DefinitionLinkOptions } from './definitionLink';
3
+ export { renderDiffReportMarkdown, evaluateUnsupportedSchemaValidation, type DiffReportMarkdownMeta } from './reportMarkdown';
4
+ export { renderSpecificationMarkdown, type SpecificationMarkdownOptions } from './specificationMarkdown';
5
+ export { renderTestDocumentationMarkdown, type TestDocumentationMarkdownOptions } from './testDocumentationMarkdown';
package/dist/index.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderTestDocumentationMarkdown = exports.renderSpecificationMarkdown = exports.evaluateUnsupportedSchemaValidation = exports.renderDiffReportMarkdown = exports.renderLegacyDiffMarkdown = exports.renderDiffMarkdown = void 0;
4
+ var prDiffMarkdown_1 = require("./prDiffMarkdown");
5
+ Object.defineProperty(exports, "renderDiffMarkdown", { enumerable: true, get: function () { return prDiffMarkdown_1.renderDiffMarkdown; } });
6
+ Object.defineProperty(exports, "renderLegacyDiffMarkdown", { enumerable: true, get: function () { return prDiffMarkdown_1.renderLegacyDiffMarkdown; } });
7
+ var reportMarkdown_1 = require("./reportMarkdown");
8
+ Object.defineProperty(exports, "renderDiffReportMarkdown", { enumerable: true, get: function () { return reportMarkdown_1.renderDiffReportMarkdown; } });
9
+ Object.defineProperty(exports, "evaluateUnsupportedSchemaValidation", { enumerable: true, get: function () { return reportMarkdown_1.evaluateUnsupportedSchemaValidation; } });
10
+ var specificationMarkdown_1 = require("./specificationMarkdown");
11
+ Object.defineProperty(exports, "renderSpecificationMarkdown", { enumerable: true, get: function () { return specificationMarkdown_1.renderSpecificationMarkdown; } });
12
+ var testDocumentationMarkdown_1 = require("./testDocumentationMarkdown");
13
+ Object.defineProperty(exports, "renderTestDocumentationMarkdown", { enumerable: true, get: function () { return testDocumentationMarkdown_1.renderTestDocumentationMarkdown; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyG;AAAhG,oHAAA,kBAAkB,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAErD,mDAI0B;AAHxB,0HAAA,wBAAwB,OAAA;AACxB,qIAAA,mCAAmC,OAAA;AAGrC,iEAAyG;AAAhG,oIAAA,2BAA2B,OAAA;AAEpC,yEAAqH;AAA5G,4IAAA,+BAA+B,OAAA"}
@@ -0,0 +1,16 @@
1
+ import { DiffJson } from '@rawsql-ts/test-evidence-core';
2
+ import { DefinitionLinkOptions } from './definitionLink';
3
+ export type RemovedDetailLevel = 'none' | 'input' | 'full';
4
+ /**
5
+ * Legacy PR markdown renderer kept for parity snapshot baseline.
6
+ */
7
+ export declare function renderLegacyDiffMarkdown(diff: DiffJson, options?: {
8
+ removedDetail?: RemovedDetailLevel;
9
+ definitionLinks?: DefinitionLinkOptions;
10
+ }): string;
11
+ /**
12
+ * Test-centric PR markdown renderer.
13
+ */
14
+ export declare function renderDiffMarkdown(diff: DiffJson, options?: {
15
+ definitionLinks?: DefinitionLinkOptions;
16
+ }): string;
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderLegacyDiffMarkdown = renderLegacyDiffMarkdown;
4
+ exports.renderDiffMarkdown = renderDiffMarkdown;
5
+ const definitionLink_1 = require("./definitionLink");
6
+ /**
7
+ * Legacy PR markdown renderer kept for parity snapshot baseline.
8
+ */
9
+ function renderLegacyDiffMarkdown(diff, options) {
10
+ var _a;
11
+ const removedDetail = (_a = options === null || options === void 0 ? void 0 : options.removedDetail) !== null && _a !== void 0 ? _a : 'input';
12
+ const definitionLinks = options === null || options === void 0 ? void 0 : options.definitionLinks;
13
+ const lines = [];
14
+ lines.push('# Test Evidence (PR Diff)');
15
+ lines.push('');
16
+ if (diff.baseMode === 'merge-base') {
17
+ lines.push(`- base: merge-base(${diff.base.ref}, ${diff.head.ref}) (${diff.base.sha})`);
18
+ }
19
+ else {
20
+ lines.push(`- base: ${diff.base.ref} (${diff.base.sha})`);
21
+ }
22
+ lines.push(`- head: ${diff.head.ref} (${diff.head.sha})`);
23
+ lines.push(`- base-mode: ${diff.baseMode}`);
24
+ lines.push(`- catalogs: +${diff.summary.catalogs.added} / -${diff.summary.catalogs.removed} / ~${diff.summary.catalogs.updated}`);
25
+ lines.push(`- tests: +${diff.summary.cases.added} / -${diff.summary.cases.removed} / ~${diff.summary.cases.updated}`);
26
+ lines.push(`- base totals: catalogs=${diff.totals.base.catalogs} tests=${diff.totals.base.tests}`);
27
+ lines.push(`- head totals: catalogs=${diff.totals.head.catalogs} tests=${diff.totals.head.tests}`);
28
+ lines.push('');
29
+ lines.push('## Added catalogs');
30
+ lines.push('');
31
+ if (diff.catalogs.added.length === 0 && diff.catalogs.updated.every((entry) => entry.cases.added.length === 0)) {
32
+ lines.push('- (none)');
33
+ lines.push('');
34
+ }
35
+ else {
36
+ for (const entry of diff.catalogs.added) {
37
+ renderCatalogHeader(lines, entry.catalogAfter, definitionLinks);
38
+ for (const [index, testCase] of entry.catalogAfter.cases.entries()) {
39
+ renderCase(lines, testCase);
40
+ if (index < entry.catalogAfter.cases.length - 1) {
41
+ lines.push('---');
42
+ lines.push('');
43
+ }
44
+ }
45
+ }
46
+ }
47
+ lines.push('## Removed catalogs');
48
+ lines.push('');
49
+ if (diff.catalogs.removed.length === 0 && diff.catalogs.updated.every((entry) => entry.cases.removed.length === 0)) {
50
+ lines.push('- (none)');
51
+ lines.push('');
52
+ }
53
+ else {
54
+ for (const entry of diff.catalogs.removed) {
55
+ renderCatalogHeader(lines, entry.catalogBefore, definitionLinks);
56
+ for (const [index, testCase] of entry.catalogBefore.cases.entries()) {
57
+ renderRemovedCase(lines, testCase, removedDetail);
58
+ if (index < entry.catalogBefore.cases.length - 1) {
59
+ lines.push('---');
60
+ lines.push('');
61
+ }
62
+ }
63
+ }
64
+ }
65
+ lines.push('## Updated catalogs');
66
+ lines.push('');
67
+ if (diff.catalogs.updated.length === 0) {
68
+ lines.push('- (none)');
69
+ lines.push('');
70
+ }
71
+ else {
72
+ for (const entry of diff.catalogs.updated) {
73
+ if (entry.cases.added.length === 0 &&
74
+ entry.cases.removed.length === 0 &&
75
+ entry.cases.updated.length === 0) {
76
+ continue;
77
+ }
78
+ renderCatalogHeader(lines, entry.catalogAfter, definitionLinks);
79
+ if (entry.cases.added.length > 0) {
80
+ lines.push('#### Added cases');
81
+ lines.push('');
82
+ for (const [index, testCase] of entry.cases.added.map((item) => item.after).entries()) {
83
+ renderCase(lines, testCase);
84
+ if (index < entry.cases.added.length - 1) {
85
+ lines.push('---');
86
+ lines.push('');
87
+ }
88
+ }
89
+ }
90
+ if (entry.cases.removed.length > 0) {
91
+ lines.push('#### Removed cases');
92
+ lines.push('');
93
+ for (const [index, testCase] of entry.cases.removed.map((item) => item.before).entries()) {
94
+ renderRemovedCase(lines, testCase, removedDetail);
95
+ if (index < entry.cases.removed.length - 1) {
96
+ lines.push('---');
97
+ lines.push('');
98
+ }
99
+ }
100
+ }
101
+ if (entry.cases.updated.length > 0) {
102
+ lines.push('#### Updated cases');
103
+ lines.push('');
104
+ for (const [index, updated] of entry.cases.updated.entries()) {
105
+ lines.push(`### ${updated.after.id} - ${updated.after.title}`);
106
+ lines.push('input (before):');
107
+ lines.push('```json');
108
+ lines.push(JSON.stringify(updated.before.input, null, 2));
109
+ lines.push('```');
110
+ lines.push('input (after):');
111
+ lines.push('```json');
112
+ lines.push(JSON.stringify(updated.after.input, null, 2));
113
+ lines.push('```');
114
+ lines.push('output (before):');
115
+ lines.push('```json');
116
+ lines.push(JSON.stringify(updated.before.output, null, 2));
117
+ lines.push('```');
118
+ lines.push('output (after):');
119
+ lines.push('```json');
120
+ lines.push(JSON.stringify(updated.after.output, null, 2));
121
+ lines.push('```');
122
+ lines.push('');
123
+ if (index < entry.cases.updated.length - 1) {
124
+ lines.push('---');
125
+ lines.push('');
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ lines.push('');
132
+ return lines.join('\n');
133
+ }
134
+ /**
135
+ * Test-centric PR markdown renderer.
136
+ */
137
+ function renderDiffMarkdown(diff, options) {
138
+ const definitionLinks = options === null || options === void 0 ? void 0 : options.definitionLinks;
139
+ const lines = [];
140
+ lines.push('# Test Evidence (PR Diff)');
141
+ lines.push('');
142
+ if (diff.baseMode === 'merge-base') {
143
+ lines.push(`- base: merge-base(${diff.base.ref}, ${diff.head.ref}) (${diff.base.sha})`);
144
+ }
145
+ else {
146
+ lines.push(`- base: ${diff.base.ref} (${diff.base.sha})`);
147
+ }
148
+ lines.push(`- head: ${diff.head.ref} (${diff.head.sha})`);
149
+ lines.push(`- base-mode: ${diff.baseMode}`);
150
+ lines.push(`- tests: +${diff.summary.cases.added} / ~${diff.summary.cases.updated} / -${diff.summary.cases.removed}`);
151
+ lines.push(`- base totals: tests=${diff.totals.base.tests}`);
152
+ lines.push(`- head totals: tests=${diff.totals.head.tests}`);
153
+ lines.push('');
154
+ const groups = buildCatalogCaseGroups(diff);
155
+ for (const group of groups) {
156
+ lines.push(`## ${group.catalogId} - ${group.title}`);
157
+ lines.push('');
158
+ lines.push((0, definitionLink_1.formatFileLinkMarkdown)(group.definitionPath, definitionLinks));
159
+ lines.push('');
160
+ for (const testCase of group.cases) {
161
+ lines.push(`### ${testCase.changeType}: ${testCase.id} - ${testCase.title}`);
162
+ lines.push('');
163
+ appendCaseBlocks(lines, testCase);
164
+ }
165
+ }
166
+ lines.push('');
167
+ return lines.join('\n');
168
+ }
169
+ function buildCatalogCaseGroups(diff) {
170
+ var _a, _b, _c;
171
+ const groups = new Map();
172
+ for (const entry of diff.catalogs.added) {
173
+ const group = getOrCreateGroup(groups, entry.catalogAfter.catalogId, entry.catalogAfter.title, (_a = entry.catalogAfter.definition) !== null && _a !== void 0 ? _a : '(unknown)');
174
+ for (const testCase of entry.catalogAfter.cases) {
175
+ group.cases.push({
176
+ changeType: 'ADD',
177
+ id: testCase.id,
178
+ title: testCase.title,
179
+ inputAfter: testCase.input,
180
+ outputAfter: testCase.output
181
+ });
182
+ }
183
+ }
184
+ for (const entry of diff.catalogs.removed) {
185
+ const group = getOrCreateGroup(groups, entry.catalogBefore.catalogId, entry.catalogBefore.title, (_b = entry.catalogBefore.definition) !== null && _b !== void 0 ? _b : '(unknown)');
186
+ for (const testCase of entry.catalogBefore.cases) {
187
+ group.cases.push({
188
+ changeType: 'REMOVE',
189
+ id: testCase.id,
190
+ title: testCase.title,
191
+ inputBefore: testCase.input,
192
+ outputBefore: testCase.output
193
+ });
194
+ }
195
+ }
196
+ for (const entry of diff.catalogs.updated) {
197
+ const group = getOrCreateGroup(groups, entry.catalogAfter.catalogId, entry.catalogAfter.title, (_c = entry.catalogAfter.definition) !== null && _c !== void 0 ? _c : '(unknown)');
198
+ for (const added of entry.cases.added) {
199
+ group.cases.push({
200
+ changeType: 'ADD',
201
+ id: added.after.id,
202
+ title: added.after.title,
203
+ inputAfter: added.after.input,
204
+ outputAfter: added.after.output
205
+ });
206
+ }
207
+ for (const removed of entry.cases.removed) {
208
+ group.cases.push({
209
+ changeType: 'REMOVE',
210
+ id: removed.before.id,
211
+ title: removed.before.title,
212
+ inputBefore: removed.before.input,
213
+ outputBefore: removed.before.output
214
+ });
215
+ }
216
+ for (const updated of entry.cases.updated) {
217
+ group.cases.push({
218
+ changeType: 'UPDATE',
219
+ id: updated.after.id,
220
+ title: updated.after.title,
221
+ inputBefore: updated.before.input,
222
+ inputAfter: updated.after.input,
223
+ outputBefore: updated.before.output,
224
+ outputAfter: updated.after.output
225
+ });
226
+ }
227
+ }
228
+ return [...groups.values()]
229
+ .map((group) => ({
230
+ ...group,
231
+ cases: [...group.cases].sort((a, b) => a.id.localeCompare(b.id))
232
+ }))
233
+ .sort((a, b) => a.catalogId.localeCompare(b.catalogId));
234
+ }
235
+ function getOrCreateGroup(groups, catalogId, title, definitionPath) {
236
+ const existing = groups.get(catalogId);
237
+ if (existing) {
238
+ if (existing.definitionPath === '(unknown)' && definitionPath !== '(unknown)') {
239
+ existing.definitionPath = definitionPath;
240
+ }
241
+ return existing;
242
+ }
243
+ const created = { catalogId, title, definitionPath, cases: [] };
244
+ groups.set(catalogId, created);
245
+ return created;
246
+ }
247
+ function appendCaseBlocks(lines, testCase) {
248
+ if (testCase.changeType === 'UPDATE') {
249
+ lines.push('**before**');
250
+ lines.push('');
251
+ lines.push('input');
252
+ lines.push('```json');
253
+ lines.push(JSON.stringify(testCase.inputBefore, null, 2));
254
+ lines.push('```');
255
+ lines.push('output');
256
+ lines.push('```json');
257
+ lines.push(JSON.stringify(testCase.outputBefore, null, 2));
258
+ lines.push('```');
259
+ lines.push('');
260
+ lines.push('**after**');
261
+ lines.push('');
262
+ lines.push('input');
263
+ lines.push('```json');
264
+ lines.push(JSON.stringify(testCase.inputAfter, null, 2));
265
+ lines.push('```');
266
+ lines.push('output');
267
+ lines.push('```json');
268
+ lines.push(JSON.stringify(testCase.outputAfter, null, 2));
269
+ lines.push('```');
270
+ lines.push('');
271
+ return;
272
+ }
273
+ if (testCase.changeType === 'REMOVE') {
274
+ lines.push('**before**');
275
+ lines.push('');
276
+ lines.push('input');
277
+ lines.push('```json');
278
+ lines.push(JSON.stringify(testCase.inputBefore, null, 2));
279
+ lines.push('```');
280
+ lines.push('output');
281
+ lines.push('```json');
282
+ lines.push(JSON.stringify(testCase.outputBefore, null, 2));
283
+ lines.push('```');
284
+ lines.push('');
285
+ return;
286
+ }
287
+ lines.push('**after**');
288
+ lines.push('');
289
+ lines.push('input');
290
+ lines.push('```json');
291
+ lines.push(JSON.stringify(testCase.inputAfter, null, 2));
292
+ lines.push('```');
293
+ lines.push('output');
294
+ lines.push('```json');
295
+ lines.push(JSON.stringify(testCase.outputAfter, null, 2));
296
+ lines.push('```');
297
+ lines.push('');
298
+ }
299
+ function renderCatalogHeader(lines, catalog, definitionLinks) {
300
+ var _a;
301
+ lines.push(`### ${catalog.catalogId} - ${catalog.title}`);
302
+ if (catalog.kind === 'sql') {
303
+ lines.push(`- definition: ${(0, definitionLink_1.formatDefinitionMarkdown)(catalog.definition, definitionLinks)}`);
304
+ lines.push('- fixtures:');
305
+ for (const tableName of (_a = catalog.fixtures) !== null && _a !== void 0 ? _a : []) {
306
+ lines.push(` - ${tableName}`);
307
+ }
308
+ }
309
+ lines.push('');
310
+ }
311
+ function renderCase(lines, testCase) {
312
+ lines.push(`### ${testCase.id} - ${testCase.title}`);
313
+ lines.push('input:');
314
+ lines.push('```json');
315
+ lines.push(JSON.stringify(testCase.input, null, 2));
316
+ lines.push('```');
317
+ lines.push('output:');
318
+ lines.push('```json');
319
+ lines.push(JSON.stringify(testCase.output, null, 2));
320
+ lines.push('```');
321
+ lines.push('');
322
+ }
323
+ function renderRemovedCase(lines, testCase, detail) {
324
+ lines.push(`### ${testCase.id} - ${testCase.title}`);
325
+ if (detail === 'none') {
326
+ lines.push('');
327
+ return;
328
+ }
329
+ lines.push('input:');
330
+ lines.push('```json');
331
+ lines.push(JSON.stringify(testCase.input, null, 2));
332
+ lines.push('```');
333
+ if (detail === 'full') {
334
+ lines.push('output:');
335
+ lines.push('```json');
336
+ lines.push(JSON.stringify(testCase.output, null, 2));
337
+ lines.push('```');
338
+ }
339
+ lines.push('');
340
+ }
341
+ //# sourceMappingURL=prDiffMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prDiffMarkdown.js","sourceRoot":"","sources":["../src/prDiffMarkdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { DiffJson, type PreviewJson } from '@rawsql-ts/test-evidence-core';
2
+ /**
3
+ * Metadata attached to a rendered diff report.
4
+ */
5
+ export type DiffReportMarkdownMeta = {
6
+ /**
7
+ * ISO-8601 timestamp representing when the markdown was generated.
8
+ */
9
+ generatedAt: string;
10
+ /**
11
+ * Optional result of the deterministic unsupported-schema probe.
12
+ */
13
+ unsupportedSchemaValidation?: {
14
+ /**
15
+ * Whether the probe was executed.
16
+ */
17
+ checked: boolean;
18
+ /**
19
+ * Whether the observed error exactly matched the deterministic expectation.
20
+ */
21
+ passed: boolean;
22
+ };
23
+ };
24
+ /**
25
+ * Render a deterministic markdown report from diff facts and generation metadata.
26
+ *
27
+ * @param diff Diff payload containing header references, summary counters, and catalog changes.
28
+ * @param meta Report metadata including generated timestamp and optional unsupported-schema probe result.
29
+ * @returns Markdown with Header, Summary, Catalog changes, and Validation sections. The returned string ends with `\n`.
30
+ */
31
+ export declare function renderDiffReportMarkdown(diff: DiffJson, meta: DiffReportMarkdownMeta): string;
32
+ /**
33
+ * Probe unsupported preview schema handling by invoking `buildDiffJson` with `schemaVersion + 1`.
34
+ *
35
+ * @param args Probe input including `buildDiffJson`, base/head preview payloads, and base mode.
36
+ * @returns `{ checked, passed }`, where `passed` is true only when `DiffCoreError` matches expected code/path/schemaVersion.
37
+ */
38
+ export declare function evaluateUnsupportedSchemaValidation(args: {
39
+ buildDiffJson: (input: {
40
+ base: {
41
+ ref: string;
42
+ sha: string;
43
+ previewJson: PreviewJson;
44
+ };
45
+ head: {
46
+ ref: string;
47
+ sha: string;
48
+ previewJson: PreviewJson;
49
+ };
50
+ baseMode: 'merge-base' | 'ref';
51
+ }) => DiffJson;
52
+ base: {
53
+ ref: string;
54
+ sha: string;
55
+ previewJson: PreviewJson;
56
+ };
57
+ head: {
58
+ ref: string;
59
+ sha: string;
60
+ previewJson: PreviewJson;
61
+ };
62
+ baseMode: 'merge-base' | 'ref';
63
+ }): {
64
+ checked: boolean;
65
+ passed: boolean;
66
+ };
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderDiffReportMarkdown = renderDiffReportMarkdown;
4
+ exports.evaluateUnsupportedSchemaValidation = evaluateUnsupportedSchemaValidation;
5
+ const test_evidence_core_1 = require("@rawsql-ts/test-evidence-core");
6
+ /**
7
+ * Render a deterministic markdown report from diff facts and generation metadata.
8
+ *
9
+ * @param diff Diff payload containing header references, summary counters, and catalog changes.
10
+ * @param meta Report metadata including generated timestamp and optional unsupported-schema probe result.
11
+ * @returns Markdown with Header, Summary, Catalog changes, and Validation sections. The returned string ends with `\n`.
12
+ */
13
+ function renderDiffReportMarkdown(diff, meta) {
14
+ var _a;
15
+ const lines = [];
16
+ const rows = collectCatalogChangeRows(diff);
17
+ lines.push('# Header');
18
+ lines.push(`- generatedAt: ${meta.generatedAt}`);
19
+ lines.push(`- schemaVersion: ${diff.schemaVersion}`);
20
+ lines.push(`- base.ref: ${diff.base.ref}`);
21
+ lines.push(`- base.sha: ${diff.base.sha}`);
22
+ lines.push(`- head.ref: ${diff.head.ref}`);
23
+ lines.push(`- head.sha: ${diff.head.sha}`);
24
+ lines.push(`- baseMode: ${diff.baseMode}`);
25
+ lines.push('');
26
+ lines.push('# Summary');
27
+ lines.push(`- catalogs.added: ${diff.summary.catalogs.added}`);
28
+ lines.push(`- catalogs.removed: ${diff.summary.catalogs.removed}`);
29
+ lines.push(`- catalogs.updated: ${diff.summary.catalogs.updated}`);
30
+ lines.push(`- cases.added: ${diff.summary.cases.added}`);
31
+ lines.push(`- cases.removed: ${diff.summary.cases.removed}`);
32
+ lines.push(`- cases.updated: ${diff.summary.cases.updated}`);
33
+ lines.push('');
34
+ lines.push('# Catalog changes');
35
+ for (const row of rows) {
36
+ lines.push(`- catalogId: ${row.catalogId}`);
37
+ lines.push(` - title: ${row.title}`);
38
+ lines.push(` - definitionPath: ${row.definitionPath}`);
39
+ lines.push(` - cases.added: ${formatIdList(row.casesAdded)}`);
40
+ lines.push(` - cases.removed: ${formatIdList(row.casesRemoved)}`);
41
+ lines.push(` - cases.updated: ${formatIdList(row.casesUpdated)}`);
42
+ }
43
+ if (rows.length === 0) {
44
+ lines.push('- none');
45
+ }
46
+ lines.push('');
47
+ lines.push('# Validation');
48
+ lines.push(`- schemaVersionSupported: ${diff.schemaVersion === test_evidence_core_1.DIFF_SCHEMA_VERSION ? 'yes' : 'no'}`);
49
+ if ((_a = meta.unsupportedSchemaValidation) === null || _a === void 0 ? void 0 : _a.checked) {
50
+ lines.push(`- deterministicUnsupportedSchemaErrorPresent: ${meta.unsupportedSchemaValidation.passed ? 'yes' : 'no'}`);
51
+ }
52
+ else {
53
+ lines.push('- deterministicUnsupportedSchemaErrorPresent: not-evaluated');
54
+ }
55
+ return `${lines.join('\n')}\n`;
56
+ }
57
+ /**
58
+ * Probe unsupported preview schema handling by invoking `buildDiffJson` with `schemaVersion + 1`.
59
+ *
60
+ * @param args Probe input including `buildDiffJson`, base/head preview payloads, and base mode.
61
+ * @returns `{ checked, passed }`, where `passed` is true only when `DiffCoreError` matches expected code/path/schemaVersion.
62
+ */
63
+ function evaluateUnsupportedSchemaValidation(args) {
64
+ const mutatedBase = {
65
+ ...args.base.previewJson,
66
+ schemaVersion: test_evidence_core_1.PREVIEW_SCHEMA_VERSION + 1
67
+ };
68
+ try {
69
+ args.buildDiffJson({
70
+ base: { ref: args.base.ref, sha: args.base.sha, previewJson: mutatedBase },
71
+ head: args.head,
72
+ baseMode: args.baseMode
73
+ });
74
+ return { checked: true, passed: false };
75
+ }
76
+ catch (error) {
77
+ const deterministic = error instanceof test_evidence_core_1.DiffCoreError &&
78
+ error.code === 'UNSUPPORTED_SCHEMA_VERSION' &&
79
+ error.path === 'base.schemaVersion' &&
80
+ error.schemaVersion === test_evidence_core_1.PREVIEW_SCHEMA_VERSION + 1;
81
+ return { checked: true, passed: deterministic };
82
+ }
83
+ }
84
+ function collectCatalogChangeRows(diff) {
85
+ var _a, _b, _c, _d, _e;
86
+ const map = new Map();
87
+ for (const entry of diff.catalogs.added) {
88
+ map.set(entry.catalogAfter.catalogId, {
89
+ catalogId: entry.catalogAfter.catalogId,
90
+ title: entry.catalogAfter.title,
91
+ definitionPath: (_a = entry.catalogAfter.definition) !== null && _a !== void 0 ? _a : '',
92
+ casesAdded: entry.catalogAfter.cases.map((testCase) => testCase.id).sort((a, b) => a.localeCompare(b)),
93
+ casesRemoved: [],
94
+ casesUpdated: []
95
+ });
96
+ }
97
+ for (const entry of diff.catalogs.removed) {
98
+ map.set(entry.catalogBefore.catalogId, {
99
+ catalogId: entry.catalogBefore.catalogId,
100
+ title: entry.catalogBefore.title,
101
+ definitionPath: (_b = entry.catalogBefore.definition) !== null && _b !== void 0 ? _b : '',
102
+ casesAdded: [],
103
+ casesRemoved: entry.catalogBefore.cases.map((testCase) => testCase.id).sort((a, b) => a.localeCompare(b)),
104
+ casesUpdated: []
105
+ });
106
+ }
107
+ for (const entry of diff.catalogs.updated) {
108
+ const row = (_c = map.get(entry.catalogId)) !== null && _c !== void 0 ? _c : {
109
+ catalogId: entry.catalogId,
110
+ title: entry.catalogAfter.title,
111
+ definitionPath: (_d = entry.catalogAfter.definition) !== null && _d !== void 0 ? _d : '',
112
+ casesAdded: [],
113
+ casesRemoved: [],
114
+ casesUpdated: []
115
+ };
116
+ row.title = entry.catalogAfter.title;
117
+ row.definitionPath = (_e = entry.catalogAfter.definition) !== null && _e !== void 0 ? _e : '';
118
+ row.casesAdded = mergeSortedUnique(row.casesAdded, entry.cases.added.map((item) => item.after.id));
119
+ row.casesRemoved = mergeSortedUnique(row.casesRemoved, entry.cases.removed.map((item) => item.before.id));
120
+ row.casesUpdated = mergeSortedUnique(row.casesUpdated, entry.cases.updated.map((item) => item.after.id));
121
+ map.set(entry.catalogId, row);
122
+ }
123
+ return [...map.values()].sort((a, b) => a.catalogId.localeCompare(b.catalogId));
124
+ }
125
+ function formatIdList(values) {
126
+ return values.length > 0 ? values.join(', ') : '-';
127
+ }
128
+ function mergeSortedUnique(existing, incoming) {
129
+ return [...new Set([...existing, ...incoming])].sort((a, b) => a.localeCompare(b));
130
+ }
131
+ //# sourceMappingURL=reportMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportMarkdown.js","sourceRoot":"","sources":["../src/reportMarkdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { SpecificationModel } from '@rawsql-ts/test-evidence-core';
2
+ import { DefinitionLinkOptions } from './definitionLink';
3
+ export type SpecificationMarkdownOptions = {
4
+ includeFixtures?: boolean;
5
+ definitionLinks?: DefinitionLinkOptions;
6
+ title?: string;
7
+ };
8
+ /**
9
+ * Render markdown for a pure specification model.
10
+ * Presentation options only affect markdown shape and never semantic transforms.
11
+ */
12
+ export declare function renderSpecificationMarkdown(model: SpecificationModel, options?: SpecificationMarkdownOptions): string;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderSpecificationMarkdown = renderSpecificationMarkdown;
4
+ const definitionLink_1 = require("./definitionLink");
5
+ /**
6
+ * Render markdown for a pure specification model.
7
+ * Presentation options only affect markdown shape and never semantic transforms.
8
+ */
9
+ function renderSpecificationMarkdown(model, options) {
10
+ var _a, _b, _c;
11
+ const includeFixtures = (_a = options === null || options === void 0 ? void 0 : options.includeFixtures) !== null && _a !== void 0 ? _a : true;
12
+ const definitionLinks = options === null || options === void 0 ? void 0 : options.definitionLinks;
13
+ const title = (_b = options === null || options === void 0 ? void 0 : options.title) !== null && _b !== void 0 ? _b : 'Test Evidence Specification';
14
+ const lines = [];
15
+ for (const catalog of model.catalogs) {
16
+ lines.push(`# ${catalog.catalogId} Test Cases`);
17
+ lines.push('');
18
+ lines.push(`- schemaVersion: ${model.schemaVersion}`);
19
+ lines.push(`- title: ${catalog.title}`);
20
+ lines.push(`- definition: ${(0, definitionLink_1.formatDefinitionMarkdown)(catalog.definition, definitionLinks)}`);
21
+ if (catalog.description) {
22
+ lines.push(`- description: ${catalog.description}`);
23
+ }
24
+ if (Array.isArray(catalog.refs) && catalog.refs.length > 0) {
25
+ lines.push('- refs:');
26
+ for (const ref of catalog.refs) {
27
+ lines.push(` - [${ref.label}](${ref.url})`);
28
+ }
29
+ }
30
+ lines.push(`- tests: ${catalog.cases.length}`);
31
+ if (catalog.kind === 'sql' && includeFixtures) {
32
+ lines.push(`- fixtures: ${((_c = catalog.fixtures) !== null && _c !== void 0 ? _c : []).join(', ') || '(none)'}`);
33
+ }
34
+ lines.push('');
35
+ for (const testCase of [...catalog.cases].sort((a, b) => a.id.localeCompare(b.id))) {
36
+ lines.push(`## ${testCase.id} - ${testCase.title}`);
37
+ lines.push(`- expected: ${testCase.expected}`);
38
+ lines.push(`- tags: ${formatCaseTags(testCase.tags)}`);
39
+ lines.push(`- focus: ${formatCaseFocus(testCase.focus)}`);
40
+ if (Array.isArray(testCase.refs) && testCase.refs.length > 0) {
41
+ lines.push('- refs:');
42
+ for (const ref of testCase.refs) {
43
+ lines.push(` - [${ref.label}](${ref.url})`);
44
+ }
45
+ }
46
+ lines.push('### input');
47
+ lines.push('```json');
48
+ lines.push(stringifyStablePretty(testCase.input));
49
+ lines.push('```');
50
+ if (testCase.expected === 'throws') {
51
+ lines.push('### error');
52
+ lines.push('```json');
53
+ lines.push(stringifyErrorPretty(testCase.error));
54
+ lines.push('```');
55
+ }
56
+ else {
57
+ lines.push('### output');
58
+ lines.push('```json');
59
+ lines.push(stringifyStablePretty(testCase.output));
60
+ lines.push('```');
61
+ }
62
+ lines.push('');
63
+ }
64
+ lines.push('');
65
+ }
66
+ if (lines[0] === undefined) {
67
+ return `# ${title}\n\n- schemaVersion: ${model.schemaVersion}\n- catalogs: ${model.totals.catalogs}\n`;
68
+ }
69
+ return lines.join('\n').trimEnd();
70
+ }
71
+ function stringifyStablePretty(value) {
72
+ var _a;
73
+ return (_a = JSON.stringify(sortDeep(value), null, 2)) !== null && _a !== void 0 ? _a : 'null';
74
+ }
75
+ function stringifyErrorPretty(value) {
76
+ var _a;
77
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
78
+ return 'null';
79
+ }
80
+ const source = value;
81
+ return (_a = JSON.stringify({
82
+ name: source.name,
83
+ message: source.message,
84
+ match: source.match
85
+ }, null, 2)) !== null && _a !== void 0 ? _a : 'null';
86
+ }
87
+ function formatCaseTags(tags) {
88
+ if (!Array.isArray(tags) || tags.length === 0) {
89
+ return '[]';
90
+ }
91
+ return `[${tags.join(', ')}]`;
92
+ }
93
+ function formatCaseFocus(focus) {
94
+ if (typeof focus === 'string' && focus.trim().length > 0) {
95
+ return focus.trim();
96
+ }
97
+ return '(not specified)';
98
+ }
99
+ function sortDeep(value) {
100
+ if (Array.isArray(value)) {
101
+ return value.map((item) => sortDeep(item));
102
+ }
103
+ if (value !== null && typeof value === 'object') {
104
+ const entries = Object.entries(value)
105
+ .sort((a, b) => a[0].localeCompare(b[0]))
106
+ .map(([key, nested]) => [key, sortDeep(nested)]);
107
+ return Object.fromEntries(entries);
108
+ }
109
+ return value;
110
+ }
111
+ //# sourceMappingURL=specificationMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specificationMarkdown.js","sourceRoot":"","sources":["../src/specificationMarkdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { SpecificationModel } from '@rawsql-ts/test-evidence-core';
2
+ import { DefinitionLinkOptions } from './definitionLink';
3
+ export type TestDocumentationMarkdownOptions = {
4
+ definitionLinks?: DefinitionLinkOptions;
5
+ title?: string;
6
+ };
7
+ /**
8
+ * Render human-readable test documentation from the deterministic specification model.
9
+ * This projection is presentation-only and must never mutate or reinterpret the semantic model.
10
+ */
11
+ export declare function renderTestDocumentationMarkdown(model: SpecificationModel, options?: TestDocumentationMarkdownOptions): string;
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderTestDocumentationMarkdown = renderTestDocumentationMarkdown;
4
+ const definitionLink_1 = require("./definitionLink");
5
+ /**
6
+ * Render human-readable test documentation from the deterministic specification model.
7
+ * This projection is presentation-only and must never mutate or reinterpret the semantic model.
8
+ */
9
+ function renderTestDocumentationMarkdown(model, options) {
10
+ var _a, _b, _c, _d, _e;
11
+ const definitionLinks = options === null || options === void 0 ? void 0 : options.definitionLinks;
12
+ const title = (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'ZTD Test Documentation';
13
+ const lines = [];
14
+ lines.push(`# ${title}`);
15
+ lines.push('');
16
+ lines.push(`- schemaVersion: ${model.schemaVersion}`);
17
+ lines.push(`- catalogs: ${model.totals.catalogs}`);
18
+ lines.push(`- functionCatalogs: ${model.totals.functionCatalogs}`);
19
+ lines.push(`- sqlCatalogs: ${model.totals.sqlCatalogs}`);
20
+ lines.push(`- tests: ${model.totals.tests}`);
21
+ lines.push('');
22
+ for (const catalog of [...model.catalogs].sort((a, b) => a.catalogId.localeCompare(b.catalogId))) {
23
+ lines.push(`## ${catalog.catalogId} - ${catalog.title}`);
24
+ lines.push(`- targetType: ${catalog.kind === 'sql' ? 'sql-catalog' : 'function-unit'}`);
25
+ lines.push(`- targetName: ${catalog.title}`);
26
+ lines.push(`- definition: ${(0, definitionLink_1.formatDefinitionMarkdown)((_b = catalog.definition) !== null && _b !== void 0 ? _b : '(unknown)', definitionLinks)}`);
27
+ lines.push(`- purpose: ${(_c = catalog.description) !== null && _c !== void 0 ? _c : formatCatalogPurpose(catalog)}`);
28
+ lines.push(`- tests: ${catalog.cases.length}`);
29
+ if (catalog.kind === 'sql') {
30
+ lines.push(`- fixtures: ${((_d = catalog.fixtures) !== null && _d !== void 0 ? _d : []).join(', ') || '(none)'}`);
31
+ }
32
+ if (Array.isArray(catalog.refs) && catalog.refs.length > 0) {
33
+ lines.push('- refs:');
34
+ for (const ref of catalog.refs) {
35
+ lines.push(` - [${ref.label}](${ref.url})`);
36
+ }
37
+ }
38
+ lines.push('');
39
+ lines.push('### Test Case List');
40
+ for (const testCase of [...catalog.cases].sort((a, b) => a.id.localeCompare(b.id))) {
41
+ lines.push(`- ${testCase.id}: ${testCase.title}`);
42
+ }
43
+ lines.push('');
44
+ for (const testCase of [...catalog.cases].sort((a, b) => a.id.localeCompare(b.id))) {
45
+ lines.push(`### ${testCase.id} - ${testCase.title}`);
46
+ lines.push(`- purpose: ${formatCasePurpose(testCase)}`);
47
+ lines.push(`- execution: ${formatExecutionSummary(catalog, testCase)}`);
48
+ lines.push(`- expectedSummary: ${formatExpectedSummary(testCase)}`);
49
+ lines.push(`- coverage: ${formatCoveragePerspective(testCase)}`);
50
+ if (Array.isArray(testCase.refs) && testCase.refs.length > 0) {
51
+ lines.push('- refs:');
52
+ for (const ref of testCase.refs) {
53
+ lines.push(` - [${ref.label}](${ref.url})`);
54
+ }
55
+ }
56
+ lines.push('#### Input / Setup');
57
+ if (catalog.kind === 'sql') {
58
+ lines.push(`- fixtures: ${((_e = catalog.fixtures) !== null && _e !== void 0 ? _e : []).join(', ') || '(none)'}`);
59
+ }
60
+ lines.push('```json');
61
+ lines.push(stringifyStablePretty(testCase.input));
62
+ lines.push('```');
63
+ lines.push('#### Expected Result');
64
+ if (testCase.expected === 'throws') {
65
+ lines.push('```json');
66
+ lines.push(stringifyErrorPretty(testCase.error));
67
+ lines.push('```');
68
+ }
69
+ else {
70
+ lines.push('```json');
71
+ lines.push(stringifyStablePretty(testCase.output));
72
+ lines.push('```');
73
+ }
74
+ lines.push('#### Notes / Assumptions');
75
+ lines.push(`- ${formatCaseNotes(testCase)}`);
76
+ lines.push('');
77
+ }
78
+ }
79
+ return lines.join('\n').trimEnd();
80
+ }
81
+ function formatCatalogPurpose(catalog) {
82
+ if (catalog.kind === 'sql') {
83
+ return 'Executable SQL catalog coverage projected from deterministic ZTD test assets.';
84
+ }
85
+ return 'Executable unit-test coverage projected from deterministic ZTD test assets.';
86
+ }
87
+ function formatCasePurpose(testCase) {
88
+ if (typeof testCase.focus === 'string' && testCase.focus.trim().length > 0) {
89
+ return testCase.focus.trim();
90
+ }
91
+ return testCase.title;
92
+ }
93
+ function formatExecutionSummary(catalog, testCase) {
94
+ var _a;
95
+ if (catalog.kind === 'sql') {
96
+ const fixtures = ((_a = catalog.fixtures) !== null && _a !== void 0 ? _a : []).join(', ') || 'no fixtures';
97
+ return `Execute the SQL catalog with the documented parameters against fixtures: ${fixtures}.`;
98
+ }
99
+ if (testCase.expected === 'throws') {
100
+ return 'Execute the target unit with the arranged input and capture the thrown error contract.';
101
+ }
102
+ return 'Execute the target unit with the arranged input and compare the returned value.';
103
+ }
104
+ function formatExpectedSummary(testCase) {
105
+ var _a, _b, _c, _d, _e, _f;
106
+ if (testCase.expected === 'throws') {
107
+ const name = (_b = (_a = testCase.error) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : 'Error';
108
+ const message = (_d = (_c = testCase.error) === null || _c === void 0 ? void 0 : _c.message) !== null && _d !== void 0 ? _d : '(message unspecified)';
109
+ const match = (_f = (_e = testCase.error) === null || _e === void 0 ? void 0 : _e.match) !== null && _f !== void 0 ? _f : 'contains';
110
+ return `Throws ${name}; message ${match} \"${message}\".`;
111
+ }
112
+ if (Array.isArray(testCase.output)) {
113
+ return `Returns ${testCase.output.length} row(s).`;
114
+ }
115
+ return `Returns ${summarizeScalarOutput(testCase.output)}.`;
116
+ }
117
+ function summarizeScalarOutput(value) {
118
+ var _a;
119
+ if (value === null) {
120
+ return 'null';
121
+ }
122
+ if (Array.isArray(value)) {
123
+ return `${value.length} item(s)`;
124
+ }
125
+ if (typeof value === 'object') {
126
+ return 'an object value';
127
+ }
128
+ return (_a = JSON.stringify(value)) !== null && _a !== void 0 ? _a : 'an unspecified value';
129
+ }
130
+ function formatCoveragePerspective(testCase) {
131
+ const classification = classifyCoveragePerspective(testCase);
132
+ const tags = Array.isArray(testCase.tags) && testCase.tags.length > 0
133
+ ? `[${testCase.tags.join(', ')}]`
134
+ : '[]';
135
+ return `${classification}; tags=${tags}`;
136
+ }
137
+ function classifyCoveragePerspective(testCase) {
138
+ var _a, _b;
139
+ const tags = new Set(((_a = testCase.tags) !== null && _a !== void 0 ? _a : []).map((tag) => tag.toLowerCase()));
140
+ const text = `${testCase.id} ${testCase.title} ${(_b = testCase.focus) !== null && _b !== void 0 ? _b : ''}`.toLowerCase();
141
+ if (text.includes('regression') || text.includes('bugfix') || text.includes('hotfix') || text.includes('issue')) {
142
+ return 'regression';
143
+ }
144
+ if (testCase.expected === 'throws' || tags.has('bva') || text.includes('boundary') || text.includes('edge')) {
145
+ return 'edge';
146
+ }
147
+ if (text.includes('baseline') ||
148
+ text.includes('smoke') ||
149
+ text.includes('noop') ||
150
+ text.includes('normal') ||
151
+ tags.size > 0) {
152
+ return 'normal';
153
+ }
154
+ return 'unspecified';
155
+ }
156
+ function formatCaseNotes(testCase) {
157
+ if (Array.isArray(testCase.refs) && testCase.refs.length > 0) {
158
+ return 'See refs for linked issue or design context.';
159
+ }
160
+ if (testCase.expected === 'throws') {
161
+ return 'Error matching remains part of the executable contract.';
162
+ }
163
+ return 'No extra assumptions were exported for this case.';
164
+ }
165
+ function stringifyStablePretty(value) {
166
+ var _a;
167
+ return (_a = JSON.stringify(sortDeep(value), null, 2)) !== null && _a !== void 0 ? _a : 'null';
168
+ }
169
+ function stringifyErrorPretty(value) {
170
+ var _a;
171
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
172
+ return 'null';
173
+ }
174
+ const source = value;
175
+ return (_a = JSON.stringify({
176
+ name: source.name,
177
+ message: source.message,
178
+ match: source.match,
179
+ }, null, 2)) !== null && _a !== void 0 ? _a : 'null';
180
+ }
181
+ function sortDeep(value) {
182
+ if (Array.isArray(value)) {
183
+ return value.map((item) => sortDeep(item));
184
+ }
185
+ if (value !== null && typeof value === 'object') {
186
+ const entries = Object.entries(value)
187
+ .sort((a, b) => a[0].localeCompare(b[0]))
188
+ .map(([key, nested]) => [key, sortDeep(nested)]);
189
+ return Object.fromEntries(entries);
190
+ }
191
+ return value;
192
+ }
193
+ //# sourceMappingURL=testDocumentationMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testDocumentationMarkdown.js","sourceRoot":"","sources":["../src/testDocumentationMarkdown.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@rawsql-ts/test-evidence-renderer-md",
3
+ "version": "0.3.0",
4
+ "description": "Markdown projection renderers for rawsql-ts test evidence models.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "prepack": "node -e \"const fs=require('fs');const cp=require('child_process');const npm=process.platform==='win32'?'npm.cmd':'npm';if(!fs.existsSync('dist/index.js')){process.exit(cp.spawnSync(npm,['run','build'],{stdio:'inherit'}).status??1)}\"",
15
+ "build": "pnpm --filter @rawsql-ts/test-evidence-core run build && tsc -p tsconfig.json",
16
+ "test": "vitest run --config vitest.config.ts",
17
+ "test:watch": "vitest --config vitest.config.ts",
18
+ "lint": "eslint src --ext .ts",
19
+ "release": "npm run lint && npm run test && npm run build && node -e \"require('fs').mkdirSync('../../tmp', { recursive: true })\" && pnpm pack --out ../../tmp/rawsql-ts-test-evidence-renderer-md.tgz && pnpm publish --access public"
20
+ },
21
+ "keywords": [
22
+ "rawsql-ts",
23
+ "test-evidence",
24
+ "markdown",
25
+ "renderer"
26
+ ],
27
+ "license": "MIT",
28
+ "author": "msugiura",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/mk3008/rawsql-ts.git",
32
+ "directory": "packages/test-evidence-renderer-md"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "engines": {
38
+ "node": ">=20"
39
+ },
40
+ "dependencies": {
41
+ "@rawsql-ts/test-evidence-core": "workspace:*"
42
+ },
43
+ "devDependencies": {
44
+ "typescript": "^5.8.2",
45
+ "vitest": "^4.0.7"
46
+ },
47
+ "files": [
48
+ "dist"
49
+ ]
50
+ }