swagger-to-playwright-api-clients 1.0.4

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +190 -0
  3. package/dist/api.d.ts +27 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +127 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.d.ts +6 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +255 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/clients/BaseAPIClient.d.ts +88 -0
  12. package/dist/clients/BaseAPIClient.d.ts.map +1 -0
  13. package/dist/clients/BaseAPIClient.js +199 -0
  14. package/dist/clients/BaseAPIClient.js.map +1 -0
  15. package/dist/config/types.d.ts +72 -0
  16. package/dist/config/types.d.ts.map +1 -0
  17. package/dist/config/types.js +19 -0
  18. package/dist/config/types.js.map +1 -0
  19. package/dist/index.d.ts +17 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +55 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/utils/copyBaseClient.d.ts +8 -0
  24. package/dist/utils/copyBaseClient.d.ts.map +1 -0
  25. package/dist/utils/copyBaseClient.js +354 -0
  26. package/dist/utils/copyBaseClient.js.map +1 -0
  27. package/dist/utils/logger.d.ts +6 -0
  28. package/dist/utils/logger.d.ts.map +1 -0
  29. package/dist/utils/logger.js +57 -0
  30. package/dist/utils/logger.js.map +1 -0
  31. package/dist/utils/swagger/ClientGenerator.d.ts +49 -0
  32. package/dist/utils/swagger/ClientGenerator.d.ts.map +1 -0
  33. package/dist/utils/swagger/ClientGenerator.js +192 -0
  34. package/dist/utils/swagger/ClientGenerator.js.map +1 -0
  35. package/dist/utils/swagger/FileWriter.d.ts +66 -0
  36. package/dist/utils/swagger/FileWriter.d.ts.map +1 -0
  37. package/dist/utils/swagger/FileWriter.js +185 -0
  38. package/dist/utils/swagger/FileWriter.js.map +1 -0
  39. package/dist/utils/swagger/SwaggerGenerator.d.ts +42 -0
  40. package/dist/utils/swagger/SwaggerGenerator.d.ts.map +1 -0
  41. package/dist/utils/swagger/SwaggerGenerator.js +211 -0
  42. package/dist/utils/swagger/SwaggerGenerator.js.map +1 -0
  43. package/dist/utils/swagger/SwaggerParser.d.ts +69 -0
  44. package/dist/utils/swagger/SwaggerParser.d.ts.map +1 -0
  45. package/dist/utils/swagger/SwaggerParser.js +358 -0
  46. package/dist/utils/swagger/SwaggerParser.js.map +1 -0
  47. package/dist/utils/swagger/TypeGenerator.d.ts +49 -0
  48. package/dist/utils/swagger/TypeGenerator.d.ts.map +1 -0
  49. package/dist/utils/swagger/TypeGenerator.js +166 -0
  50. package/dist/utils/swagger/TypeGenerator.js.map +1 -0
  51. package/dist/utils/swagger/index.d.ts +12 -0
  52. package/dist/utils/swagger/index.d.ts.map +1 -0
  53. package/dist/utils/swagger/index.js +38 -0
  54. package/dist/utils/swagger/index.js.map +1 -0
  55. package/dist/utils/swagger/run-generator.d.ts +23 -0
  56. package/dist/utils/swagger/run-generator.d.ts.map +1 -0
  57. package/dist/utils/swagger/run-generator.js +195 -0
  58. package/dist/utils/swagger/run-generator.js.map +1 -0
  59. package/dist/utils/swagger/types.d.ts +142 -0
  60. package/dist/utils/swagger/types.d.ts.map +1 -0
  61. package/dist/utils/swagger/types.js +7 -0
  62. package/dist/utils/swagger/types.js.map +1 -0
  63. package/dist/utils/swagger/utils/naming.d.ts +48 -0
  64. package/dist/utils/swagger/utils/naming.d.ts.map +1 -0
  65. package/dist/utils/swagger/utils/naming.js +109 -0
  66. package/dist/utils/swagger/utils/naming.js.map +1 -0
  67. package/dist/utils/swagger/utils/pathUtils.d.ts +40 -0
  68. package/dist/utils/swagger/utils/pathUtils.d.ts.map +1 -0
  69. package/dist/utils/swagger/utils/pathUtils.js +118 -0
  70. package/dist/utils/swagger/utils/pathUtils.js.map +1 -0
  71. package/package.json +56 -0
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ /**
3
+ * Path utilities for processing API endpoints
4
+ * Handles path parsing, grouping, and organization
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.determineFolderStructure = determineFolderStructure;
8
+ exports.stripPathParams = stripPathParams;
9
+ exports.generatePathTemplate = generatePathTemplate;
10
+ exports.parseQueryFromPath = parseQueryFromPath;
11
+ exports.groupEndpointsByFolder = groupEndpointsByFolder;
12
+ const naming_1 = require("./naming");
13
+ /**
14
+ * Determine the folder structure for an endpoint
15
+ * Groups endpoints logically based on path segments
16
+ */
17
+ function determineFolderStructure(path, serviceName) {
18
+ const segments = path.split('/').filter((s) => s && !s.startsWith('{') && !s.endsWith('}'));
19
+ // Skip common prefixes
20
+ const filtered = segments.filter((s) => !['api', 'v1', 'v2', 'v3'].includes(s.toLowerCase()));
21
+ // Start with service name
22
+ const folders = [(0, naming_1.toPascalCase)(serviceName)];
23
+ // If only one segment after filtering (e.g., /health, /metrics), use Root folder
24
+ if (filtered.length <= 1) {
25
+ folders.push('Root');
26
+ return folders;
27
+ }
28
+ // Check for therapist keyword - create dedicated folder
29
+ for (const segment of filtered) {
30
+ if (segment.toLowerCase().includes('therapist')) {
31
+ folders.push('Therapist');
32
+ break;
33
+ }
34
+ }
35
+ // Group by first meaningful segment after service name
36
+ if (filtered.length > 1) {
37
+ // Use the first segment after the service-like segment
38
+ const groupSegment = filtered[0];
39
+ if (!folders.includes((0, naming_1.toPascalCase)(groupSegment)) &&
40
+ groupSegment.toLowerCase() !== 'therapist') {
41
+ folders.push((0, naming_1.toPascalCase)(groupSegment));
42
+ }
43
+ }
44
+ return folders;
45
+ }
46
+ /**
47
+ * Strip path parameters from endpoint for base path
48
+ * Example: "/api/v1/activity/{id}/items/{itemId}" -> "/api/v1/activity"
49
+ */
50
+ function stripPathParams(path) {
51
+ return path
52
+ .split('/')
53
+ .filter((s) => !s.startsWith('{'))
54
+ .join('/');
55
+ }
56
+ /**
57
+ * Generate template literal for path with params
58
+ * Example: "/api/v1/activity/{id}" -> "`/api/v1/activity/${id}`"
59
+ */
60
+ function generatePathTemplate(path) {
61
+ const hasParams = path.includes('{');
62
+ if (!hasParams) {
63
+ return `'${path}'`;
64
+ }
65
+ // Convert {param} to ${param}
66
+ const template = path.replace(/\{([^}]+)\}/g, '${$1}');
67
+ return '`' + template + '`';
68
+ }
69
+ /**
70
+ * Parse query parameters from path (if any exist in the path definition)
71
+ */
72
+ function parseQueryFromPath(path) {
73
+ const [basePath, query] = path.split('?');
74
+ if (!query) {
75
+ return { basePath, queryParams: [] };
76
+ }
77
+ const queryParams = [];
78
+ const params = query.split('&');
79
+ for (const param of params) {
80
+ const [key] = param.split('=');
81
+ if (key) {
82
+ queryParams.push(key.replace(/[{}]/g, ''));
83
+ }
84
+ }
85
+ return { basePath, queryParams };
86
+ }
87
+ function groupEndpointsByFolder(paths, serviceName) {
88
+ const groups = new Map();
89
+ for (const [path, pathItem] of Object.entries(paths)) {
90
+ const folders = determineFolderStructure(path, serviceName);
91
+ const folderKey = folders.join('/');
92
+ if (!groups.has(folderKey)) {
93
+ groups.set(folderKey, {
94
+ folder: folders,
95
+ endpoints: [],
96
+ });
97
+ }
98
+ const methods = [
99
+ 'get',
100
+ 'post',
101
+ 'put',
102
+ 'patch',
103
+ 'delete',
104
+ ];
105
+ for (const method of methods) {
106
+ const operation = pathItem[method];
107
+ if (operation) {
108
+ groups.get(folderKey).endpoints.push({
109
+ path,
110
+ method: method.toUpperCase(),
111
+ operationId: operation.operationId,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ return groups;
117
+ }
118
+ //# sourceMappingURL=pathUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathUtils.js","sourceRoot":"","sources":["../../../../src/utils/swagger/utils/pathUtils.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "swagger-to-playwright-api-clients",
3
+ "version": "1.0.4",
4
+ "description": "Generate TypeScript API clients from Swagger/OpenAPI specifications for Playwright testing",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "swagger-to-playwright": "./dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "build:watch": "tsc --watch",
17
+ "prepublishOnly": "npm run build",
18
+ "test": "npx playwright test",
19
+ "generate": "npx ts-node src/cli.ts",
20
+ "generate:help": "npx ts-node src/cli.ts --help",
21
+ "format": "prettier --write .",
22
+ "format:check": "prettier --check ."
23
+ },
24
+ "keywords": [
25
+ "swagger",
26
+ "openapi",
27
+ "playwright",
28
+ "api-client",
29
+ "code-generator",
30
+ "typescript"
31
+ ],
32
+ "author": "",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/amartanwar42/swagger-to-playwright-api-clients"
37
+ },
38
+ "engines": {
39
+ "node": ">=18.0.0"
40
+ },
41
+ "peerDependencies": {
42
+ "@playwright/test": ">=1.40.0",
43
+ "playwright": ">=1.40.0"
44
+ },
45
+ "dependencies": {
46
+ "winston": "^3.19.0"
47
+ },
48
+ "devDependencies": {
49
+ "@playwright/test": "^1.58.2",
50
+ "@types/node": "^25.3.0",
51
+ "playwright": "^1.58.2",
52
+ "prettier": "^3.5.3",
53
+ "ts-node": "^10.9.2",
54
+ "typescript": "^5.9.3"
55
+ }
56
+ }