mozaic-mcp-server 2.1.1 → 2.3.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 (55) hide show
  1. package/README.md +15 -7
  2. package/SKILLS.md +75 -5
  3. package/bin/install-skills.js +2 -0
  4. package/data/mozaic.db +0 -0
  5. package/dist/__tests__/tools.integration.test.js +85 -0
  6. package/dist/__tests__/tools.integration.test.js.map +1 -1
  7. package/dist/index.js +115 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/parsers/freemarker-parser.d.ts +25 -0
  10. package/dist/parsers/freemarker-parser.d.ts.map +1 -0
  11. package/dist/parsers/freemarker-parser.js +299 -0
  12. package/dist/parsers/freemarker-parser.js.map +1 -0
  13. package/dist/parsers/web-components-parser.d.ts +3 -0
  14. package/dist/parsers/web-components-parser.d.ts.map +1 -0
  15. package/dist/parsers/web-components-parser.js +503 -0
  16. package/dist/parsers/web-components-parser.js.map +1 -0
  17. package/dist/tools/generate-freemarker.d.ts +32 -0
  18. package/dist/tools/generate-freemarker.d.ts.map +1 -0
  19. package/dist/tools/generate-freemarker.js +146 -0
  20. package/dist/tools/generate-freemarker.js.map +1 -0
  21. package/dist/tools/generate-webcomponent.d.ts +38 -0
  22. package/dist/tools/generate-webcomponent.d.ts.map +1 -0
  23. package/dist/tools/generate-webcomponent.js +83 -0
  24. package/dist/tools/generate-webcomponent.js.map +1 -0
  25. package/dist/tools/get-component-info.d.ts +1 -1
  26. package/dist/tools/get-component-info.d.ts.map +1 -1
  27. package/dist/tools/get-component-info.js +9 -1
  28. package/dist/tools/get-component-info.js.map +1 -1
  29. package/dist/tools/get-freemarker-info.d.ts +27 -0
  30. package/dist/tools/get-freemarker-info.d.ts.map +1 -0
  31. package/dist/tools/get-freemarker-info.js +161 -0
  32. package/dist/tools/get-freemarker-info.js.map +1 -0
  33. package/dist/tools/get-webcomponent-info.d.ts +52 -0
  34. package/dist/tools/get-webcomponent-info.d.ts.map +1 -0
  35. package/dist/tools/get-webcomponent-info.js +170 -0
  36. package/dist/tools/get-webcomponent-info.js.map +1 -0
  37. package/dist/tools/list-freemarker.d.ts +23 -0
  38. package/dist/tools/list-freemarker.d.ts.map +1 -0
  39. package/dist/tools/list-freemarker.js +97 -0
  40. package/dist/tools/list-freemarker.js.map +1 -0
  41. package/dist/tools/list-webcomponents.d.ts +32 -0
  42. package/dist/tools/list-webcomponents.d.ts.map +1 -0
  43. package/dist/tools/list-webcomponents.js +110 -0
  44. package/dist/tools/list-webcomponents.js.map +1 -0
  45. package/package.json +1 -1
  46. package/skills/mozaic-freemarker-builder/scripts/generate-component.sh +27 -0
  47. package/skills/mozaic-freemarker-builder/scripts/get-component.sh +28 -0
  48. package/skills/mozaic-freemarker-builder/scripts/list-components.sh +13 -0
  49. package/skills/mozaic-freemarker-builder/scripts/search-components.sh +14 -0
  50. package/skills/mozaic-freemarker-builder/skill.md +145 -0
  51. package/skills/mozaic-webcomponents-builder/scripts/generate-component.sh +67 -0
  52. package/skills/mozaic-webcomponents-builder/scripts/get-component.sh +105 -0
  53. package/skills/mozaic-webcomponents-builder/scripts/list-components.sh +42 -0
  54. package/skills/mozaic-webcomponents-builder/scripts/search-components.sh +34 -0
  55. package/skills/mozaic-webcomponents-builder/skill.md +292 -0
@@ -0,0 +1,503 @@
1
+ import { readFileSync, existsSync, readdirSync, statSync } from "fs";
2
+ import { join, basename } from "path";
3
+ // Parse Custom Elements Manifest (CEM)
4
+ function parseCustomElementsManifest(basePath) {
5
+ const components = [];
6
+ const manifestPaths = [
7
+ join(basePath, "..", "..", "custom-elements.json"),
8
+ join(basePath, "..", "custom-elements.json"),
9
+ join(basePath, "custom-elements.json"),
10
+ join(basePath, "..", "..", "custom-elements-manifest.json"),
11
+ ];
12
+ for (const manifestPath of manifestPaths) {
13
+ if (existsSync(manifestPath)) {
14
+ try {
15
+ const content = readFileSync(manifestPath, "utf-8");
16
+ const manifest = JSON.parse(content);
17
+ if (manifest.modules) {
18
+ for (const module of manifest.modules) {
19
+ if (module.declarations) {
20
+ for (const declaration of module.declarations) {
21
+ if (declaration.kind === "class" && declaration.tagName && declaration.name) {
22
+ const props = [];
23
+ const events = [];
24
+ const slots = [];
25
+ const cssProperties = [];
26
+ // Extract properties
27
+ if (declaration.members) {
28
+ for (const member of declaration.members) {
29
+ if (member.kind === "field" && member.attribute) {
30
+ props.push({
31
+ name: member.name || "",
32
+ type: member.type?.text,
33
+ defaultValue: member.default,
34
+ description: member.description,
35
+ required: !member.default,
36
+ });
37
+ }
38
+ }
39
+ }
40
+ // Extract events
41
+ if (declaration.events) {
42
+ for (const event of declaration.events) {
43
+ if (event.name) {
44
+ events.push({
45
+ name: event.name,
46
+ payload: event.type?.text,
47
+ description: event.description,
48
+ });
49
+ }
50
+ }
51
+ }
52
+ // Extract slots
53
+ if (declaration.slots) {
54
+ for (const slot of declaration.slots) {
55
+ slots.push({
56
+ name: slot.name || "default",
57
+ description: slot.description,
58
+ });
59
+ }
60
+ }
61
+ // Extract CSS custom properties
62
+ if (declaration.cssProperties) {
63
+ for (const cssProp of declaration.cssProperties) {
64
+ if (cssProp.name) {
65
+ cssProperties.push(cssProp.name);
66
+ }
67
+ }
68
+ }
69
+ components.push({
70
+ name: declaration.name,
71
+ tagName: declaration.tagName,
72
+ description: declaration.description,
73
+ props,
74
+ slots,
75
+ events,
76
+ cssProperties,
77
+ });
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ console.log(` ✓ Parsed custom elements manifest: ${components.length} components`);
84
+ return components;
85
+ }
86
+ catch (error) {
87
+ console.warn(`Warning: Could not parse manifest ${manifestPath}:`, error);
88
+ }
89
+ }
90
+ }
91
+ return components;
92
+ }
93
+ // Extract properties from TypeScript/JavaScript source
94
+ function extractPropsFromSource(content) {
95
+ const props = [];
96
+ const seenProps = new Set();
97
+ // Pattern 1: @property() decorator (Lit)
98
+ const propertyRegex = /@property\s*\(\s*\{([^}]*)\}\s*\)\s*(?:\/\*\*[\s\S]*?\*\/\s*)?(\w+)(\??)\s*:\s*([^;=\n]+)/g;
99
+ let match;
100
+ while ((match = propertyRegex.exec(content)) !== null) {
101
+ const options = match[1];
102
+ const propName = match[2];
103
+ const isOptional = match[3] === "?";
104
+ const propType = match[4].trim();
105
+ if (!seenProps.has(propName)) {
106
+ seenProps.add(propName);
107
+ // Extract type from options
108
+ const typeMatch = options.match(/type\s*:\s*(\w+)/);
109
+ const attributeMatch = options.match(/attribute\s*:\s*['"`]([^'"`]+)['"`]/);
110
+ // const reflectMatch = options.match(/reflect\s*:\s*(true|false)/);
111
+ // Extract JSDoc comment before decorator
112
+ const beforeDecorator = content.substring(0, match.index);
113
+ const jsdocMatch = beforeDecorator.match(/\/\*\*\s*([\s\S]*?)\s*\*\/\s*$/);
114
+ let description;
115
+ if (jsdocMatch) {
116
+ description = jsdocMatch[1]
117
+ .replace(/^\s*\*\s*/gm, "")
118
+ .replace(/\n/g, " ")
119
+ .trim();
120
+ }
121
+ props.push({
122
+ name: attributeMatch ? attributeMatch[1] : propName,
123
+ type: typeMatch ? typeMatch[1] : propType,
124
+ required: !isOptional,
125
+ description,
126
+ });
127
+ }
128
+ }
129
+ // Pattern 2: static properties = { ... } (Lit)
130
+ const staticPropsMatch = content.match(/static\s+properties\s*=\s*\{([\s\S]*?)\};/);
131
+ if (staticPropsMatch) {
132
+ const propsContent = staticPropsMatch[1];
133
+ const propDefRegex = /(\w+)\s*:\s*\{([^}]*)\}/g;
134
+ while ((match = propDefRegex.exec(propsContent)) !== null) {
135
+ const propName = match[1];
136
+ const propDef = match[2];
137
+ if (!seenProps.has(propName)) {
138
+ seenProps.add(propName);
139
+ const typeMatch = propDef.match(/type\s*:\s*(\w+)/);
140
+ const attributeMatch = propDef.match(/attribute\s*:\s*['"`]([^'"`]+)['"`]/);
141
+ props.push({
142
+ name: attributeMatch ? attributeMatch[1] : propName,
143
+ type: typeMatch ? typeMatch[1] : undefined,
144
+ });
145
+ }
146
+ }
147
+ }
148
+ // Pattern 3: static get properties() { return { ... } }
149
+ const staticGetPropsMatch = content.match(/static\s+get\s+properties\s*\(\s*\)\s*\{[\s\S]*?return\s*\{([\s\S]*?)\}/);
150
+ if (staticGetPropsMatch) {
151
+ const propsContent = staticGetPropsMatch[1];
152
+ const propDefRegex = /(\w+)\s*:\s*\{([^}]*)\}/g;
153
+ while ((match = propDefRegex.exec(propsContent)) !== null) {
154
+ const propName = match[1];
155
+ const propDef = match[2];
156
+ if (!seenProps.has(propName)) {
157
+ seenProps.add(propName);
158
+ const typeMatch = propDef.match(/type\s*:\s*(\w+)/);
159
+ props.push({
160
+ name: propName,
161
+ type: typeMatch ? typeMatch[1] : undefined,
162
+ });
163
+ }
164
+ }
165
+ }
166
+ return props;
167
+ }
168
+ // Extract events from source
169
+ function extractEventsFromSource(content) {
170
+ const events = [];
171
+ const seenEvents = new Set();
172
+ // Pattern 1: dispatchEvent(new CustomEvent('event-name'))
173
+ const customEventRegex = /dispatchEvent\s*\(\s*new\s+CustomEvent\s*\(\s*['"`]([^'"`]+)['"`]/g;
174
+ let match;
175
+ while ((match = customEventRegex.exec(content)) !== null) {
176
+ const eventName = match[1];
177
+ if (!seenEvents.has(eventName)) {
178
+ seenEvents.add(eventName);
179
+ events.push({ name: eventName });
180
+ }
181
+ }
182
+ // Pattern 2: this.dispatchEvent(new Event('event-name'))
183
+ const eventRegex = /dispatchEvent\s*\(\s*new\s+Event\s*\(\s*['"`]([^'"`]+)['"`]/g;
184
+ while ((match = eventRegex.exec(content)) !== null) {
185
+ const eventName = match[1];
186
+ if (!seenEvents.has(eventName)) {
187
+ seenEvents.add(eventName);
188
+ events.push({ name: eventName });
189
+ }
190
+ }
191
+ // Pattern 3: @event JSDoc tags
192
+ const jsdocEventRegex = /@(?:fires?|event)\s+\{?([^}\s]+)\}?\s+(\w+)/g;
193
+ while ((match = jsdocEventRegex.exec(content)) !== null) {
194
+ const eventName = match[2];
195
+ if (!seenEvents.has(eventName)) {
196
+ seenEvents.add(eventName);
197
+ events.push({
198
+ name: eventName,
199
+ payload: match[1],
200
+ });
201
+ }
202
+ }
203
+ return events;
204
+ }
205
+ // Extract slots from template/render
206
+ function extractSlotsFromSource(content) {
207
+ const slots = [];
208
+ const seenSlots = new Set();
209
+ // Match <slot> tags in template literals or html`` strings
210
+ const slotRegex = /<slot\s*(?:name=["']([^"']+)["'])?[^>]*>/g;
211
+ let match;
212
+ while ((match = slotRegex.exec(content)) !== null) {
213
+ const slotName = match[1] || "default";
214
+ if (!seenSlots.has(slotName)) {
215
+ seenSlots.add(slotName);
216
+ slots.push({ name: slotName });
217
+ }
218
+ }
219
+ return slots;
220
+ }
221
+ // Extract CSS custom properties
222
+ function extractCssProperties(content) {
223
+ const cssProps = [];
224
+ const seenProps = new Set();
225
+ // Match --property-name in CSS or static styles
226
+ const cssVarRegex = /(--[a-z0-9-]+)/g;
227
+ let match;
228
+ while ((match = cssVarRegex.exec(content)) !== null) {
229
+ const propName = match[1];
230
+ if (!seenProps.has(propName)) {
231
+ seenProps.add(propName);
232
+ cssProps.push(propName);
233
+ }
234
+ }
235
+ return cssProps;
236
+ }
237
+ // Parse TypeScript/JavaScript component file
238
+ function parseWebComponentFile(filePath) {
239
+ try {
240
+ const content = readFileSync(filePath, "utf-8");
241
+ const fileName = basename(filePath, ".ts").replace(/\.js$/, "");
242
+ // Extract component name from @customElement decorator or class name
243
+ let componentName = fileName;
244
+ let tagName = fileName.toLowerCase();
245
+ const customElementMatch = content.match(/@customElement\s*\(\s*['"`]([^'"`]+)['"`]\s*\)/);
246
+ if (customElementMatch) {
247
+ tagName = customElementMatch[1];
248
+ // Convert tag-name to ClassName
249
+ componentName = tagName
250
+ .split("-")
251
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
252
+ .join("");
253
+ }
254
+ // Extract class name if available
255
+ const classMatch = content.match(/class\s+(\w+)\s+extends\s+(?:LitElement|HTMLElement)/);
256
+ if (classMatch) {
257
+ componentName = classMatch[1];
258
+ }
259
+ // Extract description from JSDoc
260
+ let description;
261
+ const jsdocMatch = content.match(/\/\*\*\s*([\s\S]*?)\s*\*\/\s*export\s+class/);
262
+ if (jsdocMatch) {
263
+ description = jsdocMatch[1]
264
+ .replace(/^\s*\*\s*/gm, "")
265
+ .replace(/@\w+.*$/gm, "")
266
+ .replace(/\n/g, " ")
267
+ .trim();
268
+ }
269
+ return {
270
+ name: componentName,
271
+ tagName,
272
+ description,
273
+ props: extractPropsFromSource(content),
274
+ events: extractEventsFromSource(content),
275
+ slots: extractSlotsFromSource(content),
276
+ cssProperties: extractCssProperties(content),
277
+ };
278
+ }
279
+ catch (error) {
280
+ console.warn(`Warning: Could not parse ${filePath}:`, error);
281
+ return null;
282
+ }
283
+ }
284
+ // Parse Storybook stories for web components
285
+ function parseWebComponentStories(filePath) {
286
+ const examples = [];
287
+ try {
288
+ const content = readFileSync(filePath, "utf-8");
289
+ // Match story exports with render functions
290
+ const storyRegex = /export\s+const\s+(\w+)[\s\S]*?render:\s*\(([^)]*)\)\s*=>\s*html`([^`]*)`/g;
291
+ let match;
292
+ while ((match = storyRegex.exec(content)) !== null) {
293
+ const storyName = match[1];
294
+ const template = match[3];
295
+ if (storyName !== "Default") {
296
+ examples.push({
297
+ title: storyName.replace(/([A-Z])/g, " $1").trim(),
298
+ code: template.trim(),
299
+ });
300
+ }
301
+ }
302
+ // Also match simple template assignments
303
+ const templateRegex = /template\s*:\s*html`([^`]+)`/g;
304
+ while ((match = templateRegex.exec(content)) !== null) {
305
+ examples.push({
306
+ title: "Example",
307
+ code: match[1].trim(),
308
+ });
309
+ }
310
+ }
311
+ catch (error) {
312
+ console.warn(`Warning: Could not parse stories ${filePath}:`, error);
313
+ }
314
+ return examples;
315
+ }
316
+ // Find component directories
317
+ function findComponentDirs(baseDir) {
318
+ const dirs = [];
319
+ if (!existsSync(baseDir)) {
320
+ return dirs;
321
+ }
322
+ const entries = readdirSync(baseDir);
323
+ for (const entry of entries) {
324
+ const fullPath = join(baseDir, entry);
325
+ const stat = statSync(fullPath);
326
+ if (stat.isDirectory() && /^[a-z]/.test(entry)) {
327
+ dirs.push(fullPath);
328
+ }
329
+ }
330
+ return dirs;
331
+ }
332
+ // Infer component category
333
+ function inferCategory(componentName, tagName) {
334
+ const name = (componentName + tagName).toLowerCase();
335
+ if (["button", "link"].some((n) => name.includes(n))) {
336
+ return "action";
337
+ }
338
+ if ([
339
+ "input",
340
+ "select",
341
+ "checkbox",
342
+ "radio",
343
+ "toggle",
344
+ "textarea",
345
+ "field",
346
+ "form",
347
+ "datepicker",
348
+ "dropdown",
349
+ ].some((n) => name.includes(n))) {
350
+ return "form";
351
+ }
352
+ if (["accordion", "breadcrumb", "menu", "nav", "pagination", "tabs", "stepper"].some((n) => name.includes(n))) {
353
+ return "navigation";
354
+ }
355
+ if (["badge", "alert", "loader", "modal", "notification", "progress", "tooltip", "snackbar"].some((n) => name.includes(n))) {
356
+ return "feedback";
357
+ }
358
+ if (["card", "divider", "container", "grid", "stack"].some((n) => name.includes(n))) {
359
+ return "layout";
360
+ }
361
+ if (["table", "list", "heading", "text", "icon", "avatar", "chip", "tag"].some((n) => name.includes(n))) {
362
+ return "data-display";
363
+ }
364
+ return "other";
365
+ }
366
+ // Consolidate component data from multiple sources
367
+ function consolidateComponent(manifestData, sourceData, stories) {
368
+ // Use manifest as primary source, fall back to source parsing
369
+ const base = manifestData || sourceData;
370
+ if (!base)
371
+ return null;
372
+ const component = {
373
+ name: base.name + " (Web Component)", // Make name unique to avoid conflicts with Vue/React
374
+ slug: base.tagName,
375
+ category: inferCategory(base.name, base.tagName),
376
+ description: base.description,
377
+ frameworks: ["webcomponents"],
378
+ props: [],
379
+ slots: [],
380
+ events: [],
381
+ examples: [],
382
+ cssClasses: base.cssProperties || [],
383
+ };
384
+ // Consolidate props (deduplicate by name)
385
+ const propMap = new Map();
386
+ // Add manifest props first (higher priority)
387
+ if (manifestData) {
388
+ for (const prop of manifestData.props) {
389
+ propMap.set(prop.name, prop);
390
+ }
391
+ }
392
+ // Add source props if not already present
393
+ if (sourceData) {
394
+ for (const prop of sourceData.props) {
395
+ if (!propMap.has(prop.name)) {
396
+ propMap.set(prop.name, prop);
397
+ }
398
+ }
399
+ }
400
+ component.props = Array.from(propMap.values());
401
+ // Consolidate events
402
+ const eventMap = new Map();
403
+ if (manifestData) {
404
+ for (const event of manifestData.events) {
405
+ eventMap.set(event.name, event);
406
+ }
407
+ }
408
+ if (sourceData) {
409
+ for (const event of sourceData.events) {
410
+ if (!eventMap.has(event.name)) {
411
+ eventMap.set(event.name, event);
412
+ }
413
+ }
414
+ }
415
+ component.events = Array.from(eventMap.values());
416
+ // Consolidate slots
417
+ const slotMap = new Map();
418
+ if (manifestData) {
419
+ for (const slot of manifestData.slots) {
420
+ slotMap.set(slot.name, slot);
421
+ }
422
+ }
423
+ if (sourceData) {
424
+ for (const slot of sourceData.slots) {
425
+ if (!slotMap.has(slot.name)) {
426
+ slotMap.set(slot.name, slot);
427
+ }
428
+ }
429
+ }
430
+ component.slots = Array.from(slotMap.values());
431
+ // Add examples from Storybook
432
+ component.examples = stories.map((story) => ({
433
+ framework: "webcomponents",
434
+ title: story.title,
435
+ code: story.code,
436
+ }));
437
+ return component;
438
+ }
439
+ export async function parseWebComponents(componentsPath) {
440
+ const components = [];
441
+ // Step 1: Parse Custom Elements Manifest
442
+ const manifestComponents = parseCustomElementsManifest(componentsPath);
443
+ const manifestMap = new Map();
444
+ for (const comp of manifestComponents) {
445
+ manifestMap.set(comp.tagName, comp);
446
+ }
447
+ // Step 2: Parse component source files
448
+ const componentDirs = findComponentDirs(componentsPath);
449
+ for (const dir of componentDirs) {
450
+ const dirName = basename(dir);
451
+ // Try to find component file
452
+ const possibleFiles = [
453
+ join(dir, `${dirName}.ts`),
454
+ join(dir, `${dirName}.js`),
455
+ join(dir, "index.ts"),
456
+ join(dir, "index.js"),
457
+ ];
458
+ let componentFile = null;
459
+ for (const file of possibleFiles) {
460
+ if (existsSync(file)) {
461
+ componentFile = file;
462
+ break;
463
+ }
464
+ }
465
+ const sourceData = componentFile ? parseWebComponentFile(componentFile) : null;
466
+ // Get manifest data if available (try by directory name as tag)
467
+ // Directory names like "accordionlist" match tags like "m-accordion-list" or "m-accordionlist"
468
+ const possibleTagNames = [
469
+ `m-${dirName}`, // e.g., "m-accordionlist"
470
+ `m-${dirName.replace(/([A-Z])/g, "-$1").toLowerCase()}`, // e.g., "m-accordion-list" for "accordionList"
471
+ `mozaic-${dirName}`,
472
+ dirName,
473
+ sourceData?.tagName || "",
474
+ ];
475
+ let manifestData;
476
+ for (const tagName of possibleTagNames) {
477
+ if (manifestMap.has(tagName)) {
478
+ manifestData = manifestMap.get(tagName);
479
+ break;
480
+ }
481
+ }
482
+ // Parse stories
483
+ let stories = [];
484
+ const storyPatterns = [
485
+ join(dir, `${dirName}.stories.ts`),
486
+ join(dir, `${dirName}.stories.js`),
487
+ join(dir, "stories", `${dirName}.stories.ts`),
488
+ ];
489
+ for (const storyPath of storyPatterns) {
490
+ if (existsSync(storyPath)) {
491
+ stories = parseWebComponentStories(storyPath);
492
+ break;
493
+ }
494
+ }
495
+ // Consolidate all data (manifest-only is ok if no source file found)
496
+ const component = consolidateComponent(manifestData, sourceData, stories);
497
+ if (component) {
498
+ components.push(component);
499
+ }
500
+ }
501
+ return components;
502
+ }
503
+ //# sourceMappingURL=web-components-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-components-parser.js","sourceRoot":"","sources":["../../src/parsers/web-components-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import Database from "better-sqlite3";
2
+ import { z } from "zod";
3
+ /**
4
+ * Generate Freemarker macro usage code
5
+ *
6
+ * This tool generates ready-to-use Freemarker template code with:
7
+ * - Import statement for the macro
8
+ * - Macro invocation with configuration object
9
+ * - Example configuration based on component props
10
+ */
11
+ declare const _GenerateFreemarkerInputSchema: z.ZodObject<{
12
+ component: z.ZodString;
13
+ config: z.ZodOptional<z.ZodString>;
14
+ content: z.ZodOptional<z.ZodString>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ component: string;
17
+ config?: string | undefined;
18
+ content?: string | undefined;
19
+ }, {
20
+ component: string;
21
+ config?: string | undefined;
22
+ content?: string | undefined;
23
+ }>;
24
+ export type GenerateFreemarkerInput = z.infer<typeof _GenerateFreemarkerInputSchema>;
25
+ export declare function handleGenerateFreemarker(db: Database.Database, input: GenerateFreemarkerInput): {
26
+ content: Array<{
27
+ type: "text";
28
+ text: string;
29
+ }>;
30
+ };
31
+ export {};
32
+ //# sourceMappingURL=generate-freemarker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-freemarker.d.ts","sourceRoot":"","sources":["../../src/tools/generate-freemarker.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;GAOG;AAEH,QAAA,MAAM,8BAA8B;;;;;;;;;;;;EAOlC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAErF,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,uBAAuB,GAC7B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAkJpD"}