Skip to content

Commit 5874fd4

Browse files
committed
feat: Create #transformArray()
For transforming values specified as an Array of some type. Signed-off-by: Kevin Locke <[email protected]>
1 parent a9b9382 commit 5874fd4

File tree

2 files changed

+131
-106
lines changed

2 files changed

+131
-106
lines changed

index.js

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,24 @@ function transformMapLike(obj, transform, skipExtensions) {
103103
* </ul>
104104
*/
105105
class OpenApiTransformerBase {
106+
/** Transforms an <code>Array[ValueType]</code> using a given transform
107+
* method.
108+
*
109+
* @template ValueType, TransformedType
110+
* @param {!Array<ValueType>|*} arr Array to transform.
111+
* @param {function(this:!OpenApiTransformerBase, ValueType): TransformedType
112+
* } transform Method which transforms values in arr.
113+
* @returns {!Array<TransformedType>|*} If arr is an Array, the result of
114+
* Array#map(transform). Otherwise, obj is returned unchanged.
115+
*/
116+
transformArray(arr, transform) {
117+
if (!isArray(arr)) {
118+
return arr;
119+
}
120+
121+
return arr.map(transform, this);
122+
}
123+
106124
/** Transforms a <code>Map[string, ValueType]</code> using a given transform
107125
* method.
108126
*
@@ -235,7 +253,7 @@ class OpenApiTransformerBase {
235253
if (items !== undefined) {
236254
// Note: OpenAPI 3.0 disallows Arrays, 2.0 and 3.1 drafts allow it
237255
if (isArray(items)) {
238-
newSchema.items = items.map(this.transformSchema, this);
256+
newSchema.items = this.transformArray(items, this.transformSchema);
239257
} else {
240258
newSchema.items = this.transformSchema(items);
241259
}
@@ -296,7 +314,8 @@ class OpenApiTransformerBase {
296314
for (const schemaProp of ['allOf', 'anyOf', 'oneOf']) {
297315
const subSchemas = schema[schemaProp];
298316
if (isArray(subSchemas)) {
299-
newSchema[schemaProp] = subSchemas.map(this.transformSchema, this);
317+
newSchema[schemaProp] =
318+
this.transformArray(subSchemas, this.transformSchema);
300319
}
301320
}
302321

@@ -604,7 +623,7 @@ class OpenApiTransformerBase {
604623

605624
if (isArray(operation.parameters)) {
606625
newOperation.parameters =
607-
operation.parameters.map(this.transformParameter, this);
626+
this.transformArray(operation.parameters, this.transformParameter);
608627
}
609628

610629
if (operation.requestBody !== undefined) {
@@ -622,12 +641,15 @@ class OpenApiTransformerBase {
622641
}
623642

624643
if (isArray(operation.security)) {
625-
newOperation.security =
626-
operation.security.map(this.transformSecurityRequirement, this);
644+
newOperation.security = this.transformArray(
645+
operation.security,
646+
this.transformSecurityRequirement,
647+
);
627648
}
628649

629650
if (isArray(operation.servers)) {
630-
newOperation.servers = operation.servers.map(this.transformServer, this);
651+
newOperation.servers =
652+
this.transformArray(operation.servers, this.transformServer);
631653
}
632654

633655
return newOperation;
@@ -650,12 +672,13 @@ class OpenApiTransformerBase {
650672
const newPathItem = { ...pathItem };
651673

652674
if (isArray(pathItem.servers)) {
653-
newPathItem.servers = pathItem.servers.map(this.transformServer, this);
675+
newPathItem.servers =
676+
this.transformArray(pathItem.servers, this.transformServer);
654677
}
655678

656679
if (isArray(pathItem.parameters)) {
657680
newPathItem.parameters =
658-
pathItem.parameters.map(this.transformParameter, this);
681+
this.transformArray(pathItem.parameters, this.transformParameter);
659682
}
660683

661684
for (const method of Object.keys(pathItem)) {
@@ -960,7 +983,8 @@ class OpenApiTransformerBase {
960983
}
961984

962985
if (isArray(openApi.servers)) {
963-
newOpenApi.servers = openApi.servers.map(this.transformServer, this);
986+
newOpenApi.servers =
987+
this.transformArray(openApi.servers, this.transformServer);
964988
}
965989

966990
// https://github.com/Azure/autorest/blob/master/docs/extensions/readme.md#x-ms-parameterized-host
@@ -971,7 +995,7 @@ class OpenApiTransformerBase {
971995
if (isArray(parameters)) {
972996
newOpenApi['x-ms-parameterized-host'] = {
973997
...xMsParameterizedHost,
974-
parameters: parameters.map(this.transformParameter, this),
998+
parameters: this.transformArray(parameters, this.transformParameter),
975999
};
9761000
}
9771001
}
@@ -1013,12 +1037,14 @@ class OpenApiTransformerBase {
10131037
}
10141038

10151039
if (isArray(openApi.security)) {
1016-
newOpenApi.security =
1017-
openApi.security.map(this.transformSecurityRequirement, this);
1040+
newOpenApi.security = this.transformArray(
1041+
openApi.security,
1042+
this.transformSecurityRequirement,
1043+
);
10181044
}
10191045

10201046
if (isArray(openApi.tags)) {
1021-
newOpenApi.tags = openApi.tags.map(this.transformTag, this);
1047+
newOpenApi.tags = this.transformArray(openApi.tags, this.transformTag);
10221048
}
10231049

10241050
if (openApi.externalDocs !== undefined) {

0 commit comments

Comments
 (0)