Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions graphql/codegen/src/core/codegen/barrel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
// ============================================================================
Expand Down
19 changes: 9 additions & 10 deletions graphql/codegen/src/core/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -194,16 +195,14 @@ export async function generate(options: GenerateOptions = {}): Promise<GenerateR
}
}

// Generate unified barrel when both are enabled
if (bothEnabled && !options.dryRun) {
const barrelContent = `/**
* Generated SDK - auto-generated, do not edit
* @generated by @constructive-io/graphql-codegen
*/
export * from './types';
export * from './hooks';
export * from './orm';
`;
// Generate barrel file at output root
// This re-exports from the appropriate subdirectories based on which generators are enabled
if (!options.dryRun) {
const barrelContent = generateRootBarrel({
hasTypes: bothEnabled,
hasHooks: runReactQuery,
hasOrm: runOrm,
});
await writeGeneratedFiles([{ path: 'index.ts', content: barrelContent }], outputRoot, []);
}

Expand Down