@@ -22,13 +22,24 @@ const DEFAULT_CONFIG = {
2222
2323type ConfigLoadResult = { config : unknown } | null ;
2424
25+ type ConfigLoadErrorCode =
26+ | "config-discovery-init"
27+ | "config-discovery-search"
28+ | "config-file-load"
29+ | "config-invalid" ;
30+
2531export class ConfigLoadError extends Error {
2632 override cause : unknown ;
33+ readonly code : ConfigLoadErrorCode ;
2734
28- constructor ( message : string , options ?: { cause ?: unknown } ) {
35+ constructor (
36+ message : string ,
37+ options : { cause ?: unknown ; code : ConfigLoadErrorCode } ,
38+ ) {
2939 super ( message ) ;
3040 this . name = "ConfigLoadError" ;
3141 this . cause = options ?. cause ;
42+ this . code = options . code ;
3243 }
3344}
3445
@@ -117,6 +128,7 @@ const assertExplicitUrl = (
117128 if ( isValidUrlString ( value ) ) return ;
118129 throw new ConfigLoadError (
119130 `Invalid Graphiti config value for ${ fieldName } : expected a valid URL` ,
131+ { code : "config-invalid" } ,
120132 ) ;
121133} ;
122134
@@ -226,7 +238,7 @@ const getConfigExplorerAdapter = (): ConfigExplorerAdapter => {
226238 } catch ( err ) {
227239 throw new ConfigLoadError (
228240 "Unable to initialize Graphiti config discovery" ,
229- { cause : err } ,
241+ { cause : err , code : "config-discovery-init" } ,
230242 ) ;
231243 }
232244} ;
@@ -244,7 +256,7 @@ const loadConfigFile = (
244256 if ( err instanceof ConfigLoadError ) throw err ;
245257 throw new ConfigLoadError (
246258 `Unable to load Graphiti config file: ${ filePath } ` ,
247- { cause : err } ,
259+ { cause : err , code : "config-file-load" } ,
248260 ) ;
249261 }
250262} ;
@@ -270,6 +282,7 @@ const searchConfig = (
270282 if ( err instanceof ConfigLoadError ) throw err ;
271283 throw new ConfigLoadError ( "Unable to discover Graphiti config" , {
272284 cause : err ,
285+ code : "config-discovery-search" ,
273286 } ) ;
274287 }
275288} ;
@@ -287,10 +300,9 @@ const loadLegacyConfig = (
287300} ;
288301
289302const isDiscoveryInfrastructureFailure = ( error : unknown ) : boolean =>
290- error instanceof ConfigLoadError && (
291- error . message === "Unable to initialize Graphiti config discovery" ||
292- error . message === "Unable to discover Graphiti config"
293- ) ;
303+ error instanceof ConfigLoadError &&
304+ ( error . code === "config-discovery-init" ||
305+ error . code === "config-discovery-search" ) ;
294306
295307export function loadConfig ( directory ?: string ) : GraphitiConfig {
296308 try {
0 commit comments