@aws/nx-plugin 0.14.2 → 0.15.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 (34) hide show
  1. package/package.json +2 -2
  2. package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +2236 -0
  3. package/src/open-api/ts-client/__snapshots__/generator.complex-types.spec.ts.snap +2307 -0
  4. package/src/open-api/ts-client/__snapshots__/generator.composite-types.spec.ts.snap +1495 -0
  5. package/src/open-api/ts-client/__snapshots__/generator.primitive-types.spec.ts.snap +1470 -0
  6. package/src/open-api/ts-client/__snapshots__/generator.request.spec.ts.snap +1138 -0
  7. package/src/open-api/ts-client/__snapshots__/generator.response.spec.ts.snap +732 -0
  8. package/src/open-api/ts-client/__snapshots__/generator.tags.spec.ts.snap +743 -0
  9. package/src/open-api/ts-client/files/client.gen.ts.template +52 -15
  10. package/src/open-api/ts-client/files/types.gen.ts.template +5 -0
  11. package/src/open-api/ts-hooks/__snapshots__/generator.spec.tsx.snap +1092 -0
  12. package/src/open-api/ts-hooks/files/options-proxy.gen.ts.template +210 -0
  13. package/src/open-api/ts-hooks/generator.d.ts +5 -0
  14. package/src/open-api/ts-hooks/generator.js +15 -2
  15. package/src/open-api/ts-hooks/generator.js.map +1 -1
  16. package/src/open-api/ts-hooks/generator.spec.tsx +1787 -0
  17. package/src/open-api/utils/codegen-data/types.d.ts +25 -0
  18. package/src/open-api/utils/codegen-data/types.js +26 -1
  19. package/src/open-api/utils/codegen-data/types.js.map +1 -1
  20. package/src/open-api/utils/codegen-data.js +187 -79
  21. package/src/open-api/utils/codegen-data.js.map +1 -1
  22. package/src/open-api/utils/normalise.js +11 -1
  23. package/src/open-api/utils/normalise.js.map +1 -1
  24. package/src/py/fast-api/react/__snapshots__/generator.spec.ts.snap +120 -10
  25. package/src/py/fast-api/react/files/website/components/__apiNameClassName__Provider.tsx.template +40 -0
  26. package/src/py/fast-api/react/files/website/hooks/use__apiNameClassName__.tsx.template +13 -18
  27. package/src/py/fast-api/react/files/website/hooks/use__apiNameClassName__Client.tsx.template +13 -0
  28. package/src/py/fast-api/react/generator.js +35 -9
  29. package/src/py/fast-api/react/generator.js.map +1 -1
  30. package/src/py/project/generator.js +5 -0
  31. package/src/py/project/generator.js.map +1 -1
  32. package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +7 -9
  33. package/src/utils/files/http-api/common/constructs/src/core/http-api.ts.template +7 -9
  34. package/src/open-api/ts-client/__snapshots__/generator.spec.ts.snap +0 -7880
@@ -41,19 +41,22 @@ const renderToJsonDateValue = (identifier, format) => {
41
41
  return `${identifier}.toISOString()${format === 'date' ? '.slice(0,10)' : ''}`;
42
42
  };
43
43
  // Renders the appropriate nested function for .map() or $mapValues() for arrays and dictionaries for the given type
44
- const renderNestedToJsonValue = (type, depth = 0) => {
44
+ const renderNestedToJsonValue = (type, argumentType = undefined, depth = 0) => {
45
45
  const itemIdentifier = `item${depth}`;
46
+ const argType = `${argumentType ? `: ${argumentType}` : ''}`;
46
47
  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
+ return `(${itemIdentifier}${argType}) => ${["date", "date-time"].includes(type.format) ? renderToJsonDateValue(itemIdentifier, type.format) : itemIdentifier}`;
48
49
  } else if (type.export === "array") {
49
- return `(${itemIdentifier}) => ${itemIdentifier}.map(${renderNestedToJsonValue(type.link, depth + 1)})`;
50
+ return `(${itemIdentifier}${argType}) => ${itemIdentifier}.map(${renderNestedToJsonValue(type.link, argumentType, depth + 1)})`;
50
51
  } else if (type.export === "dictionary") {
51
- return `(${itemIdentifier}) => $IO.$mapValues(${itemIdentifier}, ${renderNestedToJsonValue(type.link, depth + 1)})`;
52
+ return `(${itemIdentifier}${argType}) => $IO.$mapValues(${itemIdentifier}, ${renderNestedToJsonValue(type.link, argumentType, depth + 1)})`;
53
+ } else if (type.type === 'unknown') {
54
+ return `(${itemIdentifier}${argType}) => ${itemIdentifier}`;
52
55
  }
53
56
  return `$IO.${type.name || type.type}.toJson`;
54
57
  };
55
58
  // Renders the code to transform a property of the model to its json representation from the model types
56
- const renderToJsonValue = (property, value) => {
59
+ const renderToJsonValue = (property, value, argumentType = undefined) => {
57
60
  let rendered = '';
58
61
 
59
62
  if (canShortCircuitConversion(property)) {
@@ -62,9 +65,9 @@ const renderToJsonValue = (property, value) => {
62
65
  rendered = ["date", "date-time"].includes(property.format) ? `(${renderToJsonDateValue(value, property.format)})` : value;
63
66
  } else if (property.export === "array") {
64
67
  const prefix = property.uniqueItems ? `Array.from(${value})` : `${value}`;
65
- rendered = `(${prefix}.map(${renderNestedToJsonValue(property.link)}))`;
68
+ rendered = `(${prefix}.map(${renderNestedToJsonValue(property.link, argumentType)}))`;
66
69
  } else if (property.export === "dictionary") {
67
- rendered = `($IO.$mapValues(${value}, ${renderNestedToJsonValue(property.link)}))`;
70
+ rendered = `($IO.$mapValues(${value}, ${renderNestedToJsonValue(property.link, argumentType)}))`;
68
71
  } else if (property.type !== "any") {
69
72
  rendered = `$IO.${property.type}.toJson(${value})`;
70
73
  } else {
@@ -77,29 +80,32 @@ const renderToJsonValue = (property, value) => {
77
80
  return rendered;
78
81
  };
79
82
  // Renders the appropriate nested function for .map() or $mapValues() for arrays and dictionaries for the given type
80
- const renderNestedFromJsonValue = (type, depth = 0) => {
83
+ const renderNestedFromJsonValue = (type, argumentType = undefined, depth = 0) => {
81
84
  const itemIdentifier = `item${depth}`;
85
+ const argType = `${argumentType ? `: ${argumentType}` : ''}`;
82
86
  if (type.isPrimitive || type.typescriptType === 'unknown' || type.export === 'enum' || type.isEnum) {
83
- return `(${itemIdentifier}) => ${["date", "date-time"].includes(type.format) ? `new Date(${itemIdentifier})` : itemIdentifier}`;
87
+ return `(${itemIdentifier}${argType}) => ${["date", "date-time"].includes(type.format) ? `new Date(${itemIdentifier})` : itemIdentifier}`;
84
88
  } else if (type.export === "array") {
85
- return `(${itemIdentifier}) => ${itemIdentifier}.map(${renderNestedFromJsonValue(type.link, depth + 1)})`;
89
+ return `(${itemIdentifier}${argType}) => ${itemIdentifier}.map(${renderNestedFromJsonValue(type.link, argumentType, depth + 1)})`;
86
90
  } else if (type.export === "dictionary") {
87
- return `(${itemIdentifier}) => $IO.$mapValues(${itemIdentifier}, ${renderNestedFromJsonValue(type.link, depth + 1)})`;
91
+ return `(${itemIdentifier}${argType}) => $IO.$mapValues(${itemIdentifier}, ${renderNestedFromJsonValue(type.link, argumentType, depth + 1)})`;
92
+ } else if (type.type === 'unknown') {
93
+ return `(${itemIdentifier}${argType}) => ${itemIdentifier}`;
88
94
  }
89
95
  return `$IO.${type.name || type.type}.fromJson`;
90
96
  };
91
97
  // Renders the code to transform a property of the model from its json representation into the model types
92
- const renderFromJsonValue = (property, value) => {
98
+ const renderFromJsonValue = (property, value, argumentType = undefined) => {
93
99
  let rendered = '';
94
100
  if (canShortCircuitConversion(property)) {
95
101
  rendered = value;
96
102
  } else if (property.isPrimitive || property.typescriptType === 'unknown' || property.export === 'enum' || property.isEnum) {
97
103
  rendered = ["date", "date-time"].includes(property.format) ? `(new Date(${value}))` : value;
98
104
  } else if (property.export === "array") {
99
- rendered = `((${value} as Array<any>).map(${renderNestedFromJsonValue(property.link)}))`;
105
+ rendered = `((${value} as Array<any>).map(${renderNestedFromJsonValue(property.link, argumentType)}))`;
100
106
  rendered = property.uniqueItems ? `new Set(${rendered})` : rendered;
101
107
  } else if (property.export === "dictionary") {
102
- rendered = `($IO.$mapValues(${value}, ${renderNestedFromJsonValue(property.link)}))`;
108
+ rendered = `($IO.$mapValues(${value}, ${renderNestedFromJsonValue(property.link, argumentType)}))`;
103
109
  } else {
104
110
  rendered = `$IO.${property.type}.fromJson(${value})`;
105
111
  }
@@ -147,6 +153,9 @@ const renderStreamingResponseChunk = (response) => {
147
153
  asBlob: 'new Blob([value])',
148
154
  });
149
155
  };
156
+ const matchPattern = (pattern, value) => {
157
+ return `/${pattern}/.test(${value})`;
158
+ };
150
159
  _%>
151
160
 
152
161
  /**
@@ -196,6 +205,20 @@ export class $IO {
196
205
  <%_ if (model.export === 'dictionary') { _%>
197
206
  ...<%- renderToJsonValue(model, 'model') %>,
198
207
  <%_ } _%>
208
+ <%_ if (model.hasPatternProperties && model.patternPropertiesModels.length > 0) { _%>
209
+ <%_ model.patternPropertiesModels.forEach(({ pattern, model: patternProperty }) => { _%>
210
+ ...$IO.$mapValues(Object.fromEntries(Object.entries(model).filter(([key]) => <% if (model.properties.length > 0) { %>![<%- model.properties.map(p => `'${p.typescriptName}'`).join(', ') %>].includes(key) && <% } %>
211
+ <%- matchPattern(pattern, 'key') %>
212
+ )), (patternProperty) => <%- renderToJsonValue(patternProperty, 'patternProperty', 'any') %>),
213
+ <%_ }); _%>
214
+ <%_ } _%>
215
+ <%_ if (model.hasAdditionalProperties) { _%>
216
+ ...$IO.$mapValues(Object.fromEntries(Object.entries(model).filter(([key]) => <% if (model.properties.length > 0) { %>![<%- model.properties.map(p => `'${p.typescriptName}'`).join(', ') %>].includes(key)<% } %>
217
+ <%_ if (model.hasPatternProperties && model.patternPropertiesModels.length > 0) { _%>
218
+ <% if (model.properties.length > 0) { %>&& <% } %>!(<%- model.patternPropertiesModels.map(({ pattern }) => matchPattern(pattern, 'key')).join(' || ') %>)
219
+ <%_ } _%>
220
+ )), (additionalProperty) => <%- renderToJsonValue(model.additionalPropertiesModel, 'additionalProperty', 'any') %>),
221
+ <%_ } _%>
199
222
  <%_ model.properties.forEach((property) => { _%>
200
223
  ...(model.<%- property.typescriptName %> === undefined ? {} : {
201
224
  '<%= property.name %>': <%- renderToJsonValue(property, `model.${property.typescriptName}`) %>,
@@ -240,6 +263,20 @@ export class $IO {
240
263
  <%_ if (model.export === 'dictionary') { _%>
241
264
  ...<%- renderFromJsonValue(model, 'json') %>,
242
265
  <%_ } _%>
266
+ <%_ if (model.hasPatternProperties && model.patternPropertiesModels.length > 0) { _%>
267
+ <%_ model.patternPropertiesModels.forEach(({ pattern, model: patternProperty }) => { _%>
268
+ ...$IO.$mapValues(Object.fromEntries(Object.entries(json).filter(([key]) => <% if (model.properties.length > 0) { %>![<%- model.properties.map(p => `'${p.name}'`).join(', ') %>].includes(key) && <% } %>
269
+ <%- matchPattern(pattern, 'key') %>
270
+ )), (patternProperty) => <%- renderFromJsonValue(patternProperty, 'patternProperty', 'any') %>),
271
+ <%_ }); _%>
272
+ <%_ } _%>
273
+ <%_ if (model.hasAdditionalProperties) { _%>
274
+ ...$IO.$mapValues(Object.fromEntries(Object.entries(json).filter(([key]) => <% if (model.properties.length > 0) { %>![<%- model.properties.map(p => `'${p.name}'`).join(', ') %>].includes(key)<% } %>
275
+ <%_ if (model.hasPatternProperties && model.patternPropertiesModels.length > 0) { _%>
276
+ <% if (model.properties.length > 0) { %>&& <% } %>!(<%- model.patternPropertiesModels.map(({ pattern }) => matchPattern(pattern, 'key')).join(' || ') %>)
277
+ <%_ } _%>
278
+ )), (additionalProperty) => <%- renderFromJsonValue(model.additionalPropertiesModel, 'additionalProperty', 'any') %>),
279
+ <%_ } _%>
243
280
  <%_ model.properties.forEach((property) => { _%>
244
281
  <%_ if (!property.isRequired) { _%>
245
282
  ...(json['<%- property.name %>'] === undefined ? {} : {
@@ -323,7 +360,7 @@ export class <%- className %> {
323
360
  private $fetch: typeof fetch = (...args) => (this.$config.fetch ?? fetch)(...args);
324
361
  <%_ allOperations.forEach((op) => { _%>
325
362
  <%_ const hasTag = op.tags && op.tags.length > 0; _%>
326
- <%_ const isStreaming = (op.vendorExtensions ?? {})['x-streaming']; _%>
363
+ <%_ const isStreaming = op.isStreaming; _%>
327
364
  <%_ const isInputOptional = (op.parameters.length === 1 && op.parametersBody && !op.parametersBody.isRequired) || op.parameters.length === 0; _%>
328
365
 
329
366
  <%- docString(op, ' ') %> <%- hasTag ? 'private' : 'public' %> async <% if (isStreaming) { %>*<% } %><%- hasTag ? '_' : '' %><%- op.uniqueName %>(<% if (op.parameters.length > 0) { %>input<%- isInputOptional ? '?' : '' %>: <%- op.operationIdPascalCase %>Request<% } %>): <%- isStreaming ? 'AsyncIterableIterator' : 'Promise' %><<%- op.result ? op.result.typescriptType : 'void' %>> {
@@ -34,6 +34,11 @@ _%>
34
34
  <%_ model.properties.forEach((property) => { _%>
35
35
  <%- docString(property, ' ') %> <%= property.isReadOnly ? 'readonly ' : '' %><%= property.typescriptName %><%= property.isRequired ? '' : '?' %>: <%- property.typescriptType %><%= (property.isNullable && property.type !== 'null') ? ' | null' : '' %>;
36
36
  <%_ }); _%>
37
+ <%_ if (model.hasAdditionalProperties || model.hasPatternProperties) { _%>
38
+ <%_ const keyName = (model.hasAdditionalProperties && model.hasPatternProperties) ? 'additionalAndPatternProperties' : (model.hasAdditionalProperties ? 'additionalProperties' : 'patternProperties'); _%>
39
+ <%_ const typeComment = (model.hasAdditionalProperties && !model.hasPatternProperties && model.additionalPropertiesModel.typescriptType !== 'unknown') ? ` /* ${model.additionalPropertiesModel.typescriptType} */` : '' _%>
40
+ [<%- keyName %>: string]: unknown<%- typeComment %>;
41
+ <%_ } _%>
37
42
  };
38
43
  <%_ } _%>
39
44
  <%_ }); _%>