mozaic-mcp-server 1.0.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.
Files changed (161) hide show
  1. package/INSTALLATION.md +232 -0
  2. package/README.md +262 -0
  3. package/SKILLS.md +411 -0
  4. package/bin/install-skills.js +171 -0
  5. package/data/mozaic.db +0 -0
  6. package/data/mozaic.db-shm +0 -0
  7. package/data/mozaic.db-wal +0 -0
  8. package/dist/__tests__/sanity-check.test.d.ts +2 -0
  9. package/dist/__tests__/sanity-check.test.d.ts.map +1 -0
  10. package/dist/__tests__/sanity-check.test.js +167 -0
  11. package/dist/__tests__/sanity-check.test.js.map +1 -0
  12. package/dist/__tests__/tools.integration.test.d.ts +2 -0
  13. package/dist/__tests__/tools.integration.test.d.ts.map +1 -0
  14. package/dist/__tests__/tools.integration.test.js +220 -0
  15. package/dist/__tests__/tools.integration.test.js.map +1 -0
  16. package/dist/db/queries.d.ts +144 -0
  17. package/dist/db/queries.d.ts.map +1 -0
  18. package/dist/db/queries.js +536 -0
  19. package/dist/db/queries.js.map +1 -0
  20. package/dist/db/schema.d.ts +4 -0
  21. package/dist/db/schema.d.ts.map +1 -0
  22. package/dist/db/schema.js +253 -0
  23. package/dist/db/schema.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +416 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/parsers/__tests__/docs-parser.test.d.ts +2 -0
  29. package/dist/parsers/__tests__/docs-parser.test.d.ts.map +1 -0
  30. package/dist/parsers/__tests__/docs-parser.test.js +251 -0
  31. package/dist/parsers/__tests__/docs-parser.test.js.map +1 -0
  32. package/dist/parsers/__tests__/icons-parser.test.d.ts +2 -0
  33. package/dist/parsers/__tests__/icons-parser.test.d.ts.map +1 -0
  34. package/dist/parsers/__tests__/icons-parser.test.js +169 -0
  35. package/dist/parsers/__tests__/icons-parser.test.js.map +1 -0
  36. package/dist/parsers/__tests__/react-parser.test.d.ts +2 -0
  37. package/dist/parsers/__tests__/react-parser.test.d.ts.map +1 -0
  38. package/dist/parsers/__tests__/react-parser.test.js +274 -0
  39. package/dist/parsers/__tests__/react-parser.test.js.map +1 -0
  40. package/dist/parsers/__tests__/scss-parser.test.d.ts +2 -0
  41. package/dist/parsers/__tests__/scss-parser.test.d.ts.map +1 -0
  42. package/dist/parsers/__tests__/scss-parser.test.js +364 -0
  43. package/dist/parsers/__tests__/scss-parser.test.js.map +1 -0
  44. package/dist/parsers/__tests__/tokens-parser.test.d.ts +2 -0
  45. package/dist/parsers/__tests__/tokens-parser.test.d.ts.map +1 -0
  46. package/dist/parsers/__tests__/tokens-parser.test.js +172 -0
  47. package/dist/parsers/__tests__/tokens-parser.test.js.map +1 -0
  48. package/dist/parsers/__tests__/vue-parser.test.d.ts +2 -0
  49. package/dist/parsers/__tests__/vue-parser.test.d.ts.map +1 -0
  50. package/dist/parsers/__tests__/vue-parser.test.js +207 -0
  51. package/dist/parsers/__tests__/vue-parser.test.js.map +1 -0
  52. package/dist/parsers/docs-parser.d.ts +4 -0
  53. package/dist/parsers/docs-parser.d.ts.map +1 -0
  54. package/dist/parsers/docs-parser.js +237 -0
  55. package/dist/parsers/docs-parser.js.map +1 -0
  56. package/dist/parsers/icons-parser.d.ts +33 -0
  57. package/dist/parsers/icons-parser.d.ts.map +1 -0
  58. package/dist/parsers/icons-parser.js +125 -0
  59. package/dist/parsers/icons-parser.js.map +1 -0
  60. package/dist/parsers/react-parser.d.ts +3 -0
  61. package/dist/parsers/react-parser.d.ts.map +1 -0
  62. package/dist/parsers/react-parser.js +406 -0
  63. package/dist/parsers/react-parser.js.map +1 -0
  64. package/dist/parsers/scss-parser.d.ts +9 -0
  65. package/dist/parsers/scss-parser.d.ts.map +1 -0
  66. package/dist/parsers/scss-parser.js +351 -0
  67. package/dist/parsers/scss-parser.js.map +1 -0
  68. package/dist/parsers/tokens/border-parser.d.ts +3 -0
  69. package/dist/parsers/tokens/border-parser.d.ts.map +1 -0
  70. package/dist/parsers/tokens/border-parser.js +83 -0
  71. package/dist/parsers/tokens/border-parser.js.map +1 -0
  72. package/dist/parsers/tokens/color-parser.d.ts +3 -0
  73. package/dist/parsers/tokens/color-parser.d.ts.map +1 -0
  74. package/dist/parsers/tokens/color-parser.js +88 -0
  75. package/dist/parsers/tokens/color-parser.js.map +1 -0
  76. package/dist/parsers/tokens/grid-parser.d.ts +3 -0
  77. package/dist/parsers/tokens/grid-parser.d.ts.map +1 -0
  78. package/dist/parsers/tokens/grid-parser.js +97 -0
  79. package/dist/parsers/tokens/grid-parser.js.map +1 -0
  80. package/dist/parsers/tokens/index.d.ts +9 -0
  81. package/dist/parsers/tokens/index.d.ts.map +1 -0
  82. package/dist/parsers/tokens/index.js +10 -0
  83. package/dist/parsers/tokens/index.js.map +1 -0
  84. package/dist/parsers/tokens/screen-parser.d.ts +3 -0
  85. package/dist/parsers/tokens/screen-parser.d.ts.map +1 -0
  86. package/dist/parsers/tokens/screen-parser.js +54 -0
  87. package/dist/parsers/tokens/screen-parser.js.map +1 -0
  88. package/dist/parsers/tokens/shadow-parser.d.ts +3 -0
  89. package/dist/parsers/tokens/shadow-parser.d.ts.map +1 -0
  90. package/dist/parsers/tokens/shadow-parser.js +62 -0
  91. package/dist/parsers/tokens/shadow-parser.js.map +1 -0
  92. package/dist/parsers/tokens/spacing-parser.d.ts +4 -0
  93. package/dist/parsers/tokens/spacing-parser.d.ts.map +1 -0
  94. package/dist/parsers/tokens/spacing-parser.js +85 -0
  95. package/dist/parsers/tokens/spacing-parser.js.map +1 -0
  96. package/dist/parsers/tokens/types.d.ts +33 -0
  97. package/dist/parsers/tokens/types.d.ts.map +1 -0
  98. package/dist/parsers/tokens/types.js +42 -0
  99. package/dist/parsers/tokens/types.js.map +1 -0
  100. package/dist/parsers/tokens/typography-parser.d.ts +3 -0
  101. package/dist/parsers/tokens/typography-parser.d.ts.map +1 -0
  102. package/dist/parsers/tokens/typography-parser.js +76 -0
  103. package/dist/parsers/tokens/typography-parser.js.map +1 -0
  104. package/dist/parsers/tokens-parser.d.ts +18 -0
  105. package/dist/parsers/tokens-parser.d.ts.map +1 -0
  106. package/dist/parsers/tokens-parser.js +57 -0
  107. package/dist/parsers/tokens-parser.js.map +1 -0
  108. package/dist/parsers/vue-parser.d.ts +3 -0
  109. package/dist/parsers/vue-parser.d.ts.map +1 -0
  110. package/dist/parsers/vue-parser.js +343 -0
  111. package/dist/parsers/vue-parser.js.map +1 -0
  112. package/dist/tools/generate-react-component.d.ts +35 -0
  113. package/dist/tools/generate-react-component.d.ts.map +1 -0
  114. package/dist/tools/generate-react-component.js +81 -0
  115. package/dist/tools/generate-react-component.js.map +1 -0
  116. package/dist/tools/generate-vue-component.d.ts +35 -0
  117. package/dist/tools/generate-vue-component.d.ts.map +1 -0
  118. package/dist/tools/generate-vue-component.js +81 -0
  119. package/dist/tools/generate-vue-component.js.map +1 -0
  120. package/dist/tools/get-component-info.d.ts +52 -0
  121. package/dist/tools/get-component-info.d.ts.map +1 -0
  122. package/dist/tools/get-component-info.js +94 -0
  123. package/dist/tools/get-component-info.js.map +1 -0
  124. package/dist/tools/get-css-utility.d.ts +41 -0
  125. package/dist/tools/get-css-utility.d.ts.map +1 -0
  126. package/dist/tools/get-css-utility.js +57 -0
  127. package/dist/tools/get-css-utility.js.map +1 -0
  128. package/dist/tools/get-design-tokens.d.ts +44 -0
  129. package/dist/tools/get-design-tokens.d.ts.map +1 -0
  130. package/dist/tools/get-design-tokens.js +124 -0
  131. package/dist/tools/get-design-tokens.js.map +1 -0
  132. package/dist/tools/get-icon.d.ts +32 -0
  133. package/dist/tools/get-icon.d.ts.map +1 -0
  134. package/dist/tools/get-icon.js +108 -0
  135. package/dist/tools/get-icon.js.map +1 -0
  136. package/dist/tools/get-install-info.d.ts +39 -0
  137. package/dist/tools/get-install-info.d.ts.map +1 -0
  138. package/dist/tools/get-install-info.js +160 -0
  139. package/dist/tools/get-install-info.js.map +1 -0
  140. package/dist/tools/list-components.d.ts +32 -0
  141. package/dist/tools/list-components.d.ts.map +1 -0
  142. package/dist/tools/list-components.js +62 -0
  143. package/dist/tools/list-components.js.map +1 -0
  144. package/dist/tools/list-css-utilities.d.ts +27 -0
  145. package/dist/tools/list-css-utilities.d.ts.map +1 -0
  146. package/dist/tools/list-css-utilities.js +48 -0
  147. package/dist/tools/list-css-utilities.js.map +1 -0
  148. package/dist/tools/search-documentation.d.ts +37 -0
  149. package/dist/tools/search-documentation.d.ts.map +1 -0
  150. package/dist/tools/search-documentation.js +120 -0
  151. package/dist/tools/search-documentation.js.map +1 -0
  152. package/dist/tools/search-icons.d.ts +41 -0
  153. package/dist/tools/search-icons.d.ts.map +1 -0
  154. package/dist/tools/search-icons.js +134 -0
  155. package/dist/tools/search-icons.js.map +1 -0
  156. package/package.json +98 -0
  157. package/skills/mozaic-css-utilities/skill.md +633 -0
  158. package/skills/mozaic-design-tokens/skill.md +621 -0
  159. package/skills/mozaic-icons/skill.md +624 -0
  160. package/skills/mozaic-react-builder/skill.md +652 -0
  161. package/skills/mozaic-vue-builder/skill.md +491 -0
@@ -0,0 +1,167 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import Database from "better-sqlite3";
3
+ import { SCHEMA } from "../db/schema.js";
4
+ describe("Sanity Check - Database Integrity", () => {
5
+ let db;
6
+ beforeEach(() => {
7
+ // Create in-memory database for testing
8
+ db = new Database(":memory:");
9
+ db.exec(SCHEMA);
10
+ });
11
+ afterEach(() => {
12
+ db.close();
13
+ });
14
+ describe("Token checks", () => {
15
+ it("should detect missing token categories", () => {
16
+ // Insert tokens with only some categories
17
+ db.prepare("INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)").run("color", "primary", "color.primary", "#000", "--color-primary");
18
+ const categories = db.prepare("SELECT DISTINCT category FROM tokens").all();
19
+ expect(categories).toHaveLength(1);
20
+ expect(categories[0].category).toBe("color");
21
+ });
22
+ it("should count tokens by category", () => {
23
+ // Insert multiple tokens
24
+ const insert = db.prepare("INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)");
25
+ insert.run("color", "primary-100", "color.primary.100", "#fff", "--color-primary-100");
26
+ insert.run("color", "primary-200", "color.primary.200", "#eee", "--color-primary-200");
27
+ insert.run("spacing", "mu100", "spacing.mu100", "16px", "--spacing-mu100");
28
+ const counts = db
29
+ .prepare("SELECT category, COUNT(*) as count FROM tokens GROUP BY category")
30
+ .all();
31
+ expect(counts).toHaveLength(2);
32
+ const colorCount = counts.find((c) => c.category === "color");
33
+ const spacingCount = counts.find((c) => c.category === "spacing");
34
+ expect(colorCount?.count).toBe(2);
35
+ expect(spacingCount?.count).toBe(1);
36
+ });
37
+ it("should detect missing required fields", () => {
38
+ // Insert token with missing path
39
+ db.prepare("INSERT INTO tokens (category, name, path, value_raw) VALUES (?, ?, ?, ?)").run("color", "test", "", "value");
40
+ const emptyPath = db
41
+ .prepare("SELECT COUNT(*) as count FROM tokens WHERE path IS NULL OR path = ''")
42
+ .get();
43
+ expect(emptyPath.count).toBe(1);
44
+ });
45
+ });
46
+ describe("Component checks", () => {
47
+ it("should count components by framework", () => {
48
+ const insert = db.prepare("INSERT INTO components (name, slug, category, frameworks) VALUES (?, ?, ?, ?)");
49
+ insert.run("Button", "button", "action", '["vue"]');
50
+ insert.run("Input", "input", "form", '["vue"]');
51
+ insert.run("Card", "card", "layout", '["react"]');
52
+ insert.run("Modal", "modal", "feedback", '["vue", "react"]');
53
+ const vueCount = db
54
+ .prepare("SELECT COUNT(*) as count FROM components WHERE frameworks LIKE '%vue%'")
55
+ .get();
56
+ const reactCount = db
57
+ .prepare("SELECT COUNT(*) as count FROM components WHERE frameworks LIKE '%react%'")
58
+ .get();
59
+ expect(vueCount.count).toBe(3);
60
+ expect(reactCount.count).toBe(2);
61
+ });
62
+ it("should detect components without props", () => {
63
+ const insertComponent = db.prepare("INSERT INTO components (name, slug, frameworks) VALUES (?, ?, ?)");
64
+ const insertProp = db.prepare("INSERT INTO component_props (component_id, name, type) VALUES (?, ?, ?)");
65
+ const c1 = insertComponent.run("Button", "button", '["vue"]');
66
+ const c2 = insertComponent.run("Input", "input", '["vue"]');
67
+ insertComponent.run("Card", "card", '["react"]');
68
+ // Only add props to first two components
69
+ insertProp.run(c1.lastInsertRowid, "size", "string");
70
+ insertProp.run(c2.lastInsertRowid, "value", "string");
71
+ const total = db.prepare("SELECT COUNT(*) as count FROM components").get();
72
+ const withProps = db
73
+ .prepare("SELECT COUNT(DISTINCT component_id) as count FROM component_props")
74
+ .get();
75
+ expect(total.count).toBe(3);
76
+ expect(withProps.count).toBe(2);
77
+ expect(Math.round((withProps.count / total.count) * 100)).toBe(67);
78
+ });
79
+ });
80
+ describe("CSS Utility checks", () => {
81
+ it("should count CSS utility classes", () => {
82
+ const insertUtility = db.prepare("INSERT INTO css_utilities (name, slug, category) VALUES (?, ?, ?)");
83
+ const insertClass = db.prepare("INSERT INTO css_utility_classes (utility_id, class_name) VALUES (?, ?)");
84
+ const u1 = insertUtility.run("Flexy", "flexy", "layout");
85
+ const u2 = insertUtility.run("Margin", "margin", "utility");
86
+ insertClass.run(u1.lastInsertRowid, ".ml-flexy");
87
+ insertClass.run(u1.lastInsertRowid, ".ml-flexy__col");
88
+ insertClass.run(u1.lastInsertRowid, ".ml-flexy__col--6of12");
89
+ insertClass.run(u2.lastInsertRowid, ".mu100");
90
+ const counts = db
91
+ .prepare(`SELECT u.name, COUNT(c.id) as count
92
+ FROM css_utilities u
93
+ LEFT JOIN css_utility_classes c ON c.utility_id = u.id
94
+ GROUP BY u.id`)
95
+ .all();
96
+ expect(counts.find((c) => c.name === "Flexy")?.count).toBe(3);
97
+ expect(counts.find((c) => c.name === "Margin")?.count).toBe(1);
98
+ });
99
+ it("should detect utilities without examples", () => {
100
+ const insertUtility = db.prepare("INSERT INTO css_utilities (name, slug, category) VALUES (?, ?, ?)");
101
+ const insertExample = db.prepare("INSERT INTO css_utility_examples (utility_id, title, code) VALUES (?, ?, ?)");
102
+ const u1 = insertUtility.run("Flexy", "flexy", "layout");
103
+ insertUtility.run("Container", "container", "layout");
104
+ insertExample.run(u1.lastInsertRowid, "Basic", '<div class="ml-flexy"></div>');
105
+ const total = db.prepare("SELECT COUNT(*) as count FROM css_utilities").get();
106
+ const withExamples = db
107
+ .prepare("SELECT COUNT(DISTINCT utility_id) as count FROM css_utility_examples")
108
+ .get();
109
+ expect(total.count).toBe(2);
110
+ expect(withExamples.count).toBe(1);
111
+ });
112
+ });
113
+ describe("Foreign Key Integrity", () => {
114
+ it("should detect orphaned component_props", () => {
115
+ // Disable FK constraints to test orphan detection logic
116
+ db.pragma("foreign_keys = OFF");
117
+ // Insert component
118
+ const insertComponent = db.prepare("INSERT INTO components (name, slug, frameworks) VALUES (?, ?, ?)");
119
+ const c1 = insertComponent.run("Button", "button", '["vue"]');
120
+ // Insert valid prop
121
+ db.prepare("INSERT INTO component_props (component_id, name, type) VALUES (?, ?, ?)").run(c1.lastInsertRowid, "size", "string");
122
+ // Insert orphaned prop (referencing non-existent component)
123
+ db.prepare("INSERT INTO component_props (component_id, name, type) VALUES (?, ?, ?)").run(9999, "orphan", "string");
124
+ const orphans = db
125
+ .prepare(`SELECT COUNT(*) as count FROM component_props cp
126
+ WHERE NOT EXISTS (SELECT 1 FROM components c WHERE c.id = cp.component_id)`)
127
+ .get();
128
+ expect(orphans.count).toBe(1);
129
+ // Re-enable FK constraints
130
+ db.pragma("foreign_keys = ON");
131
+ });
132
+ it("should detect orphaned css_utility_classes", () => {
133
+ // Disable FK constraints to test orphan detection logic
134
+ db.pragma("foreign_keys = OFF");
135
+ const insertUtility = db.prepare("INSERT INTO css_utilities (name, slug, category) VALUES (?, ?, ?)");
136
+ const u1 = insertUtility.run("Flexy", "flexy", "layout");
137
+ db.prepare("INSERT INTO css_utility_classes (utility_id, class_name) VALUES (?, ?)").run(u1.lastInsertRowid, ".ml-flexy");
138
+ db.prepare("INSERT INTO css_utility_classes (utility_id, class_name) VALUES (?, ?)").run(9999, ".orphan");
139
+ const orphans = db
140
+ .prepare(`SELECT COUNT(*) as count FROM css_utility_classes cuc
141
+ WHERE NOT EXISTS (SELECT 1 FROM css_utilities cu WHERE cu.id = cuc.utility_id)`)
142
+ .get();
143
+ expect(orphans.count).toBe(1);
144
+ // Re-enable FK constraints
145
+ db.pragma("foreign_keys = ON");
146
+ });
147
+ });
148
+ describe("Full-Text Search", () => {
149
+ it("should index tokens for FTS", () => {
150
+ db.prepare("INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)").run("color", "primary-100", "color.primary.100", "#1a73e8", "--color-primary-100");
151
+ db.prepare("INSERT INTO tokens (category, name, path, value_raw, css_variable) VALUES (?, ?, ?, ?, ?)").run("color", "secondary-100", "color.secondary.100", "#666", "--color-secondary-100");
152
+ const results = db
153
+ .prepare("SELECT COUNT(*) as count FROM tokens_fts WHERE tokens_fts MATCH 'primary'")
154
+ .get();
155
+ expect(results.count).toBe(1);
156
+ });
157
+ it("should index documentation for FTS", () => {
158
+ db.prepare("INSERT INTO documentation (title, path, content, category, keywords) VALUES (?, ?, ?, ?, ?)").run("Button", "/components/button", "Button component documentation", "components", "button,action");
159
+ db.prepare("INSERT INTO documentation (title, path, content, category, keywords) VALUES (?, ?, ?, ?, ?)").run("Input", "/components/input", "Input field documentation", "components", "input,form");
160
+ const results = db
161
+ .prepare("SELECT COUNT(*) as count FROM docs_fts WHERE docs_fts MATCH 'button'")
162
+ .get();
163
+ expect(results.count).toBe(1);
164
+ });
165
+ });
166
+ });
167
+ //# sourceMappingURL=sanity-check.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanity-check.test.js","sourceRoot":"","sources":["../../src/__tests__/sanity-check.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tools.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,220 @@
1
+ import { describe, it, expect, beforeAll, afterAll } from "vitest";
2
+ import Database from "better-sqlite3";
3
+ import { resolve } from "path";
4
+ import { handleGetComponentInfo } from "../tools/get-component-info.js";
5
+ import { handleGetDesignTokens } from "../tools/get-design-tokens.js";
6
+ import { handleSearchDocumentation } from "../tools/search-documentation.js";
7
+ import { handleListComponents } from "../tools/list-components.js";
8
+ import { handleGetCssUtility } from "../tools/get-css-utility.js";
9
+ import { handleListCssUtilities } from "../tools/list-css-utilities.js";
10
+ import { handleGetInstallInfo } from "../tools/get-install-info.js";
11
+ describe("MCP Tools Integration Tests", () => {
12
+ let db;
13
+ beforeAll(() => {
14
+ const dbPath = resolve(process.cwd(), "data/mozaic.db");
15
+ db = new Database(dbPath, { readonly: true });
16
+ });
17
+ afterAll(() => {
18
+ db.close();
19
+ });
20
+ describe("get_component_info", () => {
21
+ it("returns Button component with props", () => {
22
+ const result = handleGetComponentInfo(db, { component: "button" });
23
+ const data = JSON.parse(result.content[0].text);
24
+ expect(data.name).toBe("MButton");
25
+ expect(data.props.length).toBeGreaterThan(0);
26
+ expect(data.props.some((p) => p.name === "size" || p.name === "appearance")).toBe(true);
27
+ });
28
+ it("returns Vue examples by default", () => {
29
+ const result = handleGetComponentInfo(db, { component: "button" });
30
+ const data = JSON.parse(result.content[0].text);
31
+ expect(data.examples.length).toBeGreaterThan(0);
32
+ });
33
+ it("returns React examples when framework=react", () => {
34
+ const result = handleGetComponentInfo(db, { component: "button", framework: "react" });
35
+ const data = JSON.parse(result.content[0].text);
36
+ // Component name remains the same, but examples are filtered by framework
37
+ expect(data.name).toBeDefined();
38
+ expect(data.examples).toBeDefined();
39
+ });
40
+ it("handles MButton prefix", () => {
41
+ const result = handleGetComponentInfo(db, { component: "MButton" });
42
+ const data = JSON.parse(result.content[0].text);
43
+ expect(data.name).toBe("MButton");
44
+ });
45
+ it("returns error for unknown component", () => {
46
+ const result = handleGetComponentInfo(db, { component: "nonexistent" });
47
+ expect(result.content[0].text).toContain("Component not found");
48
+ });
49
+ });
50
+ describe("get_design_tokens", () => {
51
+ it("returns color tokens", () => {
52
+ const result = handleGetDesignTokens(db, { category: "colors" });
53
+ const data = JSON.parse(result.content[0].text);
54
+ expect(data.length).toBeGreaterThan(100);
55
+ expect(data[0]).toHaveProperty("path");
56
+ expect(data[0]).toHaveProperty("value");
57
+ });
58
+ it("returns spacing tokens", () => {
59
+ const result = handleGetDesignTokens(db, { category: "spacing" });
60
+ const data = JSON.parse(result.content[0].text);
61
+ expect(data.length).toBeGreaterThan(10);
62
+ expect(data.some((t) => t.path.includes("mu"))).toBe(true);
63
+ });
64
+ it("formats as CSS variables", () => {
65
+ const result = handleGetDesignTokens(db, { category: "spacing", format: "css" });
66
+ expect(result.content[0].text).toContain(":root {");
67
+ expect(result.content[0].text).toContain("--");
68
+ });
69
+ it("formats as SCSS variables", () => {
70
+ const result = handleGetDesignTokens(db, { category: "spacing", format: "scss" });
71
+ expect(result.content[0].text).toContain("$");
72
+ });
73
+ it("returns all categories when category=all", () => {
74
+ const result = handleGetDesignTokens(db, { category: "all" });
75
+ const data = JSON.parse(result.content[0].text);
76
+ expect(data.length).toBeGreaterThan(500);
77
+ });
78
+ });
79
+ describe("search_documentation", () => {
80
+ it("finds button documentation", () => {
81
+ const result = handleSearchDocumentation(db, { query: "button" });
82
+ const data = JSON.parse(result.content[0].text);
83
+ expect(data.results.length).toBeGreaterThan(0);
84
+ expect(data.results[0]).toHaveProperty("title");
85
+ expect(data.results[0]).toHaveProperty("path");
86
+ });
87
+ it("returns snippets with highlights", () => {
88
+ const result = handleSearchDocumentation(db, { query: "color" });
89
+ const data = JSON.parse(result.content[0].text);
90
+ expect(data.results.length).toBeGreaterThan(0);
91
+ expect(data.results[0]).toHaveProperty("snippet");
92
+ });
93
+ it("limits results", () => {
94
+ const result = handleSearchDocumentation(db, { query: "component", limit: 5 });
95
+ const data = JSON.parse(result.content[0].text);
96
+ expect(data.results.length).toBeLessThanOrEqual(5);
97
+ });
98
+ it("handles empty query gracefully", () => {
99
+ const result = handleSearchDocumentation(db, { query: "" });
100
+ expect(result.content[0].text).toBeDefined();
101
+ });
102
+ });
103
+ describe("list_components", () => {
104
+ it("lists all components grouped by category", () => {
105
+ const result = handleListComponents(db, {});
106
+ const data = JSON.parse(result.content[0].text);
107
+ expect(data.total).toBeGreaterThan(80);
108
+ expect(data.categories.length).toBeGreaterThan(3);
109
+ // When category="all", components is grouped object
110
+ expect(data.components).toBeDefined();
111
+ });
112
+ it("includes action category components", () => {
113
+ const result = handleListComponents(db, {});
114
+ const data = JSON.parse(result.content[0].text);
115
+ expect(data.components.action).toBeDefined();
116
+ expect(data.components.action.some((c) => c.name === "MButton" || c.name === "Button")).toBe(true);
117
+ });
118
+ it("filters by category", () => {
119
+ const result = handleListComponents(db, { category: "action" });
120
+ const data = JSON.parse(result.content[0].text);
121
+ expect(data.total).toBeGreaterThan(0);
122
+ // When filtered, components is array
123
+ expect(Array.isArray(data.components)).toBe(true);
124
+ });
125
+ });
126
+ describe("get_css_utility", () => {
127
+ it("returns Flexy utility with classes", () => {
128
+ const result = handleGetCssUtility(db, { name: "flexy" });
129
+ const data = JSON.parse(result.content[0].text);
130
+ expect(data.name).toBe("Flexy");
131
+ expect(data.classes.length).toBeGreaterThan(100);
132
+ expect(data.classes.some((c) => c.includes("ml-flexy"))).toBe(true);
133
+ });
134
+ it("returns Margin utility", () => {
135
+ const result = handleGetCssUtility(db, { name: "margin" });
136
+ const data = JSON.parse(result.content[0].text);
137
+ expect(data.name).toBe("Margin");
138
+ expect(data.classes.length).toBeGreaterThan(50);
139
+ });
140
+ it("returns examples", () => {
141
+ const result = handleGetCssUtility(db, { name: "flexy" });
142
+ const data = JSON.parse(result.content[0].text);
143
+ expect(data.examples.length).toBeGreaterThan(0);
144
+ });
145
+ it("returns error for unknown utility", () => {
146
+ const result = handleGetCssUtility(db, { name: "nonexistent" });
147
+ expect(result.content[0].text).toContain("not found");
148
+ });
149
+ });
150
+ describe("list_css_utilities", () => {
151
+ it("lists all utilities", () => {
152
+ const result = handleListCssUtilities(db, {});
153
+ const data = JSON.parse(result.content[0].text);
154
+ // Returns array directly, not { utilities: [...] }
155
+ expect(data.length).toBe(6);
156
+ expect(data.some((u) => u.name === "Flexy")).toBe(true);
157
+ expect(data.some((u) => u.name === "Margin")).toBe(true);
158
+ });
159
+ it("filters by category", () => {
160
+ const result = handleListCssUtilities(db, { category: "layout" });
161
+ const data = JSON.parse(result.content[0].text);
162
+ expect(data.length).toBe(2);
163
+ expect(data.every((u) => u.category === "layout")).toBe(true);
164
+ });
165
+ });
166
+ describe("get_install_info", () => {
167
+ it("returns Vue install info for button", () => {
168
+ const result = handleGetInstallInfo(db, { component: "button" });
169
+ const data = JSON.parse(result.content[0].text);
170
+ expect(data.component).toBe("MButton");
171
+ expect(data.framework).toBe("vue");
172
+ expect(data.package).toBe("@mozaic-ds/vue-3");
173
+ expect(data.installCommand).toBe("npm install @mozaic-ds/vue-3");
174
+ expect(data.imports.component).toContain("MButton");
175
+ expect(data.imports.styles).toContain("@mozaic-ds/styles");
176
+ });
177
+ it("returns React install info", () => {
178
+ const result = handleGetInstallInfo(db, { component: "button", framework: "react" });
179
+ const data = JSON.parse(result.content[0].text);
180
+ expect(data.framework).toBe("react");
181
+ expect(data.package).toBe("@mozaic-ds/react");
182
+ expect(data.peerDependencies).toContain("react@^17 || ^18");
183
+ });
184
+ it("supports yarn package manager", () => {
185
+ const result = handleGetInstallInfo(db, {
186
+ component: "button",
187
+ packageManager: "yarn",
188
+ });
189
+ const data = JSON.parse(result.content[0].text);
190
+ expect(data.installCommand).toBe("yarn add @mozaic-ds/vue-3");
191
+ expect(data.relatedPackages.styles.installCommand).toContain("yarn add");
192
+ });
193
+ it("supports pnpm package manager", () => {
194
+ const result = handleGetInstallInfo(db, {
195
+ component: "button",
196
+ packageManager: "pnpm",
197
+ });
198
+ const data = JSON.parse(result.content[0].text);
199
+ expect(data.installCommand).toBe("pnpm add @mozaic-ds/vue-3");
200
+ });
201
+ it("includes quick start code", () => {
202
+ const result = handleGetInstallInfo(db, { component: "modal" });
203
+ const data = JSON.parse(result.content[0].text);
204
+ expect(data.quickStart).toBeDefined();
205
+ expect(data.quickStart.setup).toContain("@mozaic-ds/styles");
206
+ expect(data.quickStart.usage).toContain("MModal");
207
+ });
208
+ it("returns error for unknown component", () => {
209
+ const result = handleGetInstallInfo(db, { component: "nonexistent" });
210
+ const data = JSON.parse(result.content[0].text);
211
+ expect(data.error).toContain("not found");
212
+ });
213
+ it("returns error for empty component name", () => {
214
+ const result = handleGetInstallInfo(db, { component: "" });
215
+ const data = JSON.parse(result.content[0].text);
216
+ expect(data.error).toContain("Please provide a component name");
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=tools.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import Database from "better-sqlite3";
2
+ export interface TokenProperty {
3
+ property: string;
4
+ value: string;
5
+ valueNumber?: number;
6
+ valueUnit?: string;
7
+ }
8
+ export interface Token {
9
+ category: string;
10
+ subcategory?: string;
11
+ name: string;
12
+ path: string;
13
+ cssVariable?: string;
14
+ scssVariable?: string;
15
+ valueRaw: string;
16
+ valueNumber?: number;
17
+ valueUnit?: string;
18
+ valueComputed?: string;
19
+ description?: string;
20
+ platform?: string;
21
+ sourceFile?: string;
22
+ properties?: TokenProperty[];
23
+ }
24
+ export interface ComponentProp {
25
+ name: string;
26
+ type?: string;
27
+ defaultValue?: string;
28
+ required?: boolean;
29
+ options?: string[];
30
+ description?: string;
31
+ }
32
+ export interface ComponentSlot {
33
+ name: string;
34
+ description?: string;
35
+ }
36
+ export interface ComponentEvent {
37
+ name: string;
38
+ payload?: string;
39
+ description?: string;
40
+ }
41
+ export interface ComponentExample {
42
+ framework: string;
43
+ title?: string;
44
+ code: string;
45
+ description?: string;
46
+ }
47
+ export interface Component {
48
+ name: string;
49
+ slug: string;
50
+ category?: string;
51
+ description?: string;
52
+ frameworks?: string[];
53
+ props?: ComponentProp[];
54
+ slots?: ComponentSlot[];
55
+ events?: ComponentEvent[];
56
+ examples?: ComponentExample[];
57
+ cssClasses?: string[];
58
+ }
59
+ export interface Documentation {
60
+ title: string;
61
+ path: string;
62
+ content: string;
63
+ category?: string;
64
+ keywords?: string[];
65
+ }
66
+ export interface CssUtilityExample {
67
+ title?: string;
68
+ code: string;
69
+ }
70
+ export interface CssUtility {
71
+ name: string;
72
+ slug: string;
73
+ category: string;
74
+ description?: string;
75
+ classes: string[];
76
+ examples: CssUtilityExample[];
77
+ }
78
+ export interface Icon {
79
+ name: string;
80
+ iconName: string;
81
+ type: string;
82
+ size: number;
83
+ viewBox: string;
84
+ paths: string;
85
+ }
86
+ export declare function initDatabase(dbPath: string): Database.Database;
87
+ export declare function insertTokens(db: Database.Database, tokens: Token[]): void;
88
+ export declare function getTokensByCategory(db: Database.Database, category: string): Token[];
89
+ export declare function getTokensBySubcategory(db: Database.Database, category: string, subcategory: string): Token[];
90
+ export declare function getTokenByPath(db: Database.Database, path: string): Token | undefined;
91
+ export declare function searchTokens(db: Database.Database, query: string, limit?: number): Token[];
92
+ export declare function insertComponent(db: Database.Database, component: Component): number;
93
+ export declare function insertComponents(db: Database.Database, components: Component[]): void;
94
+ export declare function getComponentBySlug(db: Database.Database, slug: string): Component | null;
95
+ export declare function listComponents(db: Database.Database, category?: string): Array<{
96
+ name: string;
97
+ slug: string;
98
+ category: string;
99
+ description: string;
100
+ }>;
101
+ export declare function insertDocs(db: Database.Database, docs: Documentation[]): void;
102
+ export declare function searchDocumentation(db: Database.Database, query: string, limit?: number): Array<{
103
+ title: string;
104
+ path: string;
105
+ snippet: string;
106
+ category: string;
107
+ }>;
108
+ export declare function getDocumentationByPath(db: Database.Database, path: string): Documentation | undefined;
109
+ export declare function insertCssUtility(db: Database.Database, utility: CssUtility): number;
110
+ export declare function insertCssUtilities(db: Database.Database, utilities: CssUtility[]): void;
111
+ export declare function getCssUtility(db: Database.Database, name: string): CssUtility | null;
112
+ export declare function listCssUtilities(db: Database.Database, category?: string): Array<{
113
+ name: string;
114
+ slug: string;
115
+ category: string;
116
+ description: string;
117
+ classCount: number;
118
+ }>;
119
+ export declare function insertIcons(db: Database.Database, icons: Icon[]): void;
120
+ export declare function searchIcons(db: Database.Database, query: string, options?: {
121
+ type?: string;
122
+ size?: number;
123
+ limit?: number;
124
+ }): Icon[];
125
+ export declare function getIconByName(db: Database.Database, name: string): Icon | null;
126
+ export declare function getIconsByType(db: Database.Database, type: string, limit?: number): Icon[];
127
+ export declare function listIconTypes(db: Database.Database): Array<{
128
+ type: string;
129
+ count: number;
130
+ }>;
131
+ export declare function listIcons(db: Database.Database, options?: {
132
+ type?: string;
133
+ size?: number;
134
+ limit?: number;
135
+ }): Icon[];
136
+ export declare function clearDatabase(db: Database.Database): void;
137
+ export declare function getDatabaseStats(db: Database.Database): {
138
+ tokens: number;
139
+ components: number;
140
+ cssUtilities: number;
141
+ documentation: number;
142
+ icons: number;
143
+ };
144
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}