From e730db8903c371c9006b2934c1adb9fdea028621 Mon Sep 17 00:00:00 2001 From: Rohin Bhargava <rohin@buildwithfern.com> Date: Fri, 20 Dec 2024 16:40:24 +0000 Subject: [PATCH] try removing cross product from converter --- .../src/api-definition/migrators/v1ToV2.ts | 133 +++++++++--------- 1 file changed, 70 insertions(+), 63 deletions(-) diff --git a/packages/fdr-sdk/src/api-definition/migrators/v1ToV2.ts b/packages/fdr-sdk/src/api-definition/migrators/v1ToV2.ts index d90154a94c..90ac5af32d 100644 --- a/packages/fdr-sdk/src/api-definition/migrators/v1ToV2.ts +++ b/packages/fdr-sdk/src/api-definition/migrators/v1ToV2.ts @@ -407,71 +407,78 @@ export class ApiDefinitionV1ToLatest { if (examples.length === 0) { return undefined; } - // We take the cross product of requests and responses - return endpoint.responses?.flatMap((response) => { - return (endpoint.requests ?? []).flatMap((request) => - examples.map((example): V2.ExampleEndpointCall => { - const toRet: V2.ExampleEndpointCall = { - path: example.path, - responseStatusCode: example.responseStatusCode, - name: example.name, - description: example.description, - pathParameters: example.pathParameters, - queryParameters: example.queryParameters, - headers: example.headers, - requestBody: example.requestBodyV3, - responseBody: example.responseBodyV3, - snippets: undefined, - }; - - if (example.requestBodyV3) { - toRet.requestBody = visitDiscriminatedUnion( - example.requestBodyV3, - )._visit<APIV1Read.ExampleEndpointRequest>({ - bytes: (value) => value, - json: (value) => ({ - type: "json", - value: sortKeysByShape(value.value, request.body, this.types), - }), - form: (value) => ({ - type: "form", - value: mapValues(value.value, (formValue, key): APIV1Read.FormValue => { - if (formValue.type === "json") { - const shape = - request.body.type === "formData" - ? request.body.fields.find( - (field): field is V2.FormDataField.Property => - field.key === key && field.type === "property", - )?.valueShape - : undefined; - return { - type: "json", - value: sortKeysByShape(formValue.value, shape, this.types), - }; - } else { - return formValue; - } - }), - }), - }); - } - - if (toRet.responseBody) { - toRet.responseBody.value = sortKeysByShape(toRet.responseBody.value, response.body, this.types); - } - - toRet.snippets = this.migrateEndpointSnippets( - endpoint, - toRet, - example.codeSamples, - example.codeExamples, - this.flags, - ); - - return toRet; - }), + + examples.map((example): V2.ExampleEndpointCall => { + const toRet: V2.ExampleEndpointCall = { + path: example.path, + responseStatusCode: example.responseStatusCode, + name: example.name, + description: example.description, + pathParameters: example.pathParameters, + queryParameters: example.queryParameters, + headers: example.headers, + requestBody: example.requestBodyV3, + responseBody: example.responseBodyV3, + snippets: undefined, + }; + + if (example.requestBodyV3) { + toRet.requestBody = visitDiscriminatedUnion( + example.requestBodyV3, + )._visit<APIV1Read.ExampleEndpointRequest>({ + bytes: (value) => value, + json: (value) => ({ + type: "json", + value: sortKeysByShape(value.value, endpoint.requests?.[0]?.body, this.types), + }), + form: (value) => ({ + type: "form", + value: mapValues(value.value, (formValue, key): APIV1Read.FormValue => { + if (formValue.type === "json") { + const shape = + endpoint.requests?.[0]?.body.type === "formData" + ? endpoint.requests?.[0]?.body.fields.find( + (field): field is V2.FormDataField.Property => + field.key === key && field.type === "property", + )?.valueShape + : undefined; + return { + type: "json", + value: sortKeysByShape(formValue.value, shape, this.types), + }; + } else { + return formValue; + } + }), + }), + }); + } + + if (toRet.responseBody) { + toRet.responseBody.value = sortKeysByShape( + toRet.responseBody.value, + endpoint.responses?.[0]?.body, + this.types, + ); + } + + toRet.snippets = this.migrateEndpointSnippets( + endpoint, + toRet, + example.codeSamples, + example.codeExamples, + this.flags, ); + + return toRet; }); + + // // We take the cross product of requests and responses + // return endpoint.responses?.flatMap((response) => { + // return (endpoint.requests ?? []).flatMap((request) => + // {} + // ); + // }); }; migrateHttpErrors = (errors: APIV1Read.ErrorDeclarationV2[] | undefined): V2.ErrorResponse[] | undefined => {