Skip to content

Commit

Permalink
update example generator to take version into account
Browse files Browse the repository at this point in the history
  • Loading branch information
armandobelardo committed Oct 22, 2024
1 parent b4e20fa commit 8c5accb
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { generatorsYml } from "@fern-api/configuration";
import { assertNever } from "@fern-api/core-utils";
import { ContainerType, ExampleContainer, ExamplePrimitive, TypeDeclaration, TypeId } from "@fern-api/ir-sdk";
import { ExampleGenerationResult, ExampleGenerationSuccess } from "./ExampleGenerationResult";
Expand All @@ -14,6 +15,9 @@ export declare namespace generateContainerExample {
currentDepth: number;

skipOptionalProperties: boolean;

generationLanguage: generatorsYml.GenerationLanguage | undefined;
version: string | undefined;
}
}

Expand All @@ -23,7 +27,9 @@ export function generateContainerExample({
maxDepth,
currentDepth,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
}: generateContainerExample.Args): ExampleGenerationResult<ExampleContainer> {
if (currentDepth >= maxDepth) {
return generateEmptyContainerExample({ containerType });
Expand All @@ -36,7 +42,9 @@ export function generateContainerExample({
maxDepth,
currentDepth: currentDepth + 1,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (example.type === "failure") {
return generateEmptyContainerExample({ containerType });
Expand Down Expand Up @@ -81,7 +89,9 @@ export function generateContainerExample({
maxDepth,
currentDepth: currentDepth + 1,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (example.type === "failure") {
return generateEmptyContainerExample({ containerType });
Expand All @@ -102,7 +112,9 @@ export function generateContainerExample({
maxDepth,
currentDepth: currentDepth + 1,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (example.type === "failure") {
return generateEmptyContainerExample({ containerType });
Expand All @@ -123,15 +135,19 @@ export function generateContainerExample({
maxDepth,
currentDepth: currentDepth + 1,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
const valueExample = generateTypeReferenceExample({
fieldName,
typeReference: containerType.valueType,
maxDepth,
currentDepth: currentDepth + 1,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (keyExample.type === "failure" || valueExample.type === "failure") {
return generateEmptyContainerExample({ containerType });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ export function generatePrimitiveExample({
}
case "BASE_64": {
const example =
generationLanguage === "python" && isVersionAhead(version, "1.10.0")
? ExamplePrimitive.base64(Examples.BASE64)
: ExamplePrimitive.string({ original: Examples.BASE64 });
// Before version 4.2.8, Python expected a string example for base64.
generationLanguage === "python" && version != null && !isVersionAhead(version, "4.2.8")
? ExamplePrimitive.string({ original: Examples.BASE64 })
: ExamplePrimitive.base64(Examples.BASE64);
return { type: "success", example, jsonExample: Examples.BASE64 };
}
case "BOOLEAN": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ export function generateEndpointExample({
service,
typeDeclarations,
skipOptionalRequestProperties,
generationResponse
generationResponse,
generationLanguage,
version
}: generateEndpointExample.Args): ExampleGenerationResult<ExampleEndpointCall> {
const result: Omit<ExampleEndpointCall, "id" | "url"> = {
name: undefined,
Expand Down Expand Up @@ -99,7 +101,9 @@ export function generateEndpointExample({
maxDepth: 1,
typeDeclarations,
typeReference: pathParameter.valueType,
skipOptionalProperties: skipOptionalRequestProperties
skipOptionalProperties: skipOptionalRequestProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand All @@ -125,7 +129,9 @@ export function generateEndpointExample({
maxDepth: 1,
typeDeclarations,
typeReference: queryParameter.valueType,
skipOptionalProperties: skipOptionalRequestProperties
skipOptionalProperties: skipOptionalRequestProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand Down Expand Up @@ -162,7 +168,9 @@ export function generateEndpointExample({
maxDepth: 1,
typeDeclarations,
typeReference: header.valueType,
skipOptionalProperties: skipOptionalRequestProperties
skipOptionalProperties: skipOptionalRequestProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand Down Expand Up @@ -194,7 +202,9 @@ export function generateEndpointExample({
typeDeclarations,
currentDepth: 1,
maxDepth: 10,
skipOptionalProperties: skipOptionalRequestProperties
skipOptionalProperties: skipOptionalRequestProperties,
generationLanguage,
version
});
if (
propertyExample.type === "failure" &&
Expand Down Expand Up @@ -227,7 +237,9 @@ export function generateEndpointExample({
maxDepth: 10,
typeDeclarations,
typeReference: endpoint.requestBody.requestBodyType,
skipOptionalProperties: skipOptionalRequestProperties
skipOptionalProperties: skipOptionalRequestProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand All @@ -251,7 +263,9 @@ export function generateEndpointExample({
maxDepth: 10,
typeDeclarations,
typeReference: endpoint.response.body.value.responseBodyType,
skipOptionalProperties: false
skipOptionalProperties: false,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand Down Expand Up @@ -281,7 +295,9 @@ export function generateEndpointExample({
maxDepth: 10,
typeDeclarations,
typeReference: generationResponse.declaration.type,
skipOptionalProperties: skipOptionalRequestProperties
skipOptionalProperties: skipOptionalRequestProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { generatorsYml } from "@fern-api/configuration";
import {
ExampleTypeShape,
TypeDeclaration,
Expand All @@ -23,6 +24,9 @@ export declare namespace generateTypeDeclarationExample {
currentDepth: number;

skipOptionalProperties: boolean;

generationLanguage: generatorsYml.GenerationLanguage | undefined;
version: string | undefined;
}
}

Expand All @@ -32,7 +36,9 @@ export function generateTypeDeclarationExample({
typeDeclaration,
maxDepth,
currentDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
}: generateTypeDeclarationExample.Args): ExampleGenerationResult<ExampleTypeShape> {
switch (typeDeclaration.shape.type) {
case "alias": {
Expand All @@ -42,7 +48,9 @@ export function generateTypeDeclarationExample({
typeReference: typeDeclaration.shape.aliasOf,
maxDepth,
currentDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand Down Expand Up @@ -77,7 +85,9 @@ export function generateTypeDeclarationExample({
typeDeclarations,
currentDepth,
maxDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (objectExample.type === "failure") {
return objectExample;
Expand All @@ -98,7 +108,9 @@ export function generateTypeDeclarationExample({
typeDeclarations,
currentDepth: currentDepth + 1,
maxDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (variantExample.type === "failure") {
++i;
Expand Down Expand Up @@ -130,7 +142,9 @@ export function generateTypeDeclarationExample({
typeDeclarations,
currentDepth,
maxDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (
basePropertyExample.type === "failure" &&
Expand Down Expand Up @@ -185,7 +199,9 @@ export function generateTypeDeclarationExample({
objectTypeDeclaration: typeDeclaration.shape,
typeDeclaration,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (objectExample.type === "failure") {
return objectExample;
Expand Down Expand Up @@ -220,7 +236,9 @@ export function generateTypeDeclarationExample({
fieldName,
typeReference: value.type,
typeDeclarations,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (singlePropertyExample.type === "failure") {
return singlePropertyExample;
Expand Down Expand Up @@ -263,7 +281,9 @@ function generateObjectDeclarationExample({
typeDeclarations,
maxDepth,
currentDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
}: {
fieldName?: string;
typeDeclaration: TypeDeclaration;
Expand All @@ -272,6 +292,8 @@ function generateObjectDeclarationExample({
maxDepth: number;
currentDepth: number;
skipOptionalProperties: boolean;
generationLanguage: generatorsYml.GenerationLanguage | undefined;
version: string | undefined;
}): ExampleGenerationResult<ExampleObjectType> {
const jsonExample: Record<string, unknown> = {};
const properties: ExampleObjectProperty[] = [];
Expand All @@ -285,7 +307,9 @@ function generateObjectDeclarationExample({
typeDeclarations,
currentDepth: currentDepth + 1,
maxDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (
propertyExample.type === "failure" &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { generatePrimitiveExample } from "./generatePrimitiveExample";
import { generateContainerExample, generateEmptyContainerExample } from "./generateContainerExample";
import { ExampleGenerationResult } from "./ExampleGenerationResult";
import { generateTypeDeclarationExample } from "./generateTypeDeclarationExample";
import { generatorsYml } from "@fern-api/configuration";

export declare namespace generateTypeReferenceExample {
interface Args {
Expand All @@ -21,6 +22,9 @@ export declare namespace generateTypeReferenceExample {
currentDepth: number;

skipOptionalProperties: boolean;

generationLanguage: generatorsYml.GenerationLanguage | undefined;
version: string | undefined;
}
}

Expand All @@ -30,7 +34,9 @@ export function generateTypeReferenceExample({
typeDeclarations,
maxDepth,
currentDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
}: generateTypeReferenceExample.Args): ExampleGenerationResult<ExampleTypeReference> {
if (currentDepth > maxDepth) {
return { type: "failure", message: "Exceeded max depth" };
Expand All @@ -47,7 +53,9 @@ export function generateTypeReferenceExample({
typeDeclarations,
maxDepth,
currentDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
return generatedExample;
Expand All @@ -72,7 +80,9 @@ export function generateTypeReferenceExample({
typeDeclarations,
maxDepth,
currentDepth,
skipOptionalProperties
skipOptionalProperties,
generationLanguage,
version
});
if (generatedExample.type === "failure") {
const { example, jsonExample } = generateEmptyContainerExample({
Expand Down Expand Up @@ -100,7 +110,9 @@ export function generateTypeReferenceExample({
case "primitive": {
const { jsonExample, example } = generatePrimitiveExample({
fieldName,
primitiveType: typeReference.primitive
primitiveType: typeReference.primitive,
generationLanguage,
version
});
return {
type: "success",
Expand Down
6 changes: 3 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 8c5accb

Please sign in to comment.