make envOptions dynamic
This commit is contained in:
parent
6e36462c80
commit
21a8cfef65
1 changed files with 73 additions and 7 deletions
|
|
@ -3,7 +3,19 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
const envOption = {
|
||||
export interface EnvOption {
|
||||
onlyQueue: boolean;
|
||||
onlyServer: boolean;
|
||||
noDaemons: boolean;
|
||||
disableClustering: boolean;
|
||||
verbose: boolean;
|
||||
withLogTime: boolean;
|
||||
quiet: boolean;
|
||||
hideWorkerId: boolean;
|
||||
[key: string]: boolean;
|
||||
}
|
||||
|
||||
const defaultEnvOption: Readonly<EnvOption> = {
|
||||
onlyQueue: false,
|
||||
onlyServer: false,
|
||||
noDaemons: false,
|
||||
|
|
@ -14,12 +26,66 @@ const envOption = {
|
|||
hideWorkerId: false,
|
||||
};
|
||||
|
||||
for (const key of Object.keys(envOption) as (keyof typeof envOption)[]) {
|
||||
if (process.env['MK_' + key.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase()]) envOption[key] = true;
|
||||
function translateKey(key: string): string {
|
||||
return 'MK_' + key.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase();
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === 'test') envOption.disableClustering = true;
|
||||
if (process.env.NODE_ENV === 'test') envOption.quiet = true;
|
||||
if (process.env.NODE_ENV === 'test') envOption.noDaemons = true;
|
||||
const testEnvOption: Readonly<EnvOption> = {
|
||||
...defaultEnvOption,
|
||||
disableClustering: true,
|
||||
quiet: true,
|
||||
noDaemons: true,
|
||||
};
|
||||
|
||||
export { envOption };
|
||||
/** @deprecated use EnvService when possible */
|
||||
export const envOption: EnvOption = createEnvOptions(() => process.env);
|
||||
|
||||
export function createEnvOptions(getEnv: () => Partial<Record<string, string>>): EnvOption {
|
||||
return new Proxy({} as EnvOption, {
|
||||
get(target, key) {
|
||||
if (typeof(key) !== 'string') {
|
||||
return Reflect.get(target, key);
|
||||
}
|
||||
|
||||
const env = getEnv();
|
||||
const envKey = translateKey(key);
|
||||
if (envKey in env) {
|
||||
return !!env[envKey];
|
||||
}
|
||||
|
||||
const def = env.NODE_ENV === 'test' ? testEnvOption : defaultEnvOption;
|
||||
if (key in def) {
|
||||
return def[key];
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
set(target, key, value) {
|
||||
if (typeof(key) !== 'string') {
|
||||
return Reflect.set(target, key, value);
|
||||
}
|
||||
|
||||
const env = getEnv();
|
||||
const envKey = translateKey(key);
|
||||
if (value) {
|
||||
env[envKey] = '1';
|
||||
} else {
|
||||
delete env[envKey];
|
||||
}
|
||||
return true;
|
||||
},
|
||||
has(target, key): boolean {
|
||||
return typeof(key) === 'string' || key in target;
|
||||
},
|
||||
deleteProperty(target, key): boolean {
|
||||
if (typeof(key) !== 'string') {
|
||||
return Reflect.deleteProperty(target, key);
|
||||
}
|
||||
|
||||
const env = getEnv();
|
||||
const envKey = translateKey(key);
|
||||
delete env[envKey];
|
||||
return true;
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue