@fundamental-ngx/mcp 0.62.0-rc.67
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 +109 -0
- package/package.json +21 -0
- package/src/data/components.json +61370 -0
- package/src/extractors/build-metadata.d.ts +8 -0
- package/src/extractors/build-metadata.js +178 -0
- package/src/extractors/build-metadata.js.map +1 -0
- package/src/extractors/cem-extractor.d.ts +17 -0
- package/src/extractors/cem-extractor.js +430 -0
- package/src/extractors/cem-extractor.js.map +1 -0
- package/src/extractors/changelog-extractor.d.ts +6 -0
- package/src/extractors/changelog-extractor.js +115 -0
- package/src/extractors/changelog-extractor.js.map +1 -0
- package/src/extractors/description-extractor.d.ts +11 -0
- package/src/extractors/description-extractor.js +58 -0
- package/src/extractors/description-extractor.js.map +1 -0
- package/src/extractors/example-extractor.d.ts +19 -0
- package/src/extractors/example-extractor.js +67 -0
- package/src/extractors/example-extractor.js.map +1 -0
- package/src/extractors/token-extractor.d.ts +6 -0
- package/src/extractors/token-extractor.js +345 -0
- package/src/extractors/token-extractor.js.map +1 -0
- package/src/extractors/typedoc-extractor.d.ts +16 -0
- package/src/extractors/typedoc-extractor.js +576 -0
- package/src/extractors/typedoc-extractor.js.map +1 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +3 -0
- package/src/index.js.map +1 -0
- package/src/server.d.ts +1 -0
- package/src/server.js +794 -0
- package/src/server.js.map +1 -0
- package/src/types/component-metadata.d.ts +177 -0
- package/src/types/component-metadata.js +21 -0
- package/src/types/component-metadata.js.map +1 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ChangelogEntry } from '../types/component-metadata';
|
|
2
|
+
/**
|
|
3
|
+
* Extract changelog entries from all library CHANGELOG.md files.
|
|
4
|
+
* Parses conventional-changelog format into structured entries.
|
|
5
|
+
*/
|
|
6
|
+
export declare function extractChangelogs(basePath: string): Promise<ChangelogEntry[]>;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
const LIBRARY_CHANGELOGS = [
|
|
4
|
+
{ path: 'libs/core/CHANGELOG.md', library: '@fundamental-ngx/core' },
|
|
5
|
+
{ path: 'libs/platform/CHANGELOG.md', library: '@fundamental-ngx/platform' },
|
|
6
|
+
{ path: 'libs/btp/CHANGELOG.md', library: '@fundamental-ngx/btp' },
|
|
7
|
+
{ path: 'libs/cx/CHANGELOG.md', library: '@fundamental-ngx/cx' },
|
|
8
|
+
{ path: 'libs/cdk/CHANGELOG.md', library: '@fundamental-ngx/cdk' },
|
|
9
|
+
{ path: 'libs/i18n/CHANGELOG.md', library: '@fundamental-ngx/i18n' }
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Extract changelog entries from all library CHANGELOG.md files.
|
|
13
|
+
* Parses conventional-changelog format into structured entries.
|
|
14
|
+
*/
|
|
15
|
+
export async function extractChangelogs(basePath) {
|
|
16
|
+
const allEntries = [];
|
|
17
|
+
for (const config of LIBRARY_CHANGELOGS) {
|
|
18
|
+
try {
|
|
19
|
+
const content = await readFile(resolve(basePath, config.path), 'utf-8');
|
|
20
|
+
const entries = parseChangelog(content, config.library);
|
|
21
|
+
allEntries.push(...entries);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// CHANGELOG.md may not exist for all libraries
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return allEntries;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse a CHANGELOG.md into structured entries.
|
|
31
|
+
*
|
|
32
|
+
* Supports two formats:
|
|
33
|
+
*
|
|
34
|
+
* Lerna (pre-0.58):
|
|
35
|
+
* ```
|
|
36
|
+
* # [0.58.0-rc.25](url) (2025-11-26)
|
|
37
|
+
* ### Bug Fixes
|
|
38
|
+
* * **core:** description (#1234) (hash)
|
|
39
|
+
* ### Features
|
|
40
|
+
* * **platform:** description (#1234) (hash)
|
|
41
|
+
* ### BREAKING CHANGES
|
|
42
|
+
* * **core:** description
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* NX Release (0.58+):
|
|
46
|
+
* ```
|
|
47
|
+
* ## 0.62.0-rc.67 (2026-04-11)
|
|
48
|
+
* ### 🩹 Fixes
|
|
49
|
+
* - **core:** description ([#1234](url))
|
|
50
|
+
* ### 🚀 Features
|
|
51
|
+
* - **platform:** description ([#1234](url))
|
|
52
|
+
* ### ⚠️ Breaking Changes
|
|
53
|
+
* - **core:** description
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
function parseChangelog(content, library) {
|
|
57
|
+
const entries = [];
|
|
58
|
+
const lines = content.split('\n');
|
|
59
|
+
let currentVersion = '';
|
|
60
|
+
let currentSection = null;
|
|
61
|
+
for (const line of lines) {
|
|
62
|
+
// Version header - Lerna: # [0.58.0-rc.25](url) (date)
|
|
63
|
+
const lernaVersionMatch = line.match(/^#\s+\[([^\]]+)\]/);
|
|
64
|
+
if (lernaVersionMatch) {
|
|
65
|
+
currentVersion = lernaVersionMatch[1];
|
|
66
|
+
currentSection = null;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
// Version header - NX: ## 0.62.0-rc.67 (date)
|
|
70
|
+
const nxVersionMatch = line.match(/^## (\d+\.\d+\.\d+(?:-[^\s]+)?)\s+\(/);
|
|
71
|
+
if (nxVersionMatch) {
|
|
72
|
+
currentVersion = nxVersionMatch[1];
|
|
73
|
+
currentSection = null;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
// Section header - matches both Lerna ("Bug Fixes", "Features") and NX ("🩹 Fixes", "🚀 Features")
|
|
77
|
+
if (line.match(/^###?\s+(?:🩹\s+)?(?:Bug )?Fixes/i)) {
|
|
78
|
+
currentSection = 'fix';
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (line.match(/^###?\s+(?:🚀\s+)?Features/i)) {
|
|
82
|
+
currentSection = 'feature';
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (line.match(/^###?\s+(?:⚠️\s+)?Breaking Change/i)) {
|
|
86
|
+
currentSection = 'breaking';
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (line.match(/^###?\s+Deprecat/i)) {
|
|
90
|
+
currentSection = 'deprecation';
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
// Entry line - Lerna: * **scope:** desc | NX: - **scope:** desc
|
|
94
|
+
if (currentSection && currentVersion) {
|
|
95
|
+
const entryMatch = line.match(/^[-*]\s+(?:⚠️\s+)?\*\*([^*:]+):\*\*\s+(.+)/);
|
|
96
|
+
if (entryMatch) {
|
|
97
|
+
const scope = entryMatch[1].trim();
|
|
98
|
+
const rawDescription = entryMatch[2]
|
|
99
|
+
.replace(/\s*\(\[[\da-f]+\]\([^)]+\)\)$/, '') // Remove commit hash link (Lerna)
|
|
100
|
+
.replace(/\s*\(\[#\d+\]\([^)]+\)\)$/, '') // Remove PR link (NX)
|
|
101
|
+
.replace(/\s*\(#\d+\)/, '') // Remove bare issue reference
|
|
102
|
+
.trim();
|
|
103
|
+
entries.push({
|
|
104
|
+
library,
|
|
105
|
+
version: currentVersion,
|
|
106
|
+
type: currentSection,
|
|
107
|
+
description: rawDescription,
|
|
108
|
+
component: scope !== library.split('/')[1] ? scope : undefined
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return entries;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=changelog-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changelog-extractor.js","sourceRoot":"","sources":["../../../../../libs/mcp-server/src/extractors/changelog-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract human-written component descriptions from the docs app header templates.
|
|
3
|
+
*
|
|
4
|
+
* Each component's docs page has a `*-header.component.html` file containing:
|
|
5
|
+
* ```html
|
|
6
|
+
* <description>Human-readable description text...</description>
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* @returns Map from `"<package>/<component>"` (e.g. `"core/wizard"`) to the description string.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractDescriptions(basePath: string): Promise<Map<string, string>>;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { glob } from 'fast-glob';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
/**
|
|
5
|
+
* Extract human-written component descriptions from the docs app header templates.
|
|
6
|
+
*
|
|
7
|
+
* Each component's docs page has a `*-header.component.html` file containing:
|
|
8
|
+
* ```html
|
|
9
|
+
* <description>Human-readable description text...</description>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @returns Map from `"<package>/<component>"` (e.g. `"core/wizard"`) to the description string.
|
|
13
|
+
*/
|
|
14
|
+
export async function extractDescriptions(basePath) {
|
|
15
|
+
const docsRoot = resolve(basePath, 'libs/docs');
|
|
16
|
+
const pattern = '*/**/*-header.component.html';
|
|
17
|
+
const files = await glob(pattern, { cwd: docsRoot, absolute: false });
|
|
18
|
+
const descriptions = new Map();
|
|
19
|
+
await Promise.all(files.map(async (relPath) => {
|
|
20
|
+
// relPath: "core/wizard/wizard-header/wizard-header.component.html"
|
|
21
|
+
const parts = relPath.split('/');
|
|
22
|
+
if (parts.length < 3) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const pkg = parts[0]; // "core", "platform", "btp", etc.
|
|
26
|
+
const component = parts[1]; // "wizard", "info-label", etc.
|
|
27
|
+
const key = `${pkg}/${component}`;
|
|
28
|
+
try {
|
|
29
|
+
const html = await readFile(resolve(docsRoot, relPath), 'utf-8');
|
|
30
|
+
const description = parseDescription(html);
|
|
31
|
+
if (description) {
|
|
32
|
+
descriptions.set(key, description);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// skip unreadable files
|
|
37
|
+
}
|
|
38
|
+
}));
|
|
39
|
+
return descriptions;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse the `<description>...</description>` content from a header template,
|
|
43
|
+
* stripping HTML tags and normalising whitespace into a plain-text string.
|
|
44
|
+
*/
|
|
45
|
+
function parseDescription(html) {
|
|
46
|
+
const match = html.match(/<description>([\s\S]*?)<\/description>/);
|
|
47
|
+
if (!match) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
const raw = match[1]
|
|
51
|
+
// Strip HTML tags
|
|
52
|
+
.replace(/<[^>]+>/g, ' ')
|
|
53
|
+
// Collapse whitespace
|
|
54
|
+
.replace(/\s+/g, ' ')
|
|
55
|
+
.trim();
|
|
56
|
+
return raw || null;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=description-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"description-extractor.js","sourceRoot":"","sources":["../../../../../libs/mcp-server/src/extractors/description-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,8BAA8B,CAAC;IAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE/C,MAAM,OAAO,CAAC,GAAG,CACb,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,oEAAoE;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;QACxD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;QAC3D,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;QAElC,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,WAAW,EAAE,CAAC;gBACd,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,OAAO,YAAY,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QAChB,kBAAkB;SACjB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;QACzB,sBAAsB;SACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IAEZ,OAAO,GAAG,IAAI,IAAI,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface ComponentExample {
|
|
2
|
+
/** Component directory name, e.g. "button", "dialog" */
|
|
3
|
+
componentDir: string;
|
|
4
|
+
/** Library name, e.g. "core", "platform" */
|
|
5
|
+
libraryDir: string;
|
|
6
|
+
/** Example file name, e.g. "button-types-example" */
|
|
7
|
+
name: string;
|
|
8
|
+
/** Description derived from file name */
|
|
9
|
+
description: string;
|
|
10
|
+
/** TypeScript source code */
|
|
11
|
+
typescript: string;
|
|
12
|
+
/** HTML template (if separate file exists) */
|
|
13
|
+
html?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Extract example components from the docs folder.
|
|
17
|
+
* Examples live at: libs/docs/{library}/{component}/examples/*-example.component.ts
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractExamples(basePath: string): Promise<Map<string, ComponentExample[]>>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { glob } from 'fast-glob';
|
|
2
|
+
import { readFile } from 'fs/promises';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
/**
|
|
5
|
+
* Extract example components from the docs folder.
|
|
6
|
+
* Examples live at: libs/docs/{library}/{component}/examples/*-example.component.ts
|
|
7
|
+
*/
|
|
8
|
+
export async function extractExamples(basePath) {
|
|
9
|
+
const pattern = 'libs/docs/*/*/examples/*-example.component.ts';
|
|
10
|
+
const files = await glob(pattern, { cwd: basePath, absolute: false });
|
|
11
|
+
const exampleMap = new Map();
|
|
12
|
+
for (const file of files) {
|
|
13
|
+
// Parse path: libs/docs/{library}/{component}/examples/{name}.component.ts
|
|
14
|
+
const parts = file.split('/');
|
|
15
|
+
if (parts.length < 6) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const libraryDir = parts[2]; // e.g. "core", "platform"
|
|
19
|
+
const componentDir = parts[3]; // e.g. "button", "dialog"
|
|
20
|
+
const fileName = parts[5]; // e.g. "button-types-example.component.ts"
|
|
21
|
+
// Skip non-example files
|
|
22
|
+
if (!fileName.includes('-example.component.ts')) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const exampleName = fileName.replace('.component.ts', '');
|
|
26
|
+
const description = formatExampleName(exampleName);
|
|
27
|
+
try {
|
|
28
|
+
const tsContent = await readFile(resolve(basePath, file), 'utf-8');
|
|
29
|
+
// Check for a matching HTML template
|
|
30
|
+
const htmlPath = file.replace('.component.ts', '.component.html');
|
|
31
|
+
let htmlContent;
|
|
32
|
+
try {
|
|
33
|
+
htmlContent = await readFile(resolve(basePath, htmlPath), 'utf-8');
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// No separate HTML file — template is inline in the TS file
|
|
37
|
+
}
|
|
38
|
+
const example = {
|
|
39
|
+
componentDir,
|
|
40
|
+
libraryDir,
|
|
41
|
+
name: exampleName,
|
|
42
|
+
description,
|
|
43
|
+
typescript: tsContent,
|
|
44
|
+
html: htmlContent
|
|
45
|
+
};
|
|
46
|
+
const key = `${libraryDir}/${componentDir}`;
|
|
47
|
+
const existing = exampleMap.get(key) ?? [];
|
|
48
|
+
existing.push(example);
|
|
49
|
+
exampleMap.set(key, existing);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Skip unreadable files
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return exampleMap;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Convert a file name like "button-types-example" to "Button Types".
|
|
59
|
+
*/
|
|
60
|
+
function formatExampleName(name) {
|
|
61
|
+
return name
|
|
62
|
+
.replace(/-example$/, '')
|
|
63
|
+
.split('-')
|
|
64
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
65
|
+
.join(' ');
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=example-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example-extractor.js","sourceRoot":"","sources":["../../../../../libs/mcp-server/src/extractors/example-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAiB/B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IAClD,MAAM,OAAO,GAAG,+CAA+C,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,2EAA2E;QAC3E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,SAAS;QACb,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;QACvD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,2CAA2C;QAEtE,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC9C,SAAS;QACb,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAEnD,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAEnE,qCAAqC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;YAClE,IAAI,WAA+B,CAAC;YACpC,IAAI,CAAC;gBACD,WAAW,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YACvE,CAAC;YAAC,MAAM,CAAC;gBACL,4DAA4D;YAChE,CAAC;YAED,MAAM,OAAO,GAAqB;gBAC9B,YAAY;gBACZ,UAAU;gBACV,IAAI,EAAE,WAAW;gBACjB,WAAW;gBACX,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,WAAW;aACpB,CAAC;YAEF,MAAM,GAAG,GAAG,GAAG,UAAU,IAAI,YAAY,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACL,wBAAwB;QAC5B,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACnC,OAAO,IAAI;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import { readFile } from 'fs/promises';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* Extract design tokens from fundamental-styles utility CSS files
|
|
5
|
+
* and SAP theming CSS custom properties.
|
|
6
|
+
*/
|
|
7
|
+
export async function extractDesignTokens(basePath) {
|
|
8
|
+
const tokens = [];
|
|
9
|
+
// Extract utility classes from fundamental-styles
|
|
10
|
+
tokens.push(...(await extractUtilityClasses(basePath)));
|
|
11
|
+
// Extract SAP theme CSS custom properties
|
|
12
|
+
tokens.push(...getSapThemeTokens());
|
|
13
|
+
return tokens;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse utility class names and their CSS values from fundamental-styles dist files.
|
|
17
|
+
*/
|
|
18
|
+
async function extractUtilityClasses(basePath) {
|
|
19
|
+
const tokens = [];
|
|
20
|
+
const utilityFiles = [
|
|
21
|
+
{ file: 'node_modules/fundamental-styles/dist/margins.css', category: 'spacing' },
|
|
22
|
+
{ file: 'node_modules/fundamental-styles/dist/paddings.css', category: 'spacing' }
|
|
23
|
+
];
|
|
24
|
+
for (const { file, category } of utilityFiles) {
|
|
25
|
+
try {
|
|
26
|
+
const content = await readFile(resolve(basePath, file), 'utf-8');
|
|
27
|
+
const classTokens = parseUtilityClassesFromCss(content, category);
|
|
28
|
+
tokens.push(...classTokens);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// File may not exist
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return tokens;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse CSS class names from a minified/normal CSS file.
|
|
38
|
+
* Matches patterns like: .fd-margin--tiny{margin-block:.5rem;...}
|
|
39
|
+
*/
|
|
40
|
+
function parseUtilityClassesFromCss(css, category) {
|
|
41
|
+
const tokens = [];
|
|
42
|
+
const classPattern = /\.(fd-[a-z0-9-]+)\{([^}]+)\}/g;
|
|
43
|
+
let match;
|
|
44
|
+
while ((match = classPattern.exec(css)) !== null) {
|
|
45
|
+
const className = match[1];
|
|
46
|
+
const properties = match[2];
|
|
47
|
+
tokens.push({
|
|
48
|
+
name: className,
|
|
49
|
+
category,
|
|
50
|
+
description: describeUtilityClass(className),
|
|
51
|
+
value: cleanCssValue(properties),
|
|
52
|
+
example: `<div class="${className}">...</div>`
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return tokens;
|
|
56
|
+
}
|
|
57
|
+
function describeUtilityClass(className) {
|
|
58
|
+
const parts = className.replace('fd-', '').split('--');
|
|
59
|
+
const property = parts[0].split('-').join(' ');
|
|
60
|
+
const size = parts[1] || '';
|
|
61
|
+
const sizeMap = {
|
|
62
|
+
tiny: '0.5rem',
|
|
63
|
+
sm: '1rem',
|
|
64
|
+
md: '2rem',
|
|
65
|
+
lg: '3rem',
|
|
66
|
+
none: '0'
|
|
67
|
+
};
|
|
68
|
+
const sizeDesc = sizeMap[size] ? ` (${sizeMap[size]})` : '';
|
|
69
|
+
return `Applies ${property}${sizeDesc}`;
|
|
70
|
+
}
|
|
71
|
+
function cleanCssValue(raw) {
|
|
72
|
+
// Take only the first few property declarations, trim vendor prefixes
|
|
73
|
+
return raw
|
|
74
|
+
.split(';')
|
|
75
|
+
.filter((p) => !p.includes('-webkit-'))
|
|
76
|
+
.slice(0, 2)
|
|
77
|
+
.join('; ')
|
|
78
|
+
.trim();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Common SAP theme CSS custom properties.
|
|
82
|
+
* These are defined by @sap-theming/theming-base-content and available at runtime.
|
|
83
|
+
*/
|
|
84
|
+
function getSapThemeTokens() {
|
|
85
|
+
return [
|
|
86
|
+
// Colors
|
|
87
|
+
{
|
|
88
|
+
name: '--sapBackgroundColor',
|
|
89
|
+
category: 'color',
|
|
90
|
+
description: 'Base background color',
|
|
91
|
+
example: 'background-color: var(--sapBackgroundColor)'
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: '--sapBrandColor',
|
|
95
|
+
category: 'color',
|
|
96
|
+
description: 'Brand/accent color',
|
|
97
|
+
example: 'color: var(--sapBrandColor)'
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
name: '--sapTextColor',
|
|
101
|
+
category: 'color',
|
|
102
|
+
description: 'Default text color',
|
|
103
|
+
example: 'color: var(--sapTextColor)'
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: '--sapLinkColor',
|
|
107
|
+
category: 'color',
|
|
108
|
+
description: 'Link text color',
|
|
109
|
+
example: 'color: var(--sapLinkColor)'
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: '--sapShellColor',
|
|
113
|
+
category: 'color',
|
|
114
|
+
description: 'Shell/header background',
|
|
115
|
+
example: 'background-color: var(--sapShellColor)'
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: '--sapButton_Background',
|
|
119
|
+
category: 'color',
|
|
120
|
+
description: 'Default button background',
|
|
121
|
+
example: 'background-color: var(--sapButton_Background)'
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: '--sapButton_Emphasized_Background',
|
|
125
|
+
category: 'color',
|
|
126
|
+
description: 'Emphasized button background',
|
|
127
|
+
example: 'background-color: var(--sapButton_Emphasized_Background)'
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
name: '--sapPositiveColor',
|
|
131
|
+
category: 'color',
|
|
132
|
+
description: 'Positive/success semantic color',
|
|
133
|
+
example: 'color: var(--sapPositiveColor)'
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: '--sapNegativeColor',
|
|
137
|
+
category: 'color',
|
|
138
|
+
description: 'Negative/error semantic color',
|
|
139
|
+
example: 'color: var(--sapNegativeColor)'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: '--sapCriticalColor',
|
|
143
|
+
category: 'color',
|
|
144
|
+
description: 'Critical/warning semantic color',
|
|
145
|
+
example: 'color: var(--sapCriticalColor)'
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: '--sapInformativeColor',
|
|
149
|
+
category: 'color',
|
|
150
|
+
description: 'Informative semantic color',
|
|
151
|
+
example: 'color: var(--sapInformativeColor)'
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
name: '--sapNeutralColor',
|
|
155
|
+
category: 'color',
|
|
156
|
+
description: 'Neutral semantic color',
|
|
157
|
+
example: 'color: var(--sapNeutralColor)'
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
name: '--sapField_Background',
|
|
161
|
+
category: 'color',
|
|
162
|
+
description: 'Form field background',
|
|
163
|
+
example: 'background-color: var(--sapField_Background)'
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: '--sapField_BorderColor',
|
|
167
|
+
category: 'color',
|
|
168
|
+
description: 'Form field border color',
|
|
169
|
+
example: 'border-color: var(--sapField_BorderColor)'
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: '--sapList_Background',
|
|
173
|
+
category: 'color',
|
|
174
|
+
description: 'List item background',
|
|
175
|
+
example: 'background-color: var(--sapList_Background)'
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: '--sapList_HeaderBackground',
|
|
179
|
+
category: 'color',
|
|
180
|
+
description: 'List header background',
|
|
181
|
+
example: 'background-color: var(--sapList_HeaderBackground)'
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
name: '--sapPageHeader_Background',
|
|
185
|
+
category: 'color',
|
|
186
|
+
description: 'Page header background',
|
|
187
|
+
example: 'background-color: var(--sapPageHeader_Background)'
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: '--sapObjectHeader_Background',
|
|
191
|
+
category: 'color',
|
|
192
|
+
description: 'Object header background',
|
|
193
|
+
example: 'background-color: var(--sapObjectHeader_Background)'
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: '--sapGroup_TitleBackground',
|
|
197
|
+
category: 'color',
|
|
198
|
+
description: 'Group title background',
|
|
199
|
+
example: 'background-color: var(--sapGroup_TitleBackground)'
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: '--sapTile_Background',
|
|
203
|
+
category: 'color',
|
|
204
|
+
description: 'Tile background',
|
|
205
|
+
example: 'background-color: var(--sapTile_Background)'
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: '--sapHighlightColor',
|
|
209
|
+
category: 'color',
|
|
210
|
+
description: 'Highlight/hover color',
|
|
211
|
+
example: 'background-color: var(--sapHighlightColor)'
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: '--sapSelectedColor',
|
|
215
|
+
category: 'color',
|
|
216
|
+
description: 'Selected item indicator color',
|
|
217
|
+
example: 'border-color: var(--sapSelectedColor)'
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: '--sapActiveColor',
|
|
221
|
+
category: 'color',
|
|
222
|
+
description: 'Active state color',
|
|
223
|
+
example: 'color: var(--sapActiveColor)'
|
|
224
|
+
},
|
|
225
|
+
// Typography
|
|
226
|
+
{
|
|
227
|
+
name: '--sapFontFamily',
|
|
228
|
+
category: 'typography',
|
|
229
|
+
description: 'Default font family',
|
|
230
|
+
example: 'font-family: var(--sapFontFamily)'
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
name: '--sapFontSize',
|
|
234
|
+
category: 'typography',
|
|
235
|
+
description: 'Base font size (0.875rem)',
|
|
236
|
+
example: 'font-size: var(--sapFontSize)'
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: '--sapFontSmallSize',
|
|
240
|
+
category: 'typography',
|
|
241
|
+
description: 'Small font size (0.75rem)',
|
|
242
|
+
example: 'font-size: var(--sapFontSmallSize)'
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
name: '--sapFontLargeSize',
|
|
246
|
+
category: 'typography',
|
|
247
|
+
description: 'Large font size (1rem)',
|
|
248
|
+
example: 'font-size: var(--sapFontLargeSize)'
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: '--sapFontHeader1Size',
|
|
252
|
+
category: 'typography',
|
|
253
|
+
description: 'H1 font size (2.25rem)',
|
|
254
|
+
example: 'font-size: var(--sapFontHeader1Size)'
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
name: '--sapFontHeader2Size',
|
|
258
|
+
category: 'typography',
|
|
259
|
+
description: 'H2 font size (1.5rem)',
|
|
260
|
+
example: 'font-size: var(--sapFontHeader2Size)'
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: '--sapFontHeader3Size',
|
|
264
|
+
category: 'typography',
|
|
265
|
+
description: 'H3 font size (1.25rem)',
|
|
266
|
+
example: 'font-size: var(--sapFontHeader3Size)'
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
name: '--sapFontHeader4Size',
|
|
270
|
+
category: 'typography',
|
|
271
|
+
description: 'H4 font size (1.125rem)',
|
|
272
|
+
example: 'font-size: var(--sapFontHeader4Size)'
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: '--sapFontHeader5Size',
|
|
276
|
+
category: 'typography',
|
|
277
|
+
description: 'H5 font size (1rem)',
|
|
278
|
+
example: 'font-size: var(--sapFontHeader5Size)'
|
|
279
|
+
},
|
|
280
|
+
// Spacing / Sizing
|
|
281
|
+
{
|
|
282
|
+
name: '--sapElement_Height',
|
|
283
|
+
category: 'size',
|
|
284
|
+
description: 'Default element height (2.75rem)',
|
|
285
|
+
example: 'height: var(--sapElement_Height)'
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: '--sapElement_Compact_Height',
|
|
289
|
+
category: 'size',
|
|
290
|
+
description: 'Compact element height (2rem)',
|
|
291
|
+
example: 'height: var(--sapElement_Compact_Height)'
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
name: '--sapContent_GridSize',
|
|
295
|
+
category: 'size',
|
|
296
|
+
description: 'Base grid size (1rem)',
|
|
297
|
+
example: 'gap: var(--sapContent_GridSize)'
|
|
298
|
+
},
|
|
299
|
+
// Elevation / Shadows
|
|
300
|
+
{
|
|
301
|
+
name: '--sapContent_Shadow0',
|
|
302
|
+
category: 'elevation',
|
|
303
|
+
description: 'Level 0 shadow (none)',
|
|
304
|
+
example: 'box-shadow: var(--sapContent_Shadow0)'
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: '--sapContent_Shadow1',
|
|
308
|
+
category: 'elevation',
|
|
309
|
+
description: 'Level 1 shadow (cards)',
|
|
310
|
+
example: 'box-shadow: var(--sapContent_Shadow1)'
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: '--sapContent_Shadow2',
|
|
314
|
+
category: 'elevation',
|
|
315
|
+
description: 'Level 2 shadow (popovers)',
|
|
316
|
+
example: 'box-shadow: var(--sapContent_Shadow2)'
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: '--sapContent_Shadow3',
|
|
320
|
+
category: 'elevation',
|
|
321
|
+
description: 'Level 3 shadow (dialogs)',
|
|
322
|
+
example: 'box-shadow: var(--sapContent_Shadow3)'
|
|
323
|
+
},
|
|
324
|
+
// Borders
|
|
325
|
+
{
|
|
326
|
+
name: '--sapField_BorderWidth',
|
|
327
|
+
category: 'border',
|
|
328
|
+
description: 'Field border width',
|
|
329
|
+
example: 'border-width: var(--sapField_BorderWidth)'
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
name: '--sapField_BorderCornerRadius',
|
|
333
|
+
category: 'border',
|
|
334
|
+
description: 'Field border radius',
|
|
335
|
+
example: 'border-radius: var(--sapField_BorderCornerRadius)'
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
name: '--sapButton_BorderCornerRadius',
|
|
339
|
+
category: 'border',
|
|
340
|
+
description: 'Button border radius',
|
|
341
|
+
example: 'border-radius: var(--sapButton_BorderCornerRadius)'
|
|
342
|
+
}
|
|
343
|
+
];
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=token-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../../../../../libs/mcp-server/src/extractors/token-extractor.ts"],"names":[],"mappings":"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"}
|