strapi/packages/core/utils/src/env-helper.ts

100 lines
2.4 KiB
TypeScript
Raw Normal View History

2023-04-27 23:18:48 +02:00
import _ from 'lodash';
2023-06-06 10:58:36 +02:00
function envFn<T>(key: string, defaultValue?: T): string | T | undefined {
return _.has(process.env, key) ? process.env[key] : defaultValue;
}
2023-04-28 18:20:31 +02:00
function getKey(key: string) {
return process.env[key] ?? '';
}
const utils = {
2023-06-06 10:58:36 +02:00
int(key: string, defaultValue?: number): number | undefined {
if (!_.has(process.env, key)) {
return defaultValue;
}
2023-04-28 18:20:31 +02:00
return parseInt(getKey(key), 10);
},
2023-06-06 10:58:36 +02:00
float(key: string, defaultValue?: number): number | undefined {
if (!_.has(process.env, key)) {
return defaultValue;
}
2023-04-28 18:20:31 +02:00
return parseFloat(getKey(key));
},
2023-06-06 10:58:36 +02:00
bool(key: string, defaultValue?: boolean): boolean | undefined {
if (!_.has(process.env, key)) {
return defaultValue;
}
2023-04-28 18:20:31 +02:00
return getKey(key) === 'true';
},
2023-04-28 18:20:31 +02:00
json(key: string, defaultValue?: object) {
2023-06-06 10:58:36 +02:00
if (!_.has(process.env, key)) {
return defaultValue;
}
try {
2023-04-28 18:20:31 +02:00
return JSON.parse(getKey(key));
} catch (error) {
2023-04-28 18:20:31 +02:00
if (error instanceof Error) {
throw new Error(`Invalid json environment variable ${key}: ${error.message}`);
}
throw error;
}
},
2023-06-06 10:58:36 +02:00
array(key: string, defaultValue?: string[]): string[] | undefined {
if (!_.has(process.env, key)) {
return defaultValue;
}
2023-04-28 18:20:31 +02:00
let value = getKey(key);
if (value.startsWith('[') && value.endsWith(']')) {
value = value.substring(1, value.length - 1);
}
2022-08-08 23:33:39 +02:00
return value.split(',').map((v) => {
return _.trim(_.trim(v, ' '), '"');
});
},
2023-06-06 10:58:36 +02:00
date(key: string, defaultValue?: Date): Date | undefined {
if (!_.has(process.env, key)) {
return defaultValue;
}
2023-04-28 18:20:31 +02:00
return new Date(getKey(key));
},
2023-03-02 11:57:59 +02:00
/**
* Gets a value from env that matches oneOf provided values
* @param {string} key
* @param {string[]} expectedValues
* @param {string|undefined} defaultValue
* @returns {string|undefined}
*/
2023-04-28 18:20:31 +02:00
oneOf(key: string, expectedValues?: unknown[], defaultValue?: unknown) {
2023-03-02 11:57:59 +02:00
if (!expectedValues) {
throw new Error(`env.oneOf requires expectedValues`);
}
if (defaultValue && !expectedValues.includes(defaultValue)) {
throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);
}
const rawValue = env(key, defaultValue);
return expectedValues.includes(rawValue) ? rawValue : defaultValue;
},
};
2023-06-06 10:58:36 +02:00
const env = Object.assign(envFn, utils);
2023-06-06 10:58:36 +02:00
export default env;