From 52508bd86076b2a76de5a26821f1aac357de02ad Mon Sep 17 00:00:00 2001 From: Dan Lynch Date: Mon, 26 Jan 2026 02:26:51 +0000 Subject: [PATCH 1/2] fix(graphql-codegen): generate barrel file for ORM-only mode Previously, the barrel file at the output root (index.ts) was only generated when both reactQuery and orm were enabled. This caused issues when only orm was enabled, as the output directory would have an orm/ subdirectory but no index.ts to re-export from it. Now the barrel file is always generated, with exports based on which generators are enabled: - ORM only: exports from './orm' - React Query only: exports from './hooks' - Both: exports from './types', './hooks', and './orm' --- graphql/codegen/src/core/generate.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/graphql/codegen/src/core/generate.ts b/graphql/codegen/src/core/generate.ts index a11a193eb..fca70ee31 100644 --- a/graphql/codegen/src/core/generate.ts +++ b/graphql/codegen/src/core/generate.ts @@ -194,15 +194,25 @@ export async function generate(options: GenerateOptions = {}): Promise Date: Mon, 26 Jan 2026 02:30:55 +0000 Subject: [PATCH 2/2] refactor: use Babel AST for root barrel generation Refactored the barrel file generation to use Babel AST via the new generateRootBarrel() function in barrel.ts, for consistency with the rest of the codebase. --- graphql/codegen/src/core/codegen/barrel.ts | 39 ++++++++++++++++++++++ graphql/codegen/src/core/generate.ts | 23 ++++--------- 2 files changed, 45 insertions(+), 17 deletions(-) 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 fca70ee31..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'; @@ -197,23 +198,11 @@ export async function generate(options: GenerateOptions = {}): Promise