@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
@@ -1,11 +1,11 @@
1
- import { readFileSync } from 'fs';
2
1
  import { dirname, resolve } from 'path';
3
- import { ensureDirSync, writeFileSync } from 'fs-extra';
4
- import { Factory, OpenApiServicesGenerationProviderBase, notNullish, } from '@goast/core';
2
+ import { copyFileSync, ensureDirSync } from 'fs-extra';
3
+ import { Factory, OpenApiServicesGenerationProviderBase, appendValueGroup, toCasing, } from '@goast/core';
5
4
  import { DefaultTypeScriptAngularServiceGenerator, } from './angular-service-generator';
6
5
  import { defaultTypeScriptAngularServicesGeneratorConfig, } from './models';
6
+ import { getReferenceFactories } from './refs';
7
+ import { ts } from '../../../ast';
7
8
  import { TypeScriptFileBuilder } from '../../../file-builder';
8
- import { ImportExportCollection } from '../../../import-collection';
9
9
  import { modifyString } from '../../../utils';
10
10
  export class TypeScriptAngularServicesGenerator extends OpenApiServicesGenerationProviderBase {
11
11
  constructor(clientGeneratorFactory) {
@@ -16,17 +16,19 @@ export class TypeScriptAngularServicesGenerator extends OpenApiServicesGeneratio
16
16
  initResult() {
17
17
  return {
18
18
  services: {},
19
- servicesIndexFilePath: undefined,
20
- responseModelsIndexFilePath: undefined,
19
+ indexFiles: { services: undefined, responseModels: undefined },
21
20
  };
22
21
  }
23
22
  buildContext(context, config) {
24
- return this.getProviderContext(context, config, defaultTypeScriptAngularServicesGeneratorConfig);
23
+ const providerContext = this.getProviderContext(context, config, defaultTypeScriptAngularServicesGeneratorConfig);
24
+ return Object.assign(providerContext, {
25
+ refs: getReferenceFactories(providerContext.config),
26
+ });
25
27
  }
26
28
  onGenerate(ctx) {
27
29
  const output = super.onGenerate(ctx);
28
- this.copyUtilsFiles(ctx);
29
- output.servicesIndexFilePath = this.generateServicesIndexFile(ctx);
30
+ this.generateUtilsFiles(ctx);
31
+ output.indexFiles = this.generateIndexFiles(ctx);
30
32
  return output;
31
33
  }
32
34
  generateService(ctx, service) {
@@ -36,83 +38,173 @@ export class TypeScriptAngularServicesGenerator extends OpenApiServicesGeneratio
36
38
  addServiceResult(ctx, service, result) {
37
39
  ctx.output.services[service.id] = result;
38
40
  }
39
- generateServicesIndexFile(ctx) {
40
- if (!this.shouldGenerateServicesIndexFile(ctx)) {
41
- return undefined;
41
+ // #region Utils
42
+ generateUtilsFiles(ctx) {
43
+ const sourceDir = resolve(dirname(require.resolve('@goast/typescript')), '../assets/client/angular');
44
+ const targetDir = resolve(ctx.config.outputDir, ctx.config.utilsDirPath);
45
+ ensureDirSync(targetDir);
46
+ this.copyFile('request builder', sourceDir, targetDir, 'request-builder.ts');
47
+ TypeScriptFileBuilder.generate({
48
+ logName: 'api configuration',
49
+ filePath: resolve(targetDir, 'api-configuration.ts'),
50
+ options: ctx.config,
51
+ generator: (b) => b.append(this.getApiConfigurationFileContent(ctx)),
52
+ });
53
+ TypeScriptFileBuilder.generate({
54
+ logName: 'api base service',
55
+ filePath: resolve(targetDir, 'api-base-service.ts'),
56
+ options: ctx.config,
57
+ generator: (b) => b.append(this.getApiBaseServiceFileContent(ctx)),
58
+ });
59
+ if (!ctx.config.strictResponseTypes) {
60
+ TypeScriptFileBuilder.generate({
61
+ logName: 'http status codes',
62
+ filePath: resolve(targetDir, 'http-status-code.ts'),
63
+ options: ctx.config,
64
+ generator: (b) => b.append(this.getHttpStatusCodeFileContent(ctx)),
65
+ });
66
+ }
67
+ if (ctx.config.provideKind === 'provide-fn') {
68
+ TypeScriptFileBuilder.generate({
69
+ logName: 'providers',
70
+ filePath: resolve(targetDir, 'provide.ts'),
71
+ options: ctx.config,
72
+ generator: (b) => b.append(this.getProvideFnFileContent(ctx)),
73
+ });
42
74
  }
43
- const filePath = this.getServicesIndexFilePath(ctx);
44
- console.log(`Generating index file to ${filePath}...`);
45
- ensureDirSync(dirname(filePath));
46
- const builder = new TypeScriptFileBuilder(filePath, ctx.config);
47
- this.generateServicesIndexFileContent(ctx, builder);
48
- writeFileSync(filePath, builder.toString());
49
- return filePath;
50
75
  }
51
- getServicesIndexFilePath(ctx) {
76
+ getApiConfigurationFileContent(ctx) {
77
+ var _a, _b;
78
+ return appendValueGroup([
79
+ ts.class(toCasing(`${(_a = ctx.config.domainName) !== null && _a !== void 0 ? _a : ''}ApiConfiguration`, ctx.config.typeNameCasing), {
80
+ doc: ts.doc({ description: `${(_b = ctx.config.domainName) !== null && _b !== void 0 ? _b : 'Global'} API Configuration.` }),
81
+ decorators: [
82
+ ts.decorator(ts.refs.angular.injectable(), [
83
+ ctx.config.provideKind === 'root' ? ts.toNode({ providedIn: 'root' }) : null,
84
+ ]),
85
+ ],
86
+ export: true,
87
+ members: [
88
+ ts.property('rootUrl', {
89
+ accessModifier: 'public',
90
+ type: ts.refs.string(),
91
+ value: ts.string(this.getRootUrl(ctx)),
92
+ }),
93
+ ],
94
+ }),
95
+ ], '\n');
96
+ }
97
+ getApiBaseServiceFileContent(ctx) {
98
+ return appendValueGroup([
99
+ ts.class('ApiBaseService', {
100
+ doc: ts.doc({ description: 'Base class for API services.' }),
101
+ export: true,
102
+ abstract: true,
103
+ members: [
104
+ ts.property('config', {
105
+ accessModifier: 'protected',
106
+ value: (b) => b.append(ts.refs.angular.inject(), '(', ctx.refs.apiConfiguration(), ')'),
107
+ }),
108
+ ts.property('http', {
109
+ accessModifier: 'protected',
110
+ value: (b) => b.append(ts.refs.angular.inject(), '(', ts.refs.angular.httpClient(), ')'),
111
+ }),
112
+ ts.property('_rootUrl', { accessModifier: 'private', type: ts.refs.string(), value: ts.string('') }),
113
+ ts.property('rootUrl', {
114
+ doc: ts.doc({
115
+ description: `Gets or sets the root URL for API operations provided by this service.\nFalls back to \`${ctx.refs.apiConfiguration.refName}.rootUrl\` if not set in this service.`,
116
+ }),
117
+ accessModifier: 'public',
118
+ type: ts.refs.string(),
119
+ get: ts.property.getter({ body: 'return this._rootUrl || this.config.rootUrl;' }),
120
+ set: ts.property.setter({ body: 'this._rootUrl = value;' }),
121
+ }),
122
+ ],
123
+ }),
124
+ ], '\n');
125
+ }
126
+ getHttpStatusCodeFileContent(ctx) {
127
+ return appendValueGroup([
128
+ ts.typeAlias('HttpStatusCode', ts.unionType(ctx.config.possibleStatusCodes), {
129
+ doc: ts.doc({ description: 'The possible status codes that any API endpoint can return.' }),
130
+ export: true,
131
+ }),
132
+ ], '\n');
133
+ }
134
+ getProvideFnFileContent(ctx) {
52
135
  var _a;
53
- return resolve(ctx.config.outputDir, (_a = ctx.config.indexFilePath) !== null && _a !== void 0 ? _a : 'clients.ts');
136
+ return appendValueGroup([
137
+ ts.function(toCasing(`provide_${(_a = ctx.config.domainName) !== null && _a !== void 0 ? _a : ''}_Api`, ctx.config.functionNameCasing), {
138
+ doc: ts.doc({
139
+ description: 'Provides all the API services' + (ctx.config.domainName ? ` for ${ctx.config.domainName}` : '') + '.',
140
+ }),
141
+ export: true,
142
+ parameters: [ts.parameter('config', { type: ctx.refs.apiConfiguration(), optional: true })],
143
+ returnType: ts.refs.angular.provider(),
144
+ body: appendValueGroup([
145
+ 'return ',
146
+ ts.tuple([
147
+ (b) => b.append('config ? { provide: ', ctx.refs.apiConfiguration(), ', useValue: config } : ', ctx.refs.apiConfiguration()),
148
+ ...Object.values(ctx.output.services).map((x) => ts.reference(x.component, x.filePath)),
149
+ ]),
150
+ ';',
151
+ ]),
152
+ }),
153
+ ], '\n');
54
154
  }
55
- shouldGenerateServicesIndexFile(ctx) {
56
- return notNullish(ctx.config.indexFilePath);
155
+ getRootUrl(ctx) {
156
+ var _a, _b, _c, _d, _e, _f;
157
+ return modifyString((_f = (_e = (_d = (_c = ((_a = ctx.data.services[0].$src) !== null && _a !== void 0 ? _a : (_b = ctx.data.services[0].endpoints[0]) === null || _b === void 0 ? void 0 : _b.$src)) === null || _c === void 0 ? void 0 : _c.document.servers) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.url) !== null && _f !== void 0 ? _f : '/', ctx.config.rootUrl);
57
158
  }
58
- generateServicesIndexFileContent(ctx, builder) {
59
- const exports = new ImportExportCollection();
60
- for (const serviceId in ctx.output.services) {
61
- const service = ctx.output.services[serviceId];
62
- exports.addExport(service.component, service.filePath);
63
- }
64
- exports.writeTo(builder);
159
+ // #endregion
160
+ // #region Index
161
+ generateIndexFiles(ctx) {
162
+ const servicesIndexFilePath = this.getServicesIndexFilePath(ctx);
163
+ const responseModelsIndexFilePath = this.getResponseModelsIndexFilePath(ctx);
164
+ TypeScriptFileBuilder.tryGenerate({
165
+ logName: 'services index file',
166
+ filePath: servicesIndexFilePath,
167
+ options: ctx.config,
168
+ generator: (b) => b.append(this.getServicesIndexFileContent(ctx)),
169
+ });
170
+ TypeScriptFileBuilder.tryGenerate({
171
+ logName: 'response models index file',
172
+ filePath: responseModelsIndexFilePath,
173
+ options: ctx.config,
174
+ generator: (b) => b.append(this.getResponseModelsIndexFileContent(ctx)),
175
+ });
176
+ return {
177
+ services: servicesIndexFilePath,
178
+ responseModels: responseModelsIndexFilePath,
179
+ };
65
180
  }
66
- generateResponseModelsIndexFile(ctx) {
67
- if (!this.shouldGenerateResponseModelsIndexFile(ctx)) {
68
- return undefined;
69
- }
70
- const filePath = this.getResponseModelsIndexFilePath(ctx);
71
- console.log(`Generating response models index file to ${filePath}...`);
72
- ensureDirSync(dirname(filePath));
73
- const builder = new TypeScriptFileBuilder(filePath, ctx.config);
74
- this.generateResponseModelsIndexFileContent(ctx, builder);
75
- writeFileSync(filePath, builder.toString());
76
- return filePath;
181
+ getServicesIndexFileContent(ctx) {
182
+ return appendValueGroup([
183
+ ts.export(ctx.refs.apiConfiguration.refName, ctx.refs.apiConfiguration.moduleNameOrfilePath),
184
+ ctx.config.provideKind === 'provide-fn'
185
+ ? ts.export(ctx.refs.provide.refName, ctx.refs.provide.moduleNameOrfilePath)
186
+ : null,
187
+ ...Object.values(ctx.output.services).map((x) => ts.export(x.component, x.filePath)),
188
+ ]);
77
189
  }
78
- getResponseModelsIndexFilePath(ctx) {
79
- var _a;
80
- return resolve(ctx.config.outputDir, (_a = ctx.config.responseModelsIndexFilePath) !== null && _a !== void 0 ? _a : 'responses.ts');
81
- }
82
- shouldGenerateResponseModelsIndexFile(ctx) {
83
- return notNullish(ctx.config.responseModelsDirPath) && notNullish(ctx.config.responseModelsIndexFilePath);
84
- }
85
- generateResponseModelsIndexFileContent(ctx, builder) {
86
- const exports = new ImportExportCollection();
87
- for (const serviceId in ctx.output.services) {
88
- const service = ctx.output.services[serviceId];
89
- for (const operationId in service.responseModels) {
90
- const responseModel = service.responseModels[operationId];
91
- if (responseModel.filePath) {
92
- exports.addExport(responseModel.component, responseModel.filePath);
93
- }
94
- }
95
- }
96
- exports.writeTo(builder);
190
+ getResponseModelsIndexFileContent(ctx) {
191
+ return appendValueGroup(Object.values(ctx.output.services)
192
+ .flatMap((x) => Object.values(x.responseModels))
193
+ .map((x) => ts.export(x.component, x.filePath)));
97
194
  }
98
- copyUtilsFiles(ctx) {
99
- const sourceDir = resolve(dirname(require.resolve('@goast/typescript')), '../assets/service/angular');
100
- const targetDir = resolve(ctx.config.outputDir, ctx.config.utilsDirPath);
101
- ensureDirSync(targetDir);
102
- const files = ['api-configuration.ts', 'base-service.ts', 'request-builder.ts', 'strict-http-response.ts'];
103
- if (ctx.config.clientMethodFlavor === 'response-handler') {
104
- files.push('response-handler.ts');
105
- }
106
- const rootUrl = this.getRootUrl(ctx);
107
- for (const file of files) {
108
- const fileContent = readFileSync(resolve(sourceDir, file))
109
- .toString()
110
- .replace(/@ROOT_URL@/g, rootUrl);
111
- writeFileSync(resolve(targetDir, file), fileContent);
112
- }
195
+ getServicesIndexFilePath(ctx) {
196
+ return ctx.config.servicesIndexFilePath ? resolve(ctx.config.outputDir, ctx.config.servicesIndexFilePath) : null;
113
197
  }
114
- getRootUrl(ctx) {
115
- var _a, _b, _c, _d, _e, _f;
116
- return modifyString((_f = (_e = (_d = (_c = ((_a = ctx.data.services[0].$src) !== null && _a !== void 0 ? _a : (_b = ctx.data.services[0].endpoints[0]) === null || _b === void 0 ? void 0 : _b.$src)) === null || _c === void 0 ? void 0 : _c.document.servers) === null || _d === void 0 ? void 0 : _d[0]) === null || _e === void 0 ? void 0 : _e.url) !== null && _f !== void 0 ? _f : '/', ctx.config.rootUrl);
198
+ getResponseModelsIndexFilePath(ctx) {
199
+ return ctx.config.responseModelsIndexFilePath
200
+ ? resolve(ctx.config.outputDir, ctx.config.responseModelsIndexFilePath)
201
+ : null;
202
+ }
203
+ // #endregion
204
+ copyFile(logName, sourceDir, targetDir, fileName) {
205
+ const source = resolve(sourceDir, fileName);
206
+ const target = resolve(targetDir, fileName);
207
+ console.log(`Generating ${logName} to ${target}...`);
208
+ copyFileSync(source, target);
117
209
  }
118
210
  }
@@ -1,2 +1,11 @@
1
+ import { ts } from '../../../ast';
1
2
  import { defaultTypeScriptGeneratorConfig } from '../../../config';
2
- export const defaultTypeScriptAngularServicesGeneratorConfig = Object.assign(Object.assign({}, defaultTypeScriptGeneratorConfig), { fileNameCasing: { casing: 'kebab', suffix: '.service' }, responseModelsFileNameCasing: { casing: 'kebab', suffix: '-responses.model' }, exposeResponseMethods: false, exposePathProperties: false, clientMethodFlavor: 'default', servicesDirPath: 'services', responseModelsDirPath: 'models/responses', utilsDirPath: 'utils', indexFilePath: 'services.ts', responseModelsIndexFilePath: 'responses.ts' });
3
+ export const defaultTypeScriptAngularServicesGeneratorConfig = Object.assign(Object.assign({}, defaultTypeScriptGeneratorConfig), { fileNameCasing: { casing: 'kebab', suffix: '.service' }, responseModelFileNameCasing: { casing: 'kebab', suffix: '-responses.model' }, provideKind: 'provide-fn', strictResponseTypes: true, defaultStatusCodeResponseTypes: {
4
+ 401: ts.refs.never(),
5
+ 403: ts.refs.never(),
6
+ 500: ts.refs.never(),
7
+ }, possibleStatusCodes: [
8
+ 100, 101, 102, 103, 200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 304, 305, 306, 307, 308,
9
+ 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 421, 422, 423, 424, 425,
10
+ 426, 428, 429, 431, 451, 500, 501, 502, 503, 504, 505, 506, 507, 508, 510, 511,
11
+ ], servicesDirPath: 'services', servicesIndexFilePath: 'services.ts', responseModelsDirPath: 'models/responses', responseModelsIndexFilePath: 'responses.ts', utilsDirPath: 'utils' });
@@ -0,0 +1,20 @@
1
+ import { join, resolve } from 'path';
2
+ import { toCasing } from '@goast/core';
3
+ import { ts } from '../../../ast';
4
+ // See packages/typescript/assets/client/angular for reference
5
+ export function getReferenceFactories(options) {
6
+ var _a, _b;
7
+ const utilsDirPath = resolve(options.outputDir, options.utilsDirPath);
8
+ return {
9
+ // request-builder.ts
10
+ requestBuilder: ts.reference.factory('RequestBuilder', join(utilsDirPath, 'request-builder.ts')),
11
+ // api-configuration.ts - generated in angular-services-generator.ts
12
+ apiConfiguration: ts.reference.factory(toCasing(`${(_a = options.domainName) !== null && _a !== void 0 ? _a : ''}ApiConfiguration`, options.typeNameCasing), join(utilsDirPath, 'api-configuration.ts')),
13
+ // api-base-service.ts - generated in angular-service-generator.ts
14
+ apiBaseService: ts.reference.factory('ApiBaseService', join(utilsDirPath, 'api-base-service.ts')),
15
+ // http-status-code.ts - generated in angular-services-generator.ts
16
+ httpStatusCode: ts.reference.factory('HttpStatusCode', join(utilsDirPath, 'http-status-code.ts')),
17
+ // provide.ts - generated in angular-services-generator.ts
18
+ provide: ts.reference.factory(toCasing(`provide_${(_b = options.domainName) !== null && _b !== void 0 ? _b : ''}_Api`, options.functionNameCasing), join(utilsDirPath, 'provide.ts')),
19
+ };
20
+ }
@@ -0,0 +1,165 @@
1
+ import { resolve } from 'path';
2
+ import { adjustCasing, appendValueGroup, builderTemplate as s, toCasing, } from '@goast/core';
3
+ import { ts } from '../../../ast';
4
+ import { TypeScriptFileBuilder } from '../../../file-builder';
5
+ import { TypeScriptFileGenerator } from '../../file-generator';
6
+ export class DefaultTypeScriptEasyNetworkStubGenerator extends TypeScriptFileGenerator {
7
+ generate(ctx) {
8
+ const filePath = this.getStubFilePath(ctx);
9
+ const name = this.getStubClassName(ctx);
10
+ TypeScriptFileBuilder.generate({
11
+ logName: `stub ${name}`,
12
+ filePath,
13
+ options: ctx.config,
14
+ generator: (b) => b.append(this.getStubFileContent(ctx)),
15
+ });
16
+ return {
17
+ filePath,
18
+ component: name,
19
+ };
20
+ }
21
+ getStubFileContent(ctx) {
22
+ return appendValueGroup([...ctx.service.endpoints.map((endpoint) => this.getResponderVariable(ctx, endpoint)), this.getStubClass(ctx)], '\n');
23
+ }
24
+ getResponderVariable(ctx, endpoint) {
25
+ return ts.variable(this.getResponderVariableName(ctx, endpoint), {
26
+ readonly: true,
27
+ value: ts.call(ctx.refs.getStubResponder([
28
+ ts.objectType({
29
+ members: Object.entries(this.getEndpointStatusCodes(ctx, endpoint)).map(([statusCode, type]) => ts.property(statusCode, { type })),
30
+ }),
31
+ ]), []),
32
+ });
33
+ }
34
+ getStubClass(ctx) {
35
+ return ts.class(this.getStubClassName(ctx), {
36
+ export: true,
37
+ extends: ctx.refs.easyNetworkStubBase(),
38
+ members: [
39
+ ...ctx.service.endpoints.map((endpoint) => ts.property(this.getEndpointPathPropertyName(ctx, endpoint), {
40
+ static: true,
41
+ readonly: true,
42
+ accessModifier: 'private',
43
+ value: s `${ts.string(this.getStubRoute(ctx, endpoint))} as const`,
44
+ })),
45
+ '\n',
46
+ ...ctx.service.endpoints.map((endpoint) => ts.property(this.getEndpointRequestsFieldName(ctx, endpoint), {
47
+ readonly: true,
48
+ accessModifier: 'private',
49
+ type: this.getEndpointRequestsType(ctx, endpoint),
50
+ value: ts.tuple([]),
51
+ })),
52
+ '\n',
53
+ ...ctx.service.endpoints.map((endpoint) => ts.property(this.getEndpointRequestsPropertyName(ctx, endpoint), {
54
+ readonly: true,
55
+ accessModifier: 'public',
56
+ type: this.getEndpointRequestsType(ctx, endpoint, { readonly: true }),
57
+ get: ts.property.getter({
58
+ body: appendValueGroup([`return this.${this.getEndpointRequestsFieldName(ctx, endpoint)};`], '\n'),
59
+ }),
60
+ })),
61
+ ...ctx.service.endpoints.map((endpoint) => this.getEndpointStubMethod(ctx, endpoint)),
62
+ ts.method('reset', {
63
+ accessModifier: 'public',
64
+ override: true,
65
+ returnType: ts.refs.void_(),
66
+ body: appendValueGroup([
67
+ ...ctx.service.endpoints.map((endpoint) => `this.${this.getEndpointRequestsFieldName(ctx, endpoint)}.length = 0;`),
68
+ 'super.reset();',
69
+ ], '\n'),
70
+ }),
71
+ ],
72
+ });
73
+ }
74
+ getEndpointRequestsType(ctx, endpoint, options) {
75
+ var _a;
76
+ return ts.arrayType(ctx.refs.stubRequestInfo([
77
+ ts.typeof(ts.call([this.getStubClassName(ctx), this.getEndpointPathPropertyName(ctx, endpoint)])),
78
+ this.getSchemaType(ctx, (_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content[0].schema),
79
+ ]), options);
80
+ }
81
+ getEndpointStubMethod(ctx, endpoint) {
82
+ var _a;
83
+ const requestType = this.getSchemaType(ctx, (_a = endpoint.requestBody) === null || _a === void 0 ? void 0 : _a.content[0].schema);
84
+ return ts.method(this.getEndpointStubMethodName(ctx, endpoint), {
85
+ accessModifier: 'public',
86
+ parameters: [
87
+ ts.parameter('response', {
88
+ type: ctx.refs.strictRouteResponseCallback([
89
+ requestType,
90
+ ts.typeof(ts.call([this.getStubClassName(ctx), this.getEndpointPathPropertyName(ctx, endpoint)])),
91
+ ts.typeof(this.getResponderVariableName(ctx, endpoint)),
92
+ ]),
93
+ }),
94
+ ],
95
+ returnType: 'this',
96
+ body: appendValueGroup([
97
+ s `this.stubWrapper.stub2<${requestType}>()(${s.indent `
98
+ ${ts.string(endpoint.method.toUpperCase())},
99
+ ${this.getStubClassName(ctx)}.${this.getEndpointPathPropertyName(ctx, endpoint)},
100
+ async (request) => {${s.indent `
101
+ if (this.stubWrapper.options.rememberRequests) {${s.indent `
102
+ this.${this.getEndpointRequestsFieldName(ctx, endpoint)}.push(request);`}
103
+ }
104
+ throw await response(${this.getResponderVariableName(ctx, endpoint)}, request);`}
105
+ }`}
106
+ );`,
107
+ 'return this;',
108
+ ], '\n'),
109
+ });
110
+ }
111
+ getStubFilePath(ctx) {
112
+ return resolve(ctx.config.outputDir, ctx.config.stubsDirPath, `${toCasing(ctx.service.name, ctx.config.fileNameCasing)}.ts`);
113
+ }
114
+ getResponderVariableName(ctx, endpoint) {
115
+ return toCasing(endpoint.name + '_Responder', ctx.config.propertyNameCasing);
116
+ }
117
+ getStubClassName(ctx) {
118
+ return toCasing(ctx.service.name + '_Stubs', ctx.config.typeNameCasing);
119
+ }
120
+ getEndpointPathPropertyName(ctx, endpoint) {
121
+ return toCasing(endpoint.name + '_Path', ctx.config.constantNameCasing);
122
+ }
123
+ getEndpointRequestsFieldName(ctx, endpoint) {
124
+ return toCasing(endpoint.name + '_Requests', adjustCasing(ctx.config.propertyNameCasing, { prefix: '_' }));
125
+ }
126
+ getEndpointRequestsPropertyName(ctx, endpoint) {
127
+ return toCasing(endpoint.name + '_Requests', ctx.config.propertyNameCasing);
128
+ }
129
+ getEndpointStubMethodName(ctx, endpoint) {
130
+ return toCasing('stub_' + endpoint.name, ctx.config.functionNameCasing);
131
+ }
132
+ getStubRoute(ctx, endpoint) {
133
+ var _a, _b;
134
+ let path = endpoint.path;
135
+ let isFirstQueryParam = true;
136
+ for (const param of endpoint.parameters) {
137
+ const type = ((_b = (param.schema && ((_a = ctx.input.models[param.schema.id]) === null || _a === void 0 ? void 0 : _a.component))) !== null && _b !== void 0 ? _b : ts.refs.unknown.name).replace(/^readonly /, '');
138
+ if (param.target === 'path') {
139
+ path = path.replace(`{${param.name}}`, `{${param.name}${param.required ? '' : '?'}:${type}}`);
140
+ }
141
+ else if (param.target === 'query') {
142
+ path = path + (isFirstQueryParam ? '?' : '&') + `{${param.name}${param.required ? '' : '?'}:${type}}`;
143
+ isFirstQueryParam = false;
144
+ }
145
+ }
146
+ return path.replace(/^\/+/, '');
147
+ }
148
+ getEndpointStatusCodes(ctx, endpoint) {
149
+ return Object.fromEntries([
150
+ ...Object.entries(ctx.config.defaultStatusCodeResponseTypes).map(([key, value]) => [
151
+ key,
152
+ typeof value === 'function' ? this.getSchemaType(ctx, value(ctx.data.schemas)) : value,
153
+ ]),
154
+ ...endpoint.responses
155
+ .filter((x) => x.statusCode)
156
+ .map((x) => { var _a; return [x.statusCode, this.getSchemaType(ctx, (_a = x.contentOptions[0]) === null || _a === void 0 ? void 0 : _a.schema, ts.refs.never())]; }),
157
+ ]);
158
+ }
159
+ getSchemaType(ctx, schema, fallback) {
160
+ const output = schema && ctx.input.models[schema.id];
161
+ if (!output)
162
+ return fallback !== null && fallback !== void 0 ? fallback : this.getAnyType(ctx);
163
+ return (b) => b.appendModelUsage(output);
164
+ }
165
+ }
@@ -0,0 +1,69 @@
1
+ import { dirname, resolve } from 'path';
2
+ import { copyFileSync, ensureDirSync } from 'fs-extra';
3
+ import { Factory, OpenApiServicesGenerationProviderBase, appendValueGroup, } from '@goast/core';
4
+ import { DefaultTypeScriptEasyNetworkStubGenerator, } from './easy-network-stub-generator';
5
+ import { defaultTypeScriptEasyNetworkStubsGeneratorConfig, } from './models';
6
+ import { getReferenceFactories } from './refs';
7
+ import { ts } from '../../../ast';
8
+ import { TypeScriptFileBuilder } from '../../../file-builder';
9
+ export class TypeScriptEasyNetworkStubsGenerator extends OpenApiServicesGenerationProviderBase {
10
+ constructor(generatorFactory) {
11
+ super();
12
+ this._generatorFactory = generatorFactory !== null && generatorFactory !== void 0 ? generatorFactory : Factory.fromValue(new DefaultTypeScriptEasyNetworkStubGenerator());
13
+ }
14
+ initResult() {
15
+ return {
16
+ stubs: {},
17
+ indexFiles: { stubs: undefined },
18
+ };
19
+ }
20
+ buildContext(context, config) {
21
+ const providerContext = this.getProviderContext(context, config, defaultTypeScriptEasyNetworkStubsGeneratorConfig);
22
+ return Object.assign(providerContext, {
23
+ refs: getReferenceFactories(providerContext.config),
24
+ });
25
+ }
26
+ onGenerate(ctx) {
27
+ const output = super.onGenerate(ctx);
28
+ this.generateUtilsFiles(ctx);
29
+ output.indexFiles = this.generateIndexFiles(ctx);
30
+ return output;
31
+ }
32
+ generateService(ctx, service) {
33
+ const clientGenerator = this._generatorFactory.create();
34
+ return clientGenerator.generate(Object.assign(Object.assign({}, ctx), { service }));
35
+ }
36
+ addServiceResult(ctx, service, result) {
37
+ ctx.output.stubs[service.id] = result;
38
+ }
39
+ generateUtilsFiles(ctx) {
40
+ const sourceDir = resolve(dirname(require.resolve('@goast/typescript')), '../assets/stubs/easy-network-stub');
41
+ const targetDir = resolve(ctx.config.outputDir, ctx.config.utilsDirPath);
42
+ ensureDirSync(targetDir);
43
+ this.copyFile('easy-network-stub utils', sourceDir, targetDir, 'easy-network-stub.utils.ts');
44
+ }
45
+ generateIndexFiles(ctx) {
46
+ const stubsIndexFilePath = this.getStubsIndexFilePath(ctx);
47
+ TypeScriptFileBuilder.tryGenerate({
48
+ logName: 'stubs index file',
49
+ filePath: stubsIndexFilePath,
50
+ options: ctx.config,
51
+ generator: (b) => b.append(this.getStubsIndexFileContent(ctx)),
52
+ });
53
+ return {
54
+ stubs: stubsIndexFilePath,
55
+ };
56
+ }
57
+ getStubsIndexFileContent(ctx) {
58
+ return appendValueGroup(Object.values(ctx.output.stubs).map((x) => ts.export(x.component, x.filePath)));
59
+ }
60
+ getStubsIndexFilePath(ctx) {
61
+ return ctx.config.stubsIndexFilePath ? resolve(ctx.config.outputDir, ctx.config.stubsIndexFilePath) : null;
62
+ }
63
+ copyFile(logName, sourceDir, targetDir, fileName) {
64
+ const source = resolve(sourceDir, fileName);
65
+ const target = resolve(targetDir, fileName);
66
+ console.log(`Generating ${logName} to ${target}...`);
67
+ copyFileSync(source, target);
68
+ }
69
+ }
@@ -0,0 +1,3 @@
1
+ export * from './easy-network-stub-generator';
2
+ export * from './easy-network-stubs-generator';
3
+ export * from './models';
@@ -0,0 +1,7 @@
1
+ import { ts } from '../../../ast';
2
+ import { defaultTypeScriptGeneratorConfig } from '../../../config';
3
+ export const defaultTypeScriptEasyNetworkStubsGeneratorConfig = Object.assign(Object.assign({}, defaultTypeScriptGeneratorConfig), { fileNameCasing: { casing: 'kebab', suffix: '.stubs' }, defaultStatusCodeResponseTypes: {
4
+ 401: ts.refs.never(),
5
+ 403: ts.refs.never(),
6
+ 500: ts.refs.never(),
7
+ }, stubsDirPath: 'stubs', stubsIndexFilePath: 'stubs.ts', utilsDirPath: 'utils' });
@@ -0,0 +1,17 @@
1
+ import { join, resolve } from 'path';
2
+ import { ts } from '../../../ast';
3
+ // See packages/typescript/assets/stubs/easy-network-stub for reference
4
+ export function getReferenceFactories(options) {
5
+ const utilsDirPath = resolve(options.outputDir, options.utilsDirPath);
6
+ const easyNetworkStubUtilsPath = join(utilsDirPath, 'easy-network-stub.utils.ts');
7
+ return {
8
+ // easy-network-stub.utils.ts
9
+ easyNetworkStubWrapperOptions: ts.reference.factory('EasyNetworkStubWrapperOptions', easyNetworkStubUtilsPath),
10
+ stubRequestItem: ts.reference.factory('StubRequestItem', easyNetworkStubUtilsPath),
11
+ stubRequestInfo: ts.reference.genericFactory('StubRequestInfo', easyNetworkStubUtilsPath),
12
+ strictRouteResponseCallback: ts.reference.genericFactory('StrictRouteResponseCallback', easyNetworkStubUtilsPath),
13
+ getStubResponder: ts.reference.genericFactory('getStubResponder', easyNetworkStubUtilsPath),
14
+ easyNetworkStubWrapper: ts.reference.factory('EasyNetworkStubWrapper', easyNetworkStubUtilsPath),
15
+ easyNetworkStubBase: ts.reference.factory('EasyNetworkStubBase', easyNetworkStubUtilsPath),
16
+ };
17
+ }