diff --git a/codegen/lib/layout/api-endpoint.ts b/codegen/lib/layout/api-endpoint.ts index 82345a62c..801621e67 100644 --- a/codegen/lib/layout/api-endpoint.ts +++ b/codegen/lib/layout/api-endpoint.ts @@ -20,6 +20,7 @@ import { mapResourceSample, normalizePropertyFormatForDocs, type ResourceSampleContext, + resourceSampleFilter, } from './api-route.js' const supportedSdks: SdkName[] = [ @@ -209,6 +210,7 @@ export function setEndpointLayoutContext( endpoint, resources, actionAttempts, + pathMetadata, ).map(mapResourceSample) const [primaryCodeSample, ...additionalCodeSamples] = endpoint.codeSamples @@ -265,6 +267,7 @@ const getResourceSamples = ( endpoint: Endpoint, resources: Resource[], actionAttempts: ActionAttempt[], + pathMetadata: PathMetadata, ): ResourceSample[] => { const { response } = endpoint @@ -288,7 +291,15 @@ const getResourceSamples = ( if (resource == null) return [] - const sample = resource.resourceSamples[0] + const metadata = pathMetadata[resource.routePath] + + const sample = resource.resourceSamples.filter( + resourceSampleFilter({ + include: metadata?.include_groups, + exclude: metadata?.exclude_groups, + }), + )[0] + if (sample == null) return [] return [ diff --git a/codegen/lib/layout/api-route.ts b/codegen/lib/layout/api-route.ts index 0a7323b08..e5343da8a 100644 --- a/codegen/lib/layout/api-route.ts +++ b/codegen/lib/layout/api-route.ts @@ -192,10 +192,7 @@ export const setApiRouteLayoutContext = ( ? groupProperties( legacyProperty.properties, legacyProperty.propertyGroups, - { - include: metadata.include_groups, - exclude: metadata.exclude_groups, - }, + groupOptions, ) : null @@ -210,24 +207,31 @@ export const setApiRouteLayoutContext = ( events: eventsByRoutePath.get(resource.routePath) ?? [], endpoints: file.endpoints, resourceSamples: resource.resourceSamples - .filter(({ title }) => { - if (groupOptions.include != null) { - return groupOptions.include.some((x) => - title.toLowerCase().includes(x.split('_')[0]?.slice(0, -1) ?? ''), - ) - } - if (groupOptions.exclude != null) { - return !groupOptions.exclude.some((x) => - title.toLowerCase().includes(x.split('_')[0]?.slice(0, -1) ?? ''), - ) - } - return true - }) + .filter(resourceSampleFilter(groupOptions)) .map(mapResourceSample), }) } } +export const resourceSampleFilter = + (groupOptions: { + include: string[] | undefined + exclude: string[] | undefined + }) => + ({ title }: ResourceSample): boolean => { + if (groupOptions.include != null) { + return groupOptions.include.some((x) => + title.toLowerCase().includes(x.split('_')[0]?.slice(0, -1) ?? ''), + ) + } + if (groupOptions.exclude != null) { + return !groupOptions.exclude.some((x) => + title.toLowerCase().includes(x.split('_')[0]?.slice(0, -1) ?? ''), + ) + } + return true + } + const groupVariants = ( property: Property | null, {