1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | Object.defineProperty(exports, "__esModule", { value: true });
|
9 | exports.SfdxConfigAggregator = exports.ConfigAggregator = void 0;
|
10 | const kit_1 = require("@salesforce/kit");
|
11 | const ts_types_1 = require("@salesforce/ts-types");
|
12 | const messages_1 = require("../messages");
|
13 | const envVars_1 = require("./envVars");
|
14 | const config_1 = require("./config");
|
15 | messages_1.Messages.importMessagesDirectory(__dirname);
|
16 | const messages = messages_1.Messages.load('@salesforce/core', 'config', ['unknownConfigKey', 'deprecatedConfigKey']);
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 |
|
32 | class ConfigAggregator extends kit_1.AsyncOptionalCreatable {
|
33 | |
34 |
|
35 |
|
36 |
|
37 |
|
38 | constructor(options) {
|
39 | super(options ?? {});
|
40 | this.envVars = {};
|
41 |
|
42 |
|
43 | try {
|
44 | this.localConfig = new config_1.Config(config_1.Config.getDefaultOptions(false));
|
45 | }
|
46 | catch (err) {
|
47 | if (err.name !== 'InvalidProjectWorkspaceError') {
|
48 | throw err;
|
49 | }
|
50 | }
|
51 | this.globalConfig = new config_1.Config(config_1.Config.getDefaultOptions(true));
|
52 | this.setAllowedProperties(config_1.Config.getAllowedProperties());
|
53 | }
|
54 | get config() {
|
55 | return this.resolveProperties(this.globalConfig.getContents(), this.localConfig?.getContents());
|
56 | }
|
57 |
|
58 |
|
59 | static async create(options) {
|
60 | let config = ConfigAggregator.instance;
|
61 | if (!config) {
|
62 | config = ConfigAggregator.instance = new this(options);
|
63 | await config.init();
|
64 | }
|
65 | if (ConfigAggregator.encrypted) {
|
66 | await config.loadProperties();
|
67 | }
|
68 | if (options?.customConfigMeta) {
|
69 | config_1.Config.addAllowedProperties(options.customConfigMeta);
|
70 | }
|
71 | return ConfigAggregator.instance;
|
72 | }
|
73 | |
74 |
|
75 |
|
76 |
|
77 |
|
78 |
|
79 | static getValue(key) {
|
80 | return this.getInstance().getInfo(key);
|
81 | }
|
82 | |
83 |
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 | static getInstance() {
|
90 | if (!ConfigAggregator.instance) {
|
91 | ConfigAggregator.instance = new this();
|
92 | ConfigAggregator.instance.loadPropertiesSync();
|
93 | }
|
94 | return ConfigAggregator.instance;
|
95 | }
|
96 | |
97 |
|
98 |
|
99 | async init() {
|
100 | await this.loadProperties();
|
101 | }
|
102 | |
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 | getPropertyValue(key) {
|
110 | if (this.getAllowedProperties().some((element) => key === element.key)) {
|
111 | return this.getConfig()[key];
|
112 | }
|
113 | else {
|
114 | throw messages.createError('unknownConfigKey', [key]);
|
115 | }
|
116 | }
|
117 | |
118 |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 | getPropertyMeta(key) {
|
125 | const match = this.getAllowedProperties().find((element) => key === element.key);
|
126 | if (match) {
|
127 | return match;
|
128 | }
|
129 | else {
|
130 | throw messages.createError('unknownConfigKey', [key]);
|
131 | }
|
132 | }
|
133 | |
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 | getInfo(key, throwOnDeprecation = false) {
|
140 | const meta = this.getPropertyMeta(key);
|
141 | if (throwOnDeprecation && meta.deprecated && meta.newKey) {
|
142 | throw messages.createError('deprecatedConfigKey', [key, meta.newKey]);
|
143 | }
|
144 | const location = this.getLocation(key);
|
145 | return {
|
146 | key,
|
147 | location,
|
148 | value: this.getPropertyValue(key),
|
149 | path: this.getPath(key),
|
150 | isLocal: () => location === "Local" ,
|
151 | isGlobal: () => location === "Global" ,
|
152 | isEnvVar: () => location === "Environment" ,
|
153 | deprecated: meta.deprecated ?? false,
|
154 | };
|
155 | }
|
156 | |
157 |
|
158 |
|
159 |
|
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 |
|
166 | getLocation(key) {
|
167 | if (this.envVars[key] != null) {
|
168 | return "Environment" ;
|
169 | }
|
170 | if (this.localConfig?.get(key)) {
|
171 | return "Local" ;
|
172 | }
|
173 | if (this.globalConfig?.get(key)) {
|
174 | return "Global" ;
|
175 | }
|
176 | }
|
177 | |
178 |
|
179 |
|
180 |
|
181 |
|
182 |
|
183 |
|
184 |
|
185 |
|
186 |
|
187 |
|
188 |
|
189 |
|
190 |
|
191 | getPath(key) {
|
192 | if (this.envVars[key] != null) {
|
193 | return `$${envVars_1.EnvVars.propertyToEnvName(key)}`;
|
194 | }
|
195 | if (this.localConfig?.getContents()[key] != null) {
|
196 | return this.localConfig.getPath();
|
197 | }
|
198 | if (this.globalConfig.getContents()[key] != null) {
|
199 | return this.globalConfig.getPath();
|
200 | }
|
201 | }
|
202 | |
203 |
|
204 |
|
205 |
|
206 |
|
207 |
|
208 |
|
209 |
|
210 |
|
211 |
|
212 |
|
213 | getConfigInfo() {
|
214 | const infos = Object.keys(this.getConfig())
|
215 | .filter((key) => this.getAllowedProperties().some((element) => key === element.key))
|
216 | .map((key) => this.getInfo(key))
|
217 | .filter((info) => !!info);
|
218 | return (0, kit_1.sortBy)(infos, 'key');
|
219 | }
|
220 | |
221 |
|
222 |
|
223 | getLocalConfig() {
|
224 | return this.localConfig;
|
225 | }
|
226 | |
227 |
|
228 |
|
229 | getGlobalConfig() {
|
230 | return this.globalConfig;
|
231 | }
|
232 | |
233 |
|
234 |
|
235 | getConfig() {
|
236 | return this.config;
|
237 | }
|
238 | |
239 |
|
240 |
|
241 | getEnvVars() {
|
242 | return this.envVars;
|
243 | }
|
244 | |
245 |
|
246 |
|
247 | async reload() {
|
248 | await this.loadProperties();
|
249 | return this;
|
250 | }
|
251 | |
252 |
|
253 |
|
254 | addAllowedProperties(configMetas) {
|
255 | if ((0, ts_types_1.isArray)(configMetas)) {
|
256 | this.allowedProperties.push(...configMetas);
|
257 | }
|
258 | else {
|
259 | this.allowedProperties.push(configMetas);
|
260 | }
|
261 | }
|
262 | |
263 |
|
264 |
|
265 |
|
266 |
|
267 | setAllowedProperties(properties) {
|
268 | this.allowedProperties = properties;
|
269 | }
|
270 | |
271 |
|
272 |
|
273 | getAllowedProperties() {
|
274 | return this.allowedProperties;
|
275 | }
|
276 | |
277 |
|
278 |
|
279 | async loadProperties() {
|
280 | this.resolveProperties(await this.globalConfig.read(), this.localConfig && (await this.localConfig.read()));
|
281 | ConfigAggregator.encrypted = false;
|
282 | }
|
283 | |
284 |
|
285 |
|
286 | loadPropertiesSync() {
|
287 | this.resolveProperties(this.globalConfig.readSync(), this.localConfig?.readSync());
|
288 | }
|
289 | resolveProperties(globalConfig, localConfig) {
|
290 | const envVars = new envVars_1.EnvVars();
|
291 | for (const property of this.getAllowedProperties()) {
|
292 | const key = property.newKey ? property.newKey : property.key;
|
293 | const value = envVars.getPropertyFromEnv(property.key);
|
294 | if (value)
|
295 | this.envVars[key] = value;
|
296 | }
|
297 |
|
298 |
|
299 | const configs = [globalConfig];
|
300 |
|
301 | if (localConfig) {
|
302 | configs.push(localConfig);
|
303 | }
|
304 | configs.push(this.envVars);
|
305 | const json = {};
|
306 | const reduced = configs.filter(ts_types_1.isJsonMap).reduce((acc, el) => (0, kit_1.merge)(acc, el), json);
|
307 | return reduced;
|
308 | }
|
309 | }
|
310 | exports.ConfigAggregator = ConfigAggregator;
|
311 | ConfigAggregator.encrypted = true;
|
312 |
|
313 |
|
314 |
|
315 |
|
316 |
|
317 |
|
318 | class SfdxConfigAggregator extends ConfigAggregator {
|
319 | static async create(options = {}) {
|
320 | const customConfigMeta = options.customConfigMeta ?? [];
|
321 |
|
322 |
|
323 | const restDeploy = config_1.SFDX_ALLOWED_PROPERTIES.find((p) => p.key === config_1.SfdxPropertyKeys.REST_DEPLOY);
|
324 | const orgRestDeploy = Object.assign({}, restDeploy, { key: 'org-metadata-rest-deploy', deprecated: false });
|
325 | options.customConfigMeta = [...customConfigMeta, orgRestDeploy];
|
326 | let config = SfdxConfigAggregator.instance;
|
327 | if (!config) {
|
328 | config = SfdxConfigAggregator.instance = new this(options);
|
329 | await config.init();
|
330 | }
|
331 | if (SfdxConfigAggregator.encrypted) {
|
332 | await config.loadProperties();
|
333 | }
|
334 | if (options?.customConfigMeta) {
|
335 | config_1.Config.addAllowedProperties(options.customConfigMeta);
|
336 | }
|
337 | return SfdxConfigAggregator.instance;
|
338 | }
|
339 | getPropertyMeta(key) {
|
340 | const match = this.getAllowedProperties().find((element) => key === element.key);
|
341 | if (match?.deprecated && match?.newKey) {
|
342 | return this.getPropertyMeta(match.newKey);
|
343 | }
|
344 | else if (match) {
|
345 | return match;
|
346 | }
|
347 | else {
|
348 | throw messages.createError('unknownConfigKey', [key]);
|
349 | }
|
350 | }
|
351 | getPropertyValue(key) {
|
352 | return super.getPropertyValue(this.translate(key));
|
353 | }
|
354 | getInfo(key) {
|
355 | const info = super.getInfo(this.translate(key));
|
356 | info.key = this.translate(info.key, 'toOld');
|
357 | return info;
|
358 | }
|
359 | getLocation(key) {
|
360 | return super.getLocation(this.translate(key));
|
361 | }
|
362 | getPath(key) {
|
363 | return super.getPath(this.translate(key));
|
364 | }
|
365 | getConfigInfo() {
|
366 | return super.getConfigInfo().map((c) => {
|
367 | c.key = this.translate(c.key, 'toOld');
|
368 | return c;
|
369 | });
|
370 | }
|
371 | translate(key, direction = 'toNew') {
|
372 | const propConfig = direction === 'toNew'
|
373 | ? this.getPropertyMeta(key)
|
374 | : config_1.Config.getAllowedProperties().find((c) => c.newKey === key) ?? {};
|
375 | return propConfig.key || key;
|
376 | }
|
377 | }
|
378 | exports.SfdxConfigAggregator = SfdxConfigAggregator;
|
379 | SfdxConfigAggregator.encrypted = true;
|
380 |
|
\ | No newline at end of file |