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
|
* 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,
|
onlyQueue: false,
|
||||||
onlyServer: false,
|
onlyServer: false,
|
||||||
noDaemons: false,
|
noDaemons: false,
|
||||||
|
|
@ -14,12 +26,66 @@ const envOption = {
|
||||||
hideWorkerId: false,
|
hideWorkerId: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const key of Object.keys(envOption) as (keyof typeof envOption)[]) {
|
function translateKey(key: string): string {
|
||||||
if (process.env['MK_' + key.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase()]) envOption[key] = true;
|
return 'MK_' + key.replace(/[A-Z]/g, letter => `_${letter}`).toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'test') envOption.disableClustering = true;
|
const testEnvOption: Readonly<EnvOption> = {
|
||||||
if (process.env.NODE_ENV === 'test') envOption.quiet = true;
|
...defaultEnvOption,
|
||||||
if (process.env.NODE_ENV === 'test') envOption.noDaemons = true;
|
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