@constructive-io/graphql-codegen 4.17.0 → 4.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/core/codegen/barrel.d.ts +6 -6
  2. package/core/codegen/cli/arg-mapper.d.ts +3 -3
  3. package/core/codegen/cli/command-map-generator.d.ts +4 -4
  4. package/core/codegen/cli/custom-command-generator.d.ts +2 -2
  5. package/core/codegen/cli/docs-generator.d.ts +7 -7
  6. package/core/codegen/cli/index.d.ts +7 -7
  7. package/core/codegen/cli/table-command-generator.d.ts +3 -3
  8. package/core/codegen/custom-mutations.d.ts +3 -3
  9. package/core/codegen/custom-queries.d.ts +3 -3
  10. package/core/codegen/docs-utils.d.ts +10 -10
  11. package/core/codegen/docs-utils.js +1 -1
  12. package/core/codegen/hooks-ast.d.ts +4 -4
  13. package/core/codegen/hooks-docs-generator.d.ts +5 -5
  14. package/core/codegen/index.d.ts +5 -5
  15. package/core/codegen/invalidation.d.ts +2 -2
  16. package/core/codegen/mutation-keys.d.ts +3 -3
  17. package/core/codegen/mutations.d.ts +5 -5
  18. package/core/codegen/orm/barrel.d.ts +2 -2
  19. package/core/codegen/orm/client-generator.d.ts +2 -2
  20. package/core/codegen/orm/custom-ops-generator.d.ts +3 -3
  21. package/core/codegen/orm/custom-ops-generator.js +1 -1
  22. package/core/codegen/orm/docs-generator.d.ts +5 -5
  23. package/core/codegen/orm/index.d.ts +4 -4
  24. package/core/codegen/orm/input-types-generator.d.ts +4 -4
  25. package/core/codegen/orm/input-types-generator.js +1 -1
  26. package/core/codegen/orm/model-generator.d.ts +3 -3
  27. package/core/codegen/queries.d.ts +4 -4
  28. package/core/codegen/query-keys.d.ts +3 -3
  29. package/core/codegen/select-helpers.d.ts +3 -3
  30. package/core/codegen/shared/index.d.ts +4 -4
  31. package/core/codegen/type-resolver.d.ts +10 -10
  32. package/core/codegen/type-resolver.js +3 -3
  33. package/core/codegen/types.d.ts +2 -2
  34. package/core/codegen/utils.d.ts +34 -34
  35. package/core/codegen/utils.js +1 -1
  36. package/core/generate.d.ts +4 -4
  37. package/core/introspect/index.d.ts +1 -1
  38. package/core/introspect/source/database.js +6 -2
  39. package/core/introspect/source/types.d.ts +37 -0
  40. package/core/pipeline/index.d.ts +5 -5
  41. package/esm/core/codegen/barrel.d.ts +6 -6
  42. package/esm/core/codegen/cli/arg-mapper.d.ts +3 -3
  43. package/esm/core/codegen/cli/command-map-generator.d.ts +4 -4
  44. package/esm/core/codegen/cli/custom-command-generator.d.ts +2 -2
  45. package/esm/core/codegen/cli/docs-generator.d.ts +7 -7
  46. package/esm/core/codegen/cli/index.d.ts +7 -7
  47. package/esm/core/codegen/cli/table-command-generator.d.ts +3 -3
  48. package/esm/core/codegen/custom-mutations.d.ts +3 -3
  49. package/esm/core/codegen/custom-queries.d.ts +3 -3
  50. package/esm/core/codegen/docs-utils.d.ts +10 -10
  51. package/esm/core/codegen/docs-utils.js +1 -1
  52. package/esm/core/codegen/hooks-ast.d.ts +4 -4
  53. package/esm/core/codegen/hooks-docs-generator.d.ts +5 -5
  54. package/esm/core/codegen/index.d.ts +5 -5
  55. package/esm/core/codegen/invalidation.d.ts +2 -2
  56. package/esm/core/codegen/mutation-keys.d.ts +3 -3
  57. package/esm/core/codegen/mutations.d.ts +5 -5
  58. package/esm/core/codegen/orm/barrel.d.ts +2 -2
  59. package/esm/core/codegen/orm/client-generator.d.ts +2 -2
  60. package/esm/core/codegen/orm/custom-ops-generator.d.ts +3 -3
  61. package/esm/core/codegen/orm/custom-ops-generator.js +1 -1
  62. package/esm/core/codegen/orm/docs-generator.d.ts +5 -5
  63. package/esm/core/codegen/orm/index.d.ts +4 -4
  64. package/esm/core/codegen/orm/input-types-generator.d.ts +4 -4
  65. package/esm/core/codegen/orm/input-types-generator.js +1 -1
  66. package/esm/core/codegen/orm/model-generator.d.ts +3 -3
  67. package/esm/core/codegen/queries.d.ts +4 -4
  68. package/esm/core/codegen/query-keys.d.ts +3 -3
  69. package/esm/core/codegen/select-helpers.d.ts +3 -3
  70. package/esm/core/codegen/shared/index.d.ts +4 -4
  71. package/esm/core/codegen/type-resolver.d.ts +10 -10
  72. package/esm/core/codegen/type-resolver.js +3 -3
  73. package/esm/core/codegen/types.d.ts +2 -2
  74. package/esm/core/codegen/utils.d.ts +34 -34
  75. package/esm/core/codegen/utils.js +1 -1
  76. package/esm/core/generate.d.ts +4 -4
  77. package/esm/core/introspect/index.d.ts +1 -1
  78. package/esm/core/introspect/source/database.js +7 -3
  79. package/esm/core/introspect/source/types.d.ts +37 -0
  80. package/esm/core/pipeline/index.d.ts +5 -5
  81. package/esm/types/index.d.ts +1 -1
  82. package/esm/types/schema.d.ts +41 -33
  83. package/package.json +4 -4
  84. package/types/index.d.ts +1 -1
  85. package/types/schema.d.ts +41 -33
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Type Resolver - Convert GraphQL types to TypeScript
3
3
  *
4
- * Utilities for converting CleanTypeRef and other GraphQL types
4
+ * Utilities for converting TypeRef and other GraphQL types
5
5
  * into TypeScript type strings and interface definitions.
6
6
  */
7
- import type { CleanTypeRef } from '../../types/schema';
7
+ import type { TypeRef } from '../../types/schema';
8
8
  /**
9
9
  * Interface for tracking referenced types during code generation
10
10
  */
@@ -38,37 +38,37 @@ export declare function createTypeTracker(options?: TypeTrackerOptions): TypeTra
38
38
  */
39
39
  export declare function scalarToTsType(scalarName: string): string;
40
40
  /**
41
- * Convert a CleanTypeRef to a TypeScript type string
41
+ * Convert a TypeRef to a TypeScript type string
42
42
  * Handles nested LIST and NON_NULL wrappers
43
43
  *
44
44
  * @param typeRef - The GraphQL type reference
45
45
  * @param tracker - Optional TypeTracker to collect referenced types
46
46
  */
47
- export declare function typeRefToTsType(typeRef: CleanTypeRef, tracker?: TypeTracker): string;
47
+ export declare function typeRefToTsType(typeRef: TypeRef, tracker?: TypeTracker): string;
48
48
  /**
49
- * Convert a CleanTypeRef to a nullable TypeScript type string
49
+ * Convert a TypeRef to a nullable TypeScript type string
50
50
  * (for optional fields that can be null)
51
51
  *
52
52
  * @param typeRef - The GraphQL type reference
53
53
  * @param tracker - Optional TypeTracker to collect referenced types
54
54
  */
55
- export declare function typeRefToNullableTsType(typeRef: CleanTypeRef, tracker?: TypeTracker): string;
55
+ export declare function typeRefToNullableTsType(typeRef: TypeRef, tracker?: TypeTracker): string;
56
56
  /**
57
57
  * Check if a type reference is required (wrapped in NON_NULL)
58
58
  */
59
- export declare function isTypeRequired(typeRef: CleanTypeRef): boolean;
59
+ export declare function isTypeRequired(typeRef: TypeRef): boolean;
60
60
  /**
61
61
  * Check if a type reference is a list
62
62
  */
63
- export declare function isTypeList(typeRef: CleanTypeRef): boolean;
63
+ export declare function isTypeList(typeRef: TypeRef): boolean;
64
64
  /**
65
65
  * Get the base type name from a type reference (unwrapping wrappers)
66
66
  */
67
- export declare function getTypeBaseName(typeRef: CleanTypeRef): string | null;
67
+ export declare function getTypeBaseName(typeRef: TypeRef): string | null;
68
68
  /**
69
69
  * Get the base type kind (unwrapping LIST and NON_NULL)
70
70
  */
71
- export declare function getBaseTypeKind(typeRef: CleanTypeRef): CleanTypeRef['kind'];
71
+ export declare function getBaseTypeKind(typeRef: TypeRef): TypeRef['kind'];
72
72
  /**
73
73
  * Check if a field should be skipped in selections
74
74
  */
@@ -80,10 +80,10 @@ function scalarToTsType(scalarName) {
80
80
  return (0, scalars_1.scalarToTsType)(scalarName, { unknownScalar: 'unknown' });
81
81
  }
82
82
  // ============================================================================
83
- // CleanTypeRef to TypeScript
83
+ // TypeRef to TypeScript
84
84
  // ============================================================================
85
85
  /**
86
- * Convert a CleanTypeRef to a TypeScript type string
86
+ * Convert a TypeRef to a TypeScript type string
87
87
  * Handles nested LIST and NON_NULL wrappers
88
88
  *
89
89
  * @param typeRef - The GraphQL type reference
@@ -125,7 +125,7 @@ function typeRefToTsType(typeRef, tracker) {
125
125
  }
126
126
  }
127
127
  /**
128
- * Convert a CleanTypeRef to a nullable TypeScript type string
128
+ * Convert a TypeRef to a nullable TypeScript type string
129
129
  * (for optional fields that can be null)
130
130
  *
131
131
  * @param typeRef - The GraphQL type reference
@@ -1,4 +1,4 @@
1
- import type { CleanTable } from '../../types/schema';
1
+ import type { Table } from '../../types/schema';
2
2
  /**
3
3
  * Options for generating types.ts
4
4
  */
@@ -9,4 +9,4 @@ export interface GenerateTypesOptions {
9
9
  /**
10
10
  * Generate types.ts content with all entity interfaces and base filter types
11
11
  */
12
- export declare function generateTypesFile(tables: CleanTable[], options?: GenerateTypesOptions): string;
12
+ export declare function generateTypesFile(tables: Table[], options?: GenerateTypesOptions): string;
@@ -1,4 +1,4 @@
1
- import type { CleanField, CleanFieldType, CleanTable, TypeRegistry } from '../../types/schema';
1
+ import type { Field, FieldType, Table, TypeRegistry } from '../../types/schema';
2
2
  /** Lowercase first character */
3
3
  export declare function lcFirst(str: string): string;
4
4
  /** Uppercase first character */
@@ -22,118 +22,118 @@ export interface TableNames {
22
22
  /**
23
23
  * Derive all naming variants from a table
24
24
  */
25
- export declare function getTableNames(table: CleanTable): TableNames;
25
+ export declare function getTableNames(table: Table): TableNames;
26
26
  /**
27
27
  * Generate hook function name for list query
28
28
  * e.g., "useCarsQuery"
29
29
  */
30
- export declare function getListQueryHookName(table: CleanTable): string;
30
+ export declare function getListQueryHookName(table: Table): string;
31
31
  /**
32
32
  * Generate hook function name for single item query
33
33
  * e.g., "useCarQuery"
34
34
  */
35
- export declare function getSingleQueryHookName(table: CleanTable): string;
35
+ export declare function getSingleQueryHookName(table: Table): string;
36
36
  /**
37
37
  * Generate hook function name for create mutation
38
38
  * e.g., "useCreateCarMutation"
39
39
  */
40
- export declare function getCreateMutationHookName(table: CleanTable): string;
40
+ export declare function getCreateMutationHookName(table: Table): string;
41
41
  /**
42
42
  * Generate hook function name for update mutation
43
43
  * e.g., "useUpdateCarMutation"
44
44
  */
45
- export declare function getUpdateMutationHookName(table: CleanTable): string;
45
+ export declare function getUpdateMutationHookName(table: Table): string;
46
46
  /**
47
47
  * Generate hook function name for delete mutation
48
48
  * e.g., "useDeleteCarMutation"
49
49
  */
50
- export declare function getDeleteMutationHookName(table: CleanTable): string;
50
+ export declare function getDeleteMutationHookName(table: Table): string;
51
51
  /**
52
52
  * Generate file name for list query hook
53
53
  * e.g., "useCarsQuery.ts"
54
54
  */
55
- export declare function getListQueryFileName(table: CleanTable): string;
55
+ export declare function getListQueryFileName(table: Table): string;
56
56
  /**
57
57
  * Generate file name for single query hook
58
58
  * e.g., "useCarQuery.ts"
59
59
  */
60
- export declare function getSingleQueryFileName(table: CleanTable): string;
60
+ export declare function getSingleQueryFileName(table: Table): string;
61
61
  /**
62
62
  * Generate file name for create mutation hook
63
63
  */
64
- export declare function getCreateMutationFileName(table: CleanTable): string;
64
+ export declare function getCreateMutationFileName(table: Table): string;
65
65
  /**
66
66
  * Generate file name for update mutation hook
67
67
  */
68
- export declare function getUpdateMutationFileName(table: CleanTable): string;
68
+ export declare function getUpdateMutationFileName(table: Table): string;
69
69
  /**
70
70
  * Generate file name for delete mutation hook
71
71
  */
72
- export declare function getDeleteMutationFileName(table: CleanTable): string;
72
+ export declare function getDeleteMutationFileName(table: Table): string;
73
73
  /**
74
74
  * Get the GraphQL query name for fetching all rows
75
75
  * Uses inflection from introspection, falls back to convention
76
76
  */
77
- export declare function getAllRowsQueryName(table: CleanTable): string;
77
+ export declare function getAllRowsQueryName(table: Table): string;
78
78
  /**
79
79
  * Get the GraphQL query name for fetching single row
80
80
  */
81
- export declare function getSingleRowQueryName(table: CleanTable): string;
81
+ export declare function getSingleRowQueryName(table: Table): string;
82
82
  /**
83
83
  * Get the GraphQL mutation name for creating
84
84
  */
85
- export declare function getCreateMutationName(table: CleanTable): string;
85
+ export declare function getCreateMutationName(table: Table): string;
86
86
  /**
87
87
  * Get the GraphQL mutation name for updating
88
88
  */
89
- export declare function getUpdateMutationName(table: CleanTable): string;
89
+ export declare function getUpdateMutationName(table: Table): string;
90
90
  /**
91
91
  * Get the GraphQL mutation name for deleting
92
92
  */
93
- export declare function getDeleteMutationName(table: CleanTable): string;
93
+ export declare function getDeleteMutationName(table: Table): string;
94
94
  /**
95
95
  * Get PostGraphile filter type name
96
96
  * e.g., "CarFilter"
97
97
  */
98
- export declare function getFilterTypeName(table: CleanTable): string;
98
+ export declare function getFilterTypeName(table: Table): string;
99
99
  /**
100
100
  * Get PostGraphile OrderBy enum type name
101
101
  * e.g., "CarsOrderBy", "AddressesOrderBy"
102
102
  */
103
- export declare function getOrderByTypeName(table: CleanTable): string;
103
+ export declare function getOrderByTypeName(table: Table): string;
104
104
  /**
105
105
  * Get PostGraphile Condition type name (simple equality filter)
106
106
  * e.g., "CarCondition", "AddressCondition"
107
107
  */
108
- export declare function getConditionTypeName(table: CleanTable): string;
108
+ export declare function getConditionTypeName(table: Table): string;
109
109
  /**
110
110
  * Get PostGraphile create input type name
111
111
  * e.g., "CreateCarInput"
112
112
  */
113
- export declare function getCreateInputTypeName(table: CleanTable): string;
113
+ export declare function getCreateInputTypeName(table: Table): string;
114
114
  /**
115
115
  * Get PostGraphile patch type name for updates
116
116
  * e.g., "CarPatch"
117
117
  */
118
- export declare function getPatchTypeName(table: CleanTable): string;
118
+ export declare function getPatchTypeName(table: Table): string;
119
119
  /**
120
120
  * Get PostGraphile update input type name
121
121
  * e.g., "UpdateCarInput"
122
122
  */
123
- export declare function getUpdateInputTypeName(table: CleanTable): string;
123
+ export declare function getUpdateInputTypeName(table: Table): string;
124
124
  /**
125
125
  * Get PostGraphile delete input type name
126
126
  * e.g., "DeleteCarInput"
127
127
  */
128
- export declare function getDeleteInputTypeName(table: CleanTable): string;
128
+ export declare function getDeleteInputTypeName(table: Table): string;
129
129
  /**
130
130
  * Convert GraphQL type to TypeScript type
131
131
  */
132
132
  export declare function gqlTypeToTs(gqlType: string, isArray?: boolean): string;
133
133
  /**
134
- * Convert CleanFieldType to TypeScript type string
134
+ * Convert FieldType to TypeScript type string
135
135
  */
136
- export declare function fieldTypeToTs(fieldType: CleanFieldType): string;
136
+ export declare function fieldTypeToTs(fieldType: FieldType): string;
137
137
  /**
138
138
  * Get the PostGraphile filter type for a GraphQL scalar
139
139
  * @param gqlType - The GraphQL type string (e.g., "String", "UUID")
@@ -143,11 +143,11 @@ export declare function getScalarFilterType(gqlType: string, isArray?: boolean):
143
143
  /**
144
144
  * Check if a field is a relation field (not a scalar)
145
145
  */
146
- export declare function isRelationField(fieldName: string, table: CleanTable): boolean;
146
+ export declare function isRelationField(fieldName: string, table: Table): boolean;
147
147
  /**
148
148
  * Get only scalar fields (non-relation fields)
149
149
  */
150
- export declare function getScalarFields(table: CleanTable): CleanField[];
150
+ export declare function getScalarFields(table: Table): Field[];
151
151
  /**
152
152
  * Resolve the inner input type from a CreateXInput.
153
153
  * PostGraphile create inputs wrap the actual field definitions in an inner type
@@ -164,7 +164,7 @@ export declare function resolveInnerInputType(inputTypeName: string, typeRegistr
164
164
  * are plugin-added computed fields that don't correspond to real database columns.
165
165
  * Returns null when no typeRegistry is provided (caller should treat as "no filtering").
166
166
  */
167
- export declare function getWritableFieldNames(table: CleanTable, typeRegistry?: TypeRegistry): Set<string> | null;
167
+ export declare function getWritableFieldNames(table: Table, typeRegistry?: TypeRegistry): Set<string> | null;
168
168
  /**
169
169
  * Get scalar fields that represent actual database columns (not computed/plugin-added).
170
170
  * When a TypeRegistry is provided, filters out fields that don't exist in the
@@ -172,7 +172,7 @@ export declare function getWritableFieldNames(table: CleanTable, typeRegistry?:
172
172
  * hash UUIDs) that aren't real columns and shouldn't appear in default selections.
173
173
  * Without a TypeRegistry, falls back to all scalar fields.
174
174
  */
175
- export declare function getSelectableScalarFields(table: CleanTable, typeRegistry?: TypeRegistry): CleanField[];
175
+ export declare function getSelectableScalarFields(table: Table, typeRegistry?: TypeRegistry): Field[];
176
176
  /**
177
177
  * Primary key field information
178
178
  */
@@ -188,22 +188,22 @@ export interface PrimaryKeyField {
188
188
  * Get primary key field information from table constraints
189
189
  * Returns array to support composite primary keys
190
190
  */
191
- export declare function getPrimaryKeyInfo(table: CleanTable): PrimaryKeyField[];
191
+ export declare function getPrimaryKeyInfo(table: Table): PrimaryKeyField[];
192
192
  /**
193
193
  * Get primary key field names (convenience wrapper)
194
194
  */
195
- export declare function getPrimaryKeyFields(table: CleanTable): string[];
195
+ export declare function getPrimaryKeyFields(table: Table): string[];
196
196
  /**
197
197
  * Check if table has a valid single-field primary key
198
198
  * Used to determine if a single query hook can be generated
199
199
  * Tables with composite keys return false (handled as custom queries)
200
200
  */
201
- export declare function hasValidPrimaryKey(table: CleanTable): boolean;
201
+ export declare function hasValidPrimaryKey(table: Table): boolean;
202
202
  /**
203
203
  * Generate query key prefix for a table
204
204
  * e.g., "cars" for list queries, "car" for detail queries
205
205
  */
206
- export declare function getQueryKeyPrefix(table: CleanTable): string;
206
+ export declare function getQueryKeyPrefix(table: Table): string;
207
207
  /**
208
208
  * Strip PostGraphile smart comments and boilerplate from a description string.
209
209
  *
@@ -270,7 +270,7 @@ function gqlTypeToTs(gqlType, isArray = false) {
270
270
  return isArray ? `${tsType}[]` : tsType;
271
271
  }
272
272
  /**
273
- * Convert CleanFieldType to TypeScript type string
273
+ * Convert FieldType to TypeScript type string
274
274
  */
275
275
  function fieldTypeToTs(fieldType) {
276
276
  return gqlTypeToTs(fieldType.gqlType, fieldType.isArray);
@@ -1,5 +1,5 @@
1
1
  import type { CliConfig, GraphQLSDKConfigTarget, SchemaConfig } from '../types/config';
2
- import type { CleanOperation, CleanTable, TypeRegistry } from '../types/schema';
2
+ import type { Operation, Table, TypeRegistry } from '../types/schema';
3
3
  export interface GenerateOptions extends GraphQLSDKConfigTarget {
4
4
  authorization?: string;
5
5
  verbose?: boolean;
@@ -14,10 +14,10 @@ export interface GenerateResult {
14
14
  filesWritten?: string[];
15
15
  errors?: string[];
16
16
  pipelineData?: {
17
- tables: CleanTable[];
17
+ tables: Table[];
18
18
  customOperations: {
19
- queries: CleanOperation[];
20
- mutations: CleanOperation[];
19
+ queries: Operation[];
20
+ mutations: Operation[];
21
21
  typeRegistry?: TypeRegistry;
22
22
  };
23
23
  };
@@ -4,7 +4,7 @@
4
4
  export type { InferTablesOptions } from './infer-tables';
5
5
  export { inferTablesFromIntrospection } from './infer-tables';
6
6
  export { pluralize, singularize } from 'inflekt';
7
- export type { CreateSchemaSourceOptions, SchemaSource, SchemaSourceResult, } from './source';
7
+ export type { CreateSchemaSourceOptions, MetaTableInfo, SchemaSource, SchemaSourceResult, } from './source';
8
8
  export { createSchemaSource, EndpointSchemaSource, FileSchemaSource, SchemaSourceError, validateSourceOptions, } from './source';
9
9
  export type { FetchSchemaOptions, FetchSchemaResult } from './fetch-schema';
10
10
  export { fetchSchema } from './fetch-schema';
@@ -6,6 +6,7 @@ exports.DatabaseSchemaSource = void 0;
6
6
  *
7
7
  * Loads GraphQL schema directly from a PostgreSQL database using PostGraphile
8
8
  * introspection and converts it to introspection format.
9
+ * Also returns _meta table metadata when available (via MetaSchemaPlugin cache).
9
10
  */
10
11
  const graphql_1 = require("graphql");
11
12
  const graphile_schema_1 = require("graphile-schema");
@@ -45,7 +46,7 @@ class DatabaseSchemaSource {
45
46
  else {
46
47
  schemas = this.options.schemas ?? ['public'];
47
48
  }
48
- // Build SDL from database
49
+ // Build SDL from database (MetaSchemaPlugin populates _cachedTablesMeta as a side-effect)
49
50
  let sdl;
50
51
  try {
51
52
  sdl = await (0, graphile_schema_1.buildSchemaSDL)({
@@ -78,7 +79,10 @@ class DatabaseSchemaSource {
78
79
  }
79
80
  // Convert graphql-js introspection result to our mutable type
80
81
  const introspection = JSON.parse(JSON.stringify(introspectionResult));
81
- return { introspection };
82
+ return {
83
+ introspection,
84
+ tablesMeta: [...graphile_schema_1._cachedTablesMeta],
85
+ };
82
86
  }
83
87
  describe() {
84
88
  const { database, schemas, apiNames } = this.options;
@@ -5,6 +5,38 @@
5
5
  * to work with both live GraphQL endpoints and static schema files.
6
6
  */
7
7
  import type { IntrospectionQueryResponse } from '../../../types/introspection';
8
+ /**
9
+ * Minimal table metadata from the _meta query, used to enrich M:N relations
10
+ * with junction key field information that isn't available from introspection alone.
11
+ */
12
+ export interface MetaTableInfo {
13
+ name: string;
14
+ schemaName: string;
15
+ relations: {
16
+ manyToMany: Array<{
17
+ fieldName: string | null;
18
+ type: string | null;
19
+ junctionTable: {
20
+ name: string;
21
+ };
22
+ junctionLeftKeyAttributes: Array<{
23
+ name: string;
24
+ }>;
25
+ junctionRightKeyAttributes: Array<{
26
+ name: string;
27
+ }>;
28
+ leftKeyAttributes: Array<{
29
+ name: string;
30
+ }>;
31
+ rightKeyAttributes: Array<{
32
+ name: string;
33
+ }>;
34
+ rightTable: {
35
+ name: string;
36
+ };
37
+ }>;
38
+ };
39
+ }
8
40
  /**
9
41
  * Result from fetching a schema source
10
42
  */
@@ -13,6 +45,11 @@ export interface SchemaSourceResult {
13
45
  * The GraphQL introspection data
14
46
  */
15
47
  introspection: IntrospectionQueryResponse;
48
+ /**
49
+ * Optional table metadata from _meta query (provides M:N junction key details).
50
+ * Present when the source supports _meta (database mode or endpoints with MetaSchemaPlugin).
51
+ */
52
+ tablesMeta?: MetaTableInfo[];
16
53
  }
17
54
  /**
18
55
  * Abstract interface for schema sources
@@ -9,7 +9,7 @@
9
9
  * - Filtering
10
10
  */
11
11
  import type { GraphQLSDKConfigTarget } from '../../types/config';
12
- import type { CleanOperation, CleanTable, TypeRegistry } from '../../types/schema';
12
+ import type { Operation, Table, TypeRegistry } from '../../types/schema';
13
13
  import type { SchemaSource } from '../introspect/source';
14
14
  export type { SchemaSource } from '../introspect/source';
15
15
  export { createSchemaSource, validateSourceOptions, } from '../introspect/source';
@@ -35,13 +35,13 @@ export interface CodegenPipelineResult {
35
35
  /**
36
36
  * Inferred table metadata
37
37
  */
38
- tables: CleanTable[];
38
+ tables: Table[];
39
39
  /**
40
40
  * Custom operations (queries and mutations not covered by tables)
41
41
  */
42
42
  customOperations: {
43
- queries: CleanOperation[];
44
- mutations: CleanOperation[];
43
+ queries: Operation[];
44
+ mutations: Operation[];
45
45
  typeRegistry: TypeRegistry;
46
46
  };
47
47
  /**
@@ -70,7 +70,7 @@ export declare function runCodegenPipeline(options: CodegenPipelineOptions): Pro
70
70
  /**
71
71
  * Validate that tables were found
72
72
  */
73
- export declare function validateTablesFound(tables: CleanTable[]): {
73
+ export declare function validateTablesFound(tables: Table[]): {
74
74
  valid: boolean;
75
75
  error?: string;
76
76
  };
@@ -1,12 +1,12 @@
1
- import type { CleanTable } from '../../types/schema';
1
+ import type { Table } from '../../types/schema';
2
2
  /**
3
3
  * Generate the queries/index.ts barrel file
4
4
  */
5
- export declare function generateQueriesBarrel(tables: CleanTable[]): string;
5
+ export declare function generateQueriesBarrel(tables: Table[]): string;
6
6
  /**
7
7
  * Generate the mutations/index.ts barrel file
8
8
  */
9
- export declare function generateMutationsBarrel(tables: CleanTable[]): string;
9
+ export declare function generateMutationsBarrel(tables: Table[]): string;
10
10
  /**
11
11
  * Generate the main index.ts barrel file
12
12
  *
@@ -22,7 +22,7 @@ export interface MainBarrelOptions {
22
22
  /** Whether invalidation.ts was generated */
23
23
  hasInvalidation?: boolean;
24
24
  }
25
- export declare function generateMainBarrel(tables: CleanTable[], options?: MainBarrelOptions): string;
25
+ export declare function generateMainBarrel(tables: Table[], options?: MainBarrelOptions): string;
26
26
  export interface RootBarrelOptions {
27
27
  hasTypes?: boolean;
28
28
  hasHooks?: boolean;
@@ -37,8 +37,8 @@ export declare function generateRootBarrel(options?: RootBarrelOptions): string;
37
37
  /**
38
38
  * Generate queries barrel including custom query operations
39
39
  */
40
- export declare function generateCustomQueriesBarrel(tables: CleanTable[], customQueryNames: string[]): string;
40
+ export declare function generateCustomQueriesBarrel(tables: Table[], customQueryNames: string[]): string;
41
41
  /**
42
42
  * Generate mutations barrel including custom mutation operations
43
43
  */
44
- export declare function generateCustomMutationsBarrel(tables: CleanTable[], customMutationNames: string[]): string;
44
+ export declare function generateCustomMutationsBarrel(tables: Table[], customMutationNames: string[]): string;
@@ -1,4 +1,4 @@
1
1
  import * as t from '@babel/types';
2
- import type { CleanArgument } from '../../../types/schema';
3
- export declare function buildQuestionObject(arg: CleanArgument, namePrefix?: string): t.ObjectExpression;
4
- export declare function buildQuestionsArray(args: CleanArgument[]): t.ArrayExpression;
2
+ import type { Argument } from '../../../types/schema';
3
+ export declare function buildQuestionObject(arg: Argument, namePrefix?: string): t.ObjectExpression;
4
+ export declare function buildQuestionsArray(args: Argument[]): t.ArrayExpression;
@@ -1,6 +1,6 @@
1
- import type { CleanTable, CleanOperation } from '../../../types/schema';
1
+ import type { Table, Operation } from '../../../types/schema';
2
2
  import type { GeneratedFile } from './executor-generator';
3
- export declare function generateCommandMap(tables: CleanTable[], customOperations: CleanOperation[], toolName: string): GeneratedFile;
3
+ export declare function generateCommandMap(tables: Table[], customOperations: Operation[], toolName: string): GeneratedFile;
4
4
  export interface MultiTargetCommandMapInput {
5
5
  toolName: string;
6
6
  builtinNames: {
@@ -10,8 +10,8 @@ export interface MultiTargetCommandMapInput {
10
10
  };
11
11
  targets: Array<{
12
12
  name: string;
13
- tables: CleanTable[];
14
- customOperations: CleanOperation[];
13
+ tables: Table[];
14
+ customOperations: Operation[];
15
15
  }>;
16
16
  }
17
17
  export declare function generateMultiTargetCommandMap(input: MultiTargetCommandMapInput): GeneratedFile;
@@ -1,8 +1,8 @@
1
- import type { CleanOperation } from '../../../types/schema';
1
+ import type { Operation } from '../../../types/schema';
2
2
  import type { GeneratedFile } from './executor-generator';
3
3
  export interface CustomCommandOptions {
4
4
  targetName?: string;
5
5
  executorImportPath?: string;
6
6
  saveToken?: boolean;
7
7
  }
8
- export declare function generateCustomCommand(op: CleanOperation, options?: CustomCommandOptions): GeneratedFile;
8
+ export declare function generateCustomCommand(op: Operation, options?: CustomCommandOptions): GeneratedFile;
@@ -1,11 +1,11 @@
1
- import type { CleanTable, CleanOperation, TypeRegistry } from '../../../types/schema';
1
+ import type { Table, Operation, TypeRegistry } from '../../../types/schema';
2
2
  import type { GeneratedDocFile, McpTool } from '../docs-utils';
3
3
  export { resolveDocsConfig } from '../docs-utils';
4
4
  export type { GeneratedDocFile, McpTool } from '../docs-utils';
5
- export declare function generateReadme(tables: CleanTable[], customOperations: CleanOperation[], toolName: string, registry?: TypeRegistry): GeneratedDocFile;
6
- export declare function generateAgentsDocs(tables: CleanTable[], customOperations: CleanOperation[], toolName: string, _registry?: TypeRegistry): GeneratedDocFile;
7
- export declare function getCliMcpTools(tables: CleanTable[], customOperations: CleanOperation[], toolName: string, registry?: TypeRegistry): McpTool[];
8
- export declare function generateSkills(tables: CleanTable[], customOperations: CleanOperation[], toolName: string, targetName: string, registry?: TypeRegistry): GeneratedDocFile[];
5
+ export declare function generateReadme(tables: Table[], customOperations: Operation[], toolName: string, registry?: TypeRegistry): GeneratedDocFile;
6
+ export declare function generateAgentsDocs(tables: Table[], customOperations: Operation[], toolName: string, _registry?: TypeRegistry): GeneratedDocFile;
7
+ export declare function getCliMcpTools(tables: Table[], customOperations: Operation[], toolName: string, registry?: TypeRegistry): McpTool[];
8
+ export declare function generateSkills(tables: Table[], customOperations: Operation[], toolName: string, targetName: string, registry?: TypeRegistry): GeneratedDocFile[];
9
9
  export interface MultiTargetDocsInput {
10
10
  toolName: string;
11
11
  builtinNames: {
@@ -17,8 +17,8 @@ export interface MultiTargetDocsInput {
17
17
  targets: Array<{
18
18
  name: string;
19
19
  endpoint: string;
20
- tables: CleanTable[];
21
- customOperations: CleanOperation[];
20
+ tables: Table[];
21
+ customOperations: Operation[];
22
22
  isAuthTarget?: boolean;
23
23
  }>;
24
24
  }
@@ -1,11 +1,11 @@
1
1
  import type { BuiltinNames, GraphQLSDKConfigTarget } from '../../../types/config';
2
- import type { CleanOperation, CleanTable, TypeRegistry } from '../../../types/schema';
2
+ import type { Operation, Table, TypeRegistry } from '../../../types/schema';
3
3
  import type { GeneratedFile } from './executor-generator';
4
4
  export interface GenerateCliOptions {
5
- tables: CleanTable[];
5
+ tables: Table[];
6
6
  customOperations?: {
7
- queries: CleanOperation[];
8
- mutations: CleanOperation[];
7
+ queries: Operation[];
8
+ mutations: Operation[];
9
9
  };
10
10
  config: GraphQLSDKConfigTarget;
11
11
  /** TypeRegistry from introspection, used to check field defaults */
@@ -26,10 +26,10 @@ export interface MultiTargetCliTarget {
26
26
  name: string;
27
27
  endpoint: string;
28
28
  ormImportPath: string;
29
- tables: CleanTable[];
29
+ tables: Table[];
30
30
  customOperations: {
31
- queries: CleanOperation[];
32
- mutations: CleanOperation[];
31
+ queries: Operation[];
32
+ mutations: Operation[];
33
33
  };
34
34
  isAuthTarget?: boolean;
35
35
  /** TypeRegistry from introspection, used to check field defaults */
@@ -1,10 +1,10 @@
1
- import type { CleanTable, TypeRegistry } from '../../../types/schema';
1
+ import type { Table, TypeRegistry } from '../../../types/schema';
2
2
  import type { GeneratedFile } from './executor-generator';
3
- export declare function getFieldsWithDefaults(table: CleanTable, typeRegistry?: TypeRegistry): Set<string>;
3
+ export declare function getFieldsWithDefaults(table: Table, typeRegistry?: TypeRegistry): Set<string>;
4
4
  export interface TableCommandOptions {
5
5
  targetName?: string;
6
6
  executorImportPath?: string;
7
7
  /** TypeRegistry from introspection, used to check field defaults */
8
8
  typeRegistry?: TypeRegistry;
9
9
  }
10
- export declare function generateTableCommand(table: CleanTable, options?: TableCommandOptions): GeneratedFile;
10
+ export declare function generateTableCommand(table: Table, options?: TableCommandOptions): GeneratedFile;
@@ -1,11 +1,11 @@
1
- import type { CleanOperation, TypeRegistry } from '../../types/schema';
1
+ import type { Operation, TypeRegistry } from '../../types/schema';
2
2
  export interface GeneratedCustomMutationFile {
3
3
  fileName: string;
4
4
  content: string;
5
5
  operationName: string;
6
6
  }
7
7
  export interface GenerateCustomMutationHookOptions {
8
- operation: CleanOperation;
8
+ operation: Operation;
9
9
  typeRegistry: TypeRegistry;
10
10
  skipQueryField?: boolean;
11
11
  reactQueryEnabled?: boolean;
@@ -14,7 +14,7 @@ export interface GenerateCustomMutationHookOptions {
14
14
  }
15
15
  export declare function generateCustomMutationHook(options: GenerateCustomMutationHookOptions): GeneratedCustomMutationFile | null;
16
16
  export interface GenerateAllCustomMutationHooksOptions {
17
- operations: CleanOperation[];
17
+ operations: Operation[];
18
18
  typeRegistry: TypeRegistry;
19
19
  skipQueryField?: boolean;
20
20
  reactQueryEnabled?: boolean;