1 | import { AsyncOptionalCreatable } from '@salesforce/kit';
|
2 | import { AnyJson, Dictionary, JsonMap, Optional } from '@salesforce/ts-types';
|
3 | import { Config, ConfigPropertyMeta } from './config';
|
4 | /**
|
5 | * Information about a config property.
|
6 | */
|
7 | export type ConfigInfo = {
|
8 | /**
|
9 | * key The config key.
|
10 | */
|
11 | key: string;
|
12 | /**
|
13 | * The location of the config property.
|
14 | */
|
15 | location?: ConfigAggregator.Location;
|
16 | /**
|
17 | * The config value.
|
18 | */
|
19 | value?: AnyJson;
|
20 | /**
|
21 | * The path of the config value.
|
22 | */
|
23 | path?: string;
|
24 | /**
|
25 | * `true` if the config property is in the local project.
|
26 | */
|
27 | isLocal: () => boolean;
|
28 | /**
|
29 | * `true` if the config property is in the global space.
|
30 | */
|
31 | isGlobal: () => boolean;
|
32 | /**
|
33 | * `true` if the config property is an environment variable.
|
34 | */
|
35 | isEnvVar: () => boolean;
|
36 | /**
|
37 | * True if the config property is deprecated.
|
38 | */
|
39 | deprecated?: boolean;
|
40 | };
|
41 | /**
|
42 | * Aggregate global and local project config files, as well as environment variables for
|
43 | * `config.json`. The resolution happens in the following bottom-up order:
|
44 | *
|
45 | * 1. Environment variables (`SF_LOG_LEVEL`)
|
46 | * 1. Workspace settings (`<workspace-root>/.sf/config.json`)
|
47 | * 1. Global settings (`$HOME/.sf/config.json`)
|
48 | *
|
49 | * Use {@link ConfigAggregator.create} to instantiate the aggregator.
|
50 | *
|
51 | * ```
|
52 | * const aggregator = await ConfigAggregator.create();
|
53 | * console.log(aggregator.getPropertyValue('target-org'));
|
54 | * ```
|
55 | */
|
56 | export declare class ConfigAggregator extends AsyncOptionalCreatable<ConfigAggregator.Options> {
|
57 | protected static instance: AsyncOptionalCreatable;
|
58 | protected static encrypted: boolean;
|
59 | private allowedProperties;
|
60 | private readonly localConfig?;
|
61 | private readonly globalConfig;
|
62 | private envVars;
|
63 | /**
|
64 | * **Do not directly construct instances of this class -- use {@link ConfigAggregator.create} instead.**
|
65 | *
|
66 | * @ignore
|
67 | */
|
68 | constructor(options?: ConfigAggregator.Options);
|
69 | private get config();
|
70 | static create<P extends ConfigAggregator.Options, T extends AsyncOptionalCreatable<P>>(this: new (options?: P) => T, options?: P): Promise<T>;
|
71 | /**
|
72 | * Get the info for a given key. If the ConfigAggregator was not asynchronously created OR
|
73 | * the { ConfigAggregator.reload} was not called, the config value may be encrypted.
|
74 | *
|
75 | * key The config key.
|
76 | */
|
77 | static getValue(key: string): ConfigInfo;
|
78 | /**
|
79 | * Get the static ConfigAggregator instance. If one doesn't exist, one will be created with
|
80 | * the **encrypted** config values. Encrypted config values need to be resolved
|
81 | * asynchronously by calling {@link ConfigAggregator.reload}
|
82 | */
|
83 | private static getInstance;
|
84 | /**
|
85 | * Initialize this instances async dependencies.
|
86 | */
|
87 | init(): Promise<void>;
|
88 | /**
|
89 | * Get a resolved config property.
|
90 | * If you use a deprecated property, a warning will be emitted and it will attempt to resolve the new property's value
|
91 | *
|
92 | * **Throws** *{@link SfError}{ name: 'UnknownConfigKeyError' }* An attempt to get a property that's not supported.
|
93 | *
|
94 | * @param key The key of the property.
|
95 | */
|
96 | getPropertyValue<T extends AnyJson>(key: string): Optional<T>;
|
97 | /**
|
98 | * Get a resolved config property meta.
|
99 | * If the property is deprecated, it will return the new key's meta, if it exists, with a deprecation warning
|
100 | *
|
101 | * **Throws** *{@link SfError}{ name: 'UnknownConfigKeyError' }* An attempt to get a property that's not supported.
|
102 | *
|
103 | * @param key The key of the property.
|
104 | */
|
105 | getPropertyMeta(key: string): ConfigPropertyMeta;
|
106 | /**
|
107 | * Get a resolved config property.
|
108 | * If a property is deprecated, it will try to use the the new key, if there is a config there.
|
109 | *
|
110 | * @param key The key of the property.
|
111 | * @param throwOnDeprecation True, if you want an error throw when reading a deprecated config
|
112 | */
|
113 | getInfo(key: string, throwOnDeprecation?: boolean): ConfigInfo;
|
114 | /**
|
115 | * Gets a resolved config property location.
|
116 | *
|
117 | * For example, `getLocation('logLevel')` will return:
|
118 | * 1. `Location.GLOBAL` if resolved to an environment variable.
|
119 | * 1. `Location.LOCAL` if resolved to local project config.
|
120 | * 1. `Location.ENVIRONMENT` if resolved to the global config.
|
121 | *
|
122 | * @param key The key of the property.
|
123 | */
|
124 | getLocation(key: string): Optional<ConfigAggregator.Location>;
|
125 | /**
|
126 | * Get a resolved file path or environment variable name of the property.
|
127 | *
|
128 | * For example, `getPath('logLevel')` will return:
|
129 | * 1. `$SF_LOG_LEVEL` if resolved to an environment variable.
|
130 | * 1. `./.sf/config.json` if resolved to the local config.
|
131 | * 1. `~/.sf/config.json` if resolved to the global config.
|
132 | * 1. `undefined`, if not resolved.
|
133 | *
|
134 | * **Note:** that the path returned may be the absolute path instead of
|
135 | * relative paths such as `./` and `~/`.
|
136 | *
|
137 | * @param key The key of the property.
|
138 | */
|
139 | getPath(key: string): Optional<string>;
|
140 | /**
|
141 | * Get all resolved config property keys, values, locations, and paths.
|
142 | *
|
143 | * ```
|
144 | * > console.log(aggregator.getConfigInfo());
|
145 | * [
|
146 | * { key: 'logLevel', val: 'INFO', location: 'Environment', path: '$SF_LOG_LEVEL'}
|
147 | * { key: 'target-org', val: '<username>', location: 'Local', path: './.sf/config.json'}
|
148 | * ]
|
149 | * ```
|
150 | */
|
151 | getConfigInfo(): ConfigInfo[];
|
152 | /**
|
153 | * Get the local project config instance.
|
154 | */
|
155 | getLocalConfig(): Config | undefined;
|
156 | /**
|
157 | * Get the global config instance.
|
158 | */
|
159 | getGlobalConfig(): Config;
|
160 | /**
|
161 | * Get the resolved config object from the local, global and environment config instances.
|
162 | */
|
163 | getConfig(): JsonMap;
|
164 | unsetByValue(key: string): Promise<void>;
|
165 | /**
|
166 | * Get the config properties that are environment variables.
|
167 | */
|
168 | getEnvVars(): Dictionary<string>;
|
169 | /**
|
170 | * Re-read all property configurations from disk.
|
171 | */
|
172 | reload(): Promise<ConfigAggregator>;
|
173 | /**
|
174 | * Add an allowed config property.
|
175 | */
|
176 | addAllowedProperties(configMetas: ConfigPropertyMeta | ConfigPropertyMeta[]): void;
|
177 | /**
|
178 | * Set the allowed properties.
|
179 | *
|
180 | * @param properties The properties to set.
|
181 | */
|
182 | protected setAllowedProperties(properties: ConfigPropertyMeta[]): void;
|
183 | /**
|
184 | * Get the allowed properties.
|
185 | */
|
186 | protected getAllowedProperties(): ConfigPropertyMeta[];
|
187 | /**
|
188 | * Loads all the properties and aggregates them according to location.
|
189 | */
|
190 | protected loadProperties(): Promise<void>;
|
191 | /**
|
192 | * Loads all the properties and aggregates them according to location.
|
193 | */
|
194 | private loadPropertiesSync;
|
195 | private resolveProperties;
|
196 | }
|
197 | export declare namespace ConfigAggregator {
|
198 | /**
|
199 | * An enum of all possible locations for a config value.
|
200 | */
|
201 | const enum Location {
|
202 | /**
|
203 | * Represents the global config.
|
204 | */
|
205 | GLOBAL = "Global",
|
206 | /**
|
207 | * Represents the local project config.
|
208 | */
|
209 | LOCAL = "Local",
|
210 | /**
|
211 | * Represents environment variables.
|
212 | */
|
213 | ENVIRONMENT = "Environment"
|
214 | }
|
215 | type Options = {
|
216 | customConfigMeta?: ConfigPropertyMeta[];
|
217 | };
|
218 | }
|