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.
- package/INSTALLATION.md +232 -0
- package/README.md +262 -0
- package/SKILLS.md +411 -0
- package/bin/install-skills.js +171 -0
- package/data/mozaic.db +0 -0
- package/data/mozaic.db-shm +0 -0
- package/data/mozaic.db-wal +0 -0
- package/dist/__tests__/sanity-check.test.d.ts +2 -0
- package/dist/__tests__/sanity-check.test.d.ts.map +1 -0
- package/dist/__tests__/sanity-check.test.js +167 -0
- package/dist/__tests__/sanity-check.test.js.map +1 -0
- package/dist/__tests__/tools.integration.test.d.ts +2 -0
- package/dist/__tests__/tools.integration.test.d.ts.map +1 -0
- package/dist/__tests__/tools.integration.test.js +220 -0
- package/dist/__tests__/tools.integration.test.js.map +1 -0
- package/dist/db/queries.d.ts +144 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +536 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.d.ts +4 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +253 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +416 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/__tests__/docs-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/docs-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/docs-parser.test.js +251 -0
- package/dist/parsers/__tests__/docs-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/icons-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/icons-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/icons-parser.test.js +169 -0
- package/dist/parsers/__tests__/icons-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/react-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/react-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/react-parser.test.js +274 -0
- package/dist/parsers/__tests__/react-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/scss-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/scss-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/scss-parser.test.js +364 -0
- package/dist/parsers/__tests__/scss-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/tokens-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/tokens-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/tokens-parser.test.js +172 -0
- package/dist/parsers/__tests__/tokens-parser.test.js.map +1 -0
- package/dist/parsers/__tests__/vue-parser.test.d.ts +2 -0
- package/dist/parsers/__tests__/vue-parser.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/vue-parser.test.js +207 -0
- package/dist/parsers/__tests__/vue-parser.test.js.map +1 -0
- package/dist/parsers/docs-parser.d.ts +4 -0
- package/dist/parsers/docs-parser.d.ts.map +1 -0
- package/dist/parsers/docs-parser.js +237 -0
- package/dist/parsers/docs-parser.js.map +1 -0
- package/dist/parsers/icons-parser.d.ts +33 -0
- package/dist/parsers/icons-parser.d.ts.map +1 -0
- package/dist/parsers/icons-parser.js +125 -0
- package/dist/parsers/icons-parser.js.map +1 -0
- package/dist/parsers/react-parser.d.ts +3 -0
- package/dist/parsers/react-parser.d.ts.map +1 -0
- package/dist/parsers/react-parser.js +406 -0
- package/dist/parsers/react-parser.js.map +1 -0
- package/dist/parsers/scss-parser.d.ts +9 -0
- package/dist/parsers/scss-parser.d.ts.map +1 -0
- package/dist/parsers/scss-parser.js +351 -0
- package/dist/parsers/scss-parser.js.map +1 -0
- package/dist/parsers/tokens/border-parser.d.ts +3 -0
- package/dist/parsers/tokens/border-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/border-parser.js +83 -0
- package/dist/parsers/tokens/border-parser.js.map +1 -0
- package/dist/parsers/tokens/color-parser.d.ts +3 -0
- package/dist/parsers/tokens/color-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/color-parser.js +88 -0
- package/dist/parsers/tokens/color-parser.js.map +1 -0
- package/dist/parsers/tokens/grid-parser.d.ts +3 -0
- package/dist/parsers/tokens/grid-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/grid-parser.js +97 -0
- package/dist/parsers/tokens/grid-parser.js.map +1 -0
- package/dist/parsers/tokens/index.d.ts +9 -0
- package/dist/parsers/tokens/index.d.ts.map +1 -0
- package/dist/parsers/tokens/index.js +10 -0
- package/dist/parsers/tokens/index.js.map +1 -0
- package/dist/parsers/tokens/screen-parser.d.ts +3 -0
- package/dist/parsers/tokens/screen-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/screen-parser.js +54 -0
- package/dist/parsers/tokens/screen-parser.js.map +1 -0
- package/dist/parsers/tokens/shadow-parser.d.ts +3 -0
- package/dist/parsers/tokens/shadow-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/shadow-parser.js +62 -0
- package/dist/parsers/tokens/shadow-parser.js.map +1 -0
- package/dist/parsers/tokens/spacing-parser.d.ts +4 -0
- package/dist/parsers/tokens/spacing-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/spacing-parser.js +85 -0
- package/dist/parsers/tokens/spacing-parser.js.map +1 -0
- package/dist/parsers/tokens/types.d.ts +33 -0
- package/dist/parsers/tokens/types.d.ts.map +1 -0
- package/dist/parsers/tokens/types.js +42 -0
- package/dist/parsers/tokens/types.js.map +1 -0
- package/dist/parsers/tokens/typography-parser.d.ts +3 -0
- package/dist/parsers/tokens/typography-parser.d.ts.map +1 -0
- package/dist/parsers/tokens/typography-parser.js +76 -0
- package/dist/parsers/tokens/typography-parser.js.map +1 -0
- package/dist/parsers/tokens-parser.d.ts +18 -0
- package/dist/parsers/tokens-parser.d.ts.map +1 -0
- package/dist/parsers/tokens-parser.js +57 -0
- package/dist/parsers/tokens-parser.js.map +1 -0
- package/dist/parsers/vue-parser.d.ts +3 -0
- package/dist/parsers/vue-parser.d.ts.map +1 -0
- package/dist/parsers/vue-parser.js +343 -0
- package/dist/parsers/vue-parser.js.map +1 -0
- package/dist/tools/generate-react-component.d.ts +35 -0
- package/dist/tools/generate-react-component.d.ts.map +1 -0
- package/dist/tools/generate-react-component.js +81 -0
- package/dist/tools/generate-react-component.js.map +1 -0
- package/dist/tools/generate-vue-component.d.ts +35 -0
- package/dist/tools/generate-vue-component.d.ts.map +1 -0
- package/dist/tools/generate-vue-component.js +81 -0
- package/dist/tools/generate-vue-component.js.map +1 -0
- package/dist/tools/get-component-info.d.ts +52 -0
- package/dist/tools/get-component-info.d.ts.map +1 -0
- package/dist/tools/get-component-info.js +94 -0
- package/dist/tools/get-component-info.js.map +1 -0
- package/dist/tools/get-css-utility.d.ts +41 -0
- package/dist/tools/get-css-utility.d.ts.map +1 -0
- package/dist/tools/get-css-utility.js +57 -0
- package/dist/tools/get-css-utility.js.map +1 -0
- package/dist/tools/get-design-tokens.d.ts +44 -0
- package/dist/tools/get-design-tokens.d.ts.map +1 -0
- package/dist/tools/get-design-tokens.js +124 -0
- package/dist/tools/get-design-tokens.js.map +1 -0
- package/dist/tools/get-icon.d.ts +32 -0
- package/dist/tools/get-icon.d.ts.map +1 -0
- package/dist/tools/get-icon.js +108 -0
- package/dist/tools/get-icon.js.map +1 -0
- package/dist/tools/get-install-info.d.ts +39 -0
- package/dist/tools/get-install-info.d.ts.map +1 -0
- package/dist/tools/get-install-info.js +160 -0
- package/dist/tools/get-install-info.js.map +1 -0
- package/dist/tools/list-components.d.ts +32 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +62 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/list-css-utilities.d.ts +27 -0
- package/dist/tools/list-css-utilities.d.ts.map +1 -0
- package/dist/tools/list-css-utilities.js +48 -0
- package/dist/tools/list-css-utilities.js.map +1 -0
- package/dist/tools/search-documentation.d.ts +37 -0
- package/dist/tools/search-documentation.d.ts.map +1 -0
- package/dist/tools/search-documentation.js +120 -0
- package/dist/tools/search-documentation.js.map +1 -0
- package/dist/tools/search-icons.d.ts +41 -0
- package/dist/tools/search-icons.d.ts.map +1 -0
- package/dist/tools/search-icons.js +134 -0
- package/dist/tools/search-icons.js.map +1 -0
- package/package.json +98 -0
- package/skills/mozaic-css-utilities/skill.md +633 -0
- package/skills/mozaic-design-tokens/skill.md +621 -0
- package/skills/mozaic-icons/skill.md +624 -0
- package/skills/mozaic-react-builder/skill.md +652 -0
- package/skills/mozaic-vue-builder/skill.md +491 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { initSchema } from "./schema.js";
|
|
3
|
+
// Database initialization
|
|
4
|
+
export function initDatabase(dbPath) {
|
|
5
|
+
const db = new Database(dbPath);
|
|
6
|
+
db.pragma("journal_mode = WAL");
|
|
7
|
+
initSchema(db);
|
|
8
|
+
return db;
|
|
9
|
+
}
|
|
10
|
+
// Token operations
|
|
11
|
+
export function insertTokens(db, tokens) {
|
|
12
|
+
const tokenStmt = db.prepare(`
|
|
13
|
+
INSERT INTO tokens (
|
|
14
|
+
category, subcategory, name, path, css_variable, scss_variable,
|
|
15
|
+
value_raw, value_number, value_unit, value_computed,
|
|
16
|
+
description, platform, source_file
|
|
17
|
+
)
|
|
18
|
+
VALUES (
|
|
19
|
+
@category, @subcategory, @name, @path, @cssVariable, @scssVariable,
|
|
20
|
+
@valueRaw, @valueNumber, @valueUnit, @valueComputed,
|
|
21
|
+
@description, @platform, @sourceFile
|
|
22
|
+
)
|
|
23
|
+
`);
|
|
24
|
+
const propertyStmt = db.prepare(`
|
|
25
|
+
INSERT INTO token_properties (token_id, property, value, value_number, value_unit)
|
|
26
|
+
VALUES (@tokenId, @property, @value, @valueNumber, @valueUnit)
|
|
27
|
+
`);
|
|
28
|
+
const insertMany = db.transaction((items) => {
|
|
29
|
+
for (const item of items) {
|
|
30
|
+
const result = tokenStmt.run({
|
|
31
|
+
category: item.category,
|
|
32
|
+
subcategory: item.subcategory ?? null,
|
|
33
|
+
name: item.name,
|
|
34
|
+
path: item.path,
|
|
35
|
+
cssVariable: item.cssVariable ?? null,
|
|
36
|
+
scssVariable: item.scssVariable ?? null,
|
|
37
|
+
valueRaw: item.valueRaw,
|
|
38
|
+
valueNumber: item.valueNumber ?? null,
|
|
39
|
+
valueUnit: item.valueUnit ?? null,
|
|
40
|
+
valueComputed: item.valueComputed ?? null,
|
|
41
|
+
description: item.description ?? null,
|
|
42
|
+
platform: item.platform ?? "all",
|
|
43
|
+
sourceFile: item.sourceFile ?? null,
|
|
44
|
+
});
|
|
45
|
+
// Insert token properties if any (for composite tokens like shadows)
|
|
46
|
+
if (item.properties && item.properties.length > 0) {
|
|
47
|
+
const tokenId = result.lastInsertRowid;
|
|
48
|
+
for (const prop of item.properties) {
|
|
49
|
+
propertyStmt.run({
|
|
50
|
+
tokenId,
|
|
51
|
+
property: prop.property,
|
|
52
|
+
value: prop.value,
|
|
53
|
+
valueNumber: prop.valueNumber ?? null,
|
|
54
|
+
valueUnit: prop.valueUnit ?? null,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
insertMany(tokens);
|
|
61
|
+
}
|
|
62
|
+
function rowToToken(row, properties) {
|
|
63
|
+
const token = {
|
|
64
|
+
category: row.category,
|
|
65
|
+
subcategory: row.subcategory ?? undefined,
|
|
66
|
+
name: row.name,
|
|
67
|
+
path: row.path,
|
|
68
|
+
cssVariable: row.css_variable ?? undefined,
|
|
69
|
+
scssVariable: row.scss_variable ?? undefined,
|
|
70
|
+
valueRaw: row.value_raw,
|
|
71
|
+
valueNumber: row.value_number ?? undefined,
|
|
72
|
+
valueUnit: row.value_unit ?? undefined,
|
|
73
|
+
valueComputed: row.value_computed ?? undefined,
|
|
74
|
+
description: row.description ?? undefined,
|
|
75
|
+
platform: row.platform,
|
|
76
|
+
sourceFile: row.source_file ?? undefined,
|
|
77
|
+
};
|
|
78
|
+
if (properties && properties.length > 0) {
|
|
79
|
+
token.properties = properties.map((p) => ({
|
|
80
|
+
property: p.property,
|
|
81
|
+
value: p.value,
|
|
82
|
+
valueNumber: p.value_number ?? undefined,
|
|
83
|
+
valueUnit: p.value_unit ?? undefined,
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
86
|
+
return token;
|
|
87
|
+
}
|
|
88
|
+
export function getTokensByCategory(db, category) {
|
|
89
|
+
const rows = category === "all"
|
|
90
|
+
? db.prepare("SELECT * FROM tokens").all()
|
|
91
|
+
: db.prepare("SELECT * FROM tokens WHERE category = ?").all(category);
|
|
92
|
+
return rows.map((row) => {
|
|
93
|
+
const properties = db
|
|
94
|
+
.prepare("SELECT property, value, value_number, value_unit FROM token_properties WHERE token_id = ?")
|
|
95
|
+
.all(row.id);
|
|
96
|
+
return rowToToken(row, properties);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
export function getTokensBySubcategory(db, category, subcategory) {
|
|
100
|
+
const rows = db
|
|
101
|
+
.prepare("SELECT * FROM tokens WHERE category = ? AND subcategory = ?")
|
|
102
|
+
.all(category, subcategory);
|
|
103
|
+
return rows.map((row) => {
|
|
104
|
+
const properties = db
|
|
105
|
+
.prepare("SELECT property, value, value_number, value_unit FROM token_properties WHERE token_id = ?")
|
|
106
|
+
.all(row.id);
|
|
107
|
+
return rowToToken(row, properties);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
export function getTokenByPath(db, path) {
|
|
111
|
+
const row = db.prepare("SELECT * FROM tokens WHERE path = ?").get(path);
|
|
112
|
+
if (!row)
|
|
113
|
+
return undefined;
|
|
114
|
+
const properties = db
|
|
115
|
+
.prepare("SELECT property, value, value_number, value_unit FROM token_properties WHERE token_id = ?")
|
|
116
|
+
.all(row.id);
|
|
117
|
+
return rowToToken(row, properties);
|
|
118
|
+
}
|
|
119
|
+
export function searchTokens(db, query, limit = 20) {
|
|
120
|
+
const rows = db
|
|
121
|
+
.prepare(`
|
|
122
|
+
SELECT t.*
|
|
123
|
+
FROM tokens_fts
|
|
124
|
+
JOIN tokens t ON tokens_fts.rowid = t.id
|
|
125
|
+
WHERE tokens_fts MATCH ?
|
|
126
|
+
ORDER BY rank
|
|
127
|
+
LIMIT ?
|
|
128
|
+
`)
|
|
129
|
+
.all(query, limit);
|
|
130
|
+
return rows.map((row) => {
|
|
131
|
+
const properties = db
|
|
132
|
+
.prepare("SELECT property, value, value_number, value_unit FROM token_properties WHERE token_id = ?")
|
|
133
|
+
.all(row.id);
|
|
134
|
+
return rowToToken(row, properties);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Component operations
|
|
138
|
+
export function insertComponent(db, component) {
|
|
139
|
+
const result = db
|
|
140
|
+
.prepare(`
|
|
141
|
+
INSERT INTO components (name, slug, category, description, frameworks)
|
|
142
|
+
VALUES (@name, @slug, @category, @description, @frameworks)
|
|
143
|
+
`)
|
|
144
|
+
.run({
|
|
145
|
+
name: component.name,
|
|
146
|
+
slug: component.slug,
|
|
147
|
+
category: component.category ?? null,
|
|
148
|
+
description: component.description ?? null,
|
|
149
|
+
frameworks: component.frameworks ? JSON.stringify(component.frameworks) : null,
|
|
150
|
+
});
|
|
151
|
+
const componentId = result.lastInsertRowid;
|
|
152
|
+
// Insert props
|
|
153
|
+
if (component.props && component.props.length > 0) {
|
|
154
|
+
const propStmt = db.prepare(`
|
|
155
|
+
INSERT INTO component_props (component_id, name, type, default_value, required, options, description)
|
|
156
|
+
VALUES (@componentId, @name, @type, @defaultValue, @required, @options, @description)
|
|
157
|
+
`);
|
|
158
|
+
for (const prop of component.props) {
|
|
159
|
+
propStmt.run({
|
|
160
|
+
componentId,
|
|
161
|
+
name: prop.name,
|
|
162
|
+
type: prop.type ?? null,
|
|
163
|
+
defaultValue: prop.defaultValue ?? null,
|
|
164
|
+
required: prop.required ? 1 : 0,
|
|
165
|
+
options: prop.options ? JSON.stringify(prop.options) : null,
|
|
166
|
+
description: prop.description ?? null,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Insert slots
|
|
171
|
+
if (component.slots && component.slots.length > 0) {
|
|
172
|
+
const slotStmt = db.prepare(`
|
|
173
|
+
INSERT INTO component_slots (component_id, name, description)
|
|
174
|
+
VALUES (@componentId, @name, @description)
|
|
175
|
+
`);
|
|
176
|
+
for (const slot of component.slots) {
|
|
177
|
+
slotStmt.run({
|
|
178
|
+
componentId,
|
|
179
|
+
name: slot.name,
|
|
180
|
+
description: slot.description ?? null,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Insert events
|
|
185
|
+
if (component.events && component.events.length > 0) {
|
|
186
|
+
const eventStmt = db.prepare(`
|
|
187
|
+
INSERT INTO component_events (component_id, name, payload, description)
|
|
188
|
+
VALUES (@componentId, @name, @payload, @description)
|
|
189
|
+
`);
|
|
190
|
+
for (const event of component.events) {
|
|
191
|
+
eventStmt.run({
|
|
192
|
+
componentId,
|
|
193
|
+
name: event.name,
|
|
194
|
+
payload: event.payload ?? null,
|
|
195
|
+
description: event.description ?? null,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Insert examples
|
|
200
|
+
if (component.examples && component.examples.length > 0) {
|
|
201
|
+
const exampleStmt = db.prepare(`
|
|
202
|
+
INSERT INTO component_examples (component_id, framework, title, code, description)
|
|
203
|
+
VALUES (@componentId, @framework, @title, @code, @description)
|
|
204
|
+
`);
|
|
205
|
+
for (const example of component.examples) {
|
|
206
|
+
exampleStmt.run({
|
|
207
|
+
componentId,
|
|
208
|
+
framework: example.framework,
|
|
209
|
+
title: example.title ?? null,
|
|
210
|
+
code: example.code,
|
|
211
|
+
description: example.description ?? null,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// Insert CSS classes
|
|
216
|
+
if (component.cssClasses && component.cssClasses.length > 0) {
|
|
217
|
+
const cssStmt = db.prepare(`
|
|
218
|
+
INSERT INTO component_css_classes (component_id, class_name)
|
|
219
|
+
VALUES (@componentId, @className)
|
|
220
|
+
`);
|
|
221
|
+
for (const className of component.cssClasses) {
|
|
222
|
+
cssStmt.run({ componentId, className });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return componentId;
|
|
226
|
+
}
|
|
227
|
+
export function insertComponents(db, components) {
|
|
228
|
+
const transaction = db.transaction((items) => {
|
|
229
|
+
for (const component of items) {
|
|
230
|
+
insertComponent(db, component);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
transaction(components);
|
|
234
|
+
}
|
|
235
|
+
export function getComponentBySlug(db, slug) {
|
|
236
|
+
const row = db.prepare("SELECT * FROM components WHERE slug = ? COLLATE NOCASE").get(slug);
|
|
237
|
+
if (!row)
|
|
238
|
+
return null;
|
|
239
|
+
const props = db
|
|
240
|
+
.prepare("SELECT * FROM component_props WHERE component_id = ?")
|
|
241
|
+
.all(row.id);
|
|
242
|
+
const slots = db
|
|
243
|
+
.prepare("SELECT * FROM component_slots WHERE component_id = ?")
|
|
244
|
+
.all(row.id);
|
|
245
|
+
const events = db
|
|
246
|
+
.prepare("SELECT * FROM component_events WHERE component_id = ?")
|
|
247
|
+
.all(row.id);
|
|
248
|
+
const examples = db
|
|
249
|
+
.prepare("SELECT * FROM component_examples WHERE component_id = ?")
|
|
250
|
+
.all(row.id);
|
|
251
|
+
const cssClasses = db
|
|
252
|
+
.prepare("SELECT class_name FROM component_css_classes WHERE component_id = ?")
|
|
253
|
+
.all(row.id);
|
|
254
|
+
return {
|
|
255
|
+
name: row.name,
|
|
256
|
+
slug: row.slug,
|
|
257
|
+
category: row.category,
|
|
258
|
+
description: row.description,
|
|
259
|
+
frameworks: row.frameworks ? JSON.parse(row.frameworks) : [],
|
|
260
|
+
props: props.map((p) => ({
|
|
261
|
+
name: p.name,
|
|
262
|
+
type: p.type,
|
|
263
|
+
defaultValue: p.default_value,
|
|
264
|
+
required: p.required === 1,
|
|
265
|
+
options: p.options ? JSON.parse(p.options) : undefined,
|
|
266
|
+
description: p.description,
|
|
267
|
+
})),
|
|
268
|
+
slots: slots.map((s) => ({
|
|
269
|
+
name: s.name,
|
|
270
|
+
description: s.description,
|
|
271
|
+
})),
|
|
272
|
+
events: events.map((e) => ({
|
|
273
|
+
name: e.name,
|
|
274
|
+
payload: e.payload,
|
|
275
|
+
description: e.description,
|
|
276
|
+
})),
|
|
277
|
+
examples: examples.map((ex) => ({
|
|
278
|
+
framework: ex.framework,
|
|
279
|
+
title: ex.title,
|
|
280
|
+
code: ex.code,
|
|
281
|
+
description: ex.description,
|
|
282
|
+
})),
|
|
283
|
+
cssClasses: cssClasses.map((c) => c.class_name),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
export function listComponents(db, category) {
|
|
287
|
+
if (category && category !== "all") {
|
|
288
|
+
return db
|
|
289
|
+
.prepare("SELECT name, slug, category, description FROM components WHERE category = ?")
|
|
290
|
+
.all(category);
|
|
291
|
+
}
|
|
292
|
+
return db.prepare("SELECT name, slug, category, description FROM components").all();
|
|
293
|
+
}
|
|
294
|
+
// Documentation operations
|
|
295
|
+
export function insertDocs(db, docs) {
|
|
296
|
+
const stmt = db.prepare(`
|
|
297
|
+
INSERT INTO documentation (title, path, content, category, keywords)
|
|
298
|
+
VALUES (@title, @path, @content, @category, @keywords)
|
|
299
|
+
`);
|
|
300
|
+
const insertMany = db.transaction((items) => {
|
|
301
|
+
for (const item of items) {
|
|
302
|
+
stmt.run({
|
|
303
|
+
title: item.title,
|
|
304
|
+
path: item.path,
|
|
305
|
+
content: item.content,
|
|
306
|
+
category: item.category ?? null,
|
|
307
|
+
keywords: item.keywords ? JSON.stringify(item.keywords) : null,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
insertMany(docs);
|
|
312
|
+
}
|
|
313
|
+
export function searchDocumentation(db, query, limit = 5) {
|
|
314
|
+
const results = db
|
|
315
|
+
.prepare(`
|
|
316
|
+
SELECT
|
|
317
|
+
d.title,
|
|
318
|
+
d.path,
|
|
319
|
+
d.category,
|
|
320
|
+
snippet(docs_fts, 1, '<mark>', '</mark>', '...', 64) as snippet
|
|
321
|
+
FROM docs_fts
|
|
322
|
+
JOIN documentation d ON docs_fts.rowid = d.id
|
|
323
|
+
WHERE docs_fts MATCH ?
|
|
324
|
+
ORDER BY rank
|
|
325
|
+
LIMIT ?
|
|
326
|
+
`)
|
|
327
|
+
.all(query, limit);
|
|
328
|
+
return results;
|
|
329
|
+
}
|
|
330
|
+
export function getDocumentationByPath(db, path) {
|
|
331
|
+
return db.prepare("SELECT * FROM documentation WHERE path = ?").get(path);
|
|
332
|
+
}
|
|
333
|
+
// CSS Utility operations
|
|
334
|
+
export function insertCssUtility(db, utility) {
|
|
335
|
+
const result = db
|
|
336
|
+
.prepare(`
|
|
337
|
+
INSERT INTO css_utilities (name, slug, category, description)
|
|
338
|
+
VALUES (@name, @slug, @category, @description)
|
|
339
|
+
`)
|
|
340
|
+
.run({
|
|
341
|
+
name: utility.name,
|
|
342
|
+
slug: utility.slug,
|
|
343
|
+
category: utility.category,
|
|
344
|
+
description: utility.description ?? null,
|
|
345
|
+
});
|
|
346
|
+
const utilityId = result.lastInsertRowid;
|
|
347
|
+
// Insert CSS classes
|
|
348
|
+
if (utility.classes && utility.classes.length > 0) {
|
|
349
|
+
const classStmt = db.prepare(`
|
|
350
|
+
INSERT INTO css_utility_classes (utility_id, class_name)
|
|
351
|
+
VALUES (@utilityId, @className)
|
|
352
|
+
`);
|
|
353
|
+
for (const className of utility.classes) {
|
|
354
|
+
classStmt.run({ utilityId, className });
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Insert examples
|
|
358
|
+
if (utility.examples && utility.examples.length > 0) {
|
|
359
|
+
const exampleStmt = db.prepare(`
|
|
360
|
+
INSERT INTO css_utility_examples (utility_id, title, code)
|
|
361
|
+
VALUES (@utilityId, @title, @code)
|
|
362
|
+
`);
|
|
363
|
+
for (const example of utility.examples) {
|
|
364
|
+
exampleStmt.run({
|
|
365
|
+
utilityId,
|
|
366
|
+
title: example.title ?? null,
|
|
367
|
+
code: example.code,
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return utilityId;
|
|
372
|
+
}
|
|
373
|
+
export function insertCssUtilities(db, utilities) {
|
|
374
|
+
const transaction = db.transaction((items) => {
|
|
375
|
+
for (const utility of items) {
|
|
376
|
+
insertCssUtility(db, utility);
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
transaction(utilities);
|
|
380
|
+
}
|
|
381
|
+
export function getCssUtility(db, name) {
|
|
382
|
+
const row = db
|
|
383
|
+
.prepare("SELECT * FROM css_utilities WHERE name = ? COLLATE NOCASE OR slug = ? COLLATE NOCASE")
|
|
384
|
+
.get(name, name);
|
|
385
|
+
if (!row)
|
|
386
|
+
return null;
|
|
387
|
+
const classes = db
|
|
388
|
+
.prepare("SELECT class_name FROM css_utility_classes WHERE utility_id = ?")
|
|
389
|
+
.all(row.id);
|
|
390
|
+
const examples = db
|
|
391
|
+
.prepare("SELECT title, code FROM css_utility_examples WHERE utility_id = ?")
|
|
392
|
+
.all(row.id);
|
|
393
|
+
return {
|
|
394
|
+
name: row.name,
|
|
395
|
+
slug: row.slug,
|
|
396
|
+
category: row.category,
|
|
397
|
+
description: row.description,
|
|
398
|
+
classes: classes.map((c) => c.class_name),
|
|
399
|
+
examples: examples.map((e) => ({
|
|
400
|
+
title: e.title,
|
|
401
|
+
code: e.code,
|
|
402
|
+
})),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
export function listCssUtilities(db, category) {
|
|
406
|
+
const query = category && category !== "all"
|
|
407
|
+
? `SELECT u.name, u.slug, u.category, u.description,
|
|
408
|
+
(SELECT COUNT(*) FROM css_utility_classes WHERE utility_id = u.id) as classCount
|
|
409
|
+
FROM css_utilities u WHERE u.category = ?`
|
|
410
|
+
: `SELECT u.name, u.slug, u.category, u.description,
|
|
411
|
+
(SELECT COUNT(*) FROM css_utility_classes WHERE utility_id = u.id) as classCount
|
|
412
|
+
FROM css_utilities u`;
|
|
413
|
+
if (category && category !== "all") {
|
|
414
|
+
return db.prepare(query).all(category);
|
|
415
|
+
}
|
|
416
|
+
return db.prepare(query).all();
|
|
417
|
+
}
|
|
418
|
+
// Icon operations
|
|
419
|
+
export function insertIcons(db, icons) {
|
|
420
|
+
const stmt = db.prepare(`
|
|
421
|
+
INSERT INTO icons (name, icon_name, type, size, view_box, paths)
|
|
422
|
+
VALUES (@name, @iconName, @type, @size, @viewBox, @paths)
|
|
423
|
+
`);
|
|
424
|
+
const insertMany = db.transaction((items) => {
|
|
425
|
+
for (const item of items) {
|
|
426
|
+
stmt.run({
|
|
427
|
+
name: item.name,
|
|
428
|
+
iconName: item.iconName,
|
|
429
|
+
type: item.type,
|
|
430
|
+
size: item.size,
|
|
431
|
+
viewBox: item.viewBox,
|
|
432
|
+
paths: item.paths,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
insertMany(icons);
|
|
437
|
+
}
|
|
438
|
+
function rowToIcon(row) {
|
|
439
|
+
return {
|
|
440
|
+
name: row.name,
|
|
441
|
+
iconName: row.icon_name,
|
|
442
|
+
type: row.type,
|
|
443
|
+
size: row.size,
|
|
444
|
+
viewBox: row.view_box,
|
|
445
|
+
paths: row.paths,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
export function searchIcons(db, query, options) {
|
|
449
|
+
const limit = options?.limit ?? 20;
|
|
450
|
+
let sql = `
|
|
451
|
+
SELECT i.*
|
|
452
|
+
FROM icons_fts
|
|
453
|
+
JOIN icons i ON icons_fts.rowid = i.id
|
|
454
|
+
WHERE icons_fts MATCH ?
|
|
455
|
+
`;
|
|
456
|
+
const params = [query];
|
|
457
|
+
if (options?.type) {
|
|
458
|
+
sql += " AND i.type = ?";
|
|
459
|
+
params.push(options.type);
|
|
460
|
+
}
|
|
461
|
+
if (options?.size) {
|
|
462
|
+
sql += " AND i.size = ?";
|
|
463
|
+
params.push(options.size);
|
|
464
|
+
}
|
|
465
|
+
sql += " ORDER BY rank LIMIT ?";
|
|
466
|
+
params.push(limit);
|
|
467
|
+
const rows = db.prepare(sql).all(...params);
|
|
468
|
+
return rows.map(rowToIcon);
|
|
469
|
+
}
|
|
470
|
+
export function getIconByName(db, name) {
|
|
471
|
+
const row = db.prepare("SELECT * FROM icons WHERE name = ? COLLATE NOCASE").get(name);
|
|
472
|
+
if (!row)
|
|
473
|
+
return null;
|
|
474
|
+
return rowToIcon(row);
|
|
475
|
+
}
|
|
476
|
+
export function getIconsByType(db, type, limit = 50) {
|
|
477
|
+
const rows = db
|
|
478
|
+
.prepare("SELECT * FROM icons WHERE type = ? ORDER BY icon_name, size LIMIT ?")
|
|
479
|
+
.all(type, limit);
|
|
480
|
+
return rows.map(rowToIcon);
|
|
481
|
+
}
|
|
482
|
+
export function listIconTypes(db) {
|
|
483
|
+
return db
|
|
484
|
+
.prepare("SELECT type, COUNT(*) as count FROM icons GROUP BY type ORDER BY count DESC")
|
|
485
|
+
.all();
|
|
486
|
+
}
|
|
487
|
+
export function listIcons(db, options) {
|
|
488
|
+
const limit = options?.limit ?? 100;
|
|
489
|
+
let sql = "SELECT * FROM icons WHERE 1=1";
|
|
490
|
+
const params = [];
|
|
491
|
+
if (options?.type) {
|
|
492
|
+
sql += " AND type = ?";
|
|
493
|
+
params.push(options.type);
|
|
494
|
+
}
|
|
495
|
+
if (options?.size) {
|
|
496
|
+
sql += " AND size = ?";
|
|
497
|
+
params.push(options.size);
|
|
498
|
+
}
|
|
499
|
+
sql += " ORDER BY icon_name, size LIMIT ?";
|
|
500
|
+
params.push(limit);
|
|
501
|
+
const rows = db.prepare(sql).all(...params);
|
|
502
|
+
return rows.map(rowToIcon);
|
|
503
|
+
}
|
|
504
|
+
// Utility functions
|
|
505
|
+
export function clearDatabase(db) {
|
|
506
|
+
db.exec(`
|
|
507
|
+
DELETE FROM token_properties;
|
|
508
|
+
DELETE FROM tokens;
|
|
509
|
+
DELETE FROM component_css_classes;
|
|
510
|
+
DELETE FROM component_examples;
|
|
511
|
+
DELETE FROM component_events;
|
|
512
|
+
DELETE FROM component_slots;
|
|
513
|
+
DELETE FROM component_props;
|
|
514
|
+
DELETE FROM components;
|
|
515
|
+
DELETE FROM css_utility_classes;
|
|
516
|
+
DELETE FROM css_utility_examples;
|
|
517
|
+
DELETE FROM css_utilities;
|
|
518
|
+
DELETE FROM documentation;
|
|
519
|
+
DELETE FROM icons;
|
|
520
|
+
`);
|
|
521
|
+
}
|
|
522
|
+
export function getDatabaseStats(db) {
|
|
523
|
+
const tokens = db.prepare("SELECT COUNT(*) as count FROM tokens").get();
|
|
524
|
+
const components = db.prepare("SELECT COUNT(*) as count FROM components").get();
|
|
525
|
+
const cssUtilities = db.prepare("SELECT COUNT(*) as count FROM css_utilities").get();
|
|
526
|
+
const documentation = db.prepare("SELECT COUNT(*) as count FROM documentation").get();
|
|
527
|
+
const icons = db.prepare("SELECT COUNT(*) as count FROM icons").get();
|
|
528
|
+
return {
|
|
529
|
+
tokens: tokens.count,
|
|
530
|
+
components: components.count,
|
|
531
|
+
cssUtilities: cssUtilities.count,
|
|
532
|
+
documentation: documentation.count,
|
|
533
|
+
icons: icons.count,
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
//# sourceMappingURL=queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkGzC,0BAA0B;AAC1B,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,mBAAmB;AACnB,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,MAAe;IACjE,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;GAW5B,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAG/B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAc,EAAE,EAAE;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;gBACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;gBACjC,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;gBACzC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;gBAChC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI;aACpC,CAAC,CAAC;YAEH,qEAAqE;YACrE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClD,MAAM,OAAO,GAAG,MAAM,CAAC,eAAyB,CAAC;gBACjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACnC,YAAY,CAAC,GAAG,CAAC;wBACf,OAAO;wBACP,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;wBACrC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI;qBAClC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AA0BD,SAAS,UAAU,CAAC,GAAa,EAAE,UAA+B;IAChE,MAAM,KAAK,GAAU;QACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,YAAY,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;QAC5C,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,WAAW,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC1C,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACtC,aAAa,EAAE,GAAG,CAAC,cAAc,IAAI,SAAS;QAC9C,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,UAAU,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;KACzC,CAAC;IAEF,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,SAAS;YACxC,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,SAAS;SACrC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAqB,EAAE,QAAgB;IACzE,MAAM,IAAI,GACR,QAAQ,KAAK,KAAK;QAChB,CAAC,CAAE,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAiB;QAC1D,CAAC,CAAE,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAgB,CAAC;IAE1F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,EAAE;aAClB,OAAO,CACN,2FAA2F,CAC5F;aACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAuB,CAAC;QACrC,OAAO,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,EAAqB,EACrB,QAAgB,EAChB,WAAmB;IAEnB,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,6DAA6D,CAAC;SACtE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAe,CAAC;IAE5C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,EAAE;aAClB,OAAO,CACN,2FAA2F,CAC5F;aACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAuB,CAAC;QACrC,OAAO,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAqB,EAAE,IAAY;IAChE,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAyB,CAAC;IAEhG,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAE3B,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CACN,2FAA2F,CAC5F;SACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAuB,CAAC;IAErC,OAAO,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,KAAa,EAAE,QAAgB,EAAE;IACnF,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CACN;;;;;;;KAOD,CACA;SACA,GAAG,CAAC,KAAK,EAAE,KAAK,CAAe,CAAC;IAEnC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,UAAU,GAAG,EAAE;aAClB,OAAO,CACN,2FAA2F,CAC5F;aACA,GAAG,CAAC,GAAG,CAAC,EAAE,CAAuB,CAAC;QACrC,OAAO,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,eAAe,CAAC,EAAqB,EAAE,SAAoB;IACzE,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;;GAGH,CACE;SACA,GAAG,CAAC;QACH,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,IAAI;QACpC,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,IAAI;QAC1C,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;KAC/E,CAAC,CAAC;IAEL,MAAM,WAAW,GAAG,MAAM,CAAC,eAAyB,CAAC;IAErD,eAAe;IACf,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG3B,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC;gBACX,WAAW;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;gBACvB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;gBACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC3D,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG3B,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,QAAQ,CAAC,GAAG,CAAC;gBACX,WAAW;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI;aACtC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrC,SAAS,CAAC,GAAG,CAAC;gBACZ,WAAW;gBACX,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;gBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG9B,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC;gBACd,WAAW;gBACX,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG1B,CAAC,CAAC;QACH,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAqB,EAAE,UAAuB;IAC7E,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAkB,EAAE,EAAE;QACxD,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;YAC9B,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,IAAY;IACpE,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,CAAC,IAAI,CAS5E,CAAC;IAEd,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CAAC,sDAAsD,CAAC;SAC/D,GAAG,CAAC,GAAG,CAAC,EAAE,CAOX,CAAC;IAEH,MAAM,KAAK,GAAG,EAAE;SACb,OAAO,CAAC,sDAAsD,CAAC;SAC/D,GAAG,CAAC,GAAG,CAAC,EAAE,CAAiD,CAAC;IAE/D,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CAAC,uDAAuD,CAAC;SAChE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAkE,CAAC;IAEhF,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,yDAAyD,CAAC;SAClE,GAAG,CAAC,GAAG,CAAC,EAAE,CAKX,CAAC;IAEH,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CAAC,qEAAqE,CAAC;SAC9E,GAAG,CAAC,GAAG,CAAC,EAAE,CAAkC,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;QAC5D,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,YAAY,EAAE,CAAC,CAAC,aAAa;YAC7B,QAAQ,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YACtD,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC;QACH,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9B,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,WAAW,EAAE,EAAE,CAAC,WAAW;SAC5B,CAAC,CAAC;QACH,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,EAAqB,EACrB,QAAiB;IAEjB,IAAI,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO,EAAE;aACN,OAAO,CAAC,6EAA6E,CAAC;aACtF,GAAG,CAAC,QAAQ,CAKb,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC,CAAC,GAAG,EAK/E,CAAC;AACL,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,IAAqB;IACrE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAsB,EAAE,EAAE;QAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;aAC/D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,EAAqB,EACrB,KAAa,EACb,QAAgB,CAAC;IAEjB,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;;;;;;;;;;GAWH,CACE;SACA,GAAG,CAAC,KAAK,EAAE,KAAK,CAA8E,CAAC;IAElG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,EAAqB,EACrB,IAAY;IAEZ,OAAO,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,IAAI,CAE3D,CAAC;AAChB,CAAC;AAED,yBAAyB;AACzB,MAAM,UAAU,gBAAgB,CAAC,EAAqB,EAAE,OAAmB;IACzE,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;;KAGD,CACA;SACA,GAAG,CAAC;QACH,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;KACzC,CAAC,CAAC;IAEL,MAAM,SAAS,GAAG,MAAM,CAAC,eAAyB,CAAC;IAEnD,qBAAqB;IACrB,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG5B,CAAC,CAAC;QACH,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAG9B,CAAC,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,WAAW,CAAC,GAAG,CAAC;gBACd,SAAS;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAqB,EAAE,SAAuB;IAC/E,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAmB,EAAE,EAAE;QACzD,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,SAAS,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,IAAY;IAC/D,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,sFAAsF,CAAC;SAC/F,GAAG,CAAC,IAAI,EAAE,IAAI,CAEJ,CAAC;IAEd,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CAAC,iEAAiE,CAAC;SAC1E,GAAG,CAAC,GAAG,CAAC,EAAE,CAAkC,CAAC;IAEhD,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CAAC,mEAAmE,CAAC;SAC5E,GAAG,CAAC,GAAG,CAAC,EAAE,CAA2C,CAAC;IAEzD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QACzC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,EAAqB,EACrB,QAAiB;IAQjB,MAAM,KAAK,GACT,QAAQ,IAAI,QAAQ,KAAK,KAAK;QAC5B,CAAC,CAAC;;iDAEyC;QAC3C,CAAC,CAAC;;4BAEoB,CAAC;IAE3B,IAAI,QAAQ,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACnC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAMnC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,EAM1B,CAAC;AACL,CAAC;AAED,kBAAkB;AAClB,MAAM,UAAU,WAAW,CAAC,EAAqB,EAAE,KAAa;IAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAYD,SAAS,SAAS,CAAC,GAAY;IAC7B,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,KAAK,EAAE,GAAG,CAAC,KAAK;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,EAAqB,EACrB,KAAa,EACb,OAA0D;IAE1D,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;IAEnC,IAAI,GAAG,GAAG;;;;;GAKT,CAAC;IAEF,MAAM,MAAM,GAAwB,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,GAAG,IAAI,iBAAiB,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,GAAG,IAAI,iBAAiB,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,IAAI,wBAAwB,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAc,CAAC;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB,EAAE,IAAY;IAC/D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC,GAAG,CAAC,IAAI,CAEvE,CAAC;IAEd,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAqB,EAAE,IAAY,EAAE,QAAgB,EAAE;IACpF,MAAM,IAAI,GAAG,EAAE;SACZ,OAAO,CAAC,qEAAqE,CAAC;SAC9E,GAAG,CAAC,IAAI,EAAE,KAAK,CAAc,CAAC;IAEjC,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,OAAO,EAAE;SACN,OAAO,CAAC,6EAA6E,CAAC;SACtF,GAAG,EAA4C,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,EAAqB,EACrB,OAA0D;IAE1D,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC;IACpC,IAAI,GAAG,GAAG,+BAA+B,CAAC;IAC1C,MAAM,MAAM,GAAwB,EAAE,CAAC;IAEvC,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,GAAG,IAAI,eAAe,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,GAAG,IAAI,eAAe,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,GAAG,IAAI,mCAAmC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAc,CAAC;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;GAcP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAqB;IAOpD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAC7F,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,EAE5E,CAAC;IACF,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAEjF,CAAC;IACF,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAElF,CAAC;IACF,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAE3F,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,KAAK;QACpB,UAAU,EAAE,UAAU,CAAC,KAAK;QAC5B,YAAY,EAAE,YAAY,CAAC,KAAK;QAChC,aAAa,EAAE,aAAa,CAAC,KAAK;QAClC,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
export declare const SCHEMA = "\n-- Design Tokens (enhanced schema)\nCREATE TABLE IF NOT EXISTS tokens (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n category TEXT NOT NULL, -- 'color', 'spacing', 'shadow', 'border', 'radius', 'screen', 'typography'\n subcategory TEXT, -- 'primary', 'grey', 'font', 'line', etc.\n name TEXT NOT NULL, -- 'primary-01-100', 'mu100', 's'\n path TEXT NOT NULL UNIQUE, -- Full path: 'color.primary-01.100'\n css_variable TEXT, -- '--color-primary-01-100'\n scss_variable TEXT, -- '$color-primary-01-100' or '$mu100'\n\n -- Values (multiple formats)\n value_raw TEXT NOT NULL, -- Original value as-is\n value_number REAL, -- Numeric value (if applicable)\n value_unit TEXT, -- 'px', 'rem', '%', 'hex', etc.\n value_computed TEXT, -- Computed value (e.g., '16px' for 1rem)\n\n -- Metadata\n description TEXT,\n platform TEXT DEFAULT 'all',\n source_file TEXT -- Where it came from\n);\n\n-- For composite tokens like shadows\nCREATE TABLE IF NOT EXISTS token_properties (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n token_id INTEGER NOT NULL REFERENCES tokens(id) ON DELETE CASCADE,\n property TEXT NOT NULL, -- 'x', 'y', 'blur', 'spread', 'opacity'\n value TEXT NOT NULL,\n value_number REAL,\n value_unit TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_token_properties_token ON token_properties(token_id);\n\n-- Token indexes for fast queries\nCREATE INDEX IF NOT EXISTS idx_tokens_category ON tokens(category);\nCREATE INDEX IF NOT EXISTS idx_tokens_subcategory ON tokens(category, subcategory);\nCREATE INDEX IF NOT EXISTS idx_tokens_path ON tokens(path);\nCREATE INDEX IF NOT EXISTS idx_tokens_css_var ON tokens(css_variable);\nCREATE INDEX IF NOT EXISTS idx_tokens_scss_var ON tokens(scss_variable);\n\n-- Full-text search on tokens\nCREATE VIRTUAL TABLE IF NOT EXISTS tokens_fts USING fts5(\n name,\n path,\n description,\n css_variable,\n scss_variable,\n content=tokens,\n content_rowid=id\n);\n\n-- Triggers to keep tokens FTS index in sync\nCREATE TRIGGER IF NOT EXISTS tokens_ai AFTER INSERT ON tokens BEGIN\n INSERT INTO tokens_fts(rowid, name, path, description, css_variable, scss_variable)\n VALUES (new.id, new.name, new.path, new.description, new.css_variable, new.scss_variable);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS tokens_ad AFTER DELETE ON tokens BEGIN\n INSERT INTO tokens_fts(tokens_fts, rowid, name, path, description, css_variable, scss_variable)\n VALUES('delete', old.id, old.name, old.path, old.description, old.css_variable, old.scss_variable);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS tokens_au AFTER UPDATE ON tokens BEGIN\n INSERT INTO tokens_fts(tokens_fts, rowid, name, path, description, css_variable, scss_variable)\n VALUES('delete', old.id, old.name, old.path, old.description, old.css_variable, old.scss_variable);\n INSERT INTO tokens_fts(rowid, name, path, description, css_variable, scss_variable)\n VALUES (new.id, new.name, new.path, new.description, new.css_variable, new.scss_variable);\nEND;\n\n-- Components\nCREATE TABLE IF NOT EXISTS components (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n slug TEXT NOT NULL,\n category TEXT,\n description TEXT,\n frameworks TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_components_category ON components(category);\nCREATE INDEX IF NOT EXISTS idx_components_slug ON components(slug);\n\n-- Component Props\nCREATE TABLE IF NOT EXISTS component_props (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n component_id INTEGER REFERENCES components(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n type TEXT,\n default_value TEXT,\n required INTEGER DEFAULT 0,\n options TEXT,\n description TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_component_props_component ON component_props(component_id);\n\n-- Component Slots\nCREATE TABLE IF NOT EXISTS component_slots (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n component_id INTEGER REFERENCES components(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n description TEXT\n);\n\n-- Component Events\nCREATE TABLE IF NOT EXISTS component_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n component_id INTEGER REFERENCES components(id) ON DELETE CASCADE,\n name TEXT NOT NULL,\n payload TEXT,\n description TEXT\n);\n\n-- Component Examples\nCREATE TABLE IF NOT EXISTS component_examples (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n component_id INTEGER REFERENCES components(id) ON DELETE CASCADE,\n framework TEXT NOT NULL,\n title TEXT,\n code TEXT NOT NULL,\n description TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_component_examples_component ON component_examples(component_id);\nCREATE INDEX IF NOT EXISTS idx_component_examples_framework ON component_examples(framework);\n\n-- CSS Classes (for framework components)\nCREATE TABLE IF NOT EXISTS component_css_classes (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n component_id INTEGER REFERENCES components(id) ON DELETE CASCADE,\n class_name TEXT NOT NULL,\n description TEXT\n);\n\n-- CSS Utilities (layouts & spacing - separate from framework components)\nCREATE TABLE IF NOT EXISTS css_utilities (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n slug TEXT NOT NULL,\n category TEXT NOT NULL,\n description TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_css_utilities_category ON css_utilities(category);\nCREATE INDEX IF NOT EXISTS idx_css_utilities_slug ON css_utilities(slug);\n\n-- CSS Utility Classes\nCREATE TABLE IF NOT EXISTS css_utility_classes (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n utility_id INTEGER REFERENCES css_utilities(id) ON DELETE CASCADE,\n class_name TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_css_utility_classes_utility ON css_utility_classes(utility_id);\n\n-- CSS Utility Examples\nCREATE TABLE IF NOT EXISTS css_utility_examples (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n utility_id INTEGER REFERENCES css_utilities(id) ON DELETE CASCADE,\n title TEXT,\n code TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_css_utility_examples_utility ON css_utility_examples(utility_id);\n\n-- Documentation\nCREATE TABLE IF NOT EXISTS documentation (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n title TEXT NOT NULL,\n path TEXT NOT NULL,\n content TEXT NOT NULL,\n category TEXT,\n keywords TEXT\n);\n\nCREATE INDEX IF NOT EXISTS idx_documentation_category ON documentation(category);\nCREATE INDEX IF NOT EXISTS idx_documentation_path ON documentation(path);\n\n-- Full-text search for documentation\nCREATE VIRTUAL TABLE IF NOT EXISTS docs_fts USING fts5(\n title,\n content,\n keywords,\n content=documentation,\n content_rowid=id\n);\n\n-- Triggers to keep FTS index in sync\nCREATE TRIGGER IF NOT EXISTS docs_ai AFTER INSERT ON documentation BEGIN\n INSERT INTO docs_fts(rowid, title, content, keywords)\n VALUES (new.id, new.title, new.content, new.keywords);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS docs_ad AFTER DELETE ON documentation BEGIN\n INSERT INTO docs_fts(docs_fts, rowid, title, content, keywords)\n VALUES('delete', old.id, old.title, old.content, old.keywords);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS docs_au AFTER UPDATE ON documentation BEGIN\n INSERT INTO docs_fts(docs_fts, rowid, title, content, keywords)\n VALUES('delete', old.id, old.title, old.content, old.keywords);\n INSERT INTO docs_fts(rowid, title, content, keywords)\n VALUES (new.id, new.title, new.content, new.keywords);\nEND;\n\n-- Icons\nCREATE TABLE IF NOT EXISTS icons (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE, -- 'ArrowArrowBottom16'\n icon_name TEXT NOT NULL, -- 'ArrowArrowBottom' (without size)\n type TEXT NOT NULL, -- 'navigation', 'media', 'action', etc.\n size INTEGER NOT NULL, -- 16, 24, 32, 48, 64\n view_box TEXT NOT NULL, -- '0 0 16 16'\n paths TEXT NOT NULL -- JSON array of SVG paths\n);\n\nCREATE INDEX IF NOT EXISTS idx_icons_type ON icons(type);\nCREATE INDEX IF NOT EXISTS idx_icons_size ON icons(size);\nCREATE INDEX IF NOT EXISTS idx_icons_name ON icons(icon_name);\n\n-- Full-text search for icons\nCREATE VIRTUAL TABLE IF NOT EXISTS icons_fts USING fts5(\n name,\n icon_name,\n type,\n content=icons,\n content_rowid=id\n);\n\n-- Triggers to keep icons FTS index in sync\nCREATE TRIGGER IF NOT EXISTS icons_ai AFTER INSERT ON icons BEGIN\n INSERT INTO icons_fts(rowid, name, icon_name, type)\n VALUES (new.id, new.name, new.icon_name, new.type);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS icons_ad AFTER DELETE ON icons BEGIN\n INSERT INTO icons_fts(icons_fts, rowid, name, icon_name, type)\n VALUES('delete', old.id, old.name, old.icon_name, old.type);\nEND;\n\nCREATE TRIGGER IF NOT EXISTS icons_au AFTER UPDATE ON icons BEGIN\n INSERT INTO icons_fts(icons_fts, rowid, name, icon_name, type)\n VALUES('delete', old.id, old.name, old.icon_name, old.type);\n INSERT INTO icons_fts(rowid, name, icon_name, type)\n VALUES (new.id, new.name, new.icon_name, new.type);\nEND;\n";
|
|
3
|
+
export declare function initSchema(db: Database.Database): void;
|
|
4
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,eAAO,MAAM,MAAM,+4RAwPlB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAEtD"}
|