@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.
@@ -5,4 +5,5 @@ export * from "./parse-mdx.js";
5
5
  export * from "./parse-types.js";
6
6
  export * from "./filter-props.js";
7
7
  export * from "./process-types.js";
8
+ export * from "./test-extractor.js";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -5,4 +5,5 @@ export * from "./parse-mdx.js";
5
5
  export * from "./parse-types.js";
6
6
  export * from "./filter-props.js";
7
7
  export * from "./process-types.js";
8
+ export * from "./test-extractor.js";
8
9
  //# sourceMappingURL=index.js.map
@@ -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;AA8E5D;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA8F7B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAkBnC"}
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: mdx } = matter(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: mdx } = matter(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":"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"}
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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"}
@@ -3,5 +3,6 @@
3
3
  */
4
4
  export * from "./mdx.js";
5
5
  export * from "./config.js";
6
+ export * from "./test-section.js";
6
7
  export type { LifecycleState } from "../schemas/lifecycle-states.js";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -3,4 +3,5 @@
3
3
  */
4
4
  export * from "./mdx.js";
5
5
  export * from "./config.js";
6
+ export * from "./test-section.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-section.js.map
@@ -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-20251201100514",
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",