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
@@ -0,0 +1,370 @@
1
+ /**
2
+ * Documentation Generator Service
3
+ * Introspects LokiCMS runtime to generate API documentation
4
+ */
5
+ import { zodToJsonSchema, extractParameters } from './schema-converter.js';
6
+ /**
7
+ * Create a documentation generator instance
8
+ */
9
+ export function createDocGenerator(api, config, logger) {
10
+ // Cache for generated documentation
11
+ let cachedDocs = null;
12
+ let cacheTimestamp = 0;
13
+ const CACHE_TTL_MS = 60000; // 1 minute
14
+ /**
15
+ * Generate complete API documentation
16
+ */
17
+ async function generate(options = {}) {
18
+ const { includeTools = true, includeContentTypes = true, includeEndpoints = true, includeExamples = config.includeExamples ?? false, forceRefresh = false, } = options;
19
+ // Return cached if still valid
20
+ if (!forceRefresh && cachedDocs && Date.now() - cacheTimestamp < CACHE_TTL_MS) {
21
+ return cachedDocs;
22
+ }
23
+ logger.debug('Generating API documentation');
24
+ const docs = {
25
+ info: {
26
+ title: config.title || 'LokiCMS API',
27
+ version: config.version || '1.0.0',
28
+ description: config.description || 'LokiCMS API Documentation',
29
+ generatedAt: new Date().toISOString(),
30
+ },
31
+ tools: [],
32
+ contentTypes: [],
33
+ endpoints: [],
34
+ };
35
+ if (includeTools) {
36
+ docs.tools = await introspectTools(includeExamples);
37
+ }
38
+ if (includeContentTypes) {
39
+ docs.contentTypes = await introspectContentTypes();
40
+ }
41
+ if (includeEndpoints) {
42
+ docs.endpoints = generateEndpoints(docs.tools, docs.contentTypes);
43
+ }
44
+ // Update cache
45
+ cachedDocs = docs;
46
+ cacheTimestamp = Date.now();
47
+ logger.info(`Generated documentation: ${docs.tools.length} tools, ${docs.contentTypes.length} content types`);
48
+ return docs;
49
+ }
50
+ /**
51
+ * Introspect registered MCP tools
52
+ */
53
+ async function introspectTools(includeExamples = false) {
54
+ const tools = [];
55
+ // Try to get tools from MCP API
56
+ const mcpTools = api.mcp.getTools?.() || new Map();
57
+ for (const [name, definition] of mcpTools) {
58
+ try {
59
+ const inputSchema = zodToJsonSchema(definition.inputSchema, includeExamples);
60
+ const parameters = extractParameters(definition.inputSchema, includeExamples);
61
+ const toolDoc = {
62
+ name,
63
+ description: definition.description,
64
+ parameters,
65
+ inputSchema,
66
+ };
67
+ if (includeExamples) {
68
+ toolDoc.examples = generateToolExamples(name, parameters);
69
+ }
70
+ tools.push(toolDoc);
71
+ }
72
+ catch (error) {
73
+ logger.warn(`Failed to document tool ${name}: ${error}`);
74
+ }
75
+ }
76
+ // Sort alphabetically
77
+ tools.sort((a, b) => a.name.localeCompare(b.name));
78
+ return tools;
79
+ }
80
+ /**
81
+ * Introspect content types
82
+ */
83
+ async function introspectContentTypes() {
84
+ const contentTypes = [];
85
+ // Try to get content types from content API
86
+ const types = api.content?.getContentTypes?.() || [];
87
+ for (const type of types) {
88
+ contentTypes.push({
89
+ name: type.name,
90
+ slug: type.slug,
91
+ description: type.description,
92
+ fields: type.fields.map((field) => ({
93
+ name: field.name,
94
+ type: field.type,
95
+ required: field.required ?? false,
96
+ description: field.description,
97
+ options: field.options,
98
+ })),
99
+ });
100
+ }
101
+ // Sort alphabetically
102
+ contentTypes.sort((a, b) => a.name.localeCompare(b.name));
103
+ return contentTypes;
104
+ }
105
+ /**
106
+ * Generate REST-like endpoint documentation from tools
107
+ */
108
+ function generateEndpoints(tools, contentTypes) {
109
+ const endpoints = [];
110
+ const baseUrl = config.baseUrl || '/mcp';
111
+ // Generate endpoints for each tool
112
+ for (const tool of tools) {
113
+ endpoints.push({
114
+ method: 'POST',
115
+ path: `${baseUrl}/${tool.name}`,
116
+ summary: tool.description,
117
+ description: `Execute the ${tool.name} MCP tool`,
118
+ requestBody: tool.inputSchema,
119
+ responses: {
120
+ '200': {
121
+ description: 'Successful response',
122
+ schema: { type: 'object' },
123
+ },
124
+ '400': {
125
+ description: 'Invalid input',
126
+ schema: {
127
+ type: 'object',
128
+ properties: {
129
+ error: { type: 'string' },
130
+ },
131
+ },
132
+ },
133
+ },
134
+ tags: [getToolCategory(tool.name)],
135
+ });
136
+ }
137
+ // Generate CRUD endpoints for content types
138
+ for (const contentType of contentTypes) {
139
+ const basePath = `${baseUrl}/content/${contentType.slug}`;
140
+ // List
141
+ endpoints.push({
142
+ method: 'GET',
143
+ path: basePath,
144
+ summary: `List ${contentType.name} entries`,
145
+ description: `Retrieve a list of ${contentType.name} entries`,
146
+ parameters: [
147
+ { name: 'limit', type: 'number', required: false, description: 'Maximum entries to return' },
148
+ { name: 'offset', type: 'number', required: false, description: 'Number of entries to skip' },
149
+ ],
150
+ responses: {
151
+ '200': {
152
+ description: 'List of entries',
153
+ schema: {
154
+ type: 'array',
155
+ items: generateContentTypeSchema(contentType),
156
+ },
157
+ },
158
+ },
159
+ tags: ['Content'],
160
+ });
161
+ // Get by ID
162
+ endpoints.push({
163
+ method: 'GET',
164
+ path: `${basePath}/{id}`,
165
+ summary: `Get ${contentType.name} by ID`,
166
+ description: `Retrieve a single ${contentType.name} entry by its ID`,
167
+ parameters: [
168
+ { name: 'id', type: 'string', required: true, description: 'Entry ID' },
169
+ ],
170
+ responses: {
171
+ '200': {
172
+ description: 'Entry details',
173
+ schema: generateContentTypeSchema(contentType),
174
+ },
175
+ '404': {
176
+ description: 'Entry not found',
177
+ },
178
+ },
179
+ tags: ['Content'],
180
+ });
181
+ // Create
182
+ endpoints.push({
183
+ method: 'POST',
184
+ path: basePath,
185
+ summary: `Create ${contentType.name}`,
186
+ description: `Create a new ${contentType.name} entry`,
187
+ requestBody: generateContentTypeSchema(contentType),
188
+ responses: {
189
+ '201': {
190
+ description: 'Entry created',
191
+ schema: generateContentTypeSchema(contentType),
192
+ },
193
+ '400': {
194
+ description: 'Invalid input',
195
+ },
196
+ },
197
+ tags: ['Content'],
198
+ });
199
+ // Update
200
+ endpoints.push({
201
+ method: 'PUT',
202
+ path: `${basePath}/{id}`,
203
+ summary: `Update ${contentType.name}`,
204
+ description: `Update an existing ${contentType.name} entry`,
205
+ parameters: [
206
+ { name: 'id', type: 'string', required: true, description: 'Entry ID' },
207
+ ],
208
+ requestBody: generateContentTypeSchema(contentType),
209
+ responses: {
210
+ '200': {
211
+ description: 'Entry updated',
212
+ schema: generateContentTypeSchema(contentType),
213
+ },
214
+ '404': {
215
+ description: 'Entry not found',
216
+ },
217
+ },
218
+ tags: ['Content'],
219
+ });
220
+ // Delete
221
+ endpoints.push({
222
+ method: 'DELETE',
223
+ path: `${basePath}/{id}`,
224
+ summary: `Delete ${contentType.name}`,
225
+ description: `Delete a ${contentType.name} entry`,
226
+ parameters: [
227
+ { name: 'id', type: 'string', required: true, description: 'Entry ID' },
228
+ ],
229
+ responses: {
230
+ '204': {
231
+ description: 'Entry deleted',
232
+ },
233
+ '404': {
234
+ description: 'Entry not found',
235
+ },
236
+ },
237
+ tags: ['Content'],
238
+ });
239
+ }
240
+ return endpoints;
241
+ }
242
+ /**
243
+ * Generate JSON Schema from content type
244
+ */
245
+ function generateContentTypeSchema(contentType) {
246
+ const properties = {
247
+ id: { type: 'string', description: 'Unique identifier' },
248
+ createdAt: { type: 'string', format: 'date-time' },
249
+ updatedAt: { type: 'string', format: 'date-time' },
250
+ };
251
+ const required = ['id'];
252
+ for (const field of contentType.fields) {
253
+ properties[field.name] = {
254
+ type: fieldTypeToJsonType(field.type),
255
+ description: field.description,
256
+ };
257
+ if (field.required) {
258
+ required.push(field.name);
259
+ }
260
+ }
261
+ return {
262
+ type: 'object',
263
+ properties,
264
+ required,
265
+ };
266
+ }
267
+ /**
268
+ * Convert field type to JSON Schema type
269
+ */
270
+ function fieldTypeToJsonType(fieldType) {
271
+ const typeMap = {
272
+ string: 'string',
273
+ text: 'string',
274
+ richtext: 'string',
275
+ number: 'number',
276
+ integer: 'integer',
277
+ boolean: 'boolean',
278
+ date: 'string',
279
+ datetime: 'string',
280
+ array: 'array',
281
+ object: 'object',
282
+ reference: 'string',
283
+ media: 'string',
284
+ json: 'object',
285
+ };
286
+ return typeMap[fieldType.toLowerCase()] || 'string';
287
+ }
288
+ /**
289
+ * Get tool category from name
290
+ */
291
+ function getToolCategory(toolName) {
292
+ const prefix = toolName.split('_')[0];
293
+ const categories = {
294
+ vault: 'Vault',
295
+ sql: 'SQL',
296
+ mongodb: 'MongoDB',
297
+ vectors: 'Vectors',
298
+ backup: 'Backup',
299
+ docs: 'Documentation',
300
+ content: 'Content',
301
+ media: 'Media',
302
+ auth: 'Authentication',
303
+ };
304
+ return categories[prefix] || 'General';
305
+ }
306
+ /**
307
+ * Generate example inputs for a tool
308
+ */
309
+ function generateToolExamples(toolName, parameters) {
310
+ const example = {};
311
+ for (const param of parameters) {
312
+ if (param.required) {
313
+ example[param.name] = param.example ?? param.default ?? getDefaultValue(param.type);
314
+ }
315
+ }
316
+ return [
317
+ {
318
+ name: 'Basic usage',
319
+ input: example,
320
+ description: `Basic example for ${toolName}`,
321
+ },
322
+ ];
323
+ }
324
+ /**
325
+ * Get default value for a type
326
+ */
327
+ function getDefaultValue(type) {
328
+ switch (type) {
329
+ case 'string':
330
+ return 'example';
331
+ case 'number':
332
+ return 0;
333
+ case 'boolean':
334
+ return true;
335
+ case 'array':
336
+ return [];
337
+ case 'object':
338
+ return {};
339
+ default:
340
+ return null;
341
+ }
342
+ }
343
+ /**
344
+ * Get tools list only
345
+ */
346
+ async function getTools(includeExamples = false) {
347
+ return introspectTools(includeExamples);
348
+ }
349
+ /**
350
+ * Get content types only
351
+ */
352
+ async function getContentTypes() {
353
+ return introspectContentTypes();
354
+ }
355
+ /**
356
+ * Clear documentation cache
357
+ */
358
+ function clearCache() {
359
+ cachedDocs = null;
360
+ cacheTimestamp = 0;
361
+ logger.debug('Documentation cache cleared');
362
+ }
363
+ return {
364
+ generate,
365
+ getTools,
366
+ getContentTypes,
367
+ clearCache,
368
+ };
369
+ }
370
+ //# sourceMappingURL=doc-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-generator.js","sourceRoot":"","sources":["../../src/services/doc-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Schema Converter Service
3
+ * Converts Zod schemas to JSON Schema format
4
+ */
5
+ import type { z } from 'zod';
6
+ import type { JsonSchema, JsonSchemaProperty, ParameterDoc } from '../types.js';
7
+ /**
8
+ * Convert a Zod schema to JSON Schema format
9
+ */
10
+ export declare function zodToJsonSchema(schema: z.ZodType, includeExamples?: boolean): JsonSchema;
11
+ /**
12
+ * Extract parameter documentation from a Zod object schema
13
+ */
14
+ export declare function extractParameters(schema: z.ZodType, includeExamples?: boolean): ParameterDoc[];
15
+ /**
16
+ * Generate example value for a JSON Schema property
17
+ */
18
+ export declare function generateExample(schema: JsonSchemaProperty): unknown;
19
+ //# sourceMappingURL=schema-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/services/schema-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAsBhF;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,UAAQ,GAAG,UAAU,CAMtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,UAAQ,GAAG,YAAY,EAAE,CAgD5F;AA2TD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAkDnE"}