import { defineConfig, defineTransformer } from 'orval' const selectedTag = 'twitter-lite-e2e' const selectedOperationIds = new Set([ 'getUserByScreenName', 'getUserTweets', 'getTweetDetail', 'getSearchTimeline', 'getListLatestTweetsTimeline', ]) const selectE2eOperations = defineTransformer((document) => { const foundOperationIds = new Set() for (const pathItem of Object.values(document.paths ?? {})) { if (!pathItem || typeof pathItem !== 'object') continue for (const candidate of Object.values(pathItem)) { if ( !candidate || typeof candidate !== 'object' || Array.isArray(candidate) || !('operationId' in candidate) ) { continue } const operation = candidate as { operationId?: string tags?: string[] } if ( operation.operationId && selectedOperationIds.has(operation.operationId) ) { foundOperationIds.add(operation.operationId) operation.tags = [...(operation.tags ?? []), selectedTag] } } } const missingOperationIds = [...selectedOperationIds].filter( (operationId) => !foundOperationIds.has(operationId), ) if (missingOperationIds.length > 0) { throw new Error( `twitter-openapi is missing selected operations: ${missingOperationIds.join(', ')}`, ) } return document }) export default defineConfig({ twitterOpenApi: { input: { target: 'https://raw.githubusercontent.com/fa0311/twitter-openapi/590dae5c9f8575abc91d3774946bfe6f23960aba/dist/docs/openapi-3.0.yaml', filters: { mode: 'include', tags: [selectedTag], }, override: { transformer: selectE2eOperations, }, }, output: { clean: true, client: 'fetch', mode: 'single', target: './e2e/generated/twitter-openapi/client.ts', }, }, })