jszy-swagger-doc-generator 1.1.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/dist/index.js ADDED
@@ -0,0 +1,489 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SwaggerDocGenerator = void 0;
40
+ const axios_1 = __importDefault(require("axios"));
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ /**
44
+ * Transforms a string to PascalCase
45
+ */
46
+ function toPascalCase(str) {
47
+ return str
48
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
49
+ return index === 0 ? word.toUpperCase() : word.toUpperCase();
50
+ })
51
+ .replace(/\s+/g, '');
52
+ }
53
+ /**
54
+ * Transforms a string to camelCase
55
+ */
56
+ function toCamelCase(str) {
57
+ return str
58
+ .replace(/(?:^\w|[A-Z]|\b\w)/g, (word, index) => {
59
+ return index === 0 ? word.toLowerCase() : word.toUpperCase();
60
+ })
61
+ .replace(/\s+/g, '');
62
+ }
63
+ /**
64
+ * Converts OpenAPI types to TypeScript types
65
+ */
66
+ function convertTypeToTs(typeDef, schemaComponents) {
67
+ if (!typeDef)
68
+ return 'any';
69
+ if (typeDef.$ref) {
70
+ // Extract the type name from the reference
71
+ const refTypeName = typeDef.$ref.split('/').pop();
72
+ return refTypeName || 'any';
73
+ }
74
+ // Handle allOf (used for composition/references)
75
+ if (typeDef.allOf && Array.isArray(typeDef.allOf)) {
76
+ return typeDef.allOf.map((item) => {
77
+ if (item.$ref) {
78
+ return item.$ref.split('/').pop();
79
+ }
80
+ else if (item.type) {
81
+ return convertTypeToTs(item, schemaComponents);
82
+ }
83
+ return 'any';
84
+ }).filter(Boolean).join(' & ') || 'any';
85
+ }
86
+ if (Array.isArray(typeDef.type)) {
87
+ // Handle union types like ["string", "null"]
88
+ if (typeDef.type.includes('null')) {
89
+ const nonNullType = typeDef.type.find((t) => t !== 'null');
90
+ return `${convertTypeToTs({ ...typeDef, type: nonNullType }, schemaComponents)} | null`;
91
+ }
92
+ return 'any';
93
+ }
94
+ switch (typeDef.type) {
95
+ case 'string':
96
+ if (typeDef.enum) {
97
+ return `"${typeDef.enum.join('" | "')}"`;
98
+ }
99
+ if (typeDef.format === 'date' || typeDef.format === 'date-time') {
100
+ return 'string';
101
+ }
102
+ return 'string';
103
+ case 'integer':
104
+ case 'number':
105
+ return 'number';
106
+ case 'boolean':
107
+ return 'boolean';
108
+ case 'array':
109
+ if (typeDef.items) {
110
+ return `${convertTypeToTs(typeDef.items, schemaComponents)}[]`;
111
+ }
112
+ return 'any[]';
113
+ case 'object':
114
+ if (typeDef.properties) {
115
+ // Inline object definition
116
+ const fields = Object.entries(typeDef.properties)
117
+ .map(([propName, propSchema]) => {
118
+ const required = typeDef.required && typeDef.required.includes(propName);
119
+ const optional = !required ? '?' : '';
120
+ return ` ${propName}${optional}: ${convertTypeToTs(propSchema, schemaComponents)};`;
121
+ })
122
+ .join('\n');
123
+ return `{\n${fields}\n}`;
124
+ }
125
+ return 'Record<string, any>';
126
+ case 'null':
127
+ return 'null';
128
+ default:
129
+ return 'any';
130
+ }
131
+ }
132
+ class SwaggerDocGenerator {
133
+ /**
134
+ * Fetches the Swagger/OpenAPI JSON from a given URL
135
+ */
136
+ async fetchSwaggerJSON(url) {
137
+ try {
138
+ const response = await axios_1.default.get(url);
139
+ return response.data;
140
+ }
141
+ catch (error) {
142
+ if (error instanceof Error) {
143
+ throw new Error(`Failed to fetch Swagger JSON from ${url}: ${error.message}`);
144
+ }
145
+ else {
146
+ throw new Error(`Failed to fetch Swagger JSON from ${url}: ${String(error)}`);
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Loads Swagger JSON from a local file
152
+ */
153
+ loadSwaggerFromFile(filePath) {
154
+ try {
155
+ const jsonData = fs.readFileSync(filePath, 'utf8');
156
+ return JSON.parse(jsonData);
157
+ }
158
+ catch (error) {
159
+ if (error instanceof Error) {
160
+ throw new Error(`Failed to load Swagger JSON from ${filePath}: ${error.message}`);
161
+ }
162
+ else {
163
+ throw new Error(`Failed to load Swagger JSON from ${filePath}: ${String(error)}`);
164
+ }
165
+ }
166
+ }
167
+ /**
168
+ * Generates frontend documentation from the Swagger doc
169
+ */
170
+ generateDocumentation(swaggerDoc) {
171
+ let documentation = `# ${swaggerDoc.info.title}\n\n`;
172
+ documentation += `${swaggerDoc.info.description || swaggerDoc.info.title} v${swaggerDoc.info.version}\n\n`;
173
+ // Add API endpoints section
174
+ documentation += "## API Endpoints\n\n";
175
+ Object.entries(swaggerDoc.paths).forEach(([path, methods]) => {
176
+ Object.entries(methods).forEach(([method, endpointInfo]) => {
177
+ documentation += `### ${method.toUpperCase()} ${path}\n\n`;
178
+ if (endpointInfo.summary) {
179
+ documentation += `**Summary:** ${endpointInfo.summary}\n\n`;
180
+ }
181
+ if (endpointInfo.description) {
182
+ documentation += `**Description:** ${endpointInfo.description}\n\n`;
183
+ }
184
+ // Add parameters
185
+ if (endpointInfo.parameters && endpointInfo.parameters.length > 0) {
186
+ documentation += "**Parameters:**\n\n";
187
+ endpointInfo.parameters.forEach(param => {
188
+ documentation += `- **${param.name}** (${param.in}): ${param.description || ''}`;
189
+ if (param.required) {
190
+ documentation += ' *(required)*';
191
+ }
192
+ documentation += '\n';
193
+ });
194
+ documentation += '\n';
195
+ }
196
+ // Add request body if present
197
+ if (endpointInfo.requestBody) {
198
+ documentation += "**Request Body:**\n\n";
199
+ Object.entries(endpointInfo.requestBody.content).forEach(([contentType, contentInfo]) => {
200
+ documentation += `- Content-Type: \`${contentType}\`\n`;
201
+ if (contentInfo.example) {
202
+ documentation += `\n**Example Request:**\n\`\`\`json\n${JSON.stringify(contentInfo.example, null, 2)}\n\`\`\`\n\n`;
203
+ }
204
+ else if (contentInfo.schema) {
205
+ documentation += `\n**Schema:**\n\`\`\`json\n${JSON.stringify(contentInfo.schema, null, 2)}\n\`\`\`\n\n`;
206
+ }
207
+ });
208
+ }
209
+ // Add responses
210
+ if (endpointInfo.responses) {
211
+ documentation += "**Responses:**\n\n";
212
+ Object.entries(endpointInfo.responses).forEach(([statusCode, responseInfo]) => {
213
+ documentation += `- **${statusCode}**: ${responseInfo.description}\n`;
214
+ if (responseInfo.content) {
215
+ Object.entries(responseInfo.content).forEach(([contentType, contentInfo]) => {
216
+ if (contentInfo.example) {
217
+ documentation += `\n**Example Response:**\n\`\`\`json\n${JSON.stringify(contentInfo.example, null, 2)}\n\`\`\`\n\n`;
218
+ }
219
+ else if (contentInfo.schema) {
220
+ documentation += `\n**Schema:**\n\`\`\`json\n${JSON.stringify(contentInfo.schema, null, 2)}\n\`\`\`\n\n`;
221
+ }
222
+ });
223
+ }
224
+ });
225
+ }
226
+ documentation += "---\n\n";
227
+ });
228
+ });
229
+ return documentation;
230
+ }
231
+ /**
232
+ * Generates TypeScript type definitions from the schemas in Swagger doc
233
+ */
234
+ generateTypeDefinitions(swaggerDoc) {
235
+ if (!swaggerDoc.components?.schemas) {
236
+ return '';
237
+ }
238
+ let typeDefs = '// Auto-generated TypeScript types from Swagger schema\n\n';
239
+ Object.entries(swaggerDoc.components.schemas).forEach(([typeName, schema]) => {
240
+ typeDefs += this.generateSingleTypeDefinition(typeName, schema, swaggerDoc.components.schemas);
241
+ typeDefs += '\n';
242
+ });
243
+ return typeDefs;
244
+ }
245
+ /**
246
+ * Generates a single TypeScript type definition
247
+ */
248
+ generateSingleTypeDefinition(typeName, schema, allSchemas) {
249
+ if (schema.enum) {
250
+ // Enum type
251
+ return `export type ${typeName} = ${schema.enum.map((val) => `'${val}'`).join(' | ')};\n`;
252
+ }
253
+ if (schema.oneOf || schema.anyOf || schema.allOf) {
254
+ // Union type or complex type
255
+ const typeOption = schema.oneOf ? 'oneOf' : schema.anyOf ? 'anyOf' : 'allOf';
256
+ const types = schema[typeOption].map((item) => {
257
+ if (item.$ref) {
258
+ return item.$ref.split('/').pop();
259
+ }
260
+ else if (item.type) {
261
+ return convertTypeToTs(item, allSchemas);
262
+ }
263
+ else {
264
+ return 'any';
265
+ }
266
+ }).filter(Boolean);
267
+ return `export type ${typeName} = ${types.join(' | ')};\n`;
268
+ }
269
+ if (schema.type === 'object') {
270
+ // Object type
271
+ let result = `export interface ${typeName} {\n`;
272
+ if (schema.properties) {
273
+ Object.entries(schema.properties).forEach(([propName, propSchema]) => {
274
+ const required = schema.required && schema.required.includes(propName);
275
+ const optional = !required ? '?' : '';
276
+ // Add JSDoc comment if available
277
+ if (propSchema.description) {
278
+ result += ` /** ${propSchema.description} */\n`;
279
+ }
280
+ result += ` ${propName}${optional}: ${convertTypeToTs(propSchema, allSchemas)};\n`;
281
+ });
282
+ }
283
+ result += '}\n';
284
+ return result;
285
+ }
286
+ // For other types (string, number, etc.) that might have additional properties
287
+ return `export type ${typeName} = ${convertTypeToTs(schema, allSchemas)};\n`;
288
+ }
289
+ /**
290
+ * Generates React hooks from the paths in Swagger doc
291
+ */
292
+ generateReactHooks(swaggerDoc) {
293
+ const hooksByTag = new Map();
294
+ const schemas = swaggerDoc.components?.schemas || {};
295
+ // Group endpoints by tag
296
+ const endpointsByTag = {};
297
+ Object.entries(swaggerDoc.paths).forEach(([path, methods]) => {
298
+ Object.entries(methods).forEach(([method, endpointInfo]) => {
299
+ // Determine the tag for this endpoint
300
+ const tag = (endpointInfo.tags && endpointInfo.tags[0]) ? endpointInfo.tags[0] : 'General';
301
+ if (!endpointsByTag[tag]) {
302
+ endpointsByTag[tag] = [];
303
+ }
304
+ endpointsByTag[tag].push({ path, method, endpointInfo });
305
+ });
306
+ });
307
+ // Generate hooks for each tag
308
+ Object.entries(endpointsByTag).forEach(([tag, endpoints]) => {
309
+ let tagContent = this.generateHeaderForTag(tag);
310
+ // Generate all parameter interfaces for this tag first to avoid duplicates
311
+ const allParamInterfaces = [];
312
+ endpoints.forEach(({ path, method, endpointInfo }) => {
313
+ const paramInterface = this.generateParamInterface(path, method, endpointInfo, schemas);
314
+ if (paramInterface && !allParamInterfaces.includes(paramInterface)) {
315
+ allParamInterfaces.push(paramInterface);
316
+ }
317
+ });
318
+ // Add all unique parameter interfaces
319
+ allParamInterfaces.forEach(interfaceCode => {
320
+ tagContent += interfaceCode + '\n';
321
+ });
322
+ // Generate individual hooks
323
+ endpoints.forEach(({ path, method, endpointInfo }) => {
324
+ const hookContent = this.generateSingleHookWithUniqueName(path, method, endpointInfo, schemas);
325
+ tagContent += hookContent + '\n';
326
+ });
327
+ hooksByTag.set(tag, tagContent);
328
+ });
329
+ return hooksByTag;
330
+ }
331
+ /**
332
+ * Generates header content for a specific tag
333
+ */
334
+ generateHeaderForTag(tag) {
335
+ return `// ${toPascalCase(tag)} API Hooks\n\n`;
336
+ }
337
+ /**
338
+ * Generates a parameter interface for an API endpoint
339
+ */
340
+ generateParamInterface(path, method, endpointInfo, schemas) {
341
+ if (!endpointInfo.parameters || endpointInfo.parameters.length === 0) {
342
+ return '';
343
+ }
344
+ const pathParams = endpointInfo.parameters.filter((p) => p.in === 'path');
345
+ const queryParams = endpointInfo.parameters.filter((p) => p.in === 'query');
346
+ if (pathParams.length === 0 && queryParams.length === 0) {
347
+ return '';
348
+ }
349
+ // Create a unique interface name based on the operation ID
350
+ const operationId = endpointInfo.operationId || this.generateOperationId(path, method);
351
+ const interfaceName = `${toPascalCase(operationId)}Params`;
352
+ let paramsInterface = `export interface ${interfaceName} {\n`;
353
+ // Add path parameters
354
+ pathParams.forEach((param) => {
355
+ const required = param.required ? '' : '?';
356
+ const type = convertTypeToTs(param.schema || {}, schemas);
357
+ paramsInterface += ` ${toCamelCase(param.name)}${required}: ${type};\n`;
358
+ });
359
+ // Add query parameters
360
+ queryParams.forEach((param) => {
361
+ const required = param.required ? '' : '?';
362
+ const type = convertTypeToTs(param.schema || {}, schemas);
363
+ paramsInterface += ` ${toCamelCase(param.name)}${required}: ${type};\n`;
364
+ });
365
+ paramsInterface += '}\n';
366
+ return paramsInterface;
367
+ }
368
+ /**
369
+ * Generates a single React hook for an API endpoint with unique parameter interface
370
+ */
371
+ generateSingleHookWithUniqueName(path, method, endpointInfo, schemas) {
372
+ const operationId = endpointInfo.operationId || this.generateOperationId(path, method);
373
+ const hookName = `use${toPascalCase(operationId)}`;
374
+ // Use unique parameter interface name
375
+ const pathParams = endpointInfo.parameters?.filter((p) => p.in === 'path') || [];
376
+ const queryParams = endpointInfo.parameters?.filter((p) => p.in === 'query') || [];
377
+ let paramsDeclaration = '';
378
+ let paramsUsage = '{}';
379
+ const hasParams = pathParams.length > 0 || queryParams.length > 0;
380
+ if (hasParams) {
381
+ const paramInterfaceName = `${toPascalCase(operationId)}Params`;
382
+ paramsDeclaration = `params: ${paramInterfaceName}`;
383
+ paramsUsage = 'params';
384
+ }
385
+ // Format the path for use in the code (handle path parameters)
386
+ const pathWithParams = path.replace(/{(\w+)}/g, (_, param) => `\${params.${toCamelCase(param)}}`);
387
+ // Determine response type
388
+ let responseType = 'any';
389
+ if (endpointInfo.responses && endpointInfo.responses['200']) {
390
+ const responseSchema = endpointInfo.responses['200'].content?.['application/json']?.schema;
391
+ if (responseSchema) {
392
+ responseType = convertTypeToTs(responseSchema, schemas);
393
+ }
394
+ }
395
+ // Generate request body parameter if needed
396
+ let requestBodyParam = '';
397
+ if (method.toLowerCase() !== 'get' && method.toLowerCase() !== 'delete' && endpointInfo.requestBody) {
398
+ const bodySchema = endpointInfo.requestBody.content?.['application/json']?.schema;
399
+ if (bodySchema) {
400
+ const bodyType = convertTypeToTs(bodySchema, schemas);
401
+ requestBodyParam = `, body: ${bodyType}`;
402
+ }
403
+ }
404
+ // Create the hook function
405
+ let hookCode = `export const ${hookName} = () => {\n`;
406
+ hookCode += ` const apiCall = async (${paramsDeclaration}${requestBodyParam ? requestBodyParam : ''}) => {\n`;
407
+ hookCode += ` const path = \`\${process.env.REACT_APP_API_BASE_URL || ''}${pathWithParams}\`;\n`;
408
+ // Add query parameters
409
+ if (endpointInfo.parameters && endpointInfo.parameters.some((p) => p.in === 'query')) {
410
+ hookCode += ` const queryParams = new URLSearchParams();\n`;
411
+ endpointInfo.parameters.forEach((param) => {
412
+ if (param.in === 'query') {
413
+ hookCode += ` if (params.${toCamelCase(param.name)}) queryParams.append('${param.name}', params.${toCamelCase(param.name)}.toString());\n`;
414
+ }
415
+ });
416
+ hookCode += ` const queryString = queryParams.toString();\n`;
417
+ hookCode += ` const url = \`\${path}\${queryString ? '?' + queryString : ''}\`;\n`;
418
+ }
419
+ else {
420
+ hookCode += ` const url = path;\n`;
421
+ }
422
+ // Add fetch options
423
+ hookCode += ` const options: RequestInit = {\n`;
424
+ hookCode += ` method: '${method.toUpperCase()}',\n`;
425
+ if (requestBodyParam) {
426
+ hookCode += ` headers: {\n 'Content-Type': 'application/json',\n },\n`;
427
+ hookCode += ` body: JSON.stringify(body),\n`;
428
+ }
429
+ hookCode += ` };\n\n`;
430
+ hookCode += ` const result = await fetch(url, options);\n`;
431
+ hookCode += ` return result.json() as Promise<${responseType}>;\n`;
432
+ hookCode += ` };\n\n`;
433
+ hookCode += ` return { ${toCamelCase(operationId)}: apiCall };\n`;
434
+ hookCode += `};\n`;
435
+ return hookCode;
436
+ }
437
+ /**
438
+ * Generates a single React hook for an API endpoint
439
+ */
440
+ generateSingleHook(path, method, endpointInfo, schemas) {
441
+ // This method is kept for backward compatibility
442
+ return this.generateSingleHookWithUniqueName(path, method, endpointInfo, schemas);
443
+ }
444
+ /**
445
+ * Generate operation ID from path and method if not provided
446
+ */
447
+ generateOperationId(path, method) {
448
+ return `${method.toLowerCase()}_${path.replace(/[\/{}]/g, '_')}`;
449
+ }
450
+ /**
451
+ * Saves the generated documentation to a file
452
+ */
453
+ saveDocumentationToFile(documentation, outputPath) {
454
+ const dir = path.dirname(outputPath);
455
+ if (!fs.existsSync(dir)) {
456
+ fs.mkdirSync(dir, { recursive: true });
457
+ }
458
+ fs.writeFileSync(outputPath, documentation, 'utf8');
459
+ }
460
+ /**
461
+ * Saves the generated TypeScript types to a file
462
+ */
463
+ saveTypesToFile(types, outputPath) {
464
+ const dir = path.dirname(outputPath);
465
+ if (!fs.existsSync(dir)) {
466
+ fs.mkdirSync(dir, { recursive: true });
467
+ }
468
+ fs.writeFileSync(outputPath, types, 'utf8');
469
+ }
470
+ /**
471
+ * Saves the generated React hooks to files organized by tag
472
+ */
473
+ saveHooksByTag(hooksByTag, outputDir) {
474
+ const dir = outputDir;
475
+ if (!fs.existsSync(dir)) {
476
+ fs.mkdirSync(dir, { recursive: true });
477
+ }
478
+ for (const [tag, content] of hooksByTag) {
479
+ const tagDir = path.join(outputDir, toCamelCase(tag));
480
+ if (!fs.existsSync(tagDir)) {
481
+ fs.mkdirSync(tagDir, { recursive: true });
482
+ }
483
+ const fileName = path.join(tagDir, `${toCamelCase(tag)}.hooks.ts`);
484
+ fs.writeFileSync(fileName, content, 'utf8');
485
+ }
486
+ }
487
+ }
488
+ exports.SwaggerDocGenerator = SwaggerDocGenerator;
489
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "jszy-swagger-doc-generator",
3
+ "version": "1.1.0",
4
+ "description": "A tool to generate frontend documentation from Swagger/OpenAPI JSON files",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "swagger-doc-generator": "./dist/cli.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "start": "node dist/cli.js",
13
+ "test": "jest",
14
+ "test:watch": "jest --watch",
15
+ "test:coverage": "jest --coverage"
16
+ },
17
+ "keywords": [
18
+ "swagger",
19
+ "documentation",
20
+ "api",
21
+ "frontend",
22
+ "openapi"
23
+ ],
24
+ "author": "Swagger Doc Generator Team",
25
+ "license": "MIT",
26
+ "dependencies": {
27
+ "axios": "^1.6.0",
28
+ "yargs": "^17.7.2"
29
+ },
30
+ "devDependencies": {
31
+ "@types/node": "^20.9.0",
32
+ "@types/yargs": "^17.0.24",
33
+ "typescript": "^5.2.2",
34
+ "jest": "^29.7.0",
35
+ "@types/jest": "^29.5.5",
36
+ "ts-jest": "^29.1.1"
37
+ },
38
+ "jest": {
39
+ "preset": "ts-jest",
40
+ "testEnvironment": "node",
41
+ "roots": [
42
+ "<rootDir>/__tests__"
43
+ ],
44
+ "transform": {
45
+ "^.+\\.tsx?$": "ts-jest"
46
+ },
47
+ "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
48
+ "collectCoverageFrom": [
49
+ "src/**/*.{ts,tsx}",
50
+ "!src/index.ts",
51
+ "!src/cli.ts"
52
+ ]
53
+ }
54
+ }