@aws/nx-plugin 0.8.0 → 0.10.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 (47) hide show
  1. package/LICENSE-THIRD-PARTY +53 -28
  2. package/generators.json +12 -0
  3. package/package.json +1 -1
  4. package/src/api-connection/generator.d.ts +1 -1
  5. package/src/api-connection/generator.js +31 -1
  6. package/src/api-connection/generator.js.map +1 -1
  7. package/src/license/__snapshots__/config.spec.ts.snap +13 -7
  8. package/src/license/config.js +4 -4
  9. package/src/license/config.js.map +1 -1
  10. package/src/open-api/ts-client/__snapshots__/generator.spec.ts.snap +6985 -0
  11. package/src/open-api/ts-client/files/client.gen.ts.template +368 -0
  12. package/src/open-api/ts-client/files/types.gen.ts.template +60 -0
  13. package/src/open-api/ts-client/generator.d.ts +16 -0
  14. package/src/open-api/ts-client/generator.js +32 -0
  15. package/src/open-api/ts-client/generator.js.map +1 -0
  16. package/src/open-api/ts-client/schema.d.ts +9 -0
  17. package/src/open-api/ts-client/schema.json +20 -0
  18. package/src/open-api/ts-hooks/generator.js +6 -2
  19. package/src/open-api/ts-hooks/generator.js.map +1 -1
  20. package/src/open-api/utils/codegen-data/languages.d.ts +1 -0
  21. package/src/open-api/utils/codegen-data/languages.js +6 -1
  22. package/src/open-api/utils/codegen-data/languages.js.map +1 -1
  23. package/src/open-api/utils/codegen-data/types.d.ts +5 -0
  24. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  25. package/src/open-api/utils/codegen-data.js +165 -33
  26. package/src/open-api/utils/codegen-data.js.map +1 -1
  27. package/src/open-api/utils/normalise.js +59 -10
  28. package/src/open-api/utils/normalise.js.map +1 -1
  29. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +59 -0
  30. package/src/py/fast-api/react/files/fast-api/scripts/generate_open_api.py.template +13 -0
  31. package/src/py/fast-api/react/files/website/hooks/use__apiNameClassName__.tsx.template +20 -0
  32. package/src/py/fast-api/react/generator.d.ts +8 -0
  33. package/src/py/fast-api/react/generator.js +124 -0
  34. package/src/py/fast-api/react/generator.js.map +1 -0
  35. package/src/py/fast-api/react/schema.d.ts +9 -0
  36. package/src/py/fast-api/react/schema.json +33 -0
  37. package/src/trpc/react/__snapshots__/generator.spec.ts.snap +1 -1
  38. package/src/trpc/react/files/src/components/TrpcClients/IsolatedTrpcProvider.tsx.template +1 -1
  39. package/src/trpc/react/generator.js +9 -6
  40. package/src/trpc/react/generator.js.map +1 -1
  41. package/src/utils/git.d.ts +4 -0
  42. package/src/utils/git.js +19 -1
  43. package/src/utils/git.js.map +1 -1
  44. package/src/utils/toml.d.ts +4 -0
  45. package/src/utils/toml.js +12 -5
  46. package/src/utils/toml.js.map +1 -1
  47. /package/src/{trpc/react/files/src/hooks → utils/files/website/hooks/sigv4}/useSigV4.tsx.template +0 -0
@@ -0,0 +1,368 @@
1
+ <%_
2
+ const docString = (model, padding) => {
3
+ if (model.description || model.deprecated) {
4
+ return `${padding}/**${model.description ? `\n${padding} * ${model.description}` : ''}${model.deprecated ? `\n${padding} * @deprecated` : ''}\n${padding} */\n`;
5
+ }
6
+ return undefined;
7
+ }
8
+ const upperFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);
9
+ const uniqStrings = (strings) => {
10
+ const set = new Set();
11
+ return strings.filter((str) => {
12
+ if (set.has(str)) {
13
+ return false;
14
+ }
15
+ set.add(str);
16
+ return true;
17
+ });
18
+ };
19
+ _%>
20
+ <%_ if ((models.length + allOperations.filter(p => p.parameters.length > 0).length) > 0) { _%>
21
+ import type {
22
+ <%_ models.forEach((model) => { _%>
23
+ <%- model.name %>,
24
+ <%_ }) _%>
25
+ <%_ allOperations.filter(p => p.parameters.length > 0).forEach((op) => { _%>
26
+ <%- op.operationIdPascalCase %>Request,
27
+ <%_ }); _%>
28
+ } from './types.gen.js';
29
+ <%_ } _%>
30
+ <%_
31
+ // Nested arrays of primitives (besides dates) don't need to have .map(...) called to convert them as the base case will be a noop
32
+ // eg. an array of arrays of strings doesn't need to be rendered as `value.map(item0 => item0.map(item1 => item1))`
33
+ const canShortCircuitConversion = (property) => {
34
+ if (["array", "dictionary"].includes(property.export)) {
35
+ return canShortCircuitConversion(property.link);
36
+ }
37
+ return property.isPrimitive && !["date", "date-time"].includes(property.format);
38
+ };
39
+ // Render code to convert a date to its string representation
40
+ const renderToJsonDateValue = (identifier, format) => {
41
+ return `${identifier}.toISOString()${format === 'date' ? '.slice(0,10)' : ''}`;
42
+ };
43
+ // Renders the appropriate nested function for .map() or mapValues() for arrays and dictionaries for the given type
44
+ const renderNestedToJsonValue = (type, depth = 0) => {
45
+ const itemIdentifier = `item${depth}`;
46
+ if (type.isPrimitive || type.typescriptType === 'unknown' || type.export === 'enum' || type.isEnum) {
47
+ return `(${itemIdentifier}) => ${["date", "date-time"].includes(type.format) ? renderToJsonDateValue(itemIdentifier, type.format) : itemIdentifier}`;
48
+ } else if (type.export === "array") {
49
+ return `(${itemIdentifier}) => ${itemIdentifier}.map(${renderNestedToJsonValue(type.link, depth + 1)})`;
50
+ } else if (type.export === "dictionary") {
51
+ return `(${itemIdentifier}) => $IO.mapValues(${itemIdentifier}, ${renderNestedToJsonValue(type.link, depth + 1)})`;
52
+ }
53
+ return `$IO.${type.name || type.type}.toJson`;
54
+ };
55
+ // Renders the code to transform a property of the model to its json representation from the model types
56
+ const renderToJsonValue = (property, value) => {
57
+ let rendered = '';
58
+
59
+ if (canShortCircuitConversion(property)) {
60
+ rendered = value;
61
+ } else if (property.isPrimitive || property.typescriptType === 'unknown' || property.export === 'enum' || property.isEnum) {
62
+ rendered = ["date", "date-time"].includes(property.format) ? `(${renderToJsonDateValue(value, property.format)})` : value;
63
+ } else if (property.export === "array") {
64
+ const prefix = property.uniqueItems ? `Array.from(${value})` : `${value}`;
65
+ rendered = `(${prefix}.map(${renderNestedToJsonValue(property.link)}))`;
66
+ } else if (property.export === "dictionary") {
67
+ rendered = `($IO.mapValues(${value}, ${renderNestedToJsonValue(property.link)}))`;
68
+ } else if (property.type !== "any") {
69
+ rendered = `$IO.${property.type}.toJson(${value})`;
70
+ } else {
71
+ rendered = value;
72
+ }
73
+
74
+ if ((property.isPrimitive && ["date", "date-time"].includes(property.format)) || (!property.isPrimitive && ["array", "dictionary"].includes(property.export))) {
75
+ rendered = property.isNullable ? `${value} === null ? null : ${rendered}` : rendered;
76
+ }
77
+ return rendered;
78
+ };
79
+ // Renders the appropriate nested function for .map() or mapValues() for arrays and dictionaries for the given type
80
+ const renderNestedFromJsonValue = (type, depth = 0) => {
81
+ const itemIdentifier = `item${depth}`;
82
+ if (type.isPrimitive || type.typescriptType === 'unknown' || type.export === 'enum' || type.isEnum) {
83
+ return `(${itemIdentifier}) => ${["date", "date-time"].includes(type.format) ? `new Date(${itemIdentifier})` : itemIdentifier}`;
84
+ } else if (type.export === "array") {
85
+ return `(${itemIdentifier}) => ${itemIdentifier}.map(${renderNestedFromJsonValue(type.link, depth + 1)})`;
86
+ } else if (type.export === "dictionary") {
87
+ return `(${itemIdentifier}) => $IO.mapValues(${itemIdentifier}, ${renderNestedFromJsonValue(type.link, depth + 1)})`;
88
+ }
89
+ return `$IO.${type.name || type.type}.fromJson`;
90
+ };
91
+ // Renders the code to transform a property of the model from its json representation into the model types
92
+ const renderFromJsonValue = (property, value) => {
93
+ let rendered = '';
94
+ if (canShortCircuitConversion(property)) {
95
+ rendered = value;
96
+ } else if (property.isPrimitive || property.typescriptType === 'unknown' || property.export === 'enum' || property.isEnum) {
97
+ rendered = ["date", "date-time"].includes(property.format) ? `(new Date(${value}))` : value;
98
+ } else if (property.export === "array") {
99
+ rendered = `((${value} as Array<any>).map(${renderNestedFromJsonValue(property.link)}))`;
100
+ rendered = property.uniqueItems ? `new Set(${rendered})` : rendered;
101
+ } else if (property.export === "dictionary") {
102
+ rendered = `($IO.mapValues(${value}, ${renderNestedFromJsonValue(property.link)}))`;
103
+ } else {
104
+ rendered = `$IO.${property.type}.fromJson(${value})`;
105
+ }
106
+ rendered = property.isNullable ? `${value} === null ? null : ${rendered}` : rendered;
107
+ return rendered;
108
+ };
109
+ // Renders a condition to check for a particular response
110
+ const renderResponseCondition = (code) => {
111
+ if (typeof code === 'string' && code.endsWith('XX')) {
112
+ const min = Number(code.charAt(0)) * 100;
113
+ const max = min + 100;
114
+ return `response.status >= ${min} && response.status < ${max}`;
115
+ }
116
+ return `response.status === ${code}`;
117
+ };
118
+ // Renders the code which handles deserialising the response from a fetch call
119
+ const renderResponse = (response) => {
120
+ if (response.export === 'array') {
121
+ if (response.isPrimitive || (response.link && response.link.isPrimitive)) {
122
+ return `(await response.json()) as ${response.typescriptType}`;
123
+ }
124
+ return `(await response.json()).map($IO.${response.type}.fromJson)`;
125
+ }
126
+ if (response.isPrimitive && ['date', 'date-time'].includes(response.format)) {
127
+ return `new Date(await response.text())`;
128
+ }
129
+ if (response.isPrimitive || ['unknown', 'any'].includes(response.type)) {
130
+ if (response.type === 'number') {
131
+ return `Number(await response.text())`;
132
+ } else if (response.type === 'boolean') {
133
+ return `Boolean(await response.text())`;
134
+ } else if (response.type === 'binary') {
135
+ return `await response.blob()`;
136
+ }
137
+ return `await response.text()${['unknown', 'any'].includes(response.type) ? ' as any' : ''}`;
138
+ }
139
+ if (response.isEnum || response.export === 'enum') {
140
+ return `(await response.text()) as ${response.typescriptType}`;
141
+ }
142
+ // Non primitive
143
+ if (response.export === 'array') {
144
+ return `(await response.json()).map($IO.${response.type}.fromJson)`;
145
+ }
146
+ return `$IO.${response.typescriptType}.fromJson(await response.json())`;
147
+ };
148
+ _%>
149
+
150
+ /**
151
+ * Utility for serialisation and deserialisation of API types.
152
+ */
153
+ class $IO {
154
+ private static mapValues = (data: any, fn: (item: any) => any) =>
155
+ Object.fromEntries(Object.entries(data).map(([k, v]) => [k, fn(v)]));
156
+ <%_ models.filter(m => m.export !== 'enum').forEach((model) => { _%>
157
+ <%_ const isComposite = model.export === "one-of" || model.export === "any-of" || model.export === "all-of"; _%>
158
+
159
+ public static <%- model.name %> = {
160
+ toJson: (model: <%- model.name %>): any => {
161
+ if (model === undefined || model === null) {
162
+ return model;
163
+ }
164
+ <%_ if (isComposite) { _%>
165
+ <%_ model.composedPrimitives.filter(p => !['array', 'dictionary'].includes(p.export)).forEach((primitive) => { _%>
166
+ if (typeof model === "<%- primitive.typescriptType %>") {
167
+ return model;
168
+ }
169
+ <%_ }); _%>
170
+ <%_ const arrayOfPrimitives = [...model.composedPrimitives, ...model.composedModels].find(p => p.export === 'array' && canShortCircuitConversion(p)); _%>
171
+ <%_ if (arrayOfPrimitives) { _%>
172
+ if (Array.isArray(model) && (model.length === 0 || typeof model[0] !== 'object')) {
173
+ return model;
174
+ }
175
+ <%_ } _%>
176
+ <%_ /* There will only be 1 array of non primitives (as we throw an error for specs with more) so we can safely convert to that type */ _%>
177
+ <%_ const arrayOfNonPrimitives = [...model.composedPrimitives, ...model.composedModels].find(p => p.export === 'array' && !canShortCircuitConversion(p)); _%>
178
+ <%_ if (arrayOfNonPrimitives) { _%>
179
+ if (Array.isArray(model) && (model.length === 0 || typeof model[0] === 'object')) {
180
+ return <%- renderToJsonValue(arrayOfNonPrimitives, 'model') %>;
181
+ }
182
+ <%_ } _%>
183
+ <%_ if (model.composedModels.length > 0) { _%>
184
+ return {
185
+ <%_ model.properties.filter(p => !p.isPrimitive && p.export !== 'array').forEach((property, i) => { _%>
186
+ ...<%- renderToJsonValue(property, `model${(model.export !== 'all-of' && property.export !== 'dictionary') ? ` as ${property.typescriptType}` : ''}`) %>,
187
+ <%_ }); _%>
188
+ };
189
+ <%_ } else { _%>
190
+ return model;
191
+ <%_ } _%>
192
+ <%_ } else { /* !isComposite */ _%>
193
+ return {
194
+ <%_ if (model.export === 'dictionary') { _%>
195
+ ...<%- renderToJsonValue(model, 'model') %>,
196
+ <%_ } _%>
197
+ <%_ model.properties.forEach((property) => { _%>
198
+ ...(model.<%- property.typescriptName %> === undefined ? {} : {
199
+ '<%= property.name %>': <%- renderToJsonValue(property, `model.${property.typescriptName}`) %>,
200
+ }),
201
+ <%_ }); _%>
202
+ };
203
+ <%_ } _%>
204
+ },
205
+ fromJson: (json: any): <%- model.name %> => {
206
+ if (json === undefined || json === null) {
207
+ return json;
208
+ }
209
+ <%_ if (isComposite) { _%>
210
+ <%_ model.composedPrimitives.filter(p => !['array', 'dictionary'].includes(p.export)).forEach((primitive) => { _%>
211
+ if (typeof json === "<%- primitive.typescriptType %>") {
212
+ return json;
213
+ }
214
+ <%_ }); _%>
215
+ <%_ const arrayOfPrimitives = [...model.composedPrimitives, ...model.composedModels].find(p => p.export === 'array' && canShortCircuitConversion(p)); _%>
216
+ <%_ if (arrayOfPrimitives) { _%>
217
+ if (Array.isArray(json) && (json.length === 0 || typeof json[0] !== 'object')) {
218
+ return json;
219
+ }
220
+ <%_ } _%>
221
+ <%_ const arrayOfNonPrimitives = [...model.composedPrimitives, ...model.composedModels].find(p => p.export === 'array' && !canShortCircuitConversion(p)); _%>
222
+ <%_ if (arrayOfNonPrimitives) { _%>
223
+ if (Array.isArray(json) && (json.length === 0 || typeof json[0] === 'object')) {
224
+ return <%- renderFromJsonValue(arrayOfNonPrimitives, 'json') %>;
225
+ }
226
+ <%_ } _%>
227
+ <%_ if (model.composedModels.length > 0) { _%>
228
+ return {
229
+ <%_ model.properties.filter(p => !p.isPrimitive && p.export !== 'array').forEach((composedType) => { _%>
230
+ ...<%- renderFromJsonValue(composedType, 'json') %>,
231
+ <%_ }); _%>
232
+ };
233
+ <%_ } else { _%>
234
+ return json;
235
+ <%_ } _%>
236
+ <%_ } else { /* !isComposite */ _%>
237
+ return {
238
+ <%_ if (model.export === 'dictionary') { _%>
239
+ ...<%- renderFromJsonValue(model, 'json') %>,
240
+ <%_ } _%>
241
+ <%_ model.properties.forEach((property) => { _%>
242
+ <%_ if (!property.isRequired) { _%>
243
+ ...(json['<%- property.name %>'] === undefined ? {} : {
244
+ <%= property.typescriptName %>: <%- renderFromJsonValue(property, `json['${property.name}']`) %>,
245
+ }),
246
+ <%_ } else { _%>
247
+ <%= property.typescriptName %>: <%- renderFromJsonValue(property, `json['${property.name}']`) %>,
248
+ <%_ } _%>
249
+ <%_ }); _%>
250
+ };
251
+ <%_ } _%>
252
+ },
253
+ };
254
+ <%_ }) _%>
255
+ }
256
+
257
+ /**
258
+ * Client configuration for <%- className %>
259
+ */
260
+ export interface <%- className %>Config {
261
+ url: string;
262
+ fetch?: typeof fetch;
263
+ }
264
+
265
+ /**
266
+ * API Client for <%- className %>
267
+ */
268
+ export class <%- className %> {
269
+ private $config: <%- className %>Config;
270
+
271
+ constructor(config: <%- className %>Config) {
272
+ this.$config = config;
273
+ }
274
+
275
+ private $url = (path: string, pathParameters: { [key: string]: any }, queryParameters: { [key: string]: any }, collectionFormats?: { [key: string]: 'multi' | 'csv' }): string => {
276
+ const baseUrl = this.$config.url.endsWith('/') ? this.$config.url.slice(0, -1) : this.$config.url;
277
+ const pathWithParameters = Object.entries(pathParameters).reduce((withParams, [key, value]) =>
278
+ withParams.replace(`{${key}}`, encodeURIComponent(`${value}`))
279
+ , path);
280
+ const queryString = Object.entries(queryParameters).map(([key, value]) => {
281
+ if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
282
+ return value.map(v => `${encodeURIComponent(key)}=${encodeURIComponent(`${v}`)}`).join('&');
283
+ }
284
+ return `${encodeURIComponent(key)}=${encodeURIComponent(Array.isArray(value) ? value.map(String).join(',') : String(value))}`;
285
+ }).join('&');
286
+ return baseUrl + pathWithParameters + (queryString ? `?${queryString}` : '');
287
+ };
288
+
289
+ private $headers = (headerParameters: { [key: string]: any }, collectionFormats?: { [key: string]: 'multi' | 'csv' }): [string, string][] => {
290
+ return Object.entries(headerParameters).flatMap(([key, value]) => {
291
+ if (Array.isArray(value) && collectionFormats?.[key] === 'multi') {
292
+ return value.map(v => [key, String(v)]) as [string, string][];
293
+ }
294
+ return [[key, String(value)]];
295
+ });
296
+ };
297
+
298
+ private $fetch: typeof fetch = (...args) => (this.$config.fetch ?? fetch)(...args);
299
+ <%_ allOperations.forEach((op) => { _%>
300
+ <%_ const hasTag = op.tags && op.tags.length > 0; _%>
301
+
302
+ <%_ const isInputOptional = (op.parameters.length === 1 && op.parametersBody && !op.parametersBody.isRequired) || op.parameters.length === 0; _%>
303
+ <%- docString(op, ' ') %> <%- hasTag ? 'private _' : 'public ' %><%- op.uniqueName %> = async (<% if (op.parameters.length > 0) { %>input<%- isInputOptional ? '?' : '' %>: <%- op.operationIdPascalCase %>Request<% } %>): Promise<<%- op.result ? op.result.typescriptType : 'void' %>> => {
304
+ <%_ ['path', 'query', 'header'].forEach((position) => { _%>
305
+ <%_ if (op.parameters.map(p => p.in).includes(position)) { _%>
306
+ const <%- position %>Parameters = $IO.<%- op.operationIdPascalCase %>Request<%- upperFirst(position) %>Parameters.toJson(input);
307
+ <%_ } else { _%>
308
+ const <%- position %>Parameters = {};
309
+ <%_ } _%>
310
+ <%_ }); _%>
311
+ <%_ if (op.parameters.filter(p => p.collectionFormat).length > 0) { _%>
312
+ const collectionFormats = {
313
+ <%_ op.parameters.filter(p => p.collectionFormat).forEach((parameter) => { _%>
314
+ '<%- parameter.prop %>': '<%- parameter.collectionFormat %>',
315
+ <%_ }); _%>
316
+ } as const;
317
+ <%_ } _%>
318
+ <%_ if (op.parametersBody) { _%>
319
+ <%_ if (op.parametersBody.isPrimitive && ['number', 'boolean', 'string'].includes(op.parametersBody.type) && !['array', 'dictionary'].includes(op.parametersBody.export) && !["date", "date-time"].includes(op.parametersBody.format)) { _%>
320
+ const body = <% if (!op.parametersBody.isRequired) { %>input === undefined ? undefined : <% } %>String(input<%- op.explicitRequestBodyParameter ? `.${op.explicitRequestBodyParameter.typescriptName}` : '' %>);
321
+ <%_ } else if (op.parametersBody.isPrimitive && ["date", "date-time"].includes(op.parametersBody.format)) { _%>
322
+ const body = <%- renderToJsonDateValue('input', op.parametersBody.format) %>;
323
+ <%_ } else if (op.parametersBody.isPrimitive || ["binary", "any", "unknown"].includes(op.parametersBody.type) || op.parametersBody.isEnum || op.parametersBody.export === 'enum') { _%>
324
+ const body = <% if (!op.parametersBody.isRequired) { %>input === undefined ? undefined : <% } %>input<%- op.explicitRequestBodyParameter ? `.${op.explicitRequestBodyParameter.typescriptName}` : '' %><%- op.parametersBody.type === 'unknown' ? ' as any' : '' %>;
325
+ <%_ } else if (op.explicitRequestBodyParameter) { _%>
326
+ const body = <% if (!op.explicitRequestBodyParameter.isRequired) { %>input === undefined ? undefined : <% } %>(typeof input === 'object' ? JSON.stringify($IO.<%- op.operationIdPascalCase %>RequestBodyParameters.toJson(input).<%- op.explicitRequestBodyParameter.prop %>) : String($IO.<%- op.operationIdPascalCase %>RequestBodyParameters.toJson(input).<%- op.explicitRequestBodyParameter.prop %>));
327
+ <%_ } else { _%>
328
+ const body = <% if (!op.parametersBody.isRequired) { %>input === undefined ? undefined : <% } %>(typeof input === 'object' ? JSON.stringify(<%- renderToJsonValue(op.parametersBody, 'input') %>) : String(<%- renderToJsonValue(op.parametersBody, 'input') %>));
329
+ <%_ } _%>
330
+ <%_ } else { %>
331
+ const body = undefined;
332
+ <%_ } _%>
333
+
334
+ const response = await this.$fetch(this.$url('<%- op.path %>', pathParameters, queryParameters<% if (op.parameters.filter(p => p.collectionFormat).length > 0) { %>, collectionFormats<% } %>), {
335
+ headers: this.$headers(headerParameters<% if (op.parameters.filter(p => p.collectionFormat).length > 0) { %>, collectionFormats<% } %>),
336
+ method: '<%- op.method %>',
337
+ body,
338
+ });
339
+
340
+ <%_ op.responses.forEach((response) => { _%>
341
+ <%_ const isResultResponse = op.result && op.result.code === response.code; _%>
342
+ <%_ if (response.code !== 'default') { _%>
343
+ if (<%- renderResponseCondition(response.code) %>) {
344
+ <%_ } _%>
345
+ <% if (response.code !== 'default') { %> <% } %><% if (isResultResponse) { %>return <%- response.type === 'void' ? 'undefined' : renderResponse(response) %><% } else { %>throw {
346
+ <% if (response.code !== 'default') { %> <% } %> status: response.status,
347
+ <%_ if (response.type !== 'void') { _%>
348
+ <% if (response.code !== 'default') { %> <% } %> error: <%- renderResponse(response) %>,
349
+ <%_ } _%>
350
+ <% if (response.code !== 'default') { %> <% } %>}<% } %>;
351
+ <%_ if (response.code !== 'default') { _%>
352
+ }
353
+ <%_ } _%>
354
+ <%_ }); _%>
355
+ <%_ if (!op.responses.find(response => response.code === 'default')) { _%>
356
+ throw new Error(`Unknown response status ${response.status} returned by API`);
357
+ <%_ } _%>
358
+ };
359
+ <%_ }); _%>
360
+ <%_ Object.entries(operationsByTag).forEach(([tag, operations]) => { _%>
361
+
362
+ <%- docString({ description: `${tag} operations` }, ' ') %> public <%- tag %> = {
363
+ <%_ operations.forEach((op) => { _%>
364
+ <%- docString(op, ' ') %> <%- op.name %>: this._<%- op.uniqueName %>,
365
+ <%_ }); _%>
366
+ };
367
+ <%_ }); _%>
368
+ }
@@ -0,0 +1,60 @@
1
+ <%_
2
+ const docString = (model, padding) => {
3
+ if (model.description || model.deprecated) {
4
+ return `${padding}/**${model.description ? `\n${padding} * ${model.description}` : ''}${model.deprecated ? `\n${padding} * @deprecated` : ''}\n${padding} */\n`;
5
+ }
6
+ return undefined;
7
+ }
8
+ const upperFirst = (str) => str.charAt(0).toUpperCase() + str.slice(1);
9
+ const uniqStrings = (strings) => {
10
+ const set = new Set();
11
+ return strings.filter((str) => {
12
+ if (set.has(str)) {
13
+ return false;
14
+ }
15
+ set.add(str);
16
+ return true;
17
+ });
18
+ };
19
+ _%>
20
+ <%_ models.forEach((model) => { _%>
21
+ <%_ const isComposite = model.export === "one-of" || model.export === "any-of" || model.export === "all-of"; _%>
22
+ <%_ if (model.export === "enum") { _%>
23
+ <%- docString(model, '') %>export type <%= model.name %> =
24
+ <%_ model.enum.forEach((enumMember, i) => { _%>
25
+ | '<%- enumMember.value %>'
26
+ <%_ }); _%>
27
+ <%_ } else if (isComposite) { _%>
28
+ <%- docString(model, '') %>export type <%- model.name %> =<% model.properties.forEach((composedType, i) => { %><% if (i > 0) { %><% if (model.export === "all-of") { %> &<% } else { %> |<% } %><% } %> <%- composedType.typescriptType %><% }); %>;
29
+ <%_ } else { _%>
30
+ <%- docString(model, '') %>export type <%= model.name %> = <% if (model.isNullable) { %>null | <% } %>{
31
+ <%_ if (model.export === "dictionary" && model.link) { _%>
32
+ <%- docString(model.link, ' ') %> [key: string]: <%- model.link.typescriptType %>;
33
+ <%_ } _%>
34
+ <%_ model.properties.forEach((property) => { _%>
35
+ <%- docString(property, ' ') %> <%= property.isReadOnly ? 'readonly ' : '' %><%= property.typescriptName %><%= property.isRequired ? '' : '?' %>: <%- property.typescriptType %><%= property.isNullable ? ' | null' : '' %>;
36
+ <%_ }); _%>
37
+ };
38
+ <%_ } _%>
39
+ <%_ }); _%>
40
+ <%_ let allErrorResponseCodes = new Set(); _%>
41
+ <%_ allOperations.forEach((op) => { _%>
42
+ <%_ if (op.parameters && op.parameters.length > 0) { _%>
43
+ <%_ const parameterComponents = uniqStrings(op.parameters.filter(p => p.in !== 'body').map(p => {
44
+ return `${op.operationIdPascalCase}Request${upperFirst(p.in)}Parameters`;
45
+ })).concat(op.explicitRequestBodyParameter ? [`${op.operationIdPascalCase}RequestBodyParameters`] : (op.parametersBody ? [op.parametersBody.typescriptType] : [])); _%>
46
+
47
+ export type <%- op.operationIdPascalCase %>Request = <%- parameterComponents.join(' & ') %><% if ((op.parameters.length === 1 && op.parametersBody && !op.parametersBody.isRequired) || op.parameters.length === 0) { %> | undefined<% } %>;
48
+ <%_ } _%>
49
+ <%_ const errorResponses = op.responses.filter(response => !op.result || op.result.code !== response.code); _%>
50
+ <%_ errorResponses.forEach((response) => { allErrorResponseCodes.add(response.code) _%>
51
+ export type <%- op.operationIdPascalCase %><%- response.code === 'default' ? 'Default' : response.code %>Error = {
52
+ status: <%- response.code === 'default' ? 'number' : (typeof response.code === "string" ? `_${response.code}` : response.code) %>;
53
+ error: <%- response.typescriptType %>;
54
+ };
55
+ <%_ }); _%>
56
+ export type <%- op.operationIdPascalCase %>Error = <%- errorResponses.length === 0 ? 'never' : errorResponses.map(r => `${op.operationIdPascalCase}${r.code === 'default' ? 'Default' : r.code}Error`).join(' | ') %>;
57
+ <%_ }); _%>
58
+ <%_ ['1XX', '2XX', '3XX', '4XX', '5XX'].filter(code => allErrorResponseCodes.has(code)).forEach((code) => { _%>
59
+ export type _<%- code %> = <%- new Array(100).fill(Number(code.charAt(0)) * 100).map((n, i) => `${n + i}`).join(' | ') %>;
60
+ <%_ }); _%>
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Tree } from '@nx/devkit';
6
+ import { OpenApiClientSchema } from './schema';
7
+ import { CodeGenData } from '../utils/codegen-data/types';
8
+ /**
9
+ * Generates typescript client from an openapi spec
10
+ */
11
+ export declare const openApiTsClientGenerator: (tree: Tree, options: OpenApiClientSchema) => Promise<void>;
12
+ /**
13
+ * Generate an OpenAPI typescript client in the target directory
14
+ */
15
+ export declare const generateOpenApiTsClient: (tree: Tree, data: CodeGenData, outputPath: string) => void;
16
+ export default openApiTsClientGenerator;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateOpenApiTsClient = exports.openApiTsClientGenerator = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /**
6
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
7
+ * SPDX-License-Identifier: Apache-2.0
8
+ */
9
+ const devkit_1 = require("@nx/devkit");
10
+ const parse_1 = require("../utils/parse");
11
+ const codegen_data_1 = require("../utils/codegen-data");
12
+ const path = tslib_1.__importStar(require("path"));
13
+ const format_1 = require("../../utils/format");
14
+ /**
15
+ * Generates typescript client from an openapi spec
16
+ */
17
+ const openApiTsClientGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
18
+ const spec = yield (0, parse_1.parseOpenApiSpec)(tree, options.openApiSpecPath);
19
+ const data = yield (0, codegen_data_1.buildOpenApiCodeGenData)(spec);
20
+ (0, exports.generateOpenApiTsClient)(tree, data, options.outputPath);
21
+ yield (0, format_1.formatFilesInSubtree)(tree);
22
+ });
23
+ exports.openApiTsClientGenerator = openApiTsClientGenerator;
24
+ /**
25
+ * Generate an OpenAPI typescript client in the target directory
26
+ */
27
+ const generateOpenApiTsClient = (tree, data, outputPath) => {
28
+ (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), outputPath, data);
29
+ };
30
+ exports.generateOpenApiTsClient = generateOpenApiTsClient;
31
+ exports.default = exports.openApiTsClientGenerator;
32
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/open-api/ts-client/generator.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAAiD;AAEjD,0CAAkD;AAClD,wDAAgE;AAChE,mDAA6B;AAE7B,+CAA0D;AAE1D;;GAEG;AACI,MAAM,wBAAwB,GAAG,CACtC,IAAU,EACV,OAA4B,EAC5B,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnE,MAAM,IAAI,GAAG,MAAM,IAAA,sCAAuB,EAAC,IAAI,CAAC,CAAC;IAEjD,IAAA,+BAAuB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAA,CAAC;AAXW,QAAA,wBAAwB,4BAWnC;AAEF;;GAEG;AACI,MAAM,uBAAuB,GAAG,CACrC,IAAU,EACV,IAAiB,EACjB,UAAkB,EAClB,EAAE;IACF,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC;AANW,QAAA,uBAAuB,2BAMlC;AAEF,kBAAe,gCAAwB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ export interface OpenApiClientSchema {
7
+ openApiSpecPath: string;
8
+ outputPath: string;
9
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "OpenApiTsClient",
4
+ "title": "OpenAPI TypeScript Client",
5
+ "description": "Generate TypeScript client from an OpenAPI specification",
6
+ "type": "object",
7
+ "properties": {
8
+ "openApiSpecPath": {
9
+ "type": "string",
10
+ "description": "Path to the OpenAPI specification relative to the monorepo root",
11
+ "x-priority": "important"
12
+ },
13
+ "outputPath": {
14
+ "type": "string",
15
+ "description": "Path to the directory in which to generate the client relative to the monorepo root",
16
+ "x-priority": "important"
17
+ }
18
+ },
19
+ "required": ["openApiSpecPath", "outputPath"]
20
+ }
@@ -4,13 +4,17 @@ exports.openApiTsHooksGenerator = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const parse_1 = require("../utils/parse");
6
6
  const codegen_data_1 = require("../utils/codegen-data");
7
+ const generator_1 = require("../ts-client/generator");
8
+ const format_1 = require("../../utils/format");
7
9
  /**
8
10
  * Generates typescript hooks from an openapi spec
9
11
  */
10
12
  const openApiTsHooksGenerator = (tree, options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
11
13
  const spec = yield (0, parse_1.parseOpenApiSpec)(tree, options.openApiSpecPath);
12
- yield (0, codegen_data_1.buildOpenApiCodeGenData)(spec);
13
- // TODO: generate files!
14
+ const data = yield (0, codegen_data_1.buildOpenApiCodeGenData)(spec);
15
+ (0, generator_1.generateOpenApiTsClient)(tree, data, options.outputPath);
16
+ // TODO: generate hooks which wrap the client
17
+ (0, format_1.formatFilesInSubtree)(tree);
14
18
  });
15
19
  exports.openApiTsHooksGenerator = openApiTsHooksGenerator;
16
20
  exports.default = exports.openApiTsHooksGenerator;
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/open-api/ts-hooks/generator.ts"],"names":[],"mappings":";;;;AAMA,0CAAkD;AAClD,wDAAgE;AAEhE;;GAEG;AACI,MAAM,uBAAuB,GAAG,CACrC,IAAU,EACV,OAA2B,EAC3B,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnE,MAAM,IAAA,sCAAuB,EAAC,IAAI,CAAC,CAAC;IAEpC,wBAAwB;AAC1B,CAAC,CAAA,CAAC;AATW,QAAA,uBAAuB,2BASlC;AAEF,kBAAe,+BAAuB,CAAC"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/open-api/ts-hooks/generator.ts"],"names":[],"mappings":";;;;AAMA,0CAAkD;AAClD,wDAAgE;AAChE,sDAAiE;AACjE,+CAA0D;AAE1D;;GAEG;AACI,MAAM,uBAAuB,GAAG,CACrC,IAAU,EACV,OAA2B,EAC3B,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,IAAA,wBAAgB,EAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnE,MAAM,IAAI,GAAG,MAAM,IAAA,sCAAuB,EAAC,IAAI,CAAC,CAAC;IAEjD,IAAA,mCAAuB,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAExD,6CAA6C;IAE7C,IAAA,6BAAoB,EAAC,IAAI,CAAC,CAAC;AAC7B,CAAC,CAAA,CAAC;AAbW,QAAA,uBAAuB,2BAalC;AAEF,kBAAe,+BAAuB,CAAC"}
@@ -3,6 +3,7 @@ import { Model } from './types';
3
3
  * Return the typescript type for the given model
4
4
  */
5
5
  export declare const toTypeScriptType: (property: Model) => string;
6
+ export declare const toTypeScriptName: (name: string) => string;
6
7
  /**
7
8
  * Return the python type for a given property
8
9
  */
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toPythonName = exports.toPythonType = exports.toTypeScriptType = void 0;
3
+ exports.toPythonName = exports.toPythonType = exports.toTypeScriptName = exports.toTypeScriptType = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  /**
6
6
  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
@@ -8,6 +8,7 @@ const tslib_1 = require("tslib");
8
8
  */
9
9
  const lodash_snakecase_1 = tslib_1.__importDefault(require("lodash.snakecase"));
10
10
  const types_1 = require("./types");
11
+ const lodash_camelcase_1 = tslib_1.__importDefault(require("lodash.camelcase"));
11
12
  const toTypescriptPrimitive = (property) => {
12
13
  var _a;
13
14
  if (property.type === 'string' &&
@@ -41,6 +42,10 @@ const toTypeScriptType = (property) => {
41
42
  }
42
43
  };
43
44
  exports.toTypeScriptType = toTypeScriptType;
45
+ const toTypeScriptName = (name) => {
46
+ return (0, lodash_camelcase_1.default)(name);
47
+ };
48
+ exports.toTypeScriptName = toTypeScriptName;
44
49
  const toPythonPrimitive = (property) => {
45
50
  if (property.type === 'string' && property.format === 'date') {
46
51
  return 'date';
@@ -1 +1 @@
1
- {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/open-api/utils/codegen-data/languages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/open-api/utils/codegen-data/languages.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,13 @@ export type ClientData = Parameters<Plugin.LegacyHandler<any>>[0]['client'];
8
8
  export type Operation = ClientData['services'][number]['operations'][number];
9
9
  export type Model = ClientData['models'][number];
10
10
  export interface CodeGenData extends ClientData {
11
+ className: string;
11
12
  info: OpenAPIV3.InfoObject | OpenAPIV3_1.InfoObject;
12
13
  allOperations: Operation[];
14
+ operationsByTag: {
15
+ [tag: string]: Operation[];
16
+ };
17
+ untaggedOperations: Operation[];
13
18
  vendorExtensions: {
14
19
  [key: string]: any;
15
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/open-api/utils/codegen-data/types.ts"],"names":[],"mappings":";;;AAiBO,MAAM,gBAAgB,GAAG,CAAC,IAAsB,EAAS,EAAE,CAChE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAD3D,QAAA,gBAAgB,oBAC2C;AAExE,iFAAiF;AACpE,QAAA,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChE,QAAA,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACpD,QAAA,eAAe,GAAG,IAAI,GAAG,CAAC;IACrC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;CACP,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/open-api/utils/codegen-data/types.ts"],"names":[],"mappings":";;;AAoBO,MAAM,gBAAgB,GAAG,CAAC,IAAsB,EAAS,EAAE,CAChE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAD3D,QAAA,gBAAgB,oBAC2C;AAExE,iFAAiF;AACpE,QAAA,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAChE,QAAA,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AACpD,QAAA,eAAe,GAAG,IAAI,GAAG,CAAC;IACrC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,KAAK;IACL,QAAQ;IACR,MAAM;CACP,CAAC,CAAC"}