@goast/typescript 0.0.5 → 0.2.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 (217) hide show
  1. package/assets/{service → client}/angular/request-builder.ts +6 -2
  2. package/assets/client/fetch/{url-builder.ts → fetch-client.utils.ts} +15 -0
  3. package/assets/stubs/easy-network-stub/easy-network-stub.utils.ts +235 -0
  4. package/cjs/lib/ast/_index.js +108 -0
  5. package/cjs/lib/ast/common.js +2 -0
  6. package/cjs/lib/ast/index.js +5 -0
  7. package/cjs/lib/ast/node.js +10 -0
  8. package/cjs/lib/ast/nodes/argument.js +20 -0
  9. package/cjs/lib/ast/nodes/array-type.js +27 -0
  10. package/cjs/lib/ast/nodes/arrow-function.js +51 -0
  11. package/cjs/lib/ast/nodes/call.js +26 -0
  12. package/cjs/lib/ast/nodes/class.js +70 -0
  13. package/cjs/lib/ast/nodes/constructor-parameter.js +46 -0
  14. package/cjs/lib/ast/nodes/constructor.js +42 -0
  15. package/cjs/lib/ast/nodes/decorator.js +38 -0
  16. package/cjs/lib/ast/nodes/doc-tag.js +64 -0
  17. package/cjs/lib/ast/nodes/doc.js +57 -0
  18. package/cjs/lib/ast/nodes/enum-value.js +35 -0
  19. package/cjs/lib/ast/nodes/enum.js +46 -0
  20. package/cjs/lib/ast/nodes/export.js +27 -0
  21. package/cjs/lib/ast/nodes/function-type.js +35 -0
  22. package/cjs/lib/ast/nodes/function.js +60 -0
  23. package/cjs/lib/ast/nodes/generic-parameter.js +40 -0
  24. package/cjs/lib/ast/nodes/indexer.js +32 -0
  25. package/cjs/lib/ast/nodes/interface.js +60 -0
  26. package/cjs/lib/ast/nodes/intersection-type.js +44 -0
  27. package/cjs/lib/ast/nodes/lookup-type.js +30 -0
  28. package/cjs/lib/ast/nodes/method.js +82 -0
  29. package/cjs/lib/ast/nodes/object-type.js +24 -0
  30. package/cjs/lib/ast/nodes/object.js +24 -0
  31. package/cjs/lib/ast/nodes/parameter.js +45 -0
  32. package/cjs/lib/ast/nodes/property-accessor.js +128 -0
  33. package/cjs/lib/ast/nodes/property.js +119 -0
  34. package/cjs/lib/ast/nodes/reference.js +63 -0
  35. package/cjs/lib/ast/nodes/string.js +30 -0
  36. package/cjs/lib/ast/nodes/tuple.js +28 -0
  37. package/cjs/lib/ast/nodes/type-alias.js +36 -0
  38. package/cjs/lib/ast/nodes/typeof.js +23 -0
  39. package/cjs/lib/ast/nodes/types.js +2 -0
  40. package/cjs/lib/ast/nodes/union-type.js +44 -0
  41. package/cjs/lib/ast/nodes/variable.js +38 -0
  42. package/cjs/lib/ast/references/angular.js +12 -0
  43. package/cjs/lib/ast/references/easy-network-stub.js +8 -0
  44. package/cjs/lib/ast/references/index.js +7 -0
  45. package/cjs/lib/ast/references/rxjs.js +9 -0
  46. package/cjs/lib/ast/references/typescript.js +33 -0
  47. package/cjs/lib/ast/utils/get-type-script-builder-options.js +19 -0
  48. package/cjs/lib/ast/utils/to-ts-node.js +24 -0
  49. package/cjs/lib/ast/utils/write-ts-generic-parameters.js +11 -0
  50. package/cjs/lib/ast/utils/write-ts-members.js +18 -0
  51. package/cjs/lib/ast/utils/write-ts-nodes.js +24 -0
  52. package/cjs/lib/ast/utils/write-ts-parameters.js +14 -0
  53. package/cjs/lib/config.js +5 -3
  54. package/cjs/lib/file-builder.js +45 -202
  55. package/cjs/lib/generators/file-generator.js +2 -18
  56. package/cjs/lib/generators/index.js +1 -0
  57. package/cjs/lib/generators/models/model-generator.js +144 -205
  58. package/cjs/lib/generators/models/models-generator.js +12 -26
  59. package/cjs/lib/generators/models/models.js +1 -1
  60. package/cjs/lib/generators/services/angular-services/angular-service-generator.js +183 -306
  61. package/cjs/lib/generators/services/angular-services/angular-services-generator.js +168 -76
  62. package/cjs/lib/generators/services/angular-services/models.js +10 -1
  63. package/cjs/lib/generators/services/angular-services/refs.js +24 -0
  64. package/cjs/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +169 -0
  65. package/cjs/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +73 -0
  66. package/cjs/lib/generators/services/easy-network-stub/index.js +6 -0
  67. package/cjs/lib/generators/services/easy-network-stub/models.js +10 -0
  68. package/cjs/lib/generators/services/easy-network-stub/refs.js +21 -0
  69. package/cjs/lib/generators/services/fetch-clients/fetch-client-generator.js +121 -181
  70. package/cjs/lib/generators/services/fetch-clients/fetch-clients-generator.js +5 -1
  71. package/cjs/lib/generators/services/fetch-clients/refs.js +17 -0
  72. package/cjs/lib/import-collection.js +18 -19
  73. package/esm/lib/ast/_index.js +37 -0
  74. package/esm/lib/ast/common.js +1 -0
  75. package/esm/lib/ast/index.js +2 -0
  76. package/esm/lib/ast/node.js +6 -0
  77. package/esm/lib/ast/nodes/argument.js +16 -0
  78. package/esm/lib/ast/nodes/array-type.js +23 -0
  79. package/esm/lib/ast/nodes/arrow-function.js +47 -0
  80. package/esm/lib/ast/nodes/call.js +22 -0
  81. package/esm/lib/ast/nodes/class.js +66 -0
  82. package/esm/lib/ast/nodes/constructor-parameter.js +42 -0
  83. package/esm/lib/ast/nodes/constructor.js +38 -0
  84. package/esm/lib/ast/nodes/decorator.js +34 -0
  85. package/esm/lib/ast/nodes/doc-tag.js +60 -0
  86. package/esm/lib/ast/nodes/doc.js +53 -0
  87. package/esm/lib/ast/nodes/enum-value.js +31 -0
  88. package/esm/lib/ast/nodes/enum.js +42 -0
  89. package/esm/lib/ast/nodes/export.js +22 -0
  90. package/esm/lib/ast/nodes/function-type.js +31 -0
  91. package/esm/lib/ast/nodes/function.js +56 -0
  92. package/esm/lib/ast/nodes/generic-parameter.js +36 -0
  93. package/esm/lib/ast/nodes/indexer.js +28 -0
  94. package/esm/lib/ast/nodes/interface.js +56 -0
  95. package/esm/lib/ast/nodes/intersection-type.js +40 -0
  96. package/esm/lib/ast/nodes/lookup-type.js +26 -0
  97. package/esm/lib/ast/nodes/method.js +77 -0
  98. package/esm/lib/ast/nodes/object-type.js +20 -0
  99. package/esm/lib/ast/nodes/object.js +20 -0
  100. package/esm/lib/ast/nodes/parameter.js +41 -0
  101. package/esm/lib/ast/nodes/property-accessor.js +121 -0
  102. package/esm/lib/ast/nodes/property.js +113 -0
  103. package/esm/lib/ast/nodes/reference.js +59 -0
  104. package/esm/lib/ast/nodes/string.js +26 -0
  105. package/esm/lib/ast/nodes/tuple.js +24 -0
  106. package/esm/lib/ast/nodes/type-alias.js +32 -0
  107. package/esm/lib/ast/nodes/typeof.js +18 -0
  108. package/esm/lib/ast/nodes/types.js +1 -0
  109. package/esm/lib/ast/nodes/union-type.js +40 -0
  110. package/esm/lib/ast/nodes/variable.js +34 -0
  111. package/esm/lib/ast/references/angular.js +9 -0
  112. package/esm/lib/ast/references/easy-network-stub.js +5 -0
  113. package/esm/lib/ast/references/index.js +5 -0
  114. package/esm/lib/ast/references/rxjs.js +6 -0
  115. package/esm/lib/ast/references/typescript.js +30 -0
  116. package/esm/lib/ast/utils/get-type-script-builder-options.js +15 -0
  117. package/esm/lib/ast/utils/to-ts-node.js +20 -0
  118. package/esm/lib/ast/utils/write-ts-generic-parameters.js +7 -0
  119. package/esm/lib/ast/utils/write-ts-members.js +14 -0
  120. package/esm/lib/ast/utils/write-ts-nodes.js +19 -0
  121. package/esm/lib/ast/utils/write-ts-parameters.js +10 -0
  122. package/esm/lib/config.js +5 -3
  123. package/esm/lib/file-builder.js +44 -202
  124. package/esm/lib/generators/file-generator.js +2 -18
  125. package/esm/lib/generators/index.js +1 -0
  126. package/esm/lib/generators/models/model-generator.js +149 -210
  127. package/esm/lib/generators/models/models-generator.js +15 -29
  128. package/esm/lib/generators/models/models.js +1 -1
  129. package/esm/lib/generators/services/angular-services/angular-service-generator.js +186 -309
  130. package/esm/lib/generators/services/angular-services/angular-services-generator.js +170 -78
  131. package/esm/lib/generators/services/angular-services/models.js +10 -1
  132. package/esm/lib/generators/services/angular-services/refs.js +20 -0
  133. package/esm/lib/generators/services/easy-network-stub/easy-network-stub-generator.js +165 -0
  134. package/esm/lib/generators/services/easy-network-stub/easy-network-stubs-generator.js +69 -0
  135. package/esm/lib/generators/services/easy-network-stub/index.js +3 -0
  136. package/esm/lib/generators/services/easy-network-stub/models.js +7 -0
  137. package/esm/lib/generators/services/easy-network-stub/refs.js +17 -0
  138. package/esm/lib/generators/services/fetch-clients/fetch-client-generator.js +123 -183
  139. package/esm/lib/generators/services/fetch-clients/fetch-clients-generator.js +5 -1
  140. package/esm/lib/generators/services/fetch-clients/refs.js +13 -0
  141. package/esm/lib/import-collection.js +17 -18
  142. package/package.json +6 -6
  143. package/types/lib/ast/_index.d.ts +38 -0
  144. package/types/lib/ast/common.d.ts +1 -0
  145. package/types/lib/ast/index.d.ts +1 -0
  146. package/types/lib/ast/node.d.ts +4 -0
  147. package/types/lib/ast/nodes/argument.d.ts +17 -0
  148. package/types/lib/ast/nodes/array-type.d.ts +19 -0
  149. package/types/lib/ast/nodes/arrow-function.d.ts +29 -0
  150. package/types/lib/ast/nodes/call.d.ts +20 -0
  151. package/types/lib/ast/nodes/class.d.ts +41 -0
  152. package/types/lib/ast/nodes/constructor-parameter.d.ts +19 -0
  153. package/types/lib/ast/nodes/constructor.d.ts +25 -0
  154. package/types/lib/ast/nodes/decorator.d.ts +22 -0
  155. package/types/lib/ast/nodes/doc-tag.d.ts +73 -0
  156. package/types/lib/ast/nodes/doc.d.ts +28 -0
  157. package/types/lib/ast/nodes/enum-value.d.ts +21 -0
  158. package/types/lib/ast/nodes/enum.d.ts +26 -0
  159. package/types/lib/ast/nodes/export.d.ts +19 -0
  160. package/types/lib/ast/nodes/function-type.d.ts +23 -0
  161. package/types/lib/ast/nodes/function.d.ts +35 -0
  162. package/types/lib/ast/nodes/generic-parameter.d.ts +25 -0
  163. package/types/lib/ast/nodes/indexer.d.ts +23 -0
  164. package/types/lib/ast/nodes/interface.d.ts +36 -0
  165. package/types/lib/ast/nodes/intersection-type.d.ts +17 -0
  166. package/types/lib/ast/nodes/lookup-type.d.ts +19 -0
  167. package/types/lib/ast/nodes/method.d.ts +45 -0
  168. package/types/lib/ast/nodes/object-type.d.ts +20 -0
  169. package/types/lib/ast/nodes/object.d.ts +19 -0
  170. package/types/lib/ast/nodes/parameter.d.ts +28 -0
  171. package/types/lib/ast/nodes/property-accessor.d.ts +53 -0
  172. package/types/lib/ast/nodes/property.d.ts +84 -0
  173. package/types/lib/ast/nodes/reference.d.ts +46 -0
  174. package/types/lib/ast/nodes/string.d.ts +18 -0
  175. package/types/lib/ast/nodes/tuple.d.ts +17 -0
  176. package/types/lib/ast/nodes/type-alias.d.ts +27 -0
  177. package/types/lib/ast/nodes/typeof.d.ts +18 -0
  178. package/types/lib/ast/nodes/types.d.ts +18 -0
  179. package/types/lib/ast/nodes/union-type.d.ts +17 -0
  180. package/types/lib/ast/nodes/variable.d.ts +28 -0
  181. package/types/lib/ast/references/angular.d.ts +37 -0
  182. package/types/lib/ast/references/easy-network-stub.d.ts +26 -0
  183. package/types/lib/ast/references/index.d.ts +3 -0
  184. package/types/lib/ast/references/rxjs.d.ts +30 -0
  185. package/types/lib/ast/references/typescript.d.ts +133 -0
  186. package/types/lib/ast/utils/get-type-script-builder-options.d.ts +3 -0
  187. package/types/lib/ast/utils/to-ts-node.d.ts +8 -0
  188. package/types/lib/ast/utils/write-ts-generic-parameters.d.ts +3 -0
  189. package/types/lib/ast/utils/write-ts-members.d.ts +5 -0
  190. package/types/lib/ast/utils/write-ts-nodes.d.ts +6 -0
  191. package/types/lib/ast/utils/write-ts-parameters.d.ts +3 -0
  192. package/types/lib/common-results.d.ts +4 -0
  193. package/types/lib/config.d.ts +5 -2
  194. package/types/lib/file-builder.d.ts +21 -98
  195. package/types/lib/generators/file-generator.d.ts +3 -7
  196. package/types/lib/generators/index.d.ts +1 -0
  197. package/types/lib/generators/models/model-generator.d.ts +18 -23
  198. package/types/lib/generators/models/models-generator.d.ts +4 -5
  199. package/types/lib/generators/models/models.d.ts +4 -4
  200. package/types/lib/generators/services/angular-services/angular-service-generator.d.ts +15 -35
  201. package/types/lib/generators/services/angular-services/angular-services-generator.d.ts +12 -10
  202. package/types/lib/generators/services/angular-services/models.d.ts +67 -22
  203. package/types/lib/generators/services/angular-services/refs.d.ts +34 -0
  204. package/types/lib/generators/services/easy-network-stub/easy-network-stub-generator.d.ts +32 -0
  205. package/types/lib/generators/services/easy-network-stub/easy-network-stubs-generator.d.ts +25 -0
  206. package/types/lib/generators/services/easy-network-stub/index.d.ts +3 -0
  207. package/types/lib/generators/services/easy-network-stub/models.d.ts +51 -0
  208. package/types/lib/generators/services/easy-network-stub/refs.d.ts +49 -0
  209. package/types/lib/generators/services/fetch-clients/fetch-client-generator.d.ts +10 -22
  210. package/types/lib/generators/services/fetch-clients/models.d.ts +4 -1
  211. package/types/lib/generators/services/fetch-clients/refs.d.ts +23 -0
  212. package/types/lib/import-collection.d.ts +13 -5
  213. package/assets/client/fetch/types.ts +0 -14
  214. package/assets/service/angular/api-configuration.ts +0 -18
  215. package/assets/service/angular/base-service.ts +0 -29
  216. package/assets/service/angular/response-handlers.ts +0 -127
  217. package/assets/service/angular/strict-http-response.ts +0 -8
@@ -0,0 +1,51 @@
1
+ import { ApiSchema, ApiService, DefaultGenerationProviderConfig, Nullable, OpenApiServicesGenerationProviderContext } from '@goast/core';
2
+ import { getReferenceFactories } from './refs';
3
+ import { ts } from '../../../ast';
4
+ import { TypeScriptExportOutput } from '../../../common-results';
5
+ import { TypeScriptGeneratorConfig } from '../../../config';
6
+ import { TypeScriptFileBuilder } from '../../../file-builder';
7
+ import { TypeScriptModelGeneratorOutput } from '../../models';
8
+ export type TypeScriptEasyNetworkStubsGeneratorConfig = TypeScriptGeneratorConfig & {
9
+ /**
10
+ * The default response types for status codes that are not defined in the OpenAPI specification.
11
+ * @example
12
+ * {
13
+ * 400: schemas =>
14
+ * schemas.find(s => s.name === 'BadRequestResponse')
15
+ * ?? throwExp('BadRequestResponse not found'),
16
+ * 404: 'never',
17
+ * 500: ts.refs.any(),
18
+ * }
19
+ * @default
20
+ * {
21
+ * 401: ts.refs.never(),
22
+ * 403: ts.refs.never(),
23
+ * 500: ts.refs.never(),
24
+ * }
25
+ */
26
+ defaultStatusCodeResponseTypes: Record<number, Exclude<ts.Type<TypeScriptFileBuilder>, Function> | ((schemas: readonly ApiSchema[]) => ApiSchema)>;
27
+ stubsDirPath: string;
28
+ stubsIndexFilePath: Nullable<string>;
29
+ utilsDirPath: string;
30
+ };
31
+ export declare const defaultTypeScriptEasyNetworkStubsGeneratorConfig: DefaultGenerationProviderConfig<TypeScriptEasyNetworkStubsGeneratorConfig>;
32
+ export type TypeScriptEasyNetworkStubsGeneratorInput = {
33
+ models: {
34
+ [schemaId: string]: TypeScriptModelGeneratorOutput;
35
+ };
36
+ };
37
+ export type TypeScriptEasyNetworkStubsGeneratorOutput = {
38
+ stubs: {
39
+ [serviceId: string]: TypeScriptEasyNetworkStubGeneratorOutput;
40
+ };
41
+ indexFiles: {
42
+ stubs: Nullable<string>;
43
+ };
44
+ };
45
+ export type TypeScriptEasyNetworkStubGeneratorOutput = TypeScriptExportOutput;
46
+ export type TypeScriptEasyNetworkStubsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptEasyNetworkStubsGeneratorInput, TypeScriptEasyNetworkStubsGeneratorOutput, TypeScriptEasyNetworkStubsGeneratorConfig, TypeScriptEasyNetworkStubGeneratorOutput> & {
47
+ refs: ReturnType<typeof getReferenceFactories>;
48
+ };
49
+ export type TypeScriptEasyNetworkStubGeneratorContext = TypeScriptEasyNetworkStubsGeneratorContext & {
50
+ readonly service: ApiService;
51
+ };
@@ -0,0 +1,49 @@
1
+ import { TypeScriptEasyNetworkStubsGeneratorConfig } from './models';
2
+ import { ts } from '../../../ast';
3
+ export declare function getReferenceFactories(options: TypeScriptEasyNetworkStubsGeneratorConfig): {
4
+ easyNetworkStubWrapperOptions: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
5
+ refName: string;
6
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
7
+ } & {
8
+ moduleNameOrfilePath: string;
9
+ };
10
+ stubRequestItem: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
11
+ refName: string;
12
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
13
+ } & {
14
+ moduleNameOrfilePath: string;
15
+ };
16
+ stubRequestInfo: (<TBuilder_1 extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder_1>, ts.Type<TBuilder_1>]) => ts.Reference<TBuilder_1, never>) & {
17
+ refName: string;
18
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
19
+ infer: <TBuilder_2 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_2, never>;
20
+ } & {
21
+ moduleNameOrfilePath: string;
22
+ };
23
+ strictRouteResponseCallback: (<TBuilder_3 extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder_3>, ts.Type<TBuilder_3>, ts.Type<TBuilder_3>]) => ts.Reference<TBuilder_3, never>) & {
24
+ refName: string;
25
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
26
+ infer: <TBuilder_4 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_4, never>;
27
+ } & {
28
+ moduleNameOrfilePath: string;
29
+ };
30
+ getStubResponder: (<TBuilder_5 extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder_5>]) => ts.Reference<TBuilder_5, never>) & {
31
+ refName: string;
32
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
33
+ infer: <TBuilder_6 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_6, never>;
34
+ } & {
35
+ moduleNameOrfilePath: string;
36
+ };
37
+ easyNetworkStubWrapper: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
38
+ refName: string;
39
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
40
+ } & {
41
+ moduleNameOrfilePath: string;
42
+ };
43
+ easyNetworkStubBase: (<TBuilder extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder, never>) & {
44
+ refName: string;
45
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
46
+ } & {
47
+ moduleNameOrfilePath: string;
48
+ };
49
+ };
@@ -1,5 +1,6 @@
1
- import { ApiEndpoint, ApiSchema } from '@goast/core';
1
+ import { ApiEndpoint, ApiSchema, AppendValueGroup } from '@goast/core';
2
2
  import { TypeScriptFetchClientGeneratorContext, TypeScriptFetchClientGeneratorOutput } from './models';
3
+ import { ts } from '../../../ast';
3
4
  import { TypeScriptFileBuilder } from '../../../file-builder';
4
5
  import { TypeScriptFileGenerator } from '../../file-generator';
5
6
  type Context = TypeScriptFetchClientGeneratorContext;
@@ -10,27 +11,14 @@ export interface TypeScriptFetchClientGenerator<TOutput extends Output = Output>
10
11
  }
11
12
  export declare class DefaultTypeScriptFetchClientGenerator extends TypeScriptFileGenerator<Context, Output> implements TypeScriptFetchClientGenerator {
12
13
  generate(ctx: Context): Output;
13
- protected generateInterface(ctx: Context, builder: Builder): void;
14
- protected generateInterfaceDocumentation(ctx: Context, builder: Builder): void;
15
- protected generateInterfaceSignature(ctx: Context, builder: Builder): void;
16
- protected generateInterfaceContent(ctx: Context, builder: Builder): void;
17
- protected generateInterfaceServiceMethod(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
18
- protected generateDefaultOptions(ctx: Context, builder: Builder): void;
19
- protected generateClass(ctx: Context, builder: Builder): void;
20
- protected generateClassDocumentation(ctx: Context, builder: Builder): void;
21
- protected generateClassSignature(ctx: Context, builder: Builder): void;
22
- protected generateClassContent(ctx: Context, builder: Builder): void;
23
- protected generateClassFields(ctx: Context, builder: Builder): void;
24
- protected generateClassConstructor(ctx: Context, builder: Builder): void;
25
- protected generateClassConstructorContent(ctx: Context, builder: Builder): void;
26
- protected generateClassServiceMethod(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
27
- protected generateServiceMethodDocumentation(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
28
- protected generateServiceMethodSignature(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
29
- protected generateServiceMethodParameters(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
30
- protected generateServiceMethodReturnValue(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
31
- protected generateTypedResponse(ctx: Context, builder: Builder, schema: ApiSchema | undefined): void;
32
- protected generateServiceMethodContent(ctx: Context, builder: Builder, endpoint: ApiEndpoint): void;
33
- protected getTypeName(ctx: Context, builder: Builder, schemaId: string | undefined, fallback?: string): string;
14
+ protected getInterfaceFileContent(ctx: Context): AppendValueGroup<Builder>;
15
+ protected getInterface(ctx: Context): ts.Interface<Builder>;
16
+ protected getInterfaceEndpointMethod(ctx: Context, endpoint: ApiEndpoint): ts.Method<Builder>;
17
+ protected getClassFileContent(ctx: Context): AppendValueGroup<Builder>;
18
+ protected getDefaultOptionsConstant(ctx: Context): ts.Variable<Builder>;
19
+ protected getClass(ctx: Context): ts.Class<Builder>;
20
+ protected getServiceMethod(ctx: Context, endpoint: ApiEndpoint): ts.Method<Builder>;
21
+ protected getSchemaType(ctx: Context, schema: ApiSchema | undefined, fallback?: ts.Type<Builder>): ts.Type<Builder>;
34
22
  protected shouldGenerateInterface(ctx: Context): boolean;
35
23
  protected shouldGenerateClass(ctx: Context): boolean;
36
24
  protected getInterfaceName(ctx: Context): string;
@@ -1,4 +1,5 @@
1
1
  import { ApiService, DefaultGenerationProviderConfig, OpenApiServicesGenerationProviderContext, StringCasing, StringCasingWithOptions, Nullable } from '@goast/core';
2
+ import { getReferenceFactories } from './refs';
2
3
  import { TypeScriptComponentOutput } from '../../../common-results';
3
4
  import { TypeScriptGeneratorConfig } from '../../../config';
4
5
  import { TypeScriptModelsGeneratorOutput } from '../../models/models';
@@ -28,7 +29,9 @@ export type TypeScriptFetchClientGeneratorOutput = {
28
29
  class?: Omit<TypeScriptComponentOutput, 'additionalImports'>;
29
30
  interface?: Omit<TypeScriptComponentOutput, 'additionalImports'>;
30
31
  };
31
- export type TypeScriptFetchClientsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptFetchClientsGeneratorInput, TypeScriptFetchClientsGeneratorOutput, TypeScriptFetchClientsGeneratorConfig, TypeScriptFetchClientGeneratorOutput>;
32
+ export type TypeScriptFetchClientsGeneratorContext = OpenApiServicesGenerationProviderContext<TypeScriptFetchClientsGeneratorInput, TypeScriptFetchClientsGeneratorOutput, TypeScriptFetchClientsGeneratorConfig, TypeScriptFetchClientGeneratorOutput> & {
33
+ refs: ReturnType<typeof getReferenceFactories>;
34
+ };
32
35
  export type TypeScriptFetchClientGeneratorContext = TypeScriptFetchClientsGeneratorContext & {
33
36
  readonly service: ApiService;
34
37
  };
@@ -0,0 +1,23 @@
1
+ import { TypeScriptFetchClientsGeneratorConfig } from './models';
2
+ import { ts } from '../../../ast';
3
+ export declare function getReferenceFactories(options: TypeScriptFetchClientsGeneratorConfig): {
4
+ typedResponse: (<TBuilder extends import("@goast/core").SourceBuilder<never>>(generics: [ts.Type<TBuilder>]) => ts.Reference<TBuilder, never>) & {
5
+ refName: string;
6
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
7
+ infer: <TBuilder_1 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_1, never>;
8
+ } & {
9
+ moduleNameOrfilePath: string;
10
+ };
11
+ fetchClientOptions: (<TBuilder_2 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_2, never>) & {
12
+ refName: string;
13
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
14
+ } & {
15
+ moduleNameOrfilePath: string;
16
+ };
17
+ urlBuilder: (<TBuilder_2 extends import("@goast/core").SourceBuilder<never>>() => ts.Reference<TBuilder_2, never>) & {
18
+ refName: string;
19
+ moduleNameOrfilePath: import("@goast/core").Nullable<string>;
20
+ } & {
21
+ moduleNameOrfilePath: string;
22
+ };
23
+ };
@@ -1,20 +1,28 @@
1
1
  import { SourceBuilderOptions, StringBuilder } from '@goast/core';
2
2
  import { TypeScriptImport, TypeScriptImportKind } from './common-results';
3
- import { TypeScriptFileBuilder } from './file-builder';
4
3
  import { ImportModuleTransformer } from './utils';
4
+ export type ImportExportCollectionOptions = {
5
+ filePath?: string;
6
+ importModuleTransformer: ImportModuleTransformer;
7
+ useSingleQuotes: boolean;
8
+ };
9
+ export declare const defaultImportExportCollectionOptions: ImportExportCollectionOptions;
5
10
  export declare class ImportExportCollection {
6
11
  private readonly _imports;
7
12
  private readonly _exports;
13
+ private readonly _options;
14
+ constructor(options?: Partial<ImportExportCollectionOptions>);
8
15
  get hasImports(): boolean;
9
16
  get hasExports(): boolean;
10
17
  get imports(): TypeScriptImport[];
11
18
  addImport(importName: string, fromModule: string): void;
12
19
  addExport(exportName: string, fromModule: string): void;
13
20
  clear(): void;
14
- toString(options: Partial<SourceBuilderOptions>, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): string;
15
- writeTo(builder: StringBuilder, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): void;
16
- writeTo(builder: TypeScriptFileBuilder): void;
17
- protected writeImportsExports(builder: StringBuilder, keyword: 'import' | 'export', data: (readonly [string, TypeScriptImportKind, string[]])[]): void;
21
+ toString(options: Partial<SourceBuilderOptions>): string;
22
+ writeTo(builder: StringBuilder): void;
23
+ protected writeImportsExports(builder: StringBuilder, keyword: 'import' | 'export', data: (readonly [string, TypeScriptImportKind, string[]])[], options: {
24
+ useSingleQuotes: boolean;
25
+ }): void;
18
26
  protected sortAndResolve(data: Map<string, Set<string>>, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): (readonly [string, TypeScriptImportKind, string[]])[];
19
27
  protected getImportKind(fromModule: string): TypeScriptImportKind;
20
28
  protected resolveModulePath(fromModule: string, filePath: string | undefined, importModuleTransformer: ImportModuleTransformer): [string, TypeScriptImportKind];
@@ -1,14 +0,0 @@
1
- type _VoidResponse = Omit<Response, 'json'> & {
2
- isVoidResponse: true;
3
- };
4
- type _TypedResponse<T> = Response & {
5
- json(): Promise<T>;
6
- isVoidResponse: false;
7
- };
8
- export type TypedResponse<T> = void extends T ? _VoidResponse : _TypedResponse<T>;
9
-
10
- export type FetchClientOptions = {
11
- baseUrl?: string;
12
- fetch?: typeof fetch;
13
- headers?: Record<string, string>;
14
- };
@@ -1,18 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
-
3
- /**
4
- * Global configuration
5
- */
6
- @Injectable({
7
- providedIn: 'root',
8
- })
9
- export class ApiConfiguration {
10
- rootUrl: string = '@ROOT_URL@';
11
- }
12
-
13
- /**
14
- * Parameters for `ApiModule.forRoot()`
15
- */
16
- export interface ApiConfigurationParams {
17
- rootUrl?: string;
18
- }
@@ -1,29 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
-
4
- import { ApiConfiguration } from './api-configuration';
5
-
6
- /**
7
- * Base class for services
8
- */
9
- @Injectable()
10
- export class BaseService {
11
- constructor(protected config: ApiConfiguration, protected http: HttpClient) {}
12
-
13
- private _rootUrl: string = '';
14
-
15
- /**
16
- * Returns the root url for all operations in this service. If not set directly in this
17
- * service, will fallback to `ApiConfiguration.rootUrl`.
18
- */
19
- get rootUrl(): string {
20
- return this._rootUrl || this.config.rootUrl;
21
- }
22
-
23
- /**
24
- * Sets the root URL for API operations in this service.
25
- */
26
- set rootUrl(rootUrl: string) {
27
- this._rootUrl = rootUrl;
28
- }
29
- }
@@ -1,127 +0,0 @@
1
- import { HttpErrorResponse } from '@angular/common/http';
2
-
3
- import { StrictHttpResponse } from './strict-http-response';
4
-
5
- type Response = { status: string; content: unknown };
6
- type PickRsp<T extends Response, K extends T['status']> = Exclude<T, Exclude<T, { status: K }>>;
7
- type ExcludeRsp<T extends Response, K extends T['status']> = Exclude<T, { status: K }>;
8
- type Handeled<T extends string | number | symbol> = { [K in T]: true };
9
- type SuccessCode = `2${number}`;
10
- type SuccessCodes<T extends Response> = Exclude<T['status'], Exclude<T['status'], SuccessCode>>;
11
- type ErrorCode = `${4 | 5}${number}` | 'other';
12
- type ErrorCodes<T extends Response> = Exclude<T['status'], Exclude<T['status'], ErrorCode>>;
13
- type RemoveVoid<T> = T extends void ? never : T;
14
-
15
- export class ResponseHandler<
16
- I extends Response,
17
- S extends I,
18
- E extends Handeled<Exclude<I['status'], S['status']>>,
19
- O
20
- > {
21
- private readonly _dummy?: E;
22
- private readonly _response: I;
23
- private _isHandeled = false;
24
- public result: O | PromiseLike<O> = undefined!;
25
-
26
- constructor(response: I) {
27
- this._response = response;
28
- }
29
-
30
- public handle<T extends Exclude<S['status'], 'other'>, U = undefined>(
31
- status: T[] | T,
32
- handler?: (r: PickRsp<S, T>, status: string) => U | PromiseLike<U>
33
- ) {
34
- const newThis = this.as<ExcludeRsp<S, T>, Handeled<T | keyof E>, RemoveVoid<U>>();
35
- const matches = Array.isArray(status)
36
- ? (status as string[]).indexOf(this._response.status.toString()) >= 0
37
- : this._response.status.toString() === status;
38
- if (matches && !this._isHandeled) {
39
- this._isHandeled = true;
40
- if (handler) {
41
- newThis.result = handler(this._response as PickRsp<S, T>, this._response.status) as
42
- | RemoveVoid<U>
43
- | PromiseLike<RemoveVoid<U>>;
44
- }
45
- }
46
- return newThis;
47
- }
48
-
49
- public handleSuccess<T = undefined>(handler?: (r: PickRsp<S, SuccessCode>, status: string) => T | PromiseLike<T>) {
50
- const newThis = this.as<ExcludeRsp<S, SuccessCode>, Handeled<SuccessCodes<S> | keyof E>, RemoveVoid<T>>();
51
- const matches = this._response.status.startsWith('2');
52
- if (matches && !this._isHandeled) {
53
- this._isHandeled = true;
54
- if (handler) {
55
- newThis.result = handler(this._response as PickRsp<S, SuccessCode>, this._response.status) as
56
- | RemoveVoid<T>
57
- | PromiseLike<RemoveVoid<T>>;
58
- }
59
- }
60
- return newThis;
61
- }
62
-
63
- public handleError<T = undefined>(handler?: (r: PickRsp<S, ErrorCode>, status: string) => T | PromiseLike<T>) {
64
- const newThis = this.as<ExcludeRsp<S, ErrorCode>, Handeled<ErrorCodes<S> | keyof E>, RemoveVoid<T>>();
65
- const matches = this._response.status.startsWith('4') || this._response.status.startsWith('5');
66
- if (matches && !this._isHandeled) {
67
- this._isHandeled = true;
68
- if (handler) {
69
- newThis.result = handler(this._response as PickRsp<S, ErrorCode>, this._response.status) as
70
- | RemoveVoid<T>
71
- | PromiseLike<RemoveVoid<T>>;
72
- }
73
- }
74
- return newThis;
75
- }
76
-
77
- public throwOnError() {
78
- const newThis = this.as<ExcludeRsp<S, ErrorCode>, Handeled<ErrorCodes<S> | keyof E>, never>();
79
- const matches = this._response.status.startsWith('4') || this._response.status.startsWith('5');
80
- if (matches && !this._isHandeled) {
81
- throw new UnhandeledResponseError(this._response);
82
- }
83
- return newThis;
84
- }
85
-
86
- private as<NewS extends I, NewE extends Handeled<Exclude<I['status'], NewS['status']>>, NewO>() {
87
- return this as unknown as ResponseHandler<I, NewS, NewE, O | NewO>;
88
- }
89
- }
90
-
91
- export class UnhandeledResponseError extends Error {
92
- public readonly response: Response;
93
-
94
- constructor(response: Response) {
95
- super(`The response with status code '${response.status}' was not handeled.`, { cause: response });
96
- this.response = response;
97
- }
98
- }
99
-
100
- export type ResponseHandlerFn<T extends Response, O> = (
101
- handler: ResponseHandler<T, T, object, never>
102
- ) => ResponseHandler<T, never, { [K in T['status']]: true }, O>;
103
-
104
- export function handleResponse<R extends Response, O>(
105
- response: Promise<StrictHttpResponse<unknown>>,
106
- handler: ResponseHandlerFn<R, O>
107
- ): Promise<O> {
108
- return response
109
- .then(
110
- (r: StrictHttpResponse<unknown>) =>
111
- <R>{
112
- status: r.status.toString(),
113
- content: r.body,
114
- }
115
- )
116
- .catch((e: HttpErrorResponse) => {
117
- if (!e.status) throw e;
118
- return <R>{
119
- status: e.status.toString(),
120
- content: e.error,
121
- };
122
- })
123
- .then((r: R) => {
124
- const h = new ResponseHandler<R, R, object, never>(r);
125
- return handler(h).result;
126
- });
127
- }
@@ -1,8 +0,0 @@
1
- import { HttpResponse } from '@angular/common/http';
2
-
3
- /**
4
- * Constrains the http response to not have the body defined as `T | null`, but `T` only.
5
- */
6
- export type StrictHttpResponse<T> = HttpResponse<T> & {
7
- readonly body: T;
8
- };