@liendev/core 0.22.0 → 0.23.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.
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Error thrown when config file exists but has invalid syntax or structure.
3
+ * This is separate from "file not found" which is expected behavior.
4
+ */
5
+ export declare class ConfigValidationError extends Error {
6
+ readonly configPath: string;
7
+ constructor(message: string, configPath: string);
8
+ }
1
9
  /**
2
10
  * Global configuration for Lien.
3
11
  * Only contains what truly needs configuration: storage backend choice.
@@ -1 +1 @@
1
- {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KAEjB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA2C9D;AA0ED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBjF"}
1
+ {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aACD,UAAU,EAAE,MAAM;gBAAnD,OAAO,EAAE,MAAM,EAAkB,UAAU,EAAE,MAAM;CAIhE;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KAEjB,CAAC;CACH;AAoGD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAuB9D;AA0ED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBjF"}
@@ -4,6 +4,89 @@ import os from 'os';
4
4
  import { exec } from 'child_process';
5
5
  import { promisify } from 'util';
6
6
  const execAsync = promisify(exec);
7
+ /**
8
+ * Error thrown when config file exists but has invalid syntax or structure.
9
+ * This is separate from "file not found" which is expected behavior.
10
+ */
11
+ export class ConfigValidationError extends Error {
12
+ configPath;
13
+ constructor(message, configPath) {
14
+ super(message);
15
+ this.configPath = configPath;
16
+ this.name = 'ConfigValidationError';
17
+ }
18
+ }
19
+ /**
20
+ * Load configuration from environment variables if present.
21
+ */
22
+ function loadConfigFromEnv() {
23
+ const backendEnv = process.env.LIEN_BACKEND;
24
+ if (!backendEnv) {
25
+ return null;
26
+ }
27
+ // Validate backend value
28
+ const validBackends = ['lancedb', 'qdrant'];
29
+ if (!validBackends.includes(backendEnv)) {
30
+ throw new ConfigValidationError(`Invalid LIEN_BACKEND environment variable: "${backendEnv}"\n` +
31
+ `Valid values: 'lancedb' or 'qdrant'`, '<environment>');
32
+ }
33
+ const backend = backendEnv;
34
+ if (backend === 'qdrant') {
35
+ const url = process.env.LIEN_QDRANT_URL;
36
+ if (!url) {
37
+ // Fail fast with clear error instead of returning incomplete config
38
+ throw new ConfigValidationError('Qdrant backend requires LIEN_QDRANT_URL environment variable.\n' +
39
+ 'Set it with: export LIEN_QDRANT_URL=http://localhost:6333', '<environment>');
40
+ }
41
+ return {
42
+ backend: 'qdrant',
43
+ qdrant: {
44
+ url,
45
+ apiKey: process.env.LIEN_QDRANT_API_KEY,
46
+ },
47
+ };
48
+ }
49
+ return { backend };
50
+ }
51
+ /**
52
+ * Parse and validate a config object.
53
+ */
54
+ function validateConfig(config, configPath) {
55
+ // Validate backend value
56
+ if (config.backend && !['lancedb', 'qdrant'].includes(config.backend)) {
57
+ throw new ConfigValidationError(`Invalid backend in global config: "${config.backend}"\n` +
58
+ `Config file: ${configPath}\n` +
59
+ `Valid values: 'lancedb' or 'qdrant'`, configPath);
60
+ }
61
+ // Validate Qdrant configuration
62
+ if (config.backend === 'qdrant') {
63
+ if (!config.qdrant) {
64
+ throw new ConfigValidationError(`Qdrant backend requires a "qdrant" configuration section\n` +
65
+ `Config file: ${configPath}\n` +
66
+ `Add: { "qdrant": { "url": "http://localhost:6333" } }`, configPath);
67
+ }
68
+ if (!config.qdrant.url) {
69
+ throw new ConfigValidationError(`Qdrant backend requires qdrant.url in config\n` +
70
+ `Config file: ${configPath}\n` +
71
+ `Add: { "qdrant": { "url": "http://localhost:6333" } }`, configPath);
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * Parse JSON config file with helpful error messages.
77
+ */
78
+ function parseConfigFile(content, configPath) {
79
+ try {
80
+ return JSON.parse(content);
81
+ }
82
+ catch (parseError) {
83
+ const errorMsg = parseError instanceof Error ? parseError.message : String(parseError);
84
+ throw new ConfigValidationError(`Failed to parse global config file.\n` +
85
+ `Config file: ${configPath}\n` +
86
+ `Syntax error: ${errorMsg}\n\n` +
87
+ `Please fix the JSON syntax errors in your config file.`, configPath);
88
+ }
89
+ }
7
90
  /**
8
91
  * Load global configuration from environment variables or config file.
9
92
  *
@@ -16,39 +99,24 @@ const execAsync = promisify(exec);
16
99
  */
17
100
  export async function loadGlobalConfig() {
18
101
  // 1. Check environment variables first
19
- if (process.env.LIEN_BACKEND) {
20
- const backend = process.env.LIEN_BACKEND;
21
- if (backend === 'qdrant' && process.env.LIEN_QDRANT_URL) {
22
- return {
23
- backend: 'qdrant',
24
- qdrant: {
25
- url: process.env.LIEN_QDRANT_URL,
26
- apiKey: process.env.LIEN_QDRANT_API_KEY,
27
- },
28
- };
29
- }
30
- return { backend };
102
+ const envConfig = loadConfigFromEnv();
103
+ if (envConfig) {
104
+ return envConfig;
31
105
  }
32
106
  // 2. Check global config file
33
107
  const configPath = path.join(os.homedir(), '.lien', 'config.json');
34
108
  try {
35
109
  const content = await fs.readFile(configPath, 'utf-8');
36
- const config = JSON.parse(content);
37
- // Validate structure
38
- if (config.backend && !['lancedb', 'qdrant'].includes(config.backend)) {
39
- throw new Error(`Invalid backend: ${config.backend}. Must be 'lancedb' or 'qdrant'`);
40
- }
41
- if (config.backend === 'qdrant' && config.qdrant && !config.qdrant.url) {
42
- throw new Error('Qdrant backend requires qdrant.url in config');
43
- }
110
+ const config = parseConfigFile(content, configPath);
111
+ validateConfig(config, configPath);
44
112
  return config;
45
113
  }
46
114
  catch (error) {
47
115
  if (error.code === 'ENOENT') {
48
- // File doesn't exist - use defaults
116
+ // File doesn't exist - use defaults (this is normal)
49
117
  return { backend: 'lancedb' };
50
118
  }
51
- // Re-throw validation errors
119
+ // Re-throw all other errors (validation errors, JSON parse errors, etc.)
52
120
  throw error;
53
121
  }
54
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { VectorDB } from './lancedb.js';
2
2
  import { QdrantDB } from './qdrant.js';
3
- import { loadGlobalConfig, extractOrgIdFromGit } from '../config/global-config.js';
3
+ import { loadGlobalConfig, extractOrgIdFromGit, ConfigValidationError } from '../config/global-config.js';
4
4
  import { getCurrentBranch, getCurrentCommit } from '../git/utils.js';
5
5
  /**
6
6
  * Validate that a VectorDB instance has the required methods.
@@ -82,21 +82,20 @@ export async function createVectorDB(projectRoot) {
82
82
  globalConfig = await loadGlobalConfig();
83
83
  }
84
84
  catch (error) {
85
- const errorMessage = error instanceof Error ? error.message : String(error);
86
- // Check if this is a "file not found" error (expected) vs other errors (unexpected)
87
- const isFileNotFound = errorMessage.includes('ENOENT') ||
88
- errorMessage.includes('not found') ||
89
- errorMessage.includes('does not exist');
90
- if (isFileNotFound) {
85
+ // ConfigValidationError: Config file exists but has syntax/validation errors
86
+ // This should fail hard with a clear error message
87
+ if (error instanceof ConfigValidationError) {
88
+ throw error; // Error message already has helpful details
89
+ }
90
+ // Check if this is a "file not found" error (expected)
91
+ if (error.code === 'ENOENT') {
91
92
  // Expected: No config file exists, use default LanceDB (normal for CLI usage)
92
93
  return await createLanceDB(projectRoot);
93
94
  }
94
- else {
95
- // Unexpected: Config file exists but failed to load (syntax error, permissions, etc.)
96
- // Fail hard - don't silently fall back to LanceDB
97
- throw new Error('Failed to load global config file. Please check your config file for errors. ' +
98
- `Error: ${errorMessage}`);
99
- }
95
+ // Any other error: fail hard with details
96
+ const errorMessage = error instanceof Error ? error.message : String(error);
97
+ throw new Error('Failed to load global config file. Please check your config file for errors.\n' +
98
+ `Error: ${errorMessage}`);
100
99
  }
101
100
  // Config loaded successfully - respect the backend choice
102
101
  switch (globalConfig.backend) {
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liendev/core",
3
- "version": "0.22.0",
3
+ "version": "0.23.0",
4
4
  "description": "Core indexing and analysis engine for Lien",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",