From da41dbe7851729dd9eaa5fd465336e0a3b1cbff2 Mon Sep 17 00:00:00 2001 From: Pooya Parsa Date: Tue, 24 Sep 2024 20:53:24 +0200 Subject: [PATCH 1/2] feat!: improve env polyfill --- src/env.ts | 64 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/src/env.ts b/src/env.ts index fada504..0bfde6c 100644 --- a/src/env.ts +++ b/src/env.ts @@ -1,41 +1,59 @@ -const _envShim = Object.create(null); - export type EnvObject = Record; -const _getEnv = (useShim?: boolean) => - globalThis.process?.env || - import.meta.env || - globalThis.Deno?.env.toObject() || - globalThis.__env__ || - (useShim ? _envShim : globalThis); +const _envShim = Object.create(null) as EnvObject; export const env = new Proxy(_envShim, { get(_, prop) { - const env = _getEnv(); - return env[prop as any] ?? _envShim[prop]; + return getEnvValue(prop as string); }, has(_, prop) { - const env = _getEnv(); - return prop in env || prop in _envShim; + return getEnvValue(prop as string) !== undefined; }, set(_, prop, value) { - const env = _getEnv(true); - env[prop as any] = value; - return true; + return Reflect.set(getEnvObj(), prop as string, `${value}`); }, deleteProperty(_, prop) { - if (!prop) { - return false; - } - const env = _getEnv(true); - delete env[prop as any]; - return true; + return Reflect.deleteProperty(getEnvObj(), prop as string); }, ownKeys() { - const env = _getEnv(true); - return Object.keys(env); + return Reflect.ownKeys(getEnvObj()); }, + defineProperty(_, prop, descriptor) { + const value = descriptor.get?.() ?? descriptor.value; + return Reflect.set(getEnvObj(), prop as string, `${value}`); + } }); +function getEnvObj (fallbackToGlobal?: boolean): EnvObject { + if (globalThis.__env__) { + return globalThis.__env__; + } + if (globalThis.process?.env) { + return globalThis.process.env; + } + if (import.meta.env) { + return import.meta.env; + } + return fallbackToGlobal ? globalThis as unknown as EnvObject : _envShim; +} + +function getEnvValue (key: string): string | undefined { + if (globalThis.__env__ && (key in globalThis.__env__)) { + return globalThis.__env__[key]; + } + if (globalThis.process?.env && key in globalThis.process.env) { + return globalThis.process.env[key]; + } + if (import.meta?.env && key in import.meta.env) { + return import.meta.env[key]; + } + if (globalThis.Deno?.env) { + return (globalThis.Deno.env as any).get(key); + } + if (key in _envShim) { + return _envShim[key]; + } +} + export const nodeENV = (typeof process !== "undefined" && process.env && process.env.NODE_ENV) || ""; From e6d608cc4b60f3d456069d4682ce72e5d2b7964b Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 18:54:07 +0000 Subject: [PATCH 2/2] chore: apply automated fixes --- src/env.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/env.ts b/src/env.ts index 0bfde6c..583b9ca 100644 --- a/src/env.ts +++ b/src/env.ts @@ -21,10 +21,10 @@ export const env = new Proxy(_envShim, { defineProperty(_, prop, descriptor) { const value = descriptor.get?.() ?? descriptor.value; return Reflect.set(getEnvObj(), prop as string, `${value}`); - } + }, }); -function getEnvObj (fallbackToGlobal?: boolean): EnvObject { +function getEnvObj(fallbackToGlobal?: boolean): EnvObject { if (globalThis.__env__) { return globalThis.__env__; } @@ -34,11 +34,11 @@ function getEnvObj (fallbackToGlobal?: boolean): EnvObject { if (import.meta.env) { return import.meta.env; } - return fallbackToGlobal ? globalThis as unknown as EnvObject : _envShim; + return fallbackToGlobal ? (globalThis as unknown as EnvObject) : _envShim; } -function getEnvValue (key: string): string | undefined { - if (globalThis.__env__ && (key in globalThis.__env__)) { +function getEnvValue(key: string): string | undefined { + if (globalThis.__env__ && key in globalThis.__env__) { return globalThis.__env__[key]; } if (globalThis.process?.env && key in globalThis.process.env) {