File tree Expand file tree Collapse file tree
packages/config-files/src Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import { Observable , shareReplay } from 'rxjs' ;
2+
3+ import { ConfigFileDefinition } from './definition' ;
4+ import { ConfigFileLoader } from './loader' ;
5+
6+ /**
7+ * Decorator for {@link ConfigFileLoader}
8+ * that caches the loaded configuration objects of each definition.
9+ */
10+ export class CacheConfigFileContent implements ConfigFileLoader {
11+ #cache = new Map <
12+ ConfigFileDefinition < unknown , unknown > ,
13+ Observable < unknown >
14+ > ( ) ;
15+
16+ constructor ( private kernel : ConfigFileLoader ) { }
17+
18+ load < T , Schema > ( def : ConfigFileDefinition < T , Schema > ) : Observable < T > {
19+ const cached = this . #cache. get ( def ) ;
20+ if ( cached ) return cached as Observable < T > ;
21+ const result$ = this . kernel . load ( def ) . pipe ( shareReplay ( 1 ) ) ;
22+ this . #cache. set ( def , result$ ) ;
23+ return result$ ;
24+ }
25+ }
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ import { defineConfigFile } from './definition';
33/**@deprecated */
44export const defineConfigFileMetadata = defineConfigFile ;
55
6+ export * from './behaviors' ;
67export * from './definition' ;
78export * from './loader' ;
89export * from './parser' ;
You can’t perform that action at this time.
0 commit comments