lokicms-plugin-api-docs 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 (38) hide show
  1. package/README.md +220 -0
  2. package/dist/formatters/json-formatter.d.ts +25 -0
  3. package/dist/formatters/json-formatter.d.ts.map +1 -0
  4. package/dist/formatters/json-formatter.js +45 -0
  5. package/dist/formatters/json-formatter.js.map +1 -0
  6. package/dist/formatters/markdown-formatter.d.ts +21 -0
  7. package/dist/formatters/markdown-formatter.d.ts.map +1 -0
  8. package/dist/formatters/markdown-formatter.js +203 -0
  9. package/dist/formatters/markdown-formatter.js.map +1 -0
  10. package/dist/formatters/openapi-formatter.d.ts +14 -0
  11. package/dist/formatters/openapi-formatter.d.ts.map +1 -0
  12. package/dist/formatters/openapi-formatter.js +505 -0
  13. package/dist/formatters/openapi-formatter.js.map +1 -0
  14. package/dist/index.d.ts +16 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +18 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/plugin.d.ts +18 -0
  19. package/dist/plugin.d.ts.map +1 -0
  20. package/dist/plugin.js +448 -0
  21. package/dist/plugin.js.map +1 -0
  22. package/dist/services/doc-generator.d.ts +22 -0
  23. package/dist/services/doc-generator.d.ts.map +1 -0
  24. package/dist/services/doc-generator.js +370 -0
  25. package/dist/services/doc-generator.js.map +1 -0
  26. package/dist/services/schema-converter.d.ts +19 -0
  27. package/dist/services/schema-converter.d.ts.map +1 -0
  28. package/dist/services/schema-converter.js +371 -0
  29. package/dist/services/schema-converter.js.map +1 -0
  30. package/dist/services/typescript-generator.d.ts +27 -0
  31. package/dist/services/typescript-generator.d.ts.map +1 -0
  32. package/dist/services/typescript-generator.js +294 -0
  33. package/dist/services/typescript-generator.js.map +1 -0
  34. package/dist/types.d.ts +245 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +5 -0
  37. package/dist/types.js.map +1 -0
  38. package/package.json +41 -0
package/dist/plugin.js ADDED
@@ -0,0 +1,448 @@
1
+ /**
2
+ * LokiCMS API Docs Plugin
3
+ *
4
+ * Generates API documentation from LokiCMS runtime with support for
5
+ * JSON, Markdown, OpenAPI 3.0, and TypeScript output formats.
6
+ */
7
+ import { z } from 'zod';
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import { createDocGenerator } from './services/doc-generator.js';
11
+ import { formatAsJson, formatToolsAsJson, formatContentTypesAsJson } from './formatters/json-formatter.js';
12
+ import { formatAsMarkdown, formatToolsAsMarkdown, formatContentTypesAsMarkdown } from './formatters/markdown-formatter.js';
13
+ import { formatAsOpenApi } from './formatters/openapi-formatter.js';
14
+ import { generateTypeScript, generateToolTypes, generateContentTypeTypes } from './services/typescript-generator.js';
15
+ // Plugin state
16
+ let docGenerator = null;
17
+ let pluginConfig = {};
18
+ /**
19
+ * Get the documentation generator instance
20
+ */
21
+ export function getDocGenerator() {
22
+ if (!docGenerator) {
23
+ throw new Error('API Docs plugin not initialized');
24
+ }
25
+ return docGenerator;
26
+ }
27
+ /**
28
+ * LokiCMS API Docs Plugin Definition
29
+ */
30
+ const plugin = {
31
+ name: 'lokicms-api-docs',
32
+ version: '1.0.0',
33
+ description: 'API documentation generator with OpenAPI, Markdown, and TypeScript support',
34
+ async register(api) {
35
+ pluginConfig = api.config.apiDocs || {};
36
+ api.logger.info('Initializing API Docs plugin');
37
+ // Create documentation generator
38
+ docGenerator = createDocGenerator(api, pluginConfig, api.logger);
39
+ // Register MCP tools
40
+ registerMcpTools(api);
41
+ api.logger.info('API Docs plugin registered');
42
+ },
43
+ };
44
+ /**
45
+ * Register MCP tools for documentation
46
+ */
47
+ function registerMcpTools(api) {
48
+ // ========================================================================
49
+ // MCP Tool: docs_generate
50
+ // ========================================================================
51
+ api.mcp.registerTool('docs_generate', {
52
+ description: 'Generate complete API documentation in specified format',
53
+ inputSchema: z.object({
54
+ format: z
55
+ .enum(['json', 'markdown', 'openapi', 'typescript'])
56
+ .optional()
57
+ .describe('Output format (default: json)'),
58
+ includeTools: z.boolean().optional().describe('Include MCP tools documentation'),
59
+ includeContentTypes: z.boolean().optional().describe('Include content types documentation'),
60
+ includeEndpoints: z.boolean().optional().describe('Include REST-like endpoints'),
61
+ includeExamples: z.boolean().optional().describe('Include example values'),
62
+ baseUrl: z.string().optional().describe('Base URL for endpoints (OpenAPI)'),
63
+ }),
64
+ handler: async (rawInput) => {
65
+ const input = rawInput;
66
+ if (!docGenerator) {
67
+ return { error: 'API Docs plugin not initialized' };
68
+ }
69
+ try {
70
+ const format = input.format || 'json';
71
+ const docs = await docGenerator.generate({
72
+ includeTools: input.includeTools ?? true,
73
+ includeContentTypes: input.includeContentTypes ?? true,
74
+ includeEndpoints: input.includeEndpoints ?? true,
75
+ includeExamples: input.includeExamples ?? false,
76
+ });
77
+ let output;
78
+ let mimeType;
79
+ switch (format) {
80
+ case 'markdown':
81
+ output = formatAsMarkdown(docs, {
82
+ includeTableOfContents: true,
83
+ includeExamples: input.includeExamples,
84
+ });
85
+ mimeType = 'text/markdown';
86
+ break;
87
+ case 'openapi':
88
+ output = formatAsOpenApi(docs, {
89
+ baseUrl: input.baseUrl || pluginConfig.baseUrl,
90
+ outputFormat: 'json',
91
+ });
92
+ mimeType = 'application/json';
93
+ break;
94
+ case 'typescript': {
95
+ const tsOutput = generateTypeScript(docs, {
96
+ includeTools: input.includeTools ?? true,
97
+ includeContentTypes: input.includeContentTypes ?? true,
98
+ includeComments: true,
99
+ });
100
+ output = tsOutput.code;
101
+ mimeType = 'text/typescript';
102
+ break;
103
+ }
104
+ case 'json':
105
+ default:
106
+ output = formatAsJson(docs, { pretty: true });
107
+ mimeType = 'application/json';
108
+ break;
109
+ }
110
+ return {
111
+ success: true,
112
+ format,
113
+ mimeType,
114
+ content: output,
115
+ stats: {
116
+ toolCount: docs.tools.length,
117
+ contentTypeCount: docs.contentTypes.length,
118
+ endpointCount: docs.endpoints?.length || 0,
119
+ },
120
+ };
121
+ }
122
+ catch (error) {
123
+ return {
124
+ success: false,
125
+ error: error instanceof Error ? error.message : 'Generation failed',
126
+ };
127
+ }
128
+ },
129
+ });
130
+ // ========================================================================
131
+ // MCP Tool: docs_tools
132
+ // ========================================================================
133
+ api.mcp.registerTool('docs_tools', {
134
+ description: 'List all available MCP tools with their schemas',
135
+ inputSchema: z.object({
136
+ format: z
137
+ .enum(['json', 'markdown', 'typescript'])
138
+ .optional()
139
+ .describe('Output format (default: json)'),
140
+ includeExamples: z.boolean().optional().describe('Include example values'),
141
+ filter: z.string().optional().describe('Filter tools by name prefix'),
142
+ }),
143
+ handler: async (rawInput) => {
144
+ const input = rawInput;
145
+ if (!docGenerator) {
146
+ return { error: 'API Docs plugin not initialized' };
147
+ }
148
+ try {
149
+ let tools = await docGenerator.getTools(input.includeExamples ?? false);
150
+ // Apply filter if specified
151
+ if (input.filter) {
152
+ const filterLower = input.filter.toLowerCase();
153
+ tools = tools.filter((t) => t.name.toLowerCase().startsWith(filterLower));
154
+ }
155
+ const format = input.format || 'json';
156
+ let output;
157
+ switch (format) {
158
+ case 'markdown':
159
+ output = formatToolsAsMarkdown(tools, input.includeExamples);
160
+ break;
161
+ case 'typescript':
162
+ output = generateToolTypes(tools, true);
163
+ break;
164
+ case 'json':
165
+ default:
166
+ output = formatToolsAsJson(tools, true);
167
+ break;
168
+ }
169
+ return {
170
+ success: true,
171
+ format,
172
+ count: tools.length,
173
+ content: output,
174
+ tools: tools.map((t) => ({
175
+ name: t.name,
176
+ description: t.description,
177
+ parameterCount: t.parameters.length,
178
+ })),
179
+ };
180
+ }
181
+ catch (error) {
182
+ return {
183
+ success: false,
184
+ error: error instanceof Error ? error.message : 'Failed to get tools',
185
+ };
186
+ }
187
+ },
188
+ });
189
+ // ========================================================================
190
+ // MCP Tool: docs_content_types
191
+ // ========================================================================
192
+ api.mcp.registerTool('docs_content_types', {
193
+ description: 'Document all content types and their fields',
194
+ inputSchema: z.object({
195
+ format: z
196
+ .enum(['json', 'markdown', 'typescript'])
197
+ .optional()
198
+ .describe('Output format (default: json)'),
199
+ filter: z.string().optional().describe('Filter by content type name'),
200
+ }),
201
+ handler: async (rawInput) => {
202
+ const input = rawInput;
203
+ if (!docGenerator) {
204
+ return { error: 'API Docs plugin not initialized' };
205
+ }
206
+ try {
207
+ let contentTypes = await docGenerator.getContentTypes();
208
+ // Apply filter if specified
209
+ if (input.filter) {
210
+ const filterLower = input.filter.toLowerCase();
211
+ contentTypes = contentTypes.filter((ct) => ct.name.toLowerCase().includes(filterLower) ||
212
+ ct.slug.toLowerCase().includes(filterLower));
213
+ }
214
+ const format = input.format || 'json';
215
+ let output;
216
+ switch (format) {
217
+ case 'markdown':
218
+ output = formatContentTypesAsMarkdown(contentTypes);
219
+ break;
220
+ case 'typescript':
221
+ output = generateContentTypeTypes(contentTypes, true);
222
+ break;
223
+ case 'json':
224
+ default:
225
+ output = formatContentTypesAsJson(contentTypes, true);
226
+ break;
227
+ }
228
+ return {
229
+ success: true,
230
+ format,
231
+ count: contentTypes.length,
232
+ content: output,
233
+ contentTypes: contentTypes.map((ct) => ({
234
+ name: ct.name,
235
+ slug: ct.slug,
236
+ fieldCount: ct.fields.length,
237
+ })),
238
+ };
239
+ }
240
+ catch (error) {
241
+ return {
242
+ success: false,
243
+ error: error instanceof Error ? error.message : 'Failed to get content types',
244
+ };
245
+ }
246
+ },
247
+ });
248
+ // ========================================================================
249
+ // MCP Tool: docs_export
250
+ // ========================================================================
251
+ api.mcp.registerTool('docs_export', {
252
+ description: 'Export documentation to a file',
253
+ inputSchema: z.object({
254
+ format: z
255
+ .enum(['json', 'markdown', 'openapi', 'typescript'])
256
+ .describe('Output format'),
257
+ outputPath: z.string().describe('Output file path'),
258
+ includeTools: z.boolean().optional(),
259
+ includeContentTypes: z.boolean().optional(),
260
+ includeExamples: z.boolean().optional(),
261
+ baseUrl: z.string().optional().describe('Base URL for endpoints'),
262
+ }),
263
+ handler: async (rawInput) => {
264
+ const input = rawInput;
265
+ if (!docGenerator) {
266
+ return { error: 'API Docs plugin not initialized' };
267
+ }
268
+ try {
269
+ const docs = await docGenerator.generate({
270
+ includeTools: input.includeTools ?? true,
271
+ includeContentTypes: input.includeContentTypes ?? true,
272
+ includeEndpoints: true,
273
+ includeExamples: input.includeExamples ?? false,
274
+ });
275
+ let content;
276
+ let extension;
277
+ switch (input.format) {
278
+ case 'markdown':
279
+ content = formatAsMarkdown(docs, {
280
+ includeTableOfContents: true,
281
+ includeExamples: input.includeExamples,
282
+ });
283
+ extension = '.md';
284
+ break;
285
+ case 'openapi':
286
+ content = formatAsOpenApi(docs, {
287
+ baseUrl: input.baseUrl || pluginConfig.baseUrl,
288
+ outputFormat: 'json',
289
+ });
290
+ extension = '.json';
291
+ break;
292
+ case 'typescript': {
293
+ const tsOutput = generateTypeScript(docs, {
294
+ includeTools: input.includeTools ?? true,
295
+ includeContentTypes: input.includeContentTypes ?? true,
296
+ includeComments: true,
297
+ });
298
+ content = tsOutput.code;
299
+ extension = '.ts';
300
+ break;
301
+ }
302
+ case 'json':
303
+ default:
304
+ content = formatAsJson(docs, { pretty: true });
305
+ extension = '.json';
306
+ break;
307
+ }
308
+ // Resolve output path
309
+ let outputPath = input.outputPath;
310
+ if (!path.extname(outputPath)) {
311
+ outputPath = outputPath + extension;
312
+ }
313
+ // Ensure directory exists
314
+ const dir = path.dirname(outputPath);
315
+ if (!fs.existsSync(dir)) {
316
+ fs.mkdirSync(dir, { recursive: true });
317
+ }
318
+ // Write file
319
+ fs.writeFileSync(outputPath, content, 'utf-8');
320
+ return {
321
+ success: true,
322
+ format: input.format,
323
+ outputPath: path.resolve(outputPath),
324
+ size: Buffer.byteLength(content, 'utf-8'),
325
+ stats: {
326
+ toolCount: docs.tools.length,
327
+ contentTypeCount: docs.contentTypes.length,
328
+ },
329
+ };
330
+ }
331
+ catch (error) {
332
+ return {
333
+ success: false,
334
+ error: error instanceof Error ? error.message : 'Export failed',
335
+ };
336
+ }
337
+ },
338
+ });
339
+ // ========================================================================
340
+ // MCP Tool: docs_endpoints
341
+ // ========================================================================
342
+ api.mcp.registerTool('docs_endpoints', {
343
+ description: 'Generate REST-like endpoint documentation',
344
+ inputSchema: z.object({
345
+ format: z
346
+ .enum(['json', 'markdown', 'openapi'])
347
+ .optional()
348
+ .describe('Output format (default: json)'),
349
+ baseUrl: z.string().optional().describe('Base URL for endpoints'),
350
+ includeTools: z.boolean().optional().describe('Include tool endpoints'),
351
+ includeContentTypes: z.boolean().optional().describe('Include content CRUD endpoints'),
352
+ groupByTag: z.boolean().optional().describe('Group endpoints by tag'),
353
+ }),
354
+ handler: async (rawInput) => {
355
+ const input = rawInput;
356
+ if (!docGenerator) {
357
+ return { error: 'API Docs plugin not initialized' };
358
+ }
359
+ try {
360
+ const docs = await docGenerator.generate({
361
+ includeTools: input.includeTools ?? true,
362
+ includeContentTypes: input.includeContentTypes ?? true,
363
+ includeEndpoints: true,
364
+ });
365
+ const endpoints = docs.endpoints || [];
366
+ const format = input.format || 'json';
367
+ if (format === 'openapi') {
368
+ const openApiOutput = formatAsOpenApi(docs, {
369
+ baseUrl: input.baseUrl || pluginConfig.baseUrl,
370
+ outputFormat: 'json',
371
+ });
372
+ return {
373
+ success: true,
374
+ format: 'openapi',
375
+ count: endpoints.length,
376
+ content: openApiOutput,
377
+ };
378
+ }
379
+ // Group by tag if requested
380
+ let output;
381
+ if (input.groupByTag) {
382
+ const grouped = {};
383
+ for (const endpoint of endpoints) {
384
+ const tag = endpoint.tags?.[0] || 'General';
385
+ if (!grouped[tag]) {
386
+ grouped[tag] = [];
387
+ }
388
+ grouped[tag].push(endpoint);
389
+ }
390
+ output = grouped;
391
+ }
392
+ else {
393
+ output = endpoints;
394
+ }
395
+ if (format === 'markdown') {
396
+ const lines = ['# API Endpoints', ''];
397
+ if (input.groupByTag) {
398
+ const grouped = output;
399
+ for (const [tag, tagEndpoints] of Object.entries(grouped)) {
400
+ lines.push(`## ${tag}`);
401
+ lines.push('');
402
+ lines.push('| Method | Path | Summary |');
403
+ lines.push('|--------|------|---------|');
404
+ for (const ep of tagEndpoints) {
405
+ lines.push(`| \`${ep.method}\` | \`${ep.path}\` | ${ep.summary} |`);
406
+ }
407
+ lines.push('');
408
+ }
409
+ }
410
+ else {
411
+ lines.push('| Method | Path | Summary |');
412
+ lines.push('|--------|------|---------|');
413
+ for (const ep of endpoints) {
414
+ lines.push(`| \`${ep.method}\` | \`${ep.path}\` | ${ep.summary} |`);
415
+ }
416
+ }
417
+ return {
418
+ success: true,
419
+ format: 'markdown',
420
+ count: endpoints.length,
421
+ content: lines.join('\n'),
422
+ };
423
+ }
424
+ return {
425
+ success: true,
426
+ format: 'json',
427
+ count: endpoints.length,
428
+ content: JSON.stringify(output, null, 2),
429
+ endpoints: endpoints.map((e) => ({
430
+ method: e.method,
431
+ path: e.path,
432
+ summary: e.summary,
433
+ tags: e.tags,
434
+ })),
435
+ };
436
+ }
437
+ catch (error) {
438
+ return {
439
+ success: false,
440
+ error: error instanceof Error ? error.message : 'Failed to get endpoints',
441
+ };
442
+ }
443
+ },
444
+ });
445
+ api.logger.info('API Docs plugin registered 5 MCP tools: docs_generate, docs_tools, docs_content_types, docs_export, docs_endpoints');
446
+ }
447
+ export default plugin;
448
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Documentation Generator Service
3
+ * Introspects LokiCMS runtime to generate API documentation
4
+ */
5
+ import type { PluginAPI, ApiDocsConfig, ApiDocumentation, ToolDocumentation, ContentTypeDocumentation, Logger } from '../types.js';
6
+ /**
7
+ * Create a documentation generator instance
8
+ */
9
+ export declare function createDocGenerator(api: PluginAPI, config: ApiDocsConfig, logger: Logger): {
10
+ generate: (options?: {
11
+ includeTools?: boolean;
12
+ includeContentTypes?: boolean;
13
+ includeEndpoints?: boolean;
14
+ includeExamples?: boolean;
15
+ forceRefresh?: boolean;
16
+ }) => Promise<ApiDocumentation>;
17
+ getTools: (includeExamples?: boolean) => Promise<ToolDocumentation[]>;
18
+ getContentTypes: () => Promise<ContentTypeDocumentation[]>;
19
+ clearCache: () => void;
20
+ };
21
+ export type DocGenerator = ReturnType<typeof createDocGenerator>;
22
+ //# sourceMappingURL=doc-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-generator.d.ts","sourceRoot":"","sources":["../../src/services/doc-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EAExB,MAAM,EAGP,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM;yBAUmB;QAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,KAAQ,OAAO,CAAC,gBAAgB,CAAC;6CAiYgB,OAAO,CAAC,iBAAiB,EAAE,CAAC;2BAO5C,OAAO,CAAC,wBAAwB,EAAE,CAAC;sBAO9C,IAAI;EAY5B;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC"}