@constructive-io/graphql-codegen 4.3.0 → 4.4.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.
@@ -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
+ });
package/core/generate.js CHANGED
@@ -574,6 +574,7 @@ async function generateMulti(options) {
574
574
  builtinNames: cliConfig.builtinNames,
575
575
  targets: cliTargets,
576
576
  nodeHttpAdapter: multiNodeHttpAdapter,
577
+ entryPoint: cliConfig.entryPoint,
577
578
  });
578
579
  const cliFilesToWrite = files.map((file) => ({
579
580
  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
+ }
@@ -532,6 +532,7 @@ export async function generateMulti(options) {
532
532
  builtinNames: cliConfig.builtinNames,
533
533
  targets: cliTargets,
534
534
  nodeHttpAdapter: multiNodeHttpAdapter,
535
+ entryPoint: cliConfig.entryPoint,
535
536
  });
536
537
  const cliFilesToWrite = files.map((file) => ({
537
538
  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.0",
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": "2ce4c3c62998a3c57eb04bfb67ce47bb9490f384"
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