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,88 @@
1
+ /**
2
+ * BaseAPIClient - Base class for making API requests using Playwright's APIRequestContext
3
+ * Generated by swagger-to-playwright-api-clients
4
+ */
5
+ /**
6
+ * Options for individual API requests
7
+ */
8
+ export interface RequestOptions {
9
+ headers?: Record<string, string>;
10
+ params?: Record<string, string | number | boolean | undefined>;
11
+ timeout?: number;
12
+ }
13
+ /**
14
+ * Standard API response result
15
+ */
16
+ export interface APIResponseResult<T = unknown> {
17
+ body: T;
18
+ status: number;
19
+ headers: Record<string, string>;
20
+ }
21
+ /**
22
+ * Logger interface - implement this to customize logging
23
+ */
24
+ export interface APIClientLogger {
25
+ info(message: string): void;
26
+ debug(message: string): void;
27
+ error(message: string): void;
28
+ }
29
+ /**
30
+ * BaseAPIClient - Provides HTTP methods using Playwright's request API
31
+ */
32
+ export declare class BaseAPIClient {
33
+ private baseURL;
34
+ private defaultHeaders;
35
+ private context;
36
+ private logger;
37
+ constructor(baseURL: string, defaultHeaders?: Record<string, string>, logger?: APIClientLogger);
38
+ /**
39
+ * Initialize the API request context
40
+ */
41
+ init(): Promise<void>;
42
+ /**
43
+ * Dispose the API request context
44
+ */
45
+ dispose(): Promise<void>;
46
+ /**
47
+ * Get the request context, initializing if needed
48
+ */
49
+ private getContext;
50
+ /**
51
+ * Build URL with query parameters
52
+ */
53
+ private buildUrl;
54
+ /**
55
+ * Log request details
56
+ */
57
+ private logRequest;
58
+ /**
59
+ * Log response details
60
+ */
61
+ private logResponse;
62
+ /**
63
+ * Parse response into standard result format
64
+ */
65
+ private parseResponse;
66
+ /**
67
+ * GET request
68
+ */
69
+ get<T = unknown>(endpoint: string, options?: RequestOptions): Promise<APIResponseResult<T>>;
70
+ /**
71
+ * POST request
72
+ */
73
+ post<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<APIResponseResult<T>>;
74
+ /**
75
+ * PUT request
76
+ */
77
+ put<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<APIResponseResult<T>>;
78
+ /**
79
+ * PATCH request
80
+ */
81
+ patch<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<APIResponseResult<T>>;
82
+ /**
83
+ * DELETE request
84
+ */
85
+ delete<T = unknown>(endpoint: string, data?: unknown, options?: RequestOptions): Promise<APIResponseResult<T>>;
86
+ }
87
+ export default BaseAPIClient;
88
+ //# sourceMappingURL=BaseAPIClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAPIClient.d.ts","sourceRoot":"","sources":["../../src/clients/BaseAPIClient.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC7C,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAWD;;GAEG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,MAAM,CAAkB;gBAG/B,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAC3C,MAAM,GAAE,eAA+B;IAOxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;OAEG;YACW,UAAU;IAOxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAmBhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;YACW,aAAa;IAuB3B;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAiBhC;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAkBhC;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAkBhC;;OAEG;IACG,KAAK,CAAC,CAAC,GAAG,OAAO,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAkBhC;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,OAAO,EACvB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAiBhC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ /**
3
+ * BaseAPIClient - Base class for making API requests using Playwright's APIRequestContext
4
+ * Generated by swagger-to-playwright-api-clients
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.BaseAPIClient = void 0;
8
+ const test_1 = require("@playwright/test");
9
+ /**
10
+ * Default console logger
11
+ */
12
+ const defaultLogger = {
13
+ info: (msg) => console.log(`[INFO] ${msg}`),
14
+ debug: (msg) => console.debug(`[DEBUG] ${msg}`),
15
+ error: (msg) => console.error(`[ERROR] ${msg}`),
16
+ };
17
+ /**
18
+ * BaseAPIClient - Provides HTTP methods using Playwright's request API
19
+ */
20
+ class BaseAPIClient {
21
+ baseURL;
22
+ defaultHeaders;
23
+ context = null;
24
+ logger;
25
+ constructor(baseURL, defaultHeaders = {}, logger = defaultLogger) {
26
+ this.baseURL = baseURL;
27
+ this.defaultHeaders = defaultHeaders;
28
+ this.logger = logger;
29
+ }
30
+ /**
31
+ * Initialize the API request context
32
+ */
33
+ async init() {
34
+ this.context = await test_1.request.newContext({
35
+ baseURL: this.baseURL,
36
+ extraHTTPHeaders: this.defaultHeaders,
37
+ });
38
+ this.logger.info(`BaseAPIClient initialized with baseURL: ${this.baseURL}`);
39
+ }
40
+ /**
41
+ * Dispose the API request context
42
+ */
43
+ async dispose() {
44
+ if (this.context) {
45
+ await this.context.dispose();
46
+ this.context = null;
47
+ this.logger.info('BaseAPIClient disposed');
48
+ }
49
+ }
50
+ /**
51
+ * Get the request context, initializing if needed
52
+ */
53
+ async getContext() {
54
+ if (!this.context) {
55
+ await this.init();
56
+ }
57
+ return this.context;
58
+ }
59
+ /**
60
+ * Build URL with query parameters
61
+ */
62
+ buildUrl(endpoint, params) {
63
+ if (!params)
64
+ return endpoint;
65
+ const searchParams = new URLSearchParams();
66
+ for (const [key, value] of Object.entries(params)) {
67
+ if (value !== undefined) {
68
+ searchParams.append(key, String(value));
69
+ }
70
+ }
71
+ const queryString = searchParams.toString();
72
+ if (!queryString)
73
+ return endpoint;
74
+ return `${endpoint}${endpoint.includes('?') ? '&' : '?'}${queryString}`;
75
+ }
76
+ /**
77
+ * Log request details
78
+ */
79
+ logRequest(method, url, headers, body) {
80
+ this.logger.info(`>>> ${method} ${this.baseURL}${url}`);
81
+ const allHeaders = { ...this.defaultHeaders, ...headers };
82
+ this.logger.debug(`Headers: ${JSON.stringify(allHeaders, null, 2)}`);
83
+ if (body !== undefined) {
84
+ this.logger.info(`Body: ${JSON.stringify(body, null, 2)}`);
85
+ }
86
+ }
87
+ /**
88
+ * Log response details
89
+ */
90
+ logResponse(method, url, status, body) {
91
+ this.logger.info(`<<< ${method} ${this.baseURL}${url} - Status: ${status}`);
92
+ this.logger.info(`Response: ${JSON.stringify(body, null, 2)}`);
93
+ }
94
+ /**
95
+ * Parse response into standard result format
96
+ */
97
+ async parseResponse(response) {
98
+ let body;
99
+ const contentType = response.headers()['content-type'] || '';
100
+ if (contentType.includes('application/json')) {
101
+ try {
102
+ body = await response.json();
103
+ }
104
+ catch {
105
+ body = (await response.text());
106
+ }
107
+ }
108
+ else {
109
+ body = (await response.text());
110
+ }
111
+ return {
112
+ body,
113
+ status: response.status(),
114
+ headers: response.headers(),
115
+ };
116
+ }
117
+ /**
118
+ * GET request
119
+ */
120
+ async get(endpoint, options) {
121
+ const ctx = await this.getContext();
122
+ const url = this.buildUrl(endpoint, options?.params);
123
+ this.logRequest('GET', url, options?.headers);
124
+ const response = await ctx.get(url, {
125
+ headers: options?.headers,
126
+ timeout: options?.timeout,
127
+ });
128
+ const result = await this.parseResponse(response);
129
+ this.logResponse('GET', url, result.status, result.body);
130
+ return result;
131
+ }
132
+ /**
133
+ * POST request
134
+ */
135
+ async post(endpoint, data, options) {
136
+ const ctx = await this.getContext();
137
+ const url = this.buildUrl(endpoint, options?.params);
138
+ this.logRequest('POST', url, options?.headers, data);
139
+ const response = await ctx.post(url, {
140
+ data,
141
+ headers: options?.headers,
142
+ timeout: options?.timeout,
143
+ });
144
+ const result = await this.parseResponse(response);
145
+ this.logResponse('POST', url, result.status, result.body);
146
+ return result;
147
+ }
148
+ /**
149
+ * PUT request
150
+ */
151
+ async put(endpoint, data, options) {
152
+ const ctx = await this.getContext();
153
+ const url = this.buildUrl(endpoint, options?.params);
154
+ this.logRequest('PUT', url, options?.headers, data);
155
+ const response = await ctx.put(url, {
156
+ data,
157
+ headers: options?.headers,
158
+ timeout: options?.timeout,
159
+ });
160
+ const result = await this.parseResponse(response);
161
+ this.logResponse('PUT', url, result.status, result.body);
162
+ return result;
163
+ }
164
+ /**
165
+ * PATCH request
166
+ */
167
+ async patch(endpoint, data, options) {
168
+ const ctx = await this.getContext();
169
+ const url = this.buildUrl(endpoint, options?.params);
170
+ this.logRequest('PATCH', url, options?.headers, data);
171
+ const response = await ctx.patch(url, {
172
+ data,
173
+ headers: options?.headers,
174
+ timeout: options?.timeout,
175
+ });
176
+ const result = await this.parseResponse(response);
177
+ this.logResponse('PATCH', url, result.status, result.body);
178
+ return result;
179
+ }
180
+ /**
181
+ * DELETE request
182
+ */
183
+ async delete(endpoint, data, options) {
184
+ const ctx = await this.getContext();
185
+ const url = this.buildUrl(endpoint, options?.params);
186
+ this.logRequest('DELETE', url, options?.headers, data);
187
+ const response = await ctx.delete(url, {
188
+ data,
189
+ headers: options?.headers,
190
+ timeout: options?.timeout,
191
+ });
192
+ const result = await this.parseResponse(response);
193
+ this.logResponse('DELETE', url, result.status, result.body);
194
+ return result;
195
+ }
196
+ }
197
+ exports.BaseAPIClient = BaseAPIClient;
198
+ exports.default = BaseAPIClient;
199
+ //# sourceMappingURL=BaseAPIClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAPIClient.js","sourceRoot":"","sources":["../../src/clients/BaseAPIClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Configuration types for the generator
3
+ */
4
+ /**
5
+ * Configuration for a single Swagger source
6
+ */
7
+ export interface SwaggerSourceConfig {
8
+ /**
9
+ * Type of source: 'file' for local JSON file, 'url' for remote URL
10
+ */
11
+ type: 'file' | 'url';
12
+ /**
13
+ * Path to local file or URL to remote Swagger JSON
14
+ * For files: can be absolute or relative to project root
15
+ * For URLs: must be a valid HTTP/HTTPS URL
16
+ */
17
+ source: string;
18
+ /**
19
+ * Optional: Override the service name (defaults to title from swagger info)
20
+ */
21
+ serviceName?: string;
22
+ /**
23
+ * Optional: Custom output directory for this source
24
+ * If not specified, uses the global outputDir
25
+ */
26
+ outputDir?: string;
27
+ /**
28
+ * Optional: Whether to skip this source during generation
29
+ */
30
+ skip?: boolean;
31
+ }
32
+ /**
33
+ * Main automation configuration
34
+ */
35
+ export interface AutomationConfig {
36
+ /**
37
+ * Global output directory for generated clients
38
+ * Relative to project root or absolute path
39
+ */
40
+ outputDir: string;
41
+ /**
42
+ * List of Swagger sources to process
43
+ */
44
+ sources: SwaggerSourceConfig[];
45
+ /**
46
+ * Optional: Path to BaseAPIClient (relative to generated client files)
47
+ * Generated clients are at: outputDir/generatedClients/ServiceName/FolderName/
48
+ * Default: '../../../BaseAPIClient' (points to outputDir/BaseAPIClient.ts)
49
+ */
50
+ baseClientPath?: string;
51
+ /**
52
+ * Optional: Whether to copy BaseAPIClient to output directory
53
+ * Default: true (if baseClientPath is not provided)
54
+ */
55
+ copyBaseClient?: boolean;
56
+ /**
57
+ * Optional: Whether to clean output directory before generation
58
+ */
59
+ cleanOutput?: boolean;
60
+ /**
61
+ * Optional: Whether to run in parallel (default: false for stability)
62
+ */
63
+ parallel?: boolean;
64
+ }
65
+ /**
66
+ * Default configuration values
67
+ * Path is relative from: outputDir/generatedClients/ServiceName/FolderName/
68
+ * to: outputDir/BaseAPIClient.ts
69
+ */
70
+ export declare const DEFAULT_BASE_CLIENT_PATH = "../../../BaseAPIClient";
71
+ export declare const defaultConfig: Partial<AutomationConfig>;
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAErB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAE/B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AAEjE,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,gBAAgB,CAKnD,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration types for the generator
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.defaultConfig = exports.DEFAULT_BASE_CLIENT_PATH = void 0;
7
+ /**
8
+ * Default configuration values
9
+ * Path is relative from: outputDir/generatedClients/ServiceName/FolderName/
10
+ * to: outputDir/BaseAPIClient.ts
11
+ */
12
+ exports.DEFAULT_BASE_CLIENT_PATH = '../../../BaseAPIClient';
13
+ exports.defaultConfig = {
14
+ cleanOutput: true,
15
+ parallel: false,
16
+ copyBaseClient: true,
17
+ baseClientPath: exports.DEFAULT_BASE_CLIENT_PATH,
18
+ };
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA0EH;;;;GAIG;AACU,QAAA,wBAAwB,GAAG,wBAAwB,CAAC;AAEpD,QAAA,aAAa,GAA8B;IACvD,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,KAAK;IACf,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,gCAAwB;CACxC,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * swagger-to-playwright-api-clients
3
+ * Generate TypeScript API clients from Swagger/OpenAPI specifications for Playwright testing
4
+ */
5
+ export { SwaggerGenerator, generateFromFile, generateFromUrl, GeneratorOptions, GeneratorResult, } from './utils/swagger/SwaggerGenerator';
6
+ export { SwaggerParser } from './utils/swagger/SwaggerParser';
7
+ export { TypeGenerator } from './utils/swagger/TypeGenerator';
8
+ export { ClientGenerator } from './utils/swagger/ClientGenerator';
9
+ export { FileWriter } from './utils/swagger/FileWriter';
10
+ export * from './utils/swagger/types';
11
+ export * from './utils/swagger/utils/naming';
12
+ export * from './utils/swagger/utils/pathUtils';
13
+ export { AutomationConfig, SwaggerSourceConfig, defaultConfig, DEFAULT_BASE_CLIENT_PATH, } from './config/types';
14
+ export { runGenerator, RunResults } from './utils/swagger/run-generator';
15
+ export { BaseAPIClient, RequestOptions, APIResponseResult } from './clients/BaseAPIClient';
16
+ export { generate, generateFromConfig, loadConfig } from './api';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,eAAe,GACf,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,cAAc,uBAAuB,CAAC;AAGtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAGhD,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,wBAAwB,GACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG3F,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * swagger-to-playwright-api-clients
4
+ * Generate TypeScript API clients from Swagger/OpenAPI specifications for Playwright testing
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.loadConfig = exports.generateFromConfig = exports.generate = exports.BaseAPIClient = exports.runGenerator = exports.DEFAULT_BASE_CLIENT_PATH = exports.defaultConfig = exports.FileWriter = exports.ClientGenerator = exports.TypeGenerator = exports.SwaggerParser = exports.generateFromUrl = exports.generateFromFile = exports.SwaggerGenerator = void 0;
22
+ // Core generator exports
23
+ var SwaggerGenerator_1 = require("./utils/swagger/SwaggerGenerator");
24
+ Object.defineProperty(exports, "SwaggerGenerator", { enumerable: true, get: function () { return SwaggerGenerator_1.SwaggerGenerator; } });
25
+ Object.defineProperty(exports, "generateFromFile", { enumerable: true, get: function () { return SwaggerGenerator_1.generateFromFile; } });
26
+ Object.defineProperty(exports, "generateFromUrl", { enumerable: true, get: function () { return SwaggerGenerator_1.generateFromUrl; } });
27
+ var SwaggerParser_1 = require("./utils/swagger/SwaggerParser");
28
+ Object.defineProperty(exports, "SwaggerParser", { enumerable: true, get: function () { return SwaggerParser_1.SwaggerParser; } });
29
+ var TypeGenerator_1 = require("./utils/swagger/TypeGenerator");
30
+ Object.defineProperty(exports, "TypeGenerator", { enumerable: true, get: function () { return TypeGenerator_1.TypeGenerator; } });
31
+ var ClientGenerator_1 = require("./utils/swagger/ClientGenerator");
32
+ Object.defineProperty(exports, "ClientGenerator", { enumerable: true, get: function () { return ClientGenerator_1.ClientGenerator; } });
33
+ var FileWriter_1 = require("./utils/swagger/FileWriter");
34
+ Object.defineProperty(exports, "FileWriter", { enumerable: true, get: function () { return FileWriter_1.FileWriter; } });
35
+ // Generator types
36
+ __exportStar(require("./utils/swagger/types"), exports);
37
+ // Utility exports
38
+ __exportStar(require("./utils/swagger/utils/naming"), exports);
39
+ __exportStar(require("./utils/swagger/utils/pathUtils"), exports);
40
+ // Config types
41
+ var types_1 = require("./config/types");
42
+ Object.defineProperty(exports, "defaultConfig", { enumerable: true, get: function () { return types_1.defaultConfig; } });
43
+ Object.defineProperty(exports, "DEFAULT_BASE_CLIENT_PATH", { enumerable: true, get: function () { return types_1.DEFAULT_BASE_CLIENT_PATH; } });
44
+ // Runner
45
+ var run_generator_1 = require("./utils/swagger/run-generator");
46
+ Object.defineProperty(exports, "runGenerator", { enumerable: true, get: function () { return run_generator_1.runGenerator; } });
47
+ // Base client for users to extend
48
+ var BaseAPIClient_1 = require("./clients/BaseAPIClient");
49
+ Object.defineProperty(exports, "BaseAPIClient", { enumerable: true, get: function () { return BaseAPIClient_1.BaseAPIClient; } });
50
+ // Programmatic API
51
+ var api_1 = require("./api");
52
+ Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return api_1.generate; } });
53
+ Object.defineProperty(exports, "generateFromConfig", { enumerable: true, get: function () { return api_1.generateFromConfig; } });
54
+ Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return api_1.loadConfig; } });
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,yBAAyB;AACzB,qEAM0C;AALzC,oHAAA,gBAAgB,OAAA;AAChB,oHAAA,gBAAgB,OAAA;AAChB,mHAAA,eAAe,OAAA;AAIhB,+DAA8D;AAArD,8GAAA,aAAa,OAAA;AACtB,+DAA8D;AAArD,8GAAA,aAAa,OAAA;AACtB,mEAAkE;AAAzD,kHAAA,eAAe,OAAA;AACxB,yDAAwD;AAA/C,wGAAA,UAAU,OAAA;AAEnB,kBAAkB;AAClB,wDAAsC;AAEtC,kBAAkB;AAClB,+DAA6C;AAC7C,kEAAgD;AAEhD,eAAe;AACf,wCAKwB;AAFvB,sGAAA,aAAa,OAAA;AACb,iHAAA,wBAAwB,OAAA;AAGzB,SAAS;AACT,+DAAyE;AAAhE,6GAAA,YAAY,OAAA;AAErB,kCAAkC;AAClC,yDAA2F;AAAlF,8GAAA,aAAa,OAAA;AAEtB,mBAAmB;AACnB,6BAAiE;AAAxD,+FAAA,QAAQ,OAAA;AAAE,yGAAA,kBAAkB,OAAA;AAAE,iGAAA,UAAU,OAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Utility to copy BaseAPIClient to user's project
3
+ */
4
+ /**
5
+ * Copy BaseAPIClient to the specified output directory
6
+ */
7
+ export declare function copyBaseClient(outputDir: string): Promise<string>;
8
+ //# sourceMappingURL=copyBaseClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyBaseClient.d.ts","sourceRoot":"","sources":["../../src/utils/copyBaseClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+SH;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvE"}