blob: 132a67c89ce88417b9ecd7cb49a243a0c1bc75fc [file] [log] [blame]
Adrià Vilanova Martínez58cc67c2024-04-21 16:43:01 +02001import AutoRefresh from '../../../features/autoRefresh/core/autoRefresh';
2
3export const AutoRefreshDependency = 'autoRefresh';
4export const DependenciesToClass = {
5 [AutoRefreshDependency]: AutoRefresh,
6};
7
8interface OurWindow extends Window {
9 TWPTDependencies?: Dependencies;
10}
11
12type Dependencies = {
13 [K in Dependency]?: InstanceType<(typeof DependenciesToClass)[K]>;
14};
15
16export type Dependency = keyof typeof DependenciesToClass;
17
18class DependenciesProvider {
19 private dependencies: Dependencies;
20
21 constructor() {
22 const ourWindow = window as OurWindow;
23 if (!ourWindow.TWPTDependencies) {
24 ourWindow.TWPTDependencies = {};
25 }
26 this.dependencies = ourWindow.TWPTDependencies;
27 }
28
29 getDependency(dependency: Dependency) {
30 this.setUpDependency(dependency);
31 return this.dependencies[dependency];
32 }
33
34 setUpDependency(dependency: Dependency): void {
35 if (!this.dependencies[dependency]) {
36 this.dependencies[dependency] = new DependenciesToClass[dependency]();
37 }
38 }
39}
40
41export default class DependenciesProviderSingleton {
42 private static instance: DependenciesProvider;
43
44 /**
45 * @see {@link DependenciesProviderSingleton.getInstance}
46 */
47 private constructor() {}
48
49 public static getInstance(): DependenciesProvider {
50 if (!DependenciesProviderSingleton.instance) {
51 DependenciesProviderSingleton.instance = new DependenciesProvider();
52 }
53 return DependenciesProviderSingleton.instance;
54 }
55}