-
Notifications
You must be signed in to change notification settings - Fork 268
/
view-registry.ts
85 lines (78 loc) · 2.83 KB
/
view-registry.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**********************************************************************
* Copyright (C) 2023 Red Hat, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* SPDX-License-Identifier: Apache-2.0
***********************************************************************/
import type { ViewContribution, ViewInfoUI } from './api/view-info.js';
export class ViewRegistry {
private extViewContribution: Map<string, Map<string, ViewContribution[]>>;
constructor() {
this.extViewContribution = new Map();
}
registerView(extensionId: string, viewId: string, contribution: ViewContribution): void {
const view = this.extViewContribution.get(extensionId) || new Map();
const contributions = view.get(viewId) || [];
contributions.push(contribution);
view.set(viewId, contributions);
this.extViewContribution.set(extensionId, view);
}
registerViews(extensionId: string, views: { [key: string]: ViewContribution[] }): void {
// register each view contribution
Object.entries(views).forEach(([viewId, viewContributions]) => {
viewContributions.forEach(viewContribution => {
if (!viewContribution.when) {
console.warn('When clause is empty.');
return;
}
this.registerView(extensionId, viewId, viewContribution);
});
});
}
unregisterViews(extensionId: string): void {
this.extViewContribution.delete(extensionId);
}
listViewsContributions(): ViewInfoUI[] {
const listViewInfoUI: ViewInfoUI[] = [];
this.extViewContribution.forEach((value, extension) => {
value.forEach((contributions, view) => {
contributions.forEach(contribution => {
listViewInfoUI.push({
...contribution,
extensionId: extension,
viewId: view,
});
});
});
});
return listViewInfoUI;
}
fetchViewsContributions(extensionId: string): ViewInfoUI[] {
const listViewInfoUI: ViewInfoUI[] = [];
const viewContributions = this.extViewContribution.get(extensionId);
if (!viewContributions) {
return listViewInfoUI;
}
viewContributions.forEach((contributions, view) => {
contributions.forEach(contribution => {
listViewInfoUI.push({
...contribution,
extensionId: extensionId,
viewId: view,
});
});
});
return listViewInfoUI;
}
}