@constructive-io/graphql-codegen 4.47.0 → 4.47.2

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.
@@ -17,8 +17,6 @@
17
17
  * Any changes here will affect all generated CLI embedder modules.
18
18
  */
19
19
 
20
- import OllamaClient from '@agentic-kit/ollama';
21
-
22
20
  // ─── Types ───────────────────────────────────────────────────────────────────
23
21
 
24
22
  export type EmbedderFunction = (text: string) => Promise<number[]>;
@@ -38,8 +36,18 @@ function createOllamaEmbedder(
38
36
  baseUrl: string = 'http://localhost:11434',
39
37
  model: string = 'nomic-embed-text'
40
38
  ): EmbedderFunction {
41
- const client = new OllamaClient(baseUrl);
39
+ let clientP: Promise<{ generateEmbedding: (text: string, model: string) => Promise<{ embedding: number[] }> }> | undefined;
42
40
  return async (text: string): Promise<number[]> => {
41
+ if (!clientP) {
42
+ clientP = import('@agentic-kit/ollama')
43
+ .then((m) => new m.default(baseUrl))
44
+ .catch(() => {
45
+ throw new Error(
46
+ 'The ollama embedder requires @agentic-kit/ollama. Install it: npm i @agentic-kit/ollama'
47
+ );
48
+ });
49
+ }
50
+ const client = await clientP;
43
51
  const result = await client.generateEmbedding(text, model);
44
52
  return result.embedding;
45
53
  };
@@ -56,9 +56,13 @@ export interface GenerateMultiResult {
56
56
  }>;
57
57
  hasError: boolean;
58
58
  }
59
+ /** Manifest file listing generated target names, written to the output root. */
60
+ export declare const TARGETS_MANIFEST = ".targets";
59
61
  /**
60
- * Remove subdirectories in `outputRoot` that are not in `currentTargetNames`.
61
- * Useful for cleaning up stale target output before a fresh multi-target generate.
62
+ * Remove stale generated target directories from `outputRoot`.
63
+ * Reads the `.targets` manifest (written by `generateMulti`) to know which
64
+ * directories were previously generated. Only those are eligible for removal;
65
+ * hand-written directories (e.g. `config/`, `utils/`) are never touched.
62
66
  * Returns the list of directory names that were removed.
63
67
  */
64
68
  export declare function removeStaleTargetDirs(outputRoot: string, currentTargetNames: string[], verbose?: boolean): string[];
package/core/generate.js CHANGED
@@ -36,6 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TARGETS_MANIFEST = void 0;
39
40
  exports.generate = generate;
40
41
  exports.expandApiNamesToMultiTarget = expandApiNamesToMultiTarget;
41
42
  exports.expandSchemaDirToMultiTarget = expandSchemaDirToMultiTarget;
@@ -510,23 +511,38 @@ function applySharedPgpmDb(config, sharedSources) {
510
511
  db: sharedDbConfig,
511
512
  };
512
513
  }
514
+ /** Manifest file listing generated target names, written to the output root. */
515
+ exports.TARGETS_MANIFEST = '.targets';
513
516
  /**
514
- * Remove subdirectories in `outputRoot` that are not in `currentTargetNames`.
515
- * Useful for cleaning up stale target output before a fresh multi-target generate.
517
+ * Remove stale generated target directories from `outputRoot`.
518
+ * Reads the `.targets` manifest (written by `generateMulti`) to know which
519
+ * directories were previously generated. Only those are eligible for removal;
520
+ * hand-written directories (e.g. `config/`, `utils/`) are never touched.
516
521
  * Returns the list of directory names that were removed.
517
522
  */
518
523
  function removeStaleTargetDirs(outputRoot, currentTargetNames, verbose) {
519
524
  const removed = [];
520
525
  if (!fs.existsSync(outputRoot))
521
526
  return removed;
527
+ const manifestPath = node_path_1.default.join(outputRoot, exports.TARGETS_MANIFEST);
528
+ if (!fs.existsSync(manifestPath))
529
+ return removed;
530
+ let previousTargets;
531
+ try {
532
+ previousTargets = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
533
+ }
534
+ catch {
535
+ return removed;
536
+ }
522
537
  const currentTargets = new Set(currentTargetNames);
523
- const entries = fs.readdirSync(outputRoot, { withFileTypes: true });
524
- for (const entry of entries) {
525
- if (entry.isDirectory() && !currentTargets.has(entry.name)) {
526
- fs.rmSync(node_path_1.default.join(outputRoot, entry.name), { recursive: true, force: true });
527
- removed.push(entry.name);
538
+ const staleTargets = previousTargets.filter((t) => !currentTargets.has(t));
539
+ for (const target of staleTargets) {
540
+ const dirPath = node_path_1.default.join(outputRoot, target);
541
+ if (fs.existsSync(dirPath)) {
542
+ fs.rmSync(dirPath, { recursive: true, force: true });
543
+ removed.push(target);
528
544
  if (verbose) {
529
- console.log(`Removed stale target directory: ${entry.name}`);
545
+ console.log(`Removed stale target directory: ${target}`);
530
546
  }
531
547
  }
532
548
  }
@@ -677,6 +693,8 @@ async function generateMulti(options) {
677
693
  const outputRoot = node_path_1.default.dirname(firstOutput);
678
694
  const barrelContent = (0, barrel_1.generateMultiTargetBarrel)(successfulNames);
679
695
  await writeFiles([{ path: 'index.ts', content: barrelContent }], outputRoot, [], { pruneStaleFiles: false });
696
+ // Write manifest so removeStaleTargetDirs knows which dirs are generated
697
+ fs.writeFileSync(node_path_1.default.join(outputRoot, exports.TARGETS_MANIFEST), JSON.stringify(successfulNames.sort()) + '\n');
680
698
  }
681
699
  }
682
700
  }
@@ -56,9 +56,13 @@ export interface GenerateMultiResult {
56
56
  }>;
57
57
  hasError: boolean;
58
58
  }
59
+ /** Manifest file listing generated target names, written to the output root. */
60
+ export declare const TARGETS_MANIFEST = ".targets";
59
61
  /**
60
- * Remove subdirectories in `outputRoot` that are not in `currentTargetNames`.
61
- * Useful for cleaning up stale target output before a fresh multi-target generate.
62
+ * Remove stale generated target directories from `outputRoot`.
63
+ * Reads the `.targets` manifest (written by `generateMulti`) to know which
64
+ * directories were previously generated. Only those are eligible for removal;
65
+ * hand-written directories (e.g. `config/`, `utils/`) are never touched.
62
66
  * Returns the list of directory names that were removed.
63
67
  */
64
68
  export declare function removeStaleTargetDirs(outputRoot: string, currentTargetNames: string[], verbose?: boolean): string[];
@@ -467,23 +467,38 @@ function applySharedPgpmDb(config, sharedSources) {
467
467
  db: sharedDbConfig,
468
468
  };
469
469
  }
470
+ /** Manifest file listing generated target names, written to the output root. */
471
+ export const TARGETS_MANIFEST = '.targets';
470
472
  /**
471
- * Remove subdirectories in `outputRoot` that are not in `currentTargetNames`.
472
- * Useful for cleaning up stale target output before a fresh multi-target generate.
473
+ * Remove stale generated target directories from `outputRoot`.
474
+ * Reads the `.targets` manifest (written by `generateMulti`) to know which
475
+ * directories were previously generated. Only those are eligible for removal;
476
+ * hand-written directories (e.g. `config/`, `utils/`) are never touched.
473
477
  * Returns the list of directory names that were removed.
474
478
  */
475
479
  export function removeStaleTargetDirs(outputRoot, currentTargetNames, verbose) {
476
480
  const removed = [];
477
481
  if (!fs.existsSync(outputRoot))
478
482
  return removed;
483
+ const manifestPath = path.join(outputRoot, TARGETS_MANIFEST);
484
+ if (!fs.existsSync(manifestPath))
485
+ return removed;
486
+ let previousTargets;
487
+ try {
488
+ previousTargets = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
489
+ }
490
+ catch {
491
+ return removed;
492
+ }
479
493
  const currentTargets = new Set(currentTargetNames);
480
- const entries = fs.readdirSync(outputRoot, { withFileTypes: true });
481
- for (const entry of entries) {
482
- if (entry.isDirectory() && !currentTargets.has(entry.name)) {
483
- fs.rmSync(path.join(outputRoot, entry.name), { recursive: true, force: true });
484
- removed.push(entry.name);
494
+ const staleTargets = previousTargets.filter((t) => !currentTargets.has(t));
495
+ for (const target of staleTargets) {
496
+ const dirPath = path.join(outputRoot, target);
497
+ if (fs.existsSync(dirPath)) {
498
+ fs.rmSync(dirPath, { recursive: true, force: true });
499
+ removed.push(target);
485
500
  if (verbose) {
486
- console.log(`Removed stale target directory: ${entry.name}`);
501
+ console.log(`Removed stale target directory: ${target}`);
487
502
  }
488
503
  }
489
504
  }
@@ -634,6 +649,8 @@ export async function generateMulti(options) {
634
649
  const outputRoot = path.dirname(firstOutput);
635
650
  const barrelContent = generateMultiTargetBarrel(successfulNames);
636
651
  await writeFiles([{ path: 'index.ts', content: barrelContent }], outputRoot, [], { pruneStaleFiles: false });
652
+ // Write manifest so removeStaleTargetDirs knows which dirs are generated
653
+ fs.writeFileSync(path.join(outputRoot, TARGETS_MANIFEST), JSON.stringify(successfulNames.sort()) + '\n');
637
654
  }
638
655
  }
639
656
  }
package/esm/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export * from './generators';
11
11
  export * from './client';
12
12
  export { defineConfig } from './types/config';
13
13
  export type { GenerateOptions, GenerateResult, GenerateMultiOptions, GenerateMultiResult } from './core/generate';
14
- export { generate, generateMulti, expandApiNamesToMultiTarget, expandSchemaDirToMultiTarget, removeStaleTargetDirs } from './core/generate';
14
+ export { generate, generateMulti, expandApiNamesToMultiTarget, expandSchemaDirToMultiTarget, removeStaleTargetDirs, TARGETS_MANIFEST } from './core/generate';
15
15
  export { findConfigFile, loadConfigFile } from './core/config';
16
16
  export { runCodegenHandler } from './cli/handler';
17
17
  export type { CodegenAnswers } from './cli/shared';
package/esm/index.js CHANGED
@@ -15,7 +15,7 @@ export * from './generators';
15
15
  export * from './client';
16
16
  // Config definition helper
17
17
  export { defineConfig } from './types/config';
18
- export { generate, generateMulti, expandApiNamesToMultiTarget, expandSchemaDirToMultiTarget, removeStaleTargetDirs } from './core/generate';
18
+ export { generate, generateMulti, expandApiNamesToMultiTarget, expandSchemaDirToMultiTarget, removeStaleTargetDirs, TARGETS_MANIFEST } from './core/generate';
19
19
  // Config utilities
20
20
  export { findConfigFile, loadConfigFile } from './core/config';
21
21
  // CLI shared utilities (for packages/cli to import)
package/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export * from './generators';
11
11
  export * from './client';
12
12
  export { defineConfig } from './types/config';
13
13
  export type { GenerateOptions, GenerateResult, GenerateMultiOptions, GenerateMultiResult } from './core/generate';
14
- export { generate, generateMulti, expandApiNamesToMultiTarget, expandSchemaDirToMultiTarget, removeStaleTargetDirs } from './core/generate';
14
+ export { generate, generateMulti, expandApiNamesToMultiTarget, expandSchemaDirToMultiTarget, removeStaleTargetDirs, TARGETS_MANIFEST } from './core/generate';
15
15
  export { findConfigFile, loadConfigFile } from './core/config';
16
16
  export { runCodegenHandler } from './cli/handler';
17
17
  export type { CodegenAnswers } from './cli/shared';
package/index.js CHANGED
@@ -21,7 +21,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
21
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
22
  };
23
23
  Object.defineProperty(exports, "__esModule", { value: true });
24
- exports.buildSchemaFromDatabase = exports.splitCommas = exports.seedArgvFromConfig = exports.printResult = exports.normalizeCodegenListOptions = exports.hyphenateKeys = exports.hasResolvedCodegenSource = exports.flattenDbFields = exports.filterDefined = exports.codegenQuestions = exports.camelizeArgv = exports.buildGenerateOptions = exports.buildDbConfig = exports.runCodegenHandler = exports.loadConfigFile = exports.findConfigFile = exports.removeStaleTargetDirs = exports.expandSchemaDirToMultiTarget = exports.expandApiNamesToMultiTarget = exports.generateMulti = exports.generate = exports.defineConfig = void 0;
24
+ exports.buildSchemaFromDatabase = exports.splitCommas = exports.seedArgvFromConfig = exports.printResult = exports.normalizeCodegenListOptions = exports.hyphenateKeys = exports.hasResolvedCodegenSource = exports.flattenDbFields = exports.filterDefined = exports.codegenQuestions = exports.camelizeArgv = exports.buildGenerateOptions = exports.buildDbConfig = exports.runCodegenHandler = exports.loadConfigFile = exports.findConfigFile = exports.TARGETS_MANIFEST = exports.removeStaleTargetDirs = exports.expandSchemaDirToMultiTarget = exports.expandApiNamesToMultiTarget = exports.generateMulti = exports.generate = exports.defineConfig = void 0;
25
25
  // Core types
26
26
  __exportStar(require("./types"), exports);
27
27
  // Core query building
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "generateMulti", { enumerable: true, get: functio
39
39
  Object.defineProperty(exports, "expandApiNamesToMultiTarget", { enumerable: true, get: function () { return generate_1.expandApiNamesToMultiTarget; } });
40
40
  Object.defineProperty(exports, "expandSchemaDirToMultiTarget", { enumerable: true, get: function () { return generate_1.expandSchemaDirToMultiTarget; } });
41
41
  Object.defineProperty(exports, "removeStaleTargetDirs", { enumerable: true, get: function () { return generate_1.removeStaleTargetDirs; } });
42
+ Object.defineProperty(exports, "TARGETS_MANIFEST", { enumerable: true, get: function () { return generate_1.TARGETS_MANIFEST; } });
42
43
  // Config utilities
43
44
  var config_2 = require("./core/config");
44
45
  Object.defineProperty(exports, "findConfigFile", { enumerable: true, get: function () { return config_2.findConfigFile; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructive-io/graphql-codegen",
3
- "version": "4.47.0",
3
+ "version": "4.47.2",
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": "6e5e79cbc24e2861963aeb1f6daff6d55279f081"
103
+ "gitHead": "23efb04ef3ce05a828960d448f96c1a456485fa4"
104
104
  }