Skip to content

Commit 990a96b

Browse files
authored
Chore: improve function signatures (#512)
Combine some function params into one option object for better DX
1 parent 5079269 commit 990a96b

File tree

7 files changed

+59
-44
lines changed

7 files changed

+59
-44
lines changed

src/transform/index.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,11 @@ export function transformAll(schema: any, { version, rawSchema }: TransformOptio
3434
// #/paths (V2 & V3)
3535
output += `export interface paths {\n`; // open paths
3636
if (schema.paths) {
37-
output += transformPathsObj(
38-
schema.paths,
39-
{
40-
operations,
41-
parameters: (schema.components && schema.components.parameters) || schema.parameters,
42-
},
43-
version
44-
);
37+
output += transformPathsObj(schema.paths, {
38+
operations,
39+
globalParameters: (schema.components && schema.components.parameters) || schema.parameters,
40+
version,
41+
});
4542
}
4643
output += `}\n\n`; // close paths
4744

@@ -112,11 +109,10 @@ export function transformAll(schema: any, { version, rawSchema }: TransformOptio
112109
if (Object.keys(operations).length) {
113110
Object.entries(operations).forEach(([operationId, operation]) => {
114111
if (operation.description) output += comment(operation.description); // handle comment
115-
output += ` "${operationId}": {\n ${transformOperationObj(
116-
operation,
112+
output += ` "${operationId}": {\n ${transformOperationObj(operation, {
117113
version,
118-
schema.components && schema.components.parameters
119-
)}\n }\n`;
114+
globalParameters: (schema.components && schema.components.parameters) || schema.parameters,
115+
})}\n }\n`;
120116
});
121117
}
122118
output += `}\n`; // close operations

src/transform/operation.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@ import { transformSchemaObj } from "./schema";
55

66
export function transformOperationObj(
77
operation: OperationObject,
8-
version: number,
9-
globalParams?: Record<string, ParameterObject>
8+
{
9+
version,
10+
globalParameters,
11+
}: {
12+
version: number;
13+
globalParameters?: Record<string, ParameterObject>;
14+
}
1015
): string {
1116
let output = "";
1217

1318
if (operation.parameters) {
14-
output += ` parameters: {\n ${transformParametersArray(operation.parameters, version, globalParams)}\n }\n`;
19+
output += ` parameters: {\n ${transformParametersArray(operation.parameters, {
20+
version,
21+
globalParameters,
22+
})}\n }\n`;
1523
}
1624

1725
if (operation.responses) {

src/transform/parameters.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,23 @@ import { comment } from "../utils";
33

44
export function transformParametersArray(
55
parameters: (ReferenceObject | ParameterObject)[],
6-
version: number,
7-
globalParams?: Record<string, ParameterObject>
6+
{
7+
version,
8+
globalParameters,
9+
}: {
10+
version: number;
11+
globalParameters?: Record<string, ParameterObject>;
12+
}
813
): string {
914
let output = "";
1015

1116
// sort into map
1217
let mappedParams: Record<string, Record<string, ParameterObject>> = {};
1318
parameters.forEach((paramObj: any) => {
14-
if (paramObj.$ref && globalParams) {
19+
if (paramObj.$ref && globalParameters) {
1520
const paramName = paramObj.$ref.split("/").pop(); // take last segment
16-
if (globalParams[paramName]) {
17-
const reference = globalParams[paramName] as any;
21+
if (globalParameters[paramName]) {
22+
const reference = globalParameters[paramName] as any;
1823
if (!mappedParams[reference.in]) mappedParams[reference.in] = {};
1924
if (version === 2) {
2025
mappedParams[reference.in][reference.name || paramName] = {

src/transform/paths.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import { transformParametersArray } from "./parameters";
44

55
interface TransformPathsObjOption {
66
operations: Record<string, OperationObject>;
7-
parameters: Record<string, ParameterObject>;
7+
globalParameters: Record<string, ParameterObject>;
8+
version: number;
89
}
910

1011
/** Note: this needs to mutate objects passed in */
1112
export function transformPathsObj(
1213
paths: Record<string, PathItemObject>,
13-
{ operations, parameters }: TransformPathsObjOption,
14-
version: number
14+
{ operations, globalParameters, version }: TransformPathsObjOption
1515
): string {
1616
let output = "";
1717

@@ -41,16 +41,15 @@ export function transformPathsObj(
4141
}
4242

4343
// otherwise, inline operation
44-
output += ` "${method}": {\n ${transformOperationObj(operation, version, parameters)}\n }\n`;
44+
output += ` "${method}": {\n ${transformOperationObj(operation, { version, globalParameters })}\n }\n`;
4545
});
4646

4747
// parameters
4848
if (pathItem.parameters) {
49-
output += ` parameters: {\n ${transformParametersArray(
50-
pathItem.parameters,
49+
output += ` parameters: {\n ${transformParametersArray(pathItem.parameters, {
5150
version,
52-
parameters
53-
)}\n }\n`;
51+
globalParameters,
52+
})}\n }\n`;
5453
}
5554

5655
output += ` }\n`; // close PathItem

tests/operation.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe("requestBody", () => {
1818
},
1919
},
2020
},
21-
3
21+
{ version: 3 }
2222
).trim()
2323
).toBe(`requestBody: {
2424
content: {
@@ -34,7 +34,7 @@ describe("requestBody", () => {
3434
{
3535
requestBody: { $ref: "#/components/requestBodies/Request" },
3636
},
37-
3
37+
{ version: 3 }
3838
).trim()
3939
).toBe(`requestBody: components["requestBodies"]["Request"];`);
4040
});

tests/parameters.test.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ describe.only("transformParametersArray()", () => {
1919
{ in: "path", name: "three_d_secure", required: true, type: "string" },
2020
{ in: "body", name: "payload", schema: { type: "string" } },
2121
],
22-
2
22+
{ version: 2 }
2323
).trim()
2424
).toBe(
2525
`query: {
@@ -38,11 +38,13 @@ describe.only("transformParametersArray()", () => {
3838
expect(
3939
transformParametersArray(
4040
[{ $ref: "#/parameters/per_page" }, { $ref: "#/parameters/page" }, { $ref: "#/parameters/since" }],
41-
2,
4241
{
43-
per_page: { in: "query", name: "per_page", required: true, type: "number" },
44-
page: { in: "query", name: "page", type: "number" },
45-
since: { in: "query", name: "since", type: "string" },
42+
version: 2,
43+
globalParameters: {
44+
per_page: { in: "query", name: "per_page", required: true, type: "number" },
45+
page: { in: "query", name: "page", type: "number" },
46+
since: { in: "query", name: "since", type: "string" },
47+
},
4648
}
4749
).trim()
4850
).toBe(`query: {
@@ -78,7 +80,7 @@ describe.only("transformParametersArray()", () => {
7880
},
7981
},
8082
],
81-
3
83+
{ version: 3 }
8284
).trim()
8385
).toBe(
8486
`query: {
@@ -99,11 +101,13 @@ describe.only("transformParametersArray()", () => {
99101
{ $ref: "#/components/parameters/page" },
100102
{ $ref: "#/components/parameters/since" },
101103
],
102-
3,
103104
{
104-
per_page: { in: "query", name: "per_page", required: true },
105-
page: { in: "query", name: "page" },
106-
since: { in: "query", name: "since" },
105+
version: 3,
106+
globalParameters: {
107+
per_page: { in: "query", name: "per_page", required: true },
108+
page: { in: "query", name: "page" },
109+
since: { in: "query", name: "since" },
110+
},
107111
}
108112
).trim()
109113
).toBe(`query: {

tests/paths.test.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import prettier from "prettier";
22
import { transformPathsObj } from "../src/transform/paths";
33

4-
const transform = (schema: any, operations: any = { operations: {}, parameters: {} }, parameters?: any) =>
5-
prettier.format(`export interface paths {\n${transformPathsObj(schema, { operations, parameters }, 3)}\n}`.trim(), {
6-
parser: "typescript",
7-
});
4+
const transform = (schema: any, operations: any = { operations: {}, globalParameters: {} }, globalParameters?: any) =>
5+
prettier.format(
6+
`export interface paths {\n${transformPathsObj(schema, { operations, globalParameters, version: 3 })}\n}`.trim(),
7+
{
8+
parser: "typescript",
9+
}
10+
);
811

912
describe("transformPathsObj", () => {
1013
it("basic", () => {

0 commit comments

Comments
 (0)