@commercetools/nimbus-docs-build 0.0.0-canary-20251201100514 → 0.0.0-canary-20251201161148
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/dist/parsers/index.d.ts +1 -0
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +1 -0
- package/dist/parsers/index.js.map +1 -1
- package/dist/parsers/parse-mdx.d.ts.map +1 -1
- package/dist/parsers/parse-mdx.js +96 -2
- package/dist/parsers/parse-mdx.js.map +1 -1
- package/dist/parsers/test-extractor.d.ts +14 -0
- package/dist/parsers/test-extractor.d.ts.map +1 -0
- package/dist/parsers/test-extractor.js +169 -0
- package/dist/parsers/test-extractor.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/test-section.d.ts +37 -0
- package/dist/types/test-section.d.ts.map +1 -0
- package/dist/types/test-section.js +2 -0
- package/dist/types/test-section.js.map +1 -0
- package/package.json +3 -1
package/dist/parsers/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
package/dist/parsers/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parsers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-mdx.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-mdx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-mdx.d.ts","sourceRoot":"","sources":["../../src/parsers/parse-mdx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,iBAAiB,CAAC;AA6M5D;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmG7B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAkBnC"}
|
|
@@ -12,6 +12,92 @@ import remarkFlexibleToc from "remark-flexible-toc";
|
|
|
12
12
|
import { mdxDocumentSchema } from "../schemas/mdx-document.js";
|
|
13
13
|
import { menuToPath, getPathFromMonorepoRoot } from "../utils/index.js";
|
|
14
14
|
import { validateFilePath } from "../utils/validate-file-path.js";
|
|
15
|
+
import { extractTestSections } from "./test-extractor.js";
|
|
16
|
+
/**
|
|
17
|
+
* Resolve the path to a .docs.spec.ts file from an MDX file path
|
|
18
|
+
* @param mdxFilePath - Absolute path to the MDX file
|
|
19
|
+
* @param testFileName - Name of the test file from the {{docs-tests:}} token
|
|
20
|
+
* @returns Absolute path to the test file
|
|
21
|
+
*/
|
|
22
|
+
const resolveTestFilePath = (mdxFilePath, testFileName) => {
|
|
23
|
+
const mdxDir = path.dirname(mdxFilePath);
|
|
24
|
+
return path.join(mdxDir, testFileName);
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Generate markdown section from a test section
|
|
28
|
+
* @param section - Extracted test section
|
|
29
|
+
* @returns Markdown string with heading, description, and code block
|
|
30
|
+
*/
|
|
31
|
+
const generateMarkdownSection = (section) => {
|
|
32
|
+
const lines = [];
|
|
33
|
+
// Add heading
|
|
34
|
+
lines.push(`### ${section.title}`);
|
|
35
|
+
lines.push("");
|
|
36
|
+
// Add description if present
|
|
37
|
+
if (section.description) {
|
|
38
|
+
lines.push(section.description);
|
|
39
|
+
lines.push("");
|
|
40
|
+
}
|
|
41
|
+
// Add code block with full, unmodified code
|
|
42
|
+
lines.push("```tsx");
|
|
43
|
+
// Add imports (deduplicated)
|
|
44
|
+
const uniqueImports = Array.from(new Set(section.imports));
|
|
45
|
+
if (uniqueImports.length > 0) {
|
|
46
|
+
lines.push(uniqueImports.join("\n"));
|
|
47
|
+
lines.push("");
|
|
48
|
+
}
|
|
49
|
+
// Add test code (unmodified - show exactly what developers write)
|
|
50
|
+
lines.push(section.code);
|
|
51
|
+
lines.push("```");
|
|
52
|
+
lines.push("");
|
|
53
|
+
return lines.join("\n");
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Inject test sections into MDX content by replacing {{docs-tests:}} tokens
|
|
57
|
+
* @param mdxContent - MDX content that may contain {{docs-tests:}} tokens
|
|
58
|
+
* @param mdxFilePath - Absolute path to the MDX file (for resolving test file paths)
|
|
59
|
+
* @returns MDX content with test sections injected
|
|
60
|
+
*/
|
|
61
|
+
const injectTestSections = async (mdxContent, mdxFilePath) => {
|
|
62
|
+
// Pattern: {{docs-tests: filename.docs.spec.ts}}
|
|
63
|
+
const tokenPattern = /\{\{docs-tests:\s*([^}]+)\}\}/g;
|
|
64
|
+
let result = mdxContent;
|
|
65
|
+
const matches = mdxContent.matchAll(tokenPattern);
|
|
66
|
+
for (const match of matches) {
|
|
67
|
+
const [fullMatch, testFileName] = match;
|
|
68
|
+
try {
|
|
69
|
+
// Resolve test file path
|
|
70
|
+
const testFilePath = resolveTestFilePath(mdxFilePath, testFileName.trim());
|
|
71
|
+
// Check if test file exists
|
|
72
|
+
try {
|
|
73
|
+
await fs.access(testFilePath);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
console.warn(`Test file not found: ${testFilePath} (referenced in ${path.basename(mdxFilePath)})`);
|
|
77
|
+
// Leave token in place if file doesn't exist
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// Extract test sections
|
|
81
|
+
const sections = await extractTestSections(testFilePath);
|
|
82
|
+
if (sections.length === 0) {
|
|
83
|
+
console.warn(`No test sections found in ${testFileName} (add @docs-section JSDoc tags)`);
|
|
84
|
+
// Leave token in place if no sections found
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
// Generate markdown for all sections
|
|
88
|
+
const sectionMarkdown = sections
|
|
89
|
+
.map((section) => generateMarkdownSection(section))
|
|
90
|
+
.join("\n");
|
|
91
|
+
// Replace token with generated markdown
|
|
92
|
+
result = result.replace(fullMatch, sectionMarkdown);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error(`Error processing test file ${testFileName}:`, error instanceof Error ? error.message : error);
|
|
96
|
+
// Leave token in place on error
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
};
|
|
15
101
|
/**
|
|
16
102
|
* Generate table of contents from MDX content (without frontmatter)
|
|
17
103
|
* @param content - The MDX content string with frontmatter already removed
|
|
@@ -62,7 +148,11 @@ const getViewMdxFiles = async (baseMdxPath) => {
|
|
|
62
148
|
const parseSingleMdx = async (filePath) => {
|
|
63
149
|
try {
|
|
64
150
|
const content = await fs.readFile(filePath, "utf8");
|
|
65
|
-
const { data: frontmatter, content:
|
|
151
|
+
const { data: frontmatter, content: mdxContent } = matter(content);
|
|
152
|
+
// Inject test sections if {{docs-tests:}} tokens are present
|
|
153
|
+
const mdx = mdxContent.includes("{{docs-tests:")
|
|
154
|
+
? await injectTestSections(mdxContent, filePath)
|
|
155
|
+
: mdxContent;
|
|
66
156
|
const toc = await generateToc(mdx);
|
|
67
157
|
return { mdx, toc, frontmatter };
|
|
68
158
|
}
|
|
@@ -92,7 +182,11 @@ export async function parseMdxFile(filePath) {
|
|
|
92
182
|
}
|
|
93
183
|
// Read main file content
|
|
94
184
|
const content = await fs.readFile(filePath, "utf8");
|
|
95
|
-
const { data: meta, content:
|
|
185
|
+
const { data: meta, content: mdxContent } = matter(content);
|
|
186
|
+
// Inject test sections if {{docs-tests:}} tokens are present
|
|
187
|
+
const mdx = mdxContent.includes("{{docs-tests:")
|
|
188
|
+
? await injectTestSections(mdxContent, filePath)
|
|
189
|
+
: mdxContent;
|
|
96
190
|
// Generate TOC for main file
|
|
97
191
|
const toc = await generateToc(mdx);
|
|
98
192
|
// Get relative path from monorepo root
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-mdx.js","sourceRoot":"","sources":["../../src/parsers/parse-mdx.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,iBAEN,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-mdx.js","sourceRoot":"","sources":["../../src/parsers/parse-mdx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TestSection } from "../types/test-section.js";
|
|
2
|
+
/**
|
|
3
|
+
* Extracts test sections from a .docs.spec.ts file for documentation injection
|
|
4
|
+
*
|
|
5
|
+
* Finds describe() blocks with JSDoc @docs-section tags and extracts:
|
|
6
|
+
* - Metadata from JSDoc tags
|
|
7
|
+
* - Full source code of the describe block
|
|
8
|
+
* - Required imports
|
|
9
|
+
*
|
|
10
|
+
* @param testFilePath - Absolute path to the .docs.spec.ts file
|
|
11
|
+
* @returns Array of test sections sorted by order
|
|
12
|
+
*/
|
|
13
|
+
export declare function extractTestSections(testFilePath: string): Promise<TestSection[]>;
|
|
14
|
+
//# sourceMappingURL=test-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-extractor.d.ts","sourceRoot":"","sources":["../../src/parsers/test-extractor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,EAAE,CAAC,CA2DxB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { parse } from "@typescript-eslint/typescript-estree";
|
|
3
|
+
/**
|
|
4
|
+
* Extracts test sections from a .docs.spec.ts file for documentation injection
|
|
5
|
+
*
|
|
6
|
+
* Finds describe() blocks with JSDoc @docs-section tags and extracts:
|
|
7
|
+
* - Metadata from JSDoc tags
|
|
8
|
+
* - Full source code of the describe block
|
|
9
|
+
* - Required imports
|
|
10
|
+
*
|
|
11
|
+
* @param testFilePath - Absolute path to the .docs.spec.ts file
|
|
12
|
+
* @returns Array of test sections sorted by order
|
|
13
|
+
*/
|
|
14
|
+
export async function extractTestSections(testFilePath) {
|
|
15
|
+
// Read the test file
|
|
16
|
+
const sourceCode = await readFile(testFilePath, "utf-8");
|
|
17
|
+
const lines = sourceCode.split("\n");
|
|
18
|
+
// Parse TypeScript to AST (with JSX support)
|
|
19
|
+
const ast = parse(sourceCode, {
|
|
20
|
+
loc: true,
|
|
21
|
+
range: true,
|
|
22
|
+
comment: true,
|
|
23
|
+
tokens: false,
|
|
24
|
+
jsx: true, // Enable JSX parsing for .tsx files
|
|
25
|
+
});
|
|
26
|
+
// Extract all import statements
|
|
27
|
+
const imports = extractImports(ast, lines);
|
|
28
|
+
// Find all describe() blocks with @docs-section tags
|
|
29
|
+
const sections = [];
|
|
30
|
+
if (ast.comments) {
|
|
31
|
+
// Visit all nodes in the AST
|
|
32
|
+
visit(ast, (node) => {
|
|
33
|
+
// Find describe() call expressions
|
|
34
|
+
if (node.type === "ExpressionStatement" &&
|
|
35
|
+
node.expression.type === "CallExpression" &&
|
|
36
|
+
node.expression.callee.type === "Identifier" &&
|
|
37
|
+
node.expression.callee.name === "describe") {
|
|
38
|
+
// Look for preceding JSDoc comment
|
|
39
|
+
const comment = findPrecedingComment(node, ast.comments || []);
|
|
40
|
+
if (comment) {
|
|
41
|
+
const metadata = parseJSDocMetadata(comment.value);
|
|
42
|
+
// Only include if has @docs-section tag
|
|
43
|
+
if (metadata.section) {
|
|
44
|
+
const { code, startLine, endLine } = extractCodeBlock(node, lines);
|
|
45
|
+
sections.push({
|
|
46
|
+
id: metadata.section,
|
|
47
|
+
title: metadata.title || metadata.section,
|
|
48
|
+
description: metadata.description || "",
|
|
49
|
+
order: metadata.order ?? 999,
|
|
50
|
+
code,
|
|
51
|
+
imports,
|
|
52
|
+
sourceFile: testFilePath,
|
|
53
|
+
startLine,
|
|
54
|
+
endLine,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Sort by order
|
|
62
|
+
return sections.sort((a, b) => a.order - b.order);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract all import statements from the AST
|
|
66
|
+
*/
|
|
67
|
+
function extractImports(ast, lines) {
|
|
68
|
+
const imports = [];
|
|
69
|
+
for (const node of ast.body) {
|
|
70
|
+
if (node.type === "ImportDeclaration" && node.loc) {
|
|
71
|
+
// Extract the full import statement from source
|
|
72
|
+
const importLines = lines.slice(node.loc.start.line - 1, node.loc.end.line);
|
|
73
|
+
imports.push(importLines.join("\n"));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return imports;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Find the JSDoc comment immediately preceding a node
|
|
80
|
+
*/
|
|
81
|
+
function findPrecedingComment(node, comments) {
|
|
82
|
+
if (!node.loc)
|
|
83
|
+
return null;
|
|
84
|
+
// Find the last comment that ends before this node starts
|
|
85
|
+
let precedingComment = null;
|
|
86
|
+
for (const comment of comments) {
|
|
87
|
+
if (!comment.loc)
|
|
88
|
+
continue;
|
|
89
|
+
// Comment must end before node starts
|
|
90
|
+
if (comment.loc.end.line < node.loc.start.line) {
|
|
91
|
+
// Must be a JSDoc comment (block comment starting with **)
|
|
92
|
+
if (comment.type === "Block" && comment.value.startsWith("*")) {
|
|
93
|
+
precedingComment = comment;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return precedingComment;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Parse JSDoc tags from a comment
|
|
101
|
+
*/
|
|
102
|
+
function parseJSDocMetadata(commentValue) {
|
|
103
|
+
const metadata = {};
|
|
104
|
+
// Remove leading * from each line
|
|
105
|
+
const lines = commentValue
|
|
106
|
+
.split("\n")
|
|
107
|
+
.map((line) => line.trim().replace(/^\*\s?/, ""));
|
|
108
|
+
for (const line of lines) {
|
|
109
|
+
// Extract @docs-section
|
|
110
|
+
const sectionMatch = line.match(/@docs-section\s+(\S+)/);
|
|
111
|
+
if (sectionMatch) {
|
|
112
|
+
metadata.section = sectionMatch[1];
|
|
113
|
+
}
|
|
114
|
+
// Extract @docs-title
|
|
115
|
+
const titleMatch = line.match(/@docs-title\s+(.+)/);
|
|
116
|
+
if (titleMatch) {
|
|
117
|
+
metadata.title = titleMatch[1].trim();
|
|
118
|
+
}
|
|
119
|
+
// Extract @docs-description
|
|
120
|
+
const descriptionMatch = line.match(/@docs-description\s+(.+)/);
|
|
121
|
+
if (descriptionMatch) {
|
|
122
|
+
metadata.description = descriptionMatch[1].trim();
|
|
123
|
+
}
|
|
124
|
+
// Extract @docs-order
|
|
125
|
+
const orderMatch = line.match(/@docs-order\s+(\d+)/);
|
|
126
|
+
if (orderMatch) {
|
|
127
|
+
metadata.order = parseInt(orderMatch[1], 10);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return metadata;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Extract the full source code of a describe() block
|
|
134
|
+
*/
|
|
135
|
+
function extractCodeBlock(node, lines) {
|
|
136
|
+
if (!node.loc) {
|
|
137
|
+
return { code: "", startLine: 0, endLine: 0 };
|
|
138
|
+
}
|
|
139
|
+
const startLine = node.loc.start.line;
|
|
140
|
+
const endLine = node.loc.end.line;
|
|
141
|
+
// Extract lines (loc is 1-indexed, array is 0-indexed)
|
|
142
|
+
const codeLines = lines.slice(startLine - 1, endLine);
|
|
143
|
+
const code = codeLines.join("\n");
|
|
144
|
+
return { code, startLine, endLine };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Simple AST visitor helper
|
|
148
|
+
*/
|
|
149
|
+
function visit(node, callback) {
|
|
150
|
+
callback(node);
|
|
151
|
+
// Recursively visit all child nodes
|
|
152
|
+
for (const key of Object.keys(node)) {
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
154
|
+
const value = node[key];
|
|
155
|
+
if (value && typeof value === "object") {
|
|
156
|
+
if (Array.isArray(value)) {
|
|
157
|
+
for (const item of value) {
|
|
158
|
+
if (item && typeof item === "object" && "type" in item) {
|
|
159
|
+
visit(item, callback);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else if ("type" in value) {
|
|
164
|
+
visit(value, callback);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=test-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-extractor.js","sourceRoot":"","sources":["../../src/parsers/test-extractor.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/types/index.js
CHANGED
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test section extracted from .docs.spec.ts files for documentation injection
|
|
3
|
+
*/
|
|
4
|
+
export interface TestSection {
|
|
5
|
+
/** Unique identifier for the section (from @docs-section tag) */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Display title for the section (from @docs-title tag) */
|
|
8
|
+
title: string;
|
|
9
|
+
/** Description explaining what these tests demonstrate (from @docs-description tag) */
|
|
10
|
+
description: string;
|
|
11
|
+
/** Sort order for display in documentation (from @docs-order tag) */
|
|
12
|
+
order: number;
|
|
13
|
+
/** Full source code of the describe block including tests */
|
|
14
|
+
code: string;
|
|
15
|
+
/** Import statements required for this test section */
|
|
16
|
+
imports: string[];
|
|
17
|
+
/** Source file path for debugging and error messages */
|
|
18
|
+
sourceFile: string;
|
|
19
|
+
/** Line number where this section starts in the source file */
|
|
20
|
+
startLine: number;
|
|
21
|
+
/** Line number where this section ends in the source file */
|
|
22
|
+
endLine: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parsed JSDoc tags from test describe blocks
|
|
26
|
+
*/
|
|
27
|
+
export interface TestSectionMetadata {
|
|
28
|
+
/** @docs-section tag value */
|
|
29
|
+
section?: string;
|
|
30
|
+
/** @docs-title tag value */
|
|
31
|
+
title?: string;
|
|
32
|
+
/** @docs-description tag value */
|
|
33
|
+
description?: string;
|
|
34
|
+
/** @docs-order tag value (parsed to number) */
|
|
35
|
+
order?: number;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=test-section.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-section.d.ts","sourceRoot":"","sources":["../../src/types/test-section.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IAEX,2DAA2D;IAC3D,KAAK,EAAE,MAAM,CAAC;IAEd,uFAAuF;IACvF,WAAW,EAAE,MAAM,CAAC;IAEpB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IAEd,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IAEb,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IAEnB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAElB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-section.js","sourceRoot":"","sources":["../../src/types/test-section.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commercetools/nimbus-docs-build",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251201161148",
|
|
4
4
|
"description": "Documentation build system for Nimbus design system - handles MDX parsing, TypeScript type extraction, and documentation generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"README.md"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
+
"@typescript-eslint/types": "^8.48.0",
|
|
24
|
+
"@typescript-eslint/typescript-estree": "^8.48.0",
|
|
23
25
|
"gray-matter": "^4.0.3",
|
|
24
26
|
"react-docgen-typescript": "^2.4.0",
|
|
25
27
|
"remark": "^15.0.1",
|