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 => {