@goast/typescript 0.2.19 → 0.3.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 (150) hide show
  1. package/README.md +41 -11
  2. package/assets/client/angular/angular-service.utils.ts +80 -80
  3. package/assets/client/angular/request-builder.ts +372 -372
  4. package/assets/client/fetch/fetch-client.utils.ts +52 -52
  5. package/assets/stubs/easy-network-stub/easy-network-stub.utils.ts +258 -258
  6. package/cjs/index.js +1 -0
  7. package/cjs/lib/ast/nodes/argument.js +1 -1
  8. package/cjs/lib/ast/nodes/array-type.js +1 -1
  9. package/cjs/lib/ast/nodes/call.js +1 -1
  10. package/cjs/lib/ast/nodes/class.js +1 -1
  11. package/cjs/lib/ast/nodes/constructor-parameter.js +1 -1
  12. package/cjs/lib/ast/nodes/decorator.js +1 -1
  13. package/cjs/lib/ast/nodes/enum-value.js +1 -1
  14. package/cjs/lib/ast/nodes/enum.js +1 -1
  15. package/cjs/lib/ast/nodes/export.js +1 -1
  16. package/cjs/lib/ast/nodes/function.js +1 -1
  17. package/cjs/lib/ast/nodes/generic-parameter.js +1 -1
  18. package/cjs/lib/ast/nodes/indexer.js +1 -1
  19. package/cjs/lib/ast/nodes/interface.js +1 -1
  20. package/cjs/lib/ast/nodes/intersection-type.js +1 -1
  21. package/cjs/lib/ast/nodes/lookup-type.js +1 -1
  22. package/cjs/lib/ast/nodes/method.js +1 -1
  23. package/cjs/lib/ast/nodes/parameter.js +1 -1
  24. package/cjs/lib/ast/nodes/property.js +2 -2
  25. package/cjs/lib/ast/nodes/reference.js +1 -1
  26. package/cjs/lib/ast/nodes/string.js +1 -1
  27. package/cjs/lib/ast/nodes/tuple.js +1 -1
  28. package/cjs/lib/ast/nodes/type-alias.js +1 -1
  29. package/cjs/lib/ast/nodes/typeof.js +1 -1
  30. package/cjs/lib/ast/nodes/union-type.js +1 -1
  31. package/cjs/lib/ast/nodes/variable.js +1 -1
  32. package/cjs/lib/ast/utils/get-type-script-builder-options.js +2 -3
  33. package/cjs/lib/ast/utils/to-ts-node.js +1 -2
  34. package/cjs/lib/ast/utils/write-ts-generic-parameters.js +1 -2
  35. package/cjs/lib/ast/utils/write-ts-members.js +1 -2
  36. package/cjs/lib/ast/utils/write-ts-nodes.js +2 -3
  37. package/cjs/lib/ast/utils/write-ts-parameters.js +1 -2
  38. package/cjs/lib/file-builder.js +2 -2
  39. package/cjs/lib/generators/models/model-generator.js +13 -3
  40. package/cjs/lib/generators/models/models-generator.js +18 -7
  41. package/cjs/lib/generators/models/models.js +13 -2
  42. package/cjs/lib/generators/services/angular-services/angular-service-generator.js +17 -15
  43. package/cjs/lib/generators/services/angular-services/angular-services-generator.js +17 -12
  44. package/cjs/lib/generators/services/angular-services/models.js +19 -3
  45. package/cjs/lib/generators/services/angular-services/refs.js +2 -3
  46. package/cjs/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +13 -12
  47. package/cjs/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +16 -11
  48. package/cjs/lib/generators/services/easy-network-stub/models.js +10 -2
  49. package/cjs/lib/generators/services/easy-network-stub/refs.js +2 -3
  50. package/cjs/lib/generators/services/fetch-clients/fetch-client-generator.js +16 -13
  51. package/cjs/lib/generators/services/fetch-clients/fetch-clients-generator.js +48 -13
  52. package/cjs/lib/generators/services/fetch-clients/models.js +13 -1
  53. package/cjs/lib/generators/services/fetch-clients/refs.js +2 -3
  54. package/cjs/lib/import-collection.js +1 -1
  55. package/cjs/lib/utils.js +5 -6
  56. package/esm/index.js +1 -0
  57. package/esm/lib/ast/nodes/argument.js +1 -1
  58. package/esm/lib/ast/nodes/array-type.js +1 -1
  59. package/esm/lib/ast/nodes/call.js +1 -1
  60. package/esm/lib/ast/nodes/class.js +1 -1
  61. package/esm/lib/ast/nodes/constructor-parameter.js +1 -1
  62. package/esm/lib/ast/nodes/decorator.js +1 -1
  63. package/esm/lib/ast/nodes/enum-value.js +1 -1
  64. package/esm/lib/ast/nodes/enum.js +1 -1
  65. package/esm/lib/ast/nodes/export.js +1 -1
  66. package/esm/lib/ast/nodes/function.js +1 -1
  67. package/esm/lib/ast/nodes/generic-parameter.js +1 -1
  68. package/esm/lib/ast/nodes/indexer.js +1 -1
  69. package/esm/lib/ast/nodes/interface.js +1 -1
  70. package/esm/lib/ast/nodes/intersection-type.js +1 -1
  71. package/esm/lib/ast/nodes/lookup-type.js +1 -1
  72. package/esm/lib/ast/nodes/method.js +1 -1
  73. package/esm/lib/ast/nodes/parameter.js +1 -1
  74. package/esm/lib/ast/nodes/property.js +2 -2
  75. package/esm/lib/ast/nodes/reference.js +1 -1
  76. package/esm/lib/ast/nodes/string.js +1 -1
  77. package/esm/lib/ast/nodes/tuple.js +1 -1
  78. package/esm/lib/ast/nodes/type-alias.js +1 -1
  79. package/esm/lib/ast/nodes/typeof.js +1 -1
  80. package/esm/lib/ast/nodes/union-type.js +1 -1
  81. package/esm/lib/ast/nodes/variable.js +1 -1
  82. package/esm/lib/ast/utils/get-type-script-builder-options.js +1 -1
  83. package/esm/lib/generators/models/model-generator.js +13 -3
  84. package/esm/lib/generators/models/models-generator.js +18 -7
  85. package/esm/lib/generators/models/models.js +13 -2
  86. package/esm/lib/generators/services/angular-services/angular-service-generator.js +17 -15
  87. package/esm/lib/generators/services/angular-services/angular-services-generator.js +17 -12
  88. package/esm/lib/generators/services/angular-services/models.js +19 -3
  89. package/esm/lib/generators/services/angular-services/refs.js +1 -1
  90. package/esm/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +13 -12
  91. package/esm/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +16 -11
  92. package/esm/lib/generators/services/easy-network-stub/models.js +10 -2
  93. package/esm/lib/generators/services/easy-network-stub/refs.js +1 -1
  94. package/esm/lib/generators/services/fetch-clients/fetch-client-generator.js +16 -13
  95. package/esm/lib/generators/services/fetch-clients/fetch-clients-generator.js +46 -11
  96. package/esm/lib/generators/services/fetch-clients/models.js +13 -1
  97. package/esm/lib/generators/services/fetch-clients/refs.js +1 -1
  98. package/esm/lib/import-collection.js +1 -1
  99. package/package.json +8 -3
  100. package/types/index.d.ts +1 -0
  101. package/types/lib/ast/nodes/argument.d.ts +1 -1
  102. package/types/lib/ast/nodes/array-type.d.ts +1 -1
  103. package/types/lib/ast/nodes/arrow-function.d.ts +1 -1
  104. package/types/lib/ast/nodes/call.d.ts +1 -1
  105. package/types/lib/ast/nodes/class.d.ts +1 -1
  106. package/types/lib/ast/nodes/constructor-parameter.d.ts +1 -1
  107. package/types/lib/ast/nodes/constructor.d.ts +1 -1
  108. package/types/lib/ast/nodes/decorator.d.ts +2 -2
  109. package/types/lib/ast/nodes/doc.d.ts +1 -1
  110. package/types/lib/ast/nodes/enum-value.d.ts +2 -2
  111. package/types/lib/ast/nodes/enum.d.ts +1 -1
  112. package/types/lib/ast/nodes/export.d.ts +2 -2
  113. package/types/lib/ast/nodes/function-type.d.ts +1 -1
  114. package/types/lib/ast/nodes/function.d.ts +1 -1
  115. package/types/lib/ast/nodes/generic-parameter.d.ts +1 -1
  116. package/types/lib/ast/nodes/indexer.d.ts +1 -1
  117. package/types/lib/ast/nodes/interface.d.ts +1 -1
  118. package/types/lib/ast/nodes/intersection-type.d.ts +1 -1
  119. package/types/lib/ast/nodes/lookup-type.d.ts +1 -1
  120. package/types/lib/ast/nodes/method.d.ts +2 -2
  121. package/types/lib/ast/nodes/object-type.d.ts +1 -1
  122. package/types/lib/ast/nodes/object.d.ts +1 -1
  123. package/types/lib/ast/nodes/parameter.d.ts +1 -1
  124. package/types/lib/ast/nodes/property-accessor.d.ts +2 -2
  125. package/types/lib/ast/nodes/property.d.ts +15 -15
  126. package/types/lib/ast/nodes/reference.d.ts +4 -4
  127. package/types/lib/ast/nodes/string.d.ts +1 -1
  128. package/types/lib/ast/nodes/tuple.d.ts +1 -1
  129. package/types/lib/ast/nodes/type-alias.d.ts +1 -1
  130. package/types/lib/ast/nodes/typeof.d.ts +2 -2
  131. package/types/lib/ast/nodes/union-type.d.ts +1 -1
  132. package/types/lib/ast/nodes/variable.d.ts +1 -1
  133. package/types/lib/ast/references/angular.d.ts +8 -8
  134. package/types/lib/ast/references/easy-network-stub.d.ts +6 -6
  135. package/types/lib/ast/references/rxjs.d.ts +5 -5
  136. package/types/lib/ast/references/typescript.d.ts +46 -46
  137. package/types/lib/common-results.d.ts +1 -0
  138. package/types/lib/config.d.ts +53 -9
  139. package/types/lib/generators/models/model-generator.d.ts +1 -1
  140. package/types/lib/generators/models/models.d.ts +43 -8
  141. package/types/lib/generators/services/angular-services/angular-services-generator.d.ts +1 -1
  142. package/types/lib/generators/services/angular-services/models.d.ts +61 -20
  143. package/types/lib/generators/services/angular-services/refs.d.ts +9 -9
  144. package/types/lib/generators/services/easy-network-stub/easy-network-stubs-generator.d.ts +1 -1
  145. package/types/lib/generators/services/easy-network-stub/models.d.ts +35 -13
  146. package/types/lib/generators/services/easy-network-stub/refs.d.ts +14 -14
  147. package/types/lib/generators/services/fetch-clients/fetch-clients-generator.d.ts +4 -1
  148. package/types/lib/generators/services/fetch-clients/models.d.ts +63 -18
  149. package/types/lib/generators/services/fetch-clients/refs.d.ts +4 -4
  150. package/types/lib/utils.d.ts +2 -1
package/README.md CHANGED
@@ -1,11 +1,41 @@
1
- # typescript
2
-
3
- This library was generated with [Nx](https://nx.dev).
4
-
5
- ## Building
6
-
7
- Run `nx build typescript` to build the library.
8
-
9
- ## Running unit tests
10
-
11
- Run `nx test typescript` to execute the unit tests via [Jest](https://jestjs.io).
1
+ # gOAst (@goast/typescript)
2
+
3
+ [![@goast/typescript NPM Version](https://img.shields.io/npm/v/%40goast%2Ftypescript?logo=npm&label=%40goast%2Ftypescript)](https://www.npmjs.com/package/@goast/typescript)
4
+
5
+ **gOAst** stands for **g**enerative **O**pen **A**PI **s**pecification **t**ransformer, a tool designed to transform OpenAPI specifications into various forms with flexibility and extensibility at its core.
6
+
7
+ For more Information, please visit the [gOAst GitHub Repository](https://github.com/MaSch0212/goast/blob/main).
8
+
9
+ ## Purpose 👍
10
+
11
+ The `@goast/typescript` package provides generators for [TypeScript](https://www.typescriptlang.org/) code generation from OpenAPI specifications.
12
+
13
+ ## Usage Example 🚀
14
+
15
+ ```typescript
16
+ import { OpenApiGenerator } from '@goast/core';
17
+ import { TypeScriptModelsGenerator, TypeScriptFetchClientsGenerator } from '@goast/typescript';
18
+
19
+ async function main() {
20
+ await new OpenApiGenerator({ outputDir: '.api' })
21
+ .useType(TypeScriptModelsGenerator)
22
+ .useType(TypeScriptFetchClientsGenerator)
23
+ .parseAndGenerateFromDir('.openapi');
24
+ }
25
+
26
+ main();
27
+ ```
28
+
29
+ ## Available Generators 📚
30
+
31
+ - [`TypeScriptModelsGenerator`](https://github.com/MaSch0212/goast/wiki/TypeScript%20Models%20Generator): Generates TypeScript interfaces or types from schemas in the OpenAPI specification(s).
32
+ - [`TypeScriptFetchClientsGenerator`](https://github.com/MaSch0212/goast/wiki/TypeScript%20Fetch%20Clients%20Generator): Generates Fetch clients for TypeScript from paths in the OpenAPI specification(s).
33
+ - Depends on the output of the `TypeScriptModelsGenerator` generator.
34
+ - [`TypeScriptAngularServicesGenerator`](https://github.com/MaSch0212/goast/wiki/TypeScript%20Angular%20Services%20Generator): Generates [Angular](https://angular.dev/) services from paths in the OpenAPI specification(s).
35
+ - Depends on the output of the `TypeScriptModelsGenerator` generator.
36
+ - [`TypeScriptEasyNetworkStubsGenerator`](https://github.com/MaSch0212/goast/wiki/TypeScript%20Easy%20Network%20Stubs%20Generator): Generates [easy-network-stub](https://github.com/LoaderB0T/easy-network-stub) classes from paths in the OpenAPI specification(s).
37
+ - Depends on the output of the `TypeScriptModelsGenerator` generator.
38
+
39
+ ## API Documentation 📖
40
+
41
+ The API documentation can be found [here](https://github.com/MaSch0212/goast/wiki/TypeScript%20Generators).
@@ -1,80 +1,80 @@
1
- import { HttpErrorResponse, HttpEvent, HttpResponse } from '@angular/common/http';
2
- import { Observable, Subscription, filter, take, map, catchError, EMPTY } from 'rxjs';
3
-
4
- export type AbortablePromise<T> = Omit<Promise<T>, 'then' | 'catch' | 'finally'> & {
5
- abort(): void;
6
- then<TResult1 = T, TResult2 = never>(
7
- onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
8
- onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
9
- ): AbortablePromise<TResult1 | TResult2>;
10
- catch<TResult = never>(
11
- onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
12
- ): AbortablePromise<T | TResult>;
13
- finally(onfinally?: (() => void) | undefined | null): AbortablePromise<T>;
14
- };
15
-
16
- export function waitForResponse<T extends HttpResponse<any> | HttpErrorResponse>(
17
- httpEvents: Observable<HttpEvent<any>>,
18
- options: { errorResponseTypes: Record<number, 'text' | 'json'> },
19
- ): AbortablePromise<T> {
20
- return firstValueFromAbortable<T>(
21
- httpEvents.pipe(
22
- filter((event) => event instanceof HttpResponse),
23
- map((response) => response as T),
24
- ),
25
- ).catch((error) => {
26
- if (error instanceof HttpErrorResponse) {
27
- if (options.errorResponseTypes[error.status] === 'json' && typeof error.error === 'string') {
28
- return new HttpErrorResponse({
29
- error: JSON.parse(error.error),
30
- headers: error.headers,
31
- status: error.status,
32
- statusText: error.statusText,
33
- url: error.url ?? undefined,
34
- }) as T;
35
- }
36
- return error as T;
37
- }
38
- throw error;
39
- });
40
- }
41
-
42
- function firstValueFromAbortable<T>(observable: Observable<T>): AbortablePromise<T> {
43
- let subscription: Subscription | undefined = undefined;
44
- let _reject: ((reason?: any) => void) | undefined = undefined;
45
- const abortFn = () => {
46
- if (!subscription) {
47
- throw new Error('Not subscribed yet.');
48
- }
49
- subscription.unsubscribe();
50
- _reject?.(new DOMException('The request has been aborted.', 'AbortError'));
51
- };
52
-
53
- return createAbortablePromise(
54
- new Promise<T>((resolve, reject) => {
55
- _reject = reject;
56
- subscription = observable
57
- .pipe(
58
- take(1),
59
- catchError((e: unknown) => {
60
- reject(e);
61
- return EMPTY;
62
- }),
63
- )
64
- .subscribe((x: T) => resolve(x));
65
- }),
66
- abortFn,
67
- );
68
- }
69
-
70
- function createAbortablePromise<T>(promise: Promise<T>, abortFn: () => void) {
71
- const thenFn = promise.then.bind(promise);
72
- const catchFn = promise.catch.bind(promise);
73
- const finallyFn = promise.finally?.bind(promise);
74
- return Object.assign(promise, {
75
- then: (...args: any[]) => createAbortablePromise(thenFn(...args), abortFn),
76
- catch: (...args: any[]) => createAbortablePromise(catchFn(...args), abortFn),
77
- finally: finallyFn ? (...args: any[]) => createAbortablePromise(finallyFn(...args), abortFn) : undefined,
78
- abort: abortFn,
79
- });
80
- }
1
+ import { HttpErrorResponse, HttpEvent, HttpResponse } from '@angular/common/http';
2
+ import { Observable, Subscription, filter, take, map, catchError, EMPTY } from 'rxjs';
3
+
4
+ export type AbortablePromise<T> = Omit<Promise<T>, 'then' | 'catch' | 'finally'> & {
5
+ abort(): void;
6
+ then<TResult1 = T, TResult2 = never>(
7
+ onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
8
+ onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
9
+ ): AbortablePromise<TResult1 | TResult2>;
10
+ catch<TResult = never>(
11
+ onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
12
+ ): AbortablePromise<T | TResult>;
13
+ finally(onfinally?: (() => void) | undefined | null): AbortablePromise<T>;
14
+ };
15
+
16
+ export function waitForResponse<T extends HttpResponse<any> | HttpErrorResponse>(
17
+ httpEvents: Observable<HttpEvent<any>>,
18
+ options: { errorResponseTypes: Record<number, 'text' | 'json'> },
19
+ ): AbortablePromise<T> {
20
+ return firstValueFromAbortable<T>(
21
+ httpEvents.pipe(
22
+ filter((event) => event instanceof HttpResponse),
23
+ map((response) => response as T),
24
+ ),
25
+ ).catch((error) => {
26
+ if (error instanceof HttpErrorResponse) {
27
+ if (options.errorResponseTypes[error.status] === 'json' && typeof error.error === 'string') {
28
+ return new HttpErrorResponse({
29
+ error: JSON.parse(error.error),
30
+ headers: error.headers,
31
+ status: error.status,
32
+ statusText: error.statusText,
33
+ url: error.url ?? undefined,
34
+ }) as T;
35
+ }
36
+ return error as T;
37
+ }
38
+ throw error;
39
+ });
40
+ }
41
+
42
+ function firstValueFromAbortable<T>(observable: Observable<T>): AbortablePromise<T> {
43
+ let subscription: Subscription | undefined = undefined;
44
+ let _reject: ((reason?: any) => void) | undefined = undefined;
45
+ const abortFn = () => {
46
+ if (!subscription) {
47
+ throw new Error('Not subscribed yet.');
48
+ }
49
+ subscription.unsubscribe();
50
+ _reject?.(new DOMException('The request has been aborted.', 'AbortError'));
51
+ };
52
+
53
+ return createAbortablePromise(
54
+ new Promise<T>((resolve, reject) => {
55
+ _reject = reject;
56
+ subscription = observable
57
+ .pipe(
58
+ take(1),
59
+ catchError((e: unknown) => {
60
+ reject(e);
61
+ return EMPTY;
62
+ }),
63
+ )
64
+ .subscribe((x: T) => resolve(x));
65
+ }),
66
+ abortFn,
67
+ );
68
+ }
69
+
70
+ function createAbortablePromise<T>(promise: Promise<T>, abortFn: () => void) {
71
+ const thenFn = promise.then.bind(promise);
72
+ const catchFn = promise.catch.bind(promise);
73
+ const finallyFn = promise.finally?.bind(promise);
74
+ return Object.assign(promise, {
75
+ then: (...args: any[]) => createAbortablePromise(thenFn(...args), abortFn),
76
+ catch: (...args: any[]) => createAbortablePromise(catchFn(...args), abortFn),
77
+ finally: finallyFn ? (...args: any[]) => createAbortablePromise(finallyFn(...args), abortFn) : undefined,
78
+ abort: abortFn,
79
+ });
80
+ }