@@ -22,13 +22,18 @@ export class SchemaRegistry {
2222 * @param type The category of metadata (e.g., 'object', 'package', 'apps')
2323 * @param item The metadata item itself
2424 * @param keyField The property to use as the unique key (default: 'name')
25+ * @param packageId Optional: the owning package ID for scoped queries
2526 */
26- static registerItem < T > ( type : string , item : T , keyField : keyof T = 'name' as keyof T ) {
27+ static registerItem < T > ( type : string , item : T , keyField : keyof T = 'name' as keyof T , packageId ?: string ) {
2728 if ( ! this . metadata . has ( type ) ) {
2829 this . metadata . set ( type , new Map ( ) ) ;
2930 }
3031 const collection = this . metadata . get ( type ) ! ;
3132 const key = String ( item [ keyField ] ) ;
33+ // Tag item with owning package for scoped queries
34+ if ( packageId ) {
35+ ( item as any ) . _packageId = packageId ;
36+ }
3237
3338 // Validation Hook
3439 try {
@@ -88,9 +93,15 @@ export class SchemaRegistry {
8893
8994 /**
9095 * Universal List Method
96+ * @param type The metadata type to list
97+ * @param packageId Optional: filter items belonging to a specific package
9198 */
92- static listItems < T > ( type : string ) : T [ ] {
93- return Array . from ( this . metadata . get ( type ) ?. values ( ) || [ ] ) as T [ ] ;
99+ static listItems < T > ( type : string , packageId ?: string ) : T [ ] {
100+ const items = Array . from ( this . metadata . get ( type ) ?. values ( ) || [ ] ) as T [ ] ;
101+ if ( packageId ) {
102+ return items . filter ( ( item : any ) => item . _packageId === packageId ) ;
103+ }
104+ return items ;
94105 }
95106
96107 /**
@@ -107,16 +118,16 @@ export class SchemaRegistry {
107118 /**
108119 * Object Helpers
109120 */
110- static registerObject ( schema : ServiceObject ) {
111- this . registerItem ( 'object' , schema , 'name' ) ;
121+ static registerObject ( schema : ServiceObject , packageId ?: string ) {
122+ this . registerItem ( 'object' , schema , 'name' , packageId ) ;
112123 }
113124
114125 static getObject ( name : string ) : ServiceObject | undefined {
115126 return this . getItem < ServiceObject > ( 'object' , name ) ;
116127 }
117128
118- static getAllObjects ( ) : ServiceObject [ ] {
119- return this . listItems < ServiceObject > ( 'object' ) ;
129+ static getAllObjects ( packageId ?: string ) : ServiceObject [ ] {
130+ return this . listItems < ServiceObject > ( 'object' , packageId ) ;
120131 }
121132
122133 /**
@@ -198,8 +209,8 @@ export class SchemaRegistry {
198209 * App Helpers — UI navigation shells extracted from packages
199210 * @deprecated Use registerItem('apps', app, 'name') instead of registerApp for clarity
200211 */
201- static registerApp ( app : any ) {
202- this . registerItem ( 'apps' , app , 'name' ) ;
212+ static registerApp ( app : any , packageId ?: string ) {
213+ this . registerItem ( 'apps' , app , 'name' , packageId ) ;
203214 }
204215
205216 static getApp ( name : string ) : any {
0 commit comments