diff --git a/graphql/codegen/src/core/codegen/barrel.ts b/graphql/codegen/src/core/codegen/barrel.ts index fce2a9e3e..25d5a6fa6 100644 --- a/graphql/codegen/src/core/codegen/barrel.ts +++ b/graphql/codegen/src/core/codegen/barrel.ts @@ -192,6 +192,45 @@ export function generateMainBarrel( return generateCode(statements); } +// ============================================================================ +// Root barrel for unified output +// ============================================================================ + +export interface RootBarrelOptions { + hasTypes?: boolean; + hasHooks?: boolean; + hasOrm?: boolean; +} + +/** + * Generate the root index.ts barrel file for the output directory. + * Re-exports from subdirectories based on which generators are enabled. + */ +export function generateRootBarrel(options: RootBarrelOptions = {}): string { + const { hasTypes = false, hasHooks = false, hasOrm = false } = options; + const statements: t.Statement[] = []; + + if (hasTypes) { + statements.push(exportAllFrom('./types')); + } + if (hasHooks) { + statements.push(exportAllFrom('./hooks')); + } + if (hasOrm) { + statements.push(exportAllFrom('./orm')); + } + + // Add file header as leading comment on first statement + if (statements.length > 0) { + addJSDocComment(statements[0], [ + 'Generated SDK - auto-generated, do not edit', + '@generated by @constructive-io/graphql-codegen', + ]); + } + + return generateCode(statements); +} + // ============================================================================ // Custom operation barrels (includes both table and custom hooks) // ============================================================================ diff --git a/graphql/codegen/src/core/generate.ts b/graphql/codegen/src/core/generate.ts index a11a193eb..51e679a2d 100644 --- a/graphql/codegen/src/core/generate.ts +++ b/graphql/codegen/src/core/generate.ts @@ -9,6 +9,7 @@ import path from 'path'; import { createSchemaSource, validateSourceOptions } from './introspect'; import { runCodegenPipeline, validateTablesFound } from './pipeline'; import { generate as generateReactQueryFiles } from './codegen'; +import { generateRootBarrel } from './codegen/barrel'; import { generateOrm as generateOrmFiles } from './codegen/orm'; import { generateSharedTypes } from './codegen/shared'; import { writeGeneratedFiles } from './output'; @@ -194,16 +195,14 @@ export async function generate(options: GenerateOptions = {}): Promise