@constructive-io/graphql-codegen 4.3.0 → 4.4.1

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.
@@ -41,6 +41,8 @@ export interface GenerateMultiTargetCliOptions {
41
41
  targets: MultiTargetCliTarget[];
42
42
  /** Enable NodeHttpAdapter for *.localhost subdomain routing */
43
43
  nodeHttpAdapter?: boolean;
44
+ /** Generate a runnable index.ts entry point */
45
+ entryPoint?: boolean;
44
46
  }
45
47
  export declare function resolveBuiltinNames(targetNames: string[], userOverrides?: BuiltinNames): {
46
48
  auth: string;
@@ -56,5 +58,5 @@ export { generateReadme, generateAgentsDocs, getCliMcpTools, generateSkills, gen
56
58
  export type { MultiTargetDocsInput } from './docs-generator';
57
59
  export { resolveDocsConfig } from '../docs-utils';
58
60
  export type { GeneratedDocFile, McpTool } from '../docs-utils';
59
- export { generateUtilsFile } from './utils-generator';
61
+ export { generateUtilsFile, generateEntryPointFile } from './utils-generator';
60
62
  export type { GeneratedFile, MultiTargetExecutorInput } from './executor-generator';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateUtilsFile = exports.resolveDocsConfig = exports.generateMultiTargetSkills = exports.getMultiTargetCliMcpTools = exports.generateMultiTargetAgentsDocs = exports.generateMultiTargetReadme = exports.generateSkills = exports.getCliMcpTools = exports.generateAgentsDocs = exports.generateReadme = exports.generateAuthCommandWithName = exports.generateMultiTargetContextCommand = exports.generateAuthCommand = exports.generateContextCommand = exports.generateMultiTargetCommandMap = exports.generateCommandMap = exports.generateCustomCommand = exports.generateTableCommand = exports.generateMultiTargetExecutorFile = exports.generateExecutorFile = void 0;
3
+ exports.generateEntryPointFile = exports.generateUtilsFile = exports.resolveDocsConfig = exports.generateMultiTargetSkills = exports.getMultiTargetCliMcpTools = exports.generateMultiTargetAgentsDocs = exports.generateMultiTargetReadme = exports.generateSkills = exports.getCliMcpTools = exports.generateAgentsDocs = exports.generateReadme = exports.generateAuthCommandWithName = exports.generateMultiTargetContextCommand = exports.generateAuthCommand = exports.generateContextCommand = exports.generateMultiTargetCommandMap = exports.generateCommandMap = exports.generateCustomCommand = exports.generateTableCommand = exports.generateMultiTargetExecutorFile = exports.generateExecutorFile = void 0;
4
4
  exports.generateCli = generateCli;
5
5
  exports.resolveBuiltinNames = resolveBuiltinNames;
6
6
  exports.generateMultiTargetCli = generateMultiTargetCli;
@@ -49,6 +49,11 @@ function generateCli(options) {
49
49
  }
50
50
  const commandMapFile = (0, command_map_generator_1.generateCommandMap)(tables, allCustomOps, toolName);
51
51
  files.push(commandMapFile);
52
+ // Generate entry point if configured
53
+ const generateEntryPoint = typeof cliConfig === 'object' && !!cliConfig.entryPoint;
54
+ if (generateEntryPoint) {
55
+ files.push((0, utils_generator_1.generateEntryPointFile)());
56
+ }
52
57
  return {
53
58
  files,
54
59
  stats: {
@@ -136,6 +141,10 @@ function generateMultiTargetCli(options) {
136
141
  targets: commandMapTargets,
137
142
  });
138
143
  files.push(commandMapFile);
144
+ // Generate entry point if configured
145
+ if (options.entryPoint) {
146
+ files.push((0, utils_generator_1.generateEntryPointFile)());
147
+ }
139
148
  return {
140
149
  files,
141
150
  stats: {
@@ -175,3 +184,4 @@ var docs_utils_1 = require("../docs-utils");
175
184
  Object.defineProperty(exports, "resolveDocsConfig", { enumerable: true, get: function () { return docs_utils_1.resolveDocsConfig; } });
176
185
  var utils_generator_2 = require("./utils-generator");
177
186
  Object.defineProperty(exports, "generateUtilsFile", { enumerable: true, get: function () { return utils_generator_2.generateUtilsFile; } });
187
+ Object.defineProperty(exports, "generateEntryPointFile", { enumerable: true, get: function () { return utils_generator_2.generateEntryPointFile; } });
@@ -16,3 +16,12 @@ export declare function generateUtilsFile(): GeneratedFile;
16
16
  * routing (DNS resolution + Host header) without any global patching.
17
17
  */
18
18
  export declare function generateNodeFetchFile(): GeneratedFile;
19
+ /**
20
+ * Generate an index.ts entry point file for the CLI.
21
+ *
22
+ * Creates a runnable entry point that imports the command map,
23
+ * handles --version and --tty flags, and starts the CLI.
24
+ * This is off by default (cliEntryPoint: false) since many projects
25
+ * provide their own entry point with custom configuration.
26
+ */
27
+ export declare function generateEntryPointFile(): GeneratedFile;
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.generateUtilsFile = generateUtilsFile;
37
37
  exports.generateNodeFetchFile = generateNodeFetchFile;
38
+ exports.generateEntryPointFile = generateEntryPointFile;
38
39
  const fs = __importStar(require("fs"));
39
40
  const path = __importStar(require("path"));
40
41
  const utils_1 = require("../utils");
@@ -90,3 +91,17 @@ function generateNodeFetchFile() {
90
91
  content: readTemplateFile('node-fetch.ts', 'Node HTTP adapter for localhost subdomain routing'),
91
92
  };
92
93
  }
94
+ /**
95
+ * Generate an index.ts entry point file for the CLI.
96
+ *
97
+ * Creates a runnable entry point that imports the command map,
98
+ * handles --version and --tty flags, and starts the CLI.
99
+ * This is off by default (cliEntryPoint: false) since many projects
100
+ * provide their own entry point with custom configuration.
101
+ */
102
+ function generateEntryPointFile() {
103
+ return {
104
+ fileName: 'index.ts',
105
+ content: readTemplateFile('cli-entry.ts', 'CLI entry point'),
106
+ };
107
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * CLI entry point for running the generated CLI application.
3
+ *
4
+ * Creates an inquirerer CLI instance with the generated command map,
5
+ * handles --version and --tty flags, and runs the CLI.
6
+ *
7
+ * NOTE: This file is read at codegen time and written to output.
8
+ * Any changes here will affect all generated CLI entry points.
9
+ */
10
+
11
+ import { CLI, CLIOptions, getPackageJson } from 'inquirerer';
12
+ import { commands } from './commands';
13
+
14
+ if (process.argv.includes('--version') || process.argv.includes('-v')) {
15
+ const pkg = getPackageJson(__dirname);
16
+ console.log(pkg.version);
17
+ process.exit(0);
18
+ }
19
+
20
+ // Check for --tty false to enable non-interactive mode (noTty)
21
+ const ttyIdx = process.argv.indexOf('--tty');
22
+ const noTty = ttyIdx !== -1 && process.argv[ttyIdx + 1] === 'false';
23
+
24
+ const options: Partial<CLIOptions> = {
25
+ noTty,
26
+ minimistOpts: { alias: { v: 'version', h: 'help' } },
27
+ };
28
+
29
+ const app = new CLI(commands, options);
30
+ app.run().catch((e) => {
31
+ console.error('Unexpected error:', e);
32
+ process.exit(1);
33
+ });
@@ -1,5 +1,5 @@
1
1
  import type { CliConfig, GraphQLSDKConfigTarget } from '../types/config';
2
- import type { CleanOperation, CleanTable } from '../types/schema';
2
+ import type { CleanOperation, CleanTable, TypeRegistry } from '../types/schema';
3
3
  export interface GenerateOptions extends GraphQLSDKConfigTarget {
4
4
  authorization?: string;
5
5
  verbose?: boolean;
@@ -21,6 +21,7 @@ export interface GenerateResult {
21
21
  customOperations: {
22
22
  queries: CleanOperation[];
23
23
  mutations: CleanOperation[];
24
+ typeRegistry?: TypeRegistry;
24
25
  };
25
26
  };
26
27
  }
package/core/generate.js CHANGED
@@ -239,6 +239,7 @@ async function generate(options = {}, internalOptions) {
239
239
  mutations: customOperations.mutations,
240
240
  },
241
241
  config: { ...config, nodeHttpAdapter: useNodeHttpAdapter },
242
+ typeRegistry: customOperations.typeRegistry,
242
243
  });
243
244
  filesToWrite.push(...files.map((file) => ({
244
245
  path: node_path_1.default.posix.join('cli', file.fileName),
@@ -372,6 +373,7 @@ async function generate(options = {}, internalOptions) {
372
373
  customOperations: {
373
374
  queries: customOperations.queries,
374
375
  mutations: customOperations.mutations,
376
+ typeRegistry: customOperations.typeRegistry,
375
377
  },
376
378
  },
377
379
  };
@@ -557,6 +559,7 @@ async function generateMulti(options) {
557
559
  tables: result.pipelineData.tables,
558
560
  customOperations: result.pipelineData.customOperations,
559
561
  isAuthTarget,
562
+ typeRegistry: result.pipelineData.customOperations.typeRegistry,
560
563
  });
561
564
  }
562
565
  }
@@ -574,6 +577,7 @@ async function generateMulti(options) {
574
577
  builtinNames: cliConfig.builtinNames,
575
578
  targets: cliTargets,
576
579
  nodeHttpAdapter: multiNodeHttpAdapter,
580
+ entryPoint: cliConfig.entryPoint,
577
581
  });
578
582
  const cliFilesToWrite = files.map((file) => ({
579
583
  path: node_path_1.default.posix.join('cli', file.fileName),
@@ -41,6 +41,8 @@ export interface GenerateMultiTargetCliOptions {
41
41
  targets: MultiTargetCliTarget[];
42
42
  /** Enable NodeHttpAdapter for *.localhost subdomain routing */
43
43
  nodeHttpAdapter?: boolean;
44
+ /** Generate a runnable index.ts entry point */
45
+ entryPoint?: boolean;
44
46
  }
45
47
  export declare function resolveBuiltinNames(targetNames: string[], userOverrides?: BuiltinNames): {
46
48
  auth: string;
@@ -56,5 +58,5 @@ export { generateReadme, generateAgentsDocs, getCliMcpTools, generateSkills, gen
56
58
  export type { MultiTargetDocsInput } from './docs-generator';
57
59
  export { resolveDocsConfig } from '../docs-utils';
58
60
  export type { GeneratedDocFile, McpTool } from '../docs-utils';
59
- export { generateUtilsFile } from './utils-generator';
61
+ export { generateUtilsFile, generateEntryPointFile } from './utils-generator';
60
62
  export type { GeneratedFile, MultiTargetExecutorInput } from './executor-generator';
@@ -3,7 +3,7 @@ import { generateCustomCommand } from './custom-command-generator';
3
3
  import { generateExecutorFile, generateMultiTargetExecutorFile } from './executor-generator';
4
4
  import { generateAuthCommand, generateAuthCommandWithName, generateContextCommand, generateMultiTargetContextCommand, } from './infra-generator';
5
5
  import { generateTableCommand } from './table-command-generator';
6
- import { generateUtilsFile, generateNodeFetchFile } from './utils-generator';
6
+ import { generateUtilsFile, generateNodeFetchFile, generateEntryPointFile } from './utils-generator';
7
7
  export function generateCli(options) {
8
8
  const { tables, customOperations, config } = options;
9
9
  const files = [];
@@ -43,6 +43,11 @@ export function generateCli(options) {
43
43
  }
44
44
  const commandMapFile = generateCommandMap(tables, allCustomOps, toolName);
45
45
  files.push(commandMapFile);
46
+ // Generate entry point if configured
47
+ const generateEntryPoint = typeof cliConfig === 'object' && !!cliConfig.entryPoint;
48
+ if (generateEntryPoint) {
49
+ files.push(generateEntryPointFile());
50
+ }
46
51
  return {
47
52
  files,
48
53
  stats: {
@@ -130,6 +135,10 @@ export function generateMultiTargetCli(options) {
130
135
  targets: commandMapTargets,
131
136
  });
132
137
  files.push(commandMapFile);
138
+ // Generate entry point if configured
139
+ if (options.entryPoint) {
140
+ files.push(generateEntryPointFile());
141
+ }
133
142
  return {
134
143
  files,
135
144
  stats: {
@@ -148,4 +157,4 @@ export { generateCommandMap, generateMultiTargetCommandMap } from './command-map
148
157
  export { generateContextCommand, generateAuthCommand, generateMultiTargetContextCommand, generateAuthCommandWithName, } from './infra-generator';
149
158
  export { generateReadme, generateAgentsDocs, getCliMcpTools, generateSkills, generateMultiTargetReadme, generateMultiTargetAgentsDocs, getMultiTargetCliMcpTools, generateMultiTargetSkills, } from './docs-generator';
150
159
  export { resolveDocsConfig } from '../docs-utils';
151
- export { generateUtilsFile } from './utils-generator';
160
+ export { generateUtilsFile, generateEntryPointFile } from './utils-generator';
@@ -16,3 +16,12 @@ export declare function generateUtilsFile(): GeneratedFile;
16
16
  * routing (DNS resolution + Host header) without any global patching.
17
17
  */
18
18
  export declare function generateNodeFetchFile(): GeneratedFile;
19
+ /**
20
+ * Generate an index.ts entry point file for the CLI.
21
+ *
22
+ * Creates a runnable entry point that imports the command map,
23
+ * handles --version and --tty flags, and starts the CLI.
24
+ * This is off by default (cliEntryPoint: false) since many projects
25
+ * provide their own entry point with custom configuration.
26
+ */
27
+ export declare function generateEntryPointFile(): GeneratedFile;
@@ -53,3 +53,17 @@ export function generateNodeFetchFile() {
53
53
  content: readTemplateFile('node-fetch.ts', 'Node HTTP adapter for localhost subdomain routing'),
54
54
  };
55
55
  }
56
+ /**
57
+ * Generate an index.ts entry point file for the CLI.
58
+ *
59
+ * Creates a runnable entry point that imports the command map,
60
+ * handles --version and --tty flags, and starts the CLI.
61
+ * This is off by default (cliEntryPoint: false) since many projects
62
+ * provide their own entry point with custom configuration.
63
+ */
64
+ export function generateEntryPointFile() {
65
+ return {
66
+ fileName: 'index.ts',
67
+ content: readTemplateFile('cli-entry.ts', 'CLI entry point'),
68
+ };
69
+ }
@@ -1,5 +1,5 @@
1
1
  import type { CliConfig, GraphQLSDKConfigTarget } from '../types/config';
2
- import type { CleanOperation, CleanTable } from '../types/schema';
2
+ import type { CleanOperation, CleanTable, TypeRegistry } from '../types/schema';
3
3
  export interface GenerateOptions extends GraphQLSDKConfigTarget {
4
4
  authorization?: string;
5
5
  verbose?: boolean;
@@ -21,6 +21,7 @@ export interface GenerateResult {
21
21
  customOperations: {
22
22
  queries: CleanOperation[];
23
23
  mutations: CleanOperation[];
24
+ typeRegistry?: TypeRegistry;
24
25
  };
25
26
  };
26
27
  }
@@ -197,6 +197,7 @@ export async function generate(options = {}, internalOptions) {
197
197
  mutations: customOperations.mutations,
198
198
  },
199
199
  config: { ...config, nodeHttpAdapter: useNodeHttpAdapter },
200
+ typeRegistry: customOperations.typeRegistry,
200
201
  });
201
202
  filesToWrite.push(...files.map((file) => ({
202
203
  path: path.posix.join('cli', file.fileName),
@@ -330,6 +331,7 @@ export async function generate(options = {}, internalOptions) {
330
331
  customOperations: {
331
332
  queries: customOperations.queries,
332
333
  mutations: customOperations.mutations,
334
+ typeRegistry: customOperations.typeRegistry,
333
335
  },
334
336
  },
335
337
  };
@@ -515,6 +517,7 @@ export async function generateMulti(options) {
515
517
  tables: result.pipelineData.tables,
516
518
  customOperations: result.pipelineData.customOperations,
517
519
  isAuthTarget,
520
+ typeRegistry: result.pipelineData.customOperations.typeRegistry,
518
521
  });
519
522
  }
520
523
  }
@@ -532,6 +535,7 @@ export async function generateMulti(options) {
532
535
  builtinNames: cliConfig.builtinNames,
533
536
  targets: cliTargets,
534
537
  nodeHttpAdapter: multiNodeHttpAdapter,
538
+ entryPoint: cliConfig.entryPoint,
535
539
  });
536
540
  const cliFilesToWrite = files.map((file) => ({
537
541
  path: path.posix.join('cli', file.fileName),
@@ -169,6 +169,14 @@ export interface CliConfig {
169
169
  * context -> 'context' (renamed to 'env' on collision)
170
170
  */
171
171
  builtinNames?: BuiltinNames;
172
+ /**
173
+ * Generate a runnable index.ts entry point for the CLI.
174
+ * When true, generates an index.ts that imports the command map,
175
+ * handles --version and --tty flags, and starts the inquirerer CLI.
176
+ * Useful for projects that want a ready-to-run CLI without a custom entry point.
177
+ * @default false
178
+ */
179
+ entryPoint?: boolean;
172
180
  }
173
181
  /**
174
182
  * Target configuration for graphql-codegen
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructive-io/graphql-codegen",
3
- "version": "4.3.0",
3
+ "version": "4.4.1",
4
4
  "description": "GraphQL SDK generator for Constructive databases with React Query hooks",
5
5
  "keywords": [
6
6
  "graphql",
@@ -100,5 +100,5 @@
100
100
  "tsx": "^4.21.0",
101
101
  "typescript": "^5.9.3"
102
102
  },
103
- "gitHead": "b758178b808ce0bf451e86c0bd7e92079155db7c"
103
+ "gitHead": "e699d19180e350049e69d8c5bdf4f6991a05c0e6"
104
104
  }
package/types/config.d.ts CHANGED
@@ -169,6 +169,14 @@ export interface CliConfig {
169
169
  * context -> 'context' (renamed to 'env' on collision)
170
170
  */
171
171
  builtinNames?: BuiltinNames;
172
+ /**
173
+ * Generate a runnable index.ts entry point for the CLI.
174
+ * When true, generates an index.ts that imports the command map,
175
+ * handles --version and --tty flags, and starts the inquirerer CLI.
176
+ * Useful for projects that want a ready-to-run CLI without a custom entry point.
177
+ * @default false
178
+ */
179
+ entryPoint?: boolean;
172
180
  }
173
181
  /**
174
182
  * Target configuration for graphql-codegen