/
product-json.ts
104 lines (80 loc) · 2.7 KB
/
product-json.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**********************************************************************
* Copyright (c) 2023 Red Hat, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
***********************************************************************/
import * as fs from './fs-extra';
const PRODUCT_JSON = 'product.json';
export interface Record {
[key: string]: string[];
}
export class ProductJSON {
private json: any;
async load(): Promise<ProductJSON> {
const content = await fs.readFile(PRODUCT_JSON);
this.json = JSON.parse(content);
return this;
}
async save(): Promise<void> {
const serialized = JSON.stringify(this.json, null, '\t');
await fs.writeFile(PRODUCT_JSON, serialized);
}
getWebviewContentExternalBaseUrlTemplate(): string {
const url = this.json.webviewContentExternalBaseUrlTemplate;
if (!url) {
throw new Error('Failure to find .webviewContentExternalBaseUrlTemplate in product.json.');
}
return url;
}
setWebviewContentExternalBaseUrlTemplate(url: string): void {
this.json.webviewContentExternalBaseUrlTemplate = url;
}
getExtensionsGalleryServiceURL(): string {
const gallery = this.json.extensionsGallery;
if (!gallery) {
throw new Error('Failure to find .extensionsGallery.serviceUrl in product.json.');
}
const url = gallery.serviceUrl;
if (!url) {
throw new Error('Failure to find .extensionsGallery.serviceUrl in product.json.');
}
return url;
}
setExtensionsGalleryServiceURL(url: string): void {
let gallery = this.json.extensionsGallery;
if (!gallery) {
gallery = {};
this.json.extensionsGallery = gallery;
}
gallery.serviceUrl = url;
}
getExtensionsGalleryItemURL(): string {
const gallery = this.json.extensionsGallery;
if (!gallery) {
throw new Error('Failure to find .extensionsGallery.serviceUrl in product.json.');
}
const url = gallery.itemUrl;
if (!url) {
throw new Error('Failure to find .extensionsGallery.itemUrl in product.json.');
}
return url;
}
setExtensionsGalleryItemURL(url: string): void {
let gallery = this.json.extensionsGallery;
if (!gallery) {
gallery = {};
this.json.extensionsGallery = gallery;
}
gallery.itemUrl = url;
}
getTrustedExtensionAuthAccess(): string[] | Record | undefined {
return this.json.trustedExtensionAuthAccess;
}
setTrustedExtensionAuthAccess(trustedExtensionAuthAccess: string[] | Record | undefined) {
this.json.trustedExtensionAuthAccess = trustedExtensionAuthAccess;
}
}