@ffsm/napi
Version:
Napi - A framework using with Next.js for building APIs.
54 lines (53 loc) • 1.61 kB
JavaScript
export class NapiConfiguration {
constructor() {
this.env = {};
this.parseEnv();
}
parseEnv() {
if (typeof process === 'undefined' || typeof process.env === 'undefined') {
return;
}
Object.entries(process.env).forEach(([key, value]) => {
this.env[key] = value;
});
return this;
}
async loadRegister(register) {
await Promise.all(Object.entries(register).map(async ([key, regFn]) => {
const value = await regFn(this);
this.env[key] = value;
}));
return this;
}
get(key, defaultValue) {
if (!key) {
return this.env;
}
const value = this.env[key];
if (value === undefined) {
return defaultValue;
}
if (typeof value !== "string") {
return value;
}
if (["true", "false"].includes(value.toLowerCase())) {
return (value.toLowerCase() === "true");
}
const asNumber = Number(value);
if (!Number.isNaN(asNumber) &&
Number.isFinite(asNumber) &&
asNumber !== Infinity &&
asNumber !== -Infinity &&
asNumber >= Number.MIN_SAFE_INTEGER &&
asNumber <= Number.MAX_SAFE_INTEGER) {
return asNumber;
}
return value;
}
static initialize(register = {}) {
if (!NapiConfiguration.instance) {
NapiConfiguration.instance = new NapiConfiguration();
}
return NapiConfiguration.instance.loadRegister(register);
}
}