Skip to content

Commit

Permalink
fix, ir: fall back to the generated name when creating schemas if the… (
Browse files Browse the repository at this point in the history
  • Loading branch information
armandobelardo authored May 8, 2024
1 parent 62fc4a2 commit 47e2404
Show file tree
Hide file tree
Showing 25 changed files with 457 additions and 233 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export interface APIDefinitionLocation {
origin: string | undefined;
overrides: string | undefined;
audiences: string[] | undefined;
shouldUseTitleAsName: boolean | undefined;
}

export interface GeneratorGroup {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { GeneratorInvocationSchema } from "./schemas/GeneratorInvocationSchema";
import { GeneratorOutputSchema } from "./schemas/GeneratorOutputSchema";
import {
API_ORIGIN_LOCATION_KEY,
API_SETTINGS_KEY,
ASYNC_API_LOCATION_KEY,
GeneratorsConfigurationSchema,
OPENAPI_LOCATION_KEY,
Expand Down Expand Up @@ -69,7 +70,8 @@ async function parseAPIConfiguration(
path: apiConfiguration,
origin: undefined,
overrides: undefined,
audiences: []
audiences: [],
shouldUseTitleAsName: undefined
});
} else if (Array.isArray(apiConfiguration)) {
for (const definition of apiConfiguration) {
Expand All @@ -78,14 +80,16 @@ async function parseAPIConfiguration(
path: definition,
origin: undefined,
overrides: undefined,
audiences: []
audiences: [],
shouldUseTitleAsName: undefined
});
} else {
apiDefinitions.push({
path: definition.path,
origin: definition.origin,
overrides: definition.overrides,
audiences: definition.audiences
audiences: definition.audiences,
shouldUseTitleAsName: definition.settings?.["use-title"]
});
}
}
Expand All @@ -94,28 +98,32 @@ async function parseAPIConfiguration(
path: apiConfiguration.path,
origin: apiConfiguration.origin,
overrides: apiConfiguration.overrides,
audiences: apiConfiguration.audiences
audiences: apiConfiguration.audiences,
shouldUseTitleAsName: apiConfiguration.settings?.["use-title"]
});
}
} else {
const openapi = rawGeneratorsConfiguration[OPENAPI_LOCATION_KEY];
const apiOrigin = rawGeneratorsConfiguration[API_ORIGIN_LOCATION_KEY];
const openapiOverrides = rawGeneratorsConfiguration[OPENAPI_OVERRIDES_LOCATION_KEY];
const asyncapi = rawGeneratorsConfiguration[ASYNC_API_LOCATION_KEY];
const settings = rawGeneratorsConfiguration[API_SETTINGS_KEY];

if (openapi != null && typeof openapi === "string") {
apiDefinitions.push({
path: openapi,
origin: apiOrigin,
overrides: openapiOverrides,
audiences: []
audiences: [],
shouldUseTitleAsName: settings?.["use-title"]
});
} else if (openapi != null) {
apiDefinitions.push({
path: openapi.path,
origin: openapi.origin,
overrides: openapi.overrides,
audiences: []
audiences: [],
shouldUseTitleAsName: openapi.settings?.["use-title"]
});
}

Expand All @@ -124,7 +132,8 @@ async function parseAPIConfiguration(
path: asyncapi,
origin: apiOrigin,
overrides: undefined,
audiences: []
audiences: [],
shouldUseTitleAsName: settings?.["use-title"]
});
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ import { z } from "zod";
*/
export const APIDefinitionPathSchema = z.string().describe("Path to the OpenAPI, AsyncAPI or Fern Definition");

export const APIDefinitionSettingsSchema = z.object({
"use-title": z
.optional(z.boolean())
.describe(
"Whether to use the titles of the schemas within an OpenAPI definition as the names of the types within Fern. Defaults to true."
)
});

/**
* @example
* api:
Expand All @@ -28,7 +36,8 @@ export const APIDefintionWithOverridesSchema = z.object({
.optional(z.string())
.describe("The URL of the API definition origin, from which the file should be polled."),
overrides: z.optional(z.string()).describe("Path to the OpenAPI or AsyncAPI overrides"),
audiences: z.optional(z.array(z.string())).describe("Audiences that you would like to filter to")
audiences: z.optional(z.array(z.string())).describe("Audiences that you would like to filter to"),
settings: z.optional(APIDefinitionSettingsSchema)
});

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { z } from "zod";
import { APIConfigurationSchema } from "./APIConfigurationSchema";
import { APIConfigurationSchema, APIDefinitionSettingsSchema } from "./APIConfigurationSchema";
import { GeneratorGroupSchema } from "./GeneratorGroupSchema";
import { GeneratorsOpenAPISchema } from "./GeneratorsOpenAPISchema";
import { WhitelabelConfigurationSchema } from "./WhitelabelConfigurationSchema";
Expand All @@ -9,6 +9,7 @@ export const OPENAPI_LOCATION_KEY = "openapi";
export const OPENAPI_OVERRIDES_LOCATION_KEY = "openapi-overrides";
export const API_ORIGIN_LOCATION_KEY = "spec-origin";
export const ASYNC_API_LOCATION_KEY = "async-api";
export const API_SETTINGS_KEY = "api-settings";

export const GeneratorsConfigurationSchema = z.strictObject({
api: z.optional(APIConfigurationSchema),
Expand All @@ -22,7 +23,8 @@ export const GeneratorsConfigurationSchema = z.strictObject({
[OPENAPI_LOCATION_KEY]: z.optional(GeneratorsOpenAPISchema),
[OPENAPI_OVERRIDES_LOCATION_KEY]: z.optional(z.string()),
[API_ORIGIN_LOCATION_KEY]: z.optional(z.string()),
[ASYNC_API_LOCATION_KEY]: z.optional(z.string())
[ASYNC_API_LOCATION_KEY]: z.optional(z.string()),
[API_SETTINGS_KEY]: z.optional(APIDefinitionSettingsSchema)
});

export type GeneratorsConfigurationSchema = z.infer<typeof GeneratorsConfigurationSchema>;
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { z } from "zod";
import { APIDefinitionSettingsSchema } from "./APIConfigurationSchema";

export const OPENAPI_DISABLE_EXAMPLES_KEY = "disable-examples";

export const GeneratorsOpenAPIObjectSchema = z.strictObject({
path: z.string(),
origin: z.optional(z.string()),
overrides: z.optional(z.string()),
[OPENAPI_DISABLE_EXAMPLES_KEY]: z.optional(z.boolean())
[OPENAPI_DISABLE_EXAMPLES_KEY]: z.optional(z.boolean()),
settings: APIDefinitionSettingsSchema
});

export type GeneratorsOpenAPIObjectSchema = z.infer<typeof GeneratorsOpenAPIObjectSchema>;
Loading

0 comments on commit 47e2404

Please sign in to comment.