Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e264244
refactor(graphql-codegen): separate concerns by moving business logic…
pyramation Jan 23, 2026
f5e9f7c
refactor(graphql-codegen): add database schema utilities and clean up…
pyramation Jan 23, 2026
be73198
test(cli): update codegen tests to use mock prompter
pyramation Jan 23, 2026
2ac0112
refactor(graphql-codegen): rename generator types and use switch stat…
pyramation Jan 23, 2026
2cb8113
refactor(cli): replace ternary operator with switch statement in code…
pyramation Jan 23, 2026
3130c67
feat(graphql-codegen): add single-step database generation support
pyramation Jan 23, 2026
d042f9c
feat(graphql-codegen): add PGPM module schema source support
pyramation Jan 23, 2026
2b14b8a
Merge main branch and resolve pnpm-lock.yaml conflict
pyramation Jan 23, 2026
b925092
feat(graphql-codegen): add apiNames support for automatic schema disc…
pyramation Jan 23, 2026
5a66484
feat(graphql-codegen): add unified generate function with --reactquer…
pyramation Jan 23, 2026
b219348
feat(graphql-codegen): add shared types pipeline and make generateRea…
pyramation Jan 23, 2026
1d8eacb
test(cli): update codegen tests to use unified generate() function
pyramation Jan 23, 2026
595f0ea
refactor(graphql-codegen): add database/pgpm fields to config types a…
pyramation Jan 23, 2026
22a3bb2
refactor(graphql-codegen): simplify config types using single-type pa…
pyramation Jan 23, 2026
e33f555
fix(cli): use enableReactQuery/enableOrm instead of reactQuery/orm in…
pyramation Jan 23, 2026
699fbbc
test(cli): update codegen test to use enableReactQuery/enableOrm fiel…
pyramation Jan 23, 2026
6d9cd87
feat(graphql-codegen): add localhost DNS resolution for *.localhost e…
pyramation Jan 23, 2026
467c795
refactor(graphql-codegen): rename --reactquery flag to --react-query
pyramation Jan 23, 2026
e86a68d
docs(graphql-codegen): rewrite README with programmatic API as primar…
pyramation Jan 23, 2026
5b8ad1a
fix(graphql-codegen): remove non-existent type exports from index.ts
pyramation Jan 23, 2026
65d2ff9
refactor(graphql-codegen): restructure database/PGPM config with nest…
pyramation Jan 23, 2026
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
2,122 changes: 430 additions & 1,692 deletions graphql/codegen/README.md

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions graphql/codegen/examples/single-target.config.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { defineConfig } from '../src/types/config';

/**
* Single-target config (backward compatible format)
* Tests that the old config format without "targets" key still works.
* Single-target config
*/
export default defineConfig({
endpoint: 'http://api.localhost:3000/graphql',
Expand Down
21 changes: 14 additions & 7 deletions graphql/codegen/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@constructive-io/graphql-codegen",
"version": "2.32.0",
"description": "CLI-based GraphQL SDK generator for PostGraphile endpoints with React Query hooks",
"description": "GraphQL SDK generator for Constructive databases with React Query hooks",
"keywords": [
"graphql",
"postgraphile",
Expand Down Expand Up @@ -35,7 +35,7 @@
"scripts": {
"clean": "makage clean",
"prepack": "npm run build",
"copy:ts": "makage copy src/cli/codegen/orm/query-builder.ts dist/cli/codegen/orm --flat",
"copy:ts": "makage copy src/core/codegen/orm/query-builder.ts dist/core/codegen/orm --flat",
"build": "makage build && npm run copy:ts",
"build:dev": "makage build --dev && npm run copy:ts",
"dev": "ts-node ./src/index.ts",
Expand All @@ -44,10 +44,10 @@
"fmt:check": "prettier --check .",
"test": "jest --passWithNoTests",
"test:watch": "jest --watch",
"example:codegen:sdk": "tsx src/cli/index.ts generate --config examples/multi-target.config.ts",
"example:codegen:orm": "tsx src/cli/index.ts generate-orm --config examples/multi-target.config.ts",
"example:codegen:sdk:schema": "node dist/cli/index.js generate --schema examples/example.schema.graphql --output examples/output/generated-sdk-schema",
"example:codegen:orm:schema": "node dist/cli/index.js generate-orm --schema examples/example.schema.graphql --output examples/output/generated-orm-schema",
"example:codegen:sdk": "tsx src/cli/index.ts generate --config examples/multi-target.config.ts --react-query",
"example:codegen:orm": "tsx src/cli/index.ts generate --config examples/multi-target.config.ts --orm",
"example:codegen:sdk:schema": "node dist/cli/index.js generate --schema examples/example.schema.graphql --output examples/output/generated-sdk-schema --react-query",
"example:codegen:orm:schema": "node dist/cli/index.js generate --schema examples/example.schema.graphql --output examples/output/generated-orm-schema --orm",
"example:sdk": "tsx examples/react-hooks-sdk-test.tsx",
"example:orm": "tsx examples/orm-sdk-test.ts",
"example:sdk:typecheck": "tsc --noEmit --jsx react --esModuleInterop --skipLibCheck --moduleResolution node examples/react-hooks-sdk-test.tsx"
Expand All @@ -56,8 +56,10 @@
"@0no-co/graphql.web": "^1.1.2",
"@babel/generator": "^7.28.6",
"@babel/types": "^7.28.6",
"@constructive-io/graphql-server": "workspace:^",
"@constructive-io/graphql-types": "workspace:^",
"@inquirerer/utils": "^3.2.0",
"@pgpmjs/core": "workspace:^",
"ajv": "^8.17.1",
"deepmerge": "^4.3.1",
"find-and-require-package-json": "^0.9.0",
Expand All @@ -66,7 +68,12 @@
"inflekt": "^0.3.0",
"inquirerer": "^4.4.0",
"jiti": "^2.6.1",
"prettier": "^3.7.4"
"pg-cache": "workspace:^",
"pg-env": "workspace:^",
"pgsql-client": "workspace:^",
"pgsql-seed": "workspace:^",
"prettier": "^3.7.4",
"undici": "^7.19.0"
},
"peerDependencies": {
"@tanstack/react-query": "^5.0.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
generateQueryBuilderFile,
generateSelectTypesFile,
generateCreateClientFile,
} from '../../cli/codegen/orm/client-generator';
} from '../../core/codegen/orm/client-generator';
import type { CleanTable, CleanFieldType, CleanRelations } from '../../types/schema';

// ============================================================================
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import * as os from 'node:os';
import { formatOutput } from '../../cli/commands/generate';
import { formatOutput } from '../../core/output';

describe('formatOutput', () => {
let tempDir: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* used to validate the AST-based migration produces equivalent results.
*/
// Jest globals - no import needed
import { generateInputTypesFile, collectInputTypeNames, collectPayloadTypeNames } from '../../cli/codegen/orm/input-types-generator';
import { generateInputTypesFile, collectInputTypeNames, collectPayloadTypeNames } from '../../core/codegen/orm/input-types-generator';
import type {
CleanTable,
CleanFieldType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*
* Tests the generated model classes with findMany, findFirst, create, update, delete methods.
*/
import { generateModelFile } from '../../cli/codegen/orm/model-generator';
import { generateModelFile } from '../../core/codegen/orm/model-generator';
import type { CleanTable, CleanFieldType, CleanRelations } from '../../types/schema';

// ============================================================================
Expand Down
10 changes: 5 additions & 5 deletions graphql/codegen/src/__tests__/codegen/query-keys-factory.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
* - Mutation keys factory (mutation-keys.ts)
* - Cache invalidation helpers (invalidation.ts)
*/
import { generateQueryKeysFile } from '../../cli/codegen/query-keys';
import { generateMutationKeysFile } from '../../cli/codegen/mutation-keys';
import { generateInvalidationFile } from '../../cli/codegen/invalidation';
import { generateQueryKeysFile } from '../../core/codegen/query-keys';
import { generateMutationKeysFile } from '../../core/codegen/mutation-keys';
import { generateInvalidationFile } from '../../core/codegen/invalidation';
import type { CleanTable, CleanFieldType, CleanRelations, CleanOperation, CleanTypeRef } from '../../types/schema';
import type { ResolvedQueryKeyConfig, EntityRelationship } from '../../types/config';
import type { QueryKeyConfig, EntityRelationship } from '../../types/config';

const fieldTypes = {
uuid: { gqlType: 'UUID', isArray: false } as CleanFieldType,
Expand Down Expand Up @@ -141,7 +141,7 @@ const fieldTable = createTable({
},
});

const simpleConfig: ResolvedQueryKeyConfig = {
const simpleConfig: QueryKeyConfig = {
style: 'hierarchical',
relationships: {},
generateScopedKeys: true,
Expand Down
12 changes: 6 additions & 6 deletions graphql/codegen/src/__tests__/codegen/react-query-hooks.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,18 @@
* - Schema types
* - Barrel files
*/
import { generateListQueryHook, generateSingleQueryHook } from '../../cli/codegen/queries';
import { generateCreateMutationHook, generateUpdateMutationHook, generateDeleteMutationHook } from '../../cli/codegen/mutations';
import { generateCustomQueryHook } from '../../cli/codegen/custom-queries';
import { generateCustomMutationHook } from '../../cli/codegen/custom-mutations';
import { generateSchemaTypesFile } from '../../cli/codegen/schema-types-generator';
import { generateListQueryHook, generateSingleQueryHook } from '../../core/codegen/queries';
import { generateCreateMutationHook, generateUpdateMutationHook, generateDeleteMutationHook } from '../../core/codegen/mutations';
import { generateCustomQueryHook } from '../../core/codegen/custom-queries';
import { generateCustomMutationHook } from '../../core/codegen/custom-mutations';
import { generateSchemaTypesFile } from '../../core/codegen/schema-types-generator';
import {
generateQueriesBarrel,
generateMutationsBarrel,
generateMainBarrel,
generateCustomQueriesBarrel,
generateCustomMutationsBarrel,
} from '../../cli/codegen/barrel';
} from '../../core/codegen/barrel';
import type {
CleanTable,
CleanFieldType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
* - Mutation generators return null (since they require React Query)
* - Standalone fetch functions are still generated for queries
*/
import { generateListQueryHook, generateSingleQueryHook, generateAllQueryHooks } from '../../cli/codegen/queries';
import { generateCreateMutationHook, generateUpdateMutationHook, generateDeleteMutationHook, generateAllMutationHooks } from '../../cli/codegen/mutations';
import { generateCustomQueryHook, generateAllCustomQueryHooks } from '../../cli/codegen/custom-queries';
import { generateCustomMutationHook, generateAllCustomMutationHooks } from '../../cli/codegen/custom-mutations';
import { generateListQueryHook, generateSingleQueryHook, generateAllQueryHooks } from '../../core/codegen/queries';
import { generateCreateMutationHook, generateUpdateMutationHook, generateDeleteMutationHook, generateAllMutationHooks } from '../../core/codegen/mutations';
import { generateCustomQueryHook, generateAllCustomQueryHooks } from '../../core/codegen/custom-queries';
import { generateCustomMutationHook, generateAllCustomMutationHooks } from '../../core/codegen/custom-mutations';
import type { CleanTable, CleanFieldType, CleanRelations, CleanOperation, CleanTypeRef, TypeRegistry } from '../../types/schema';

// ============================================================================
Expand Down
2 changes: 1 addition & 1 deletion graphql/codegen/src/__tests__/codegen/scalars.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
BASE_FILTER_TYPE_NAMES,
scalarToTsType,
scalarToFilterType,
} from '../../cli/codegen/scalars';
} from '../../core/codegen/scalars';

describe('scalars', () => {
describe('SCALAR_TS_MAP', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/**
* Snapshot tests for schema-types-generator
*/
import { generateSchemaTypesFile } from '../../cli/codegen/schema-types-generator';
import { generateSchemaTypesFile } from '../../core/codegen/schema-types-generator';
import type { TypeRegistry, ResolvedType } from '../../types/schema';

function createTypeRegistry(types: Array<[string, ResolvedType]>): TypeRegistry {
Expand Down
2 changes: 1 addition & 1 deletion graphql/codegen/src/__tests__/codegen/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
gqlTypeToTs,
getPrimaryKeyInfo,
getGeneratedFileHeader,
} from '../../cli/codegen/utils';
} from '../../core/codegen/utils';
import type { CleanTable, CleanRelations } from '../../types/schema';

const emptyRelations: CleanRelations = {
Expand Down
6 changes: 3 additions & 3 deletions graphql/codegen/src/__tests__/config/resolve-config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ describe('config resolution', () => {
const resolved = resolveConfig(config);

expect(resolved.endpoint).toBe('https://api.example.com/graphql');
expect(resolved.schema).toBeNull();
expect(resolved.schemaFile).toBeUndefined();
expect(resolved.output).toBe(DEFAULT_CONFIG.output);
expect(resolved.tables.include).toEqual(DEFAULT_CONFIG.tables.include);
expect(resolved.queries.exclude).toEqual(DEFAULT_CONFIG.queries.exclude);
Expand Down Expand Up @@ -77,7 +77,7 @@ describe('config resolution', () => {
output: './generated/public',
},
admin: {
schema: './admin.schema.graphql',
schemaFile: './admin.schema.graphql',
output: './generated/admin',
headers: { 'X-Admin': '1' },
},
Expand All @@ -103,7 +103,7 @@ describe('config resolution', () => {
Authorization: 'Bearer token',
'X-Admin': '1',
});
expect(adminTarget?.config.schema).toBe('./admin.schema.graphql');
expect(adminTarget?.config.schemaFile).toBe('./admin.schema.graphql');
});

it('detects multi-target configs', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
* These tests verify that we can correctly infer CleanTable[] metadata
* from standard GraphQL introspection (without _meta query).
*/
import { inferTablesFromIntrospection } from '../../cli/introspect/infer-tables';
import { inferTablesFromIntrospection } from '../../core/introspect/infer-tables';
import type {
IntrospectionQueryResponse,
IntrospectionType,
Expand Down
Loading