@@ -21,16 +21,33 @@ export class ObjectLoader {
2121 const doc = yaml . load ( ctx . content ) as any ;
2222 if ( ! doc ) return ;
2323
24- if ( doc . name && doc . fields ) {
24+ // Calculate ID from filename
25+ const basename = path . basename ( ctx . file ) ;
26+ const filenameId = basename . replace ( / \. o b j e c t \. ( y m l | y a m l ) $ / , '' ) ;
27+
28+ // 1. Single Object definition (Standard)
29+ // If fields are present, we treat it as a single object definition
30+ if ( doc . fields ) {
31+ if ( ! doc . name ) {
32+ // If name is missing, infer from filename
33+ doc . name = filenameId ;
34+ } else if ( doc . name !== filenameId ) {
35+ // warn if mismatch
36+ console . warn ( `[ObjectQL] Warning: Object name '${ doc . name } ' in ${ basename } does not match filename. Using '${ doc . name } '.` ) ;
37+ }
38+
2539 const packageEntry = ctx . registry . getEntry ( 'package-map' , ctx . file ) ;
2640 registerObject ( ctx . registry , doc , ctx . file , ctx . packageName || ( packageEntry && packageEntry . package ) ) ;
27- } else {
28- for ( const [ key , value ] of Object . entries ( doc ) ) {
29- if ( typeof value === 'object' && ( value as any ) . fields ) {
30- const obj = value as any ;
31- if ( ! obj . name ) obj . name = key ;
32- registerObject ( ctx . registry , obj , ctx . file , ctx . packageName ) ;
33- }
41+ return ;
42+ }
43+
44+ // 2. Multi-object map (Legacy/Bundle mode)
45+ // e.g. { object1: { fields... }, object2: { fields... } }
46+ for ( const [ key , value ] of Object . entries ( doc ) ) {
47+ if ( typeof value === 'object' && ( value as any ) . fields ) {
48+ const obj = value as any ;
49+ if ( ! obj . name ) obj . name = key ;
50+ registerObject ( ctx . registry , obj , ctx . file , ctx . packageName ) ;
3451 }
3552 }
3653 } catch ( e ) {
0 commit comments