UNPKG

@ffsm/napi

Version:

Napi - A framework using with Next.js for building APIs.

54 lines (53 loc) 1.61 kB
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); } }