@sourceregistry/node-env 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/index.ts"],"sourcesContent":["import {readFileSync, existsSync} from \"fs\";\nimport {T} from \"vitest/dist/chunks/global.d.MAmajcmJ\";\n\nfunction loadDotEnv(file = \".env\") {\n if (!existsSync(file)) return {};\n\n try {\n const text = readFileSync(file, \"utf8\");\n return Object.fromEntries(\n text\n .split(/\\r?\\n/)\n .filter((line) => line && !line.trim().startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => {\n const [key, ...rest] = line.split(\"=\");\n let value = rest.join(\"=\").trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n return [key.trim(), value];\n })\n );\n } catch (e: any) {\n const msg = e?.message ?? \"Failed to load .env\";\n // @ts-ignore\n if (globalThis.logger?.warn) globalThis.logger.warn(msg);\n else console.warn(msg);\n return {};\n }\n}\n\n// merge .env into process.env at load\nconst dotEnvVars = loadDotEnv();\nfor (const [k, v] of Object.entries(dotEnvVars)) {\n if (!(k in process.env)) process.env[k] = v;\n}\n\nexport const env = Object.freeze({\n string<T extends string = string>(key: Uppercase<string>, _default?: T): T {\n if (!(key in process.env)) process.env[key] = _default ?? \"\";\n return process.env[key] as T;\n },\n number(key: Uppercase<string>, _default = 0): number {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = String(_default);\n return _default;\n }\n const val = Number(raw);\n return Number.isFinite(val) ? val : _default;\n },\n boolean(key: Uppercase<string>, _default = false): boolean {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = _default ? \"true\" : \"false\";\n return _default;\n }\n const val = raw.toLowerCase();\n return val === \"true\" || val === \"1\";\n },\n url(key: Uppercase<string>, _default = new URL(\"http://localhost\")): URL {\n const raw = process.env[key];\n if (raw === undefined || !URL.canParse(raw)) {\n process.env[key] = _default.toString();\n return _default;\n }\n return URL.parse(raw)!;\n },\n has(key: Uppercase<string>): boolean {\n return Object.prototype.hasOwnProperty.call(process.env, key);\n },\n assert(keys: Uppercase<string>[], error_builder: (missing_keys: string[]) => string | Error = ((missing_keys) => new Error(`Missing required keys(${missing_keys.join()}) in environment`)),) {\n const missing_keys: string[] = [];\n keys.forEach((key) => this.has(key) ? void 0 : missing_keys.push(key));\n if (missing_keys.length > 0) {\n const result = error_builder(missing_keys);\n if (typeof result === \"string\") throw new Error(result);\n else throw result;\n }\n },\n defined(key: Uppercase<string>): boolean {\n return env.has(key) && process.env[key] !== undefined;\n },\n\n get dev(): boolean {\n return process.env.NODE_ENV !== \"production\";\n },\n\n collection<PF extends Uppercase<string>, RemovePrefix extends boolean = false>(\n prefix: PF,\n options: Partial<{\n reviver: (value: string | undefined, key: string) => any;\n removePrefix: RemovePrefix;\n }> = {}\n ): Record<string, any> {\n const {reviver = (v) => v, removePrefix = false} = options;\n return Object.fromEntries(\n Object.entries(process.env)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [\n removePrefix ? key.replace(prefix, \"\") : key,\n reviver(value, key),\n ])\n );\n },\n\n utils: Object.freeze({\n select<T, F>(\n key: Uppercase<string>,\n TRUE: T,\n FALSE: F,\n predicate: (key: Uppercase<string>, value: any) => boolean = (k) =>\n env.boolean(k)\n ): T | F {\n return predicate(key, process.env[key]) ? TRUE : FALSE;\n },\n }),\n get raw() {\n return Object.freeze(dotEnvVars)\n },\n});\n"],"names":["loadDotEnv","file","existsSync","text","readFileSync","line","key","rest","value","e","msg","dotEnvVars","k","v","env","_default","raw","val","keys","error_builder","missing_keys","result","prefix","options","reviver","removePrefix","TRUE","FALSE","predicate"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/index.ts"],"sourcesContent":["import {readFileSync, existsSync} from \"fs\";\n\nfunction loadDotEnv(file = \".env\") {\n if (!existsSync(file)) return {};\n\n try {\n const text = readFileSync(file, \"utf8\");\n return Object.fromEntries(\n text\n .split(/\\r?\\n/)\n .filter((line) => line && !line.trim().startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => {\n const [key, ...rest] = line.split(\"=\");\n let value = rest.join(\"=\").trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n return [key.trim(), value];\n })\n );\n } catch (e: any) {\n const msg = e?.message ?? \"Failed to load .env\";\n // @ts-ignore\n if (globalThis.logger?.warn) globalThis.logger.warn(msg);\n else console.warn(msg);\n return {};\n }\n}\n\n// merge .env into process.env at load\nconst dotEnvVars = loadDotEnv();\nfor (const [k, v] of Object.entries(dotEnvVars)) {\n if (!(k in process.env)) process.env[k] = v;\n}\n\nexport const env = Object.freeze({\n string<T extends string = string>(key: Uppercase<string>, _default?: T): T {\n if (!(key in process.env)) process.env[key] = _default ?? \"\";\n return process.env[key] as T;\n },\n number(key: Uppercase<string>, _default = 0): number {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = String(_default);\n return _default;\n }\n const val = Number(raw);\n return Number.isFinite(val) ? val : _default;\n },\n boolean(key: Uppercase<string>, _default = false): boolean {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = _default ? \"true\" : \"false\";\n return _default;\n }\n const val = raw.toLowerCase();\n return val === \"true\" || val === \"1\";\n },\n url(key: Uppercase<string>, _default = new URL(\"http://localhost\")): URL {\n const raw = process.env[key];\n if (raw === undefined || !URL.canParse(raw)) {\n process.env[key] = _default.toString();\n return _default;\n }\n return URL.parse(raw)!;\n },\n has(key: Uppercase<string>): boolean {\n return Object.prototype.hasOwnProperty.call(process.env, key);\n },\n assert(keys: Uppercase<string>[], error_builder: (missing_keys: string[]) => string | Error = ((missing_keys) => new Error(`Missing required keys(${missing_keys.join()}) in environment`)),) {\n const missing_keys: string[] = [];\n keys.forEach((key) => this.has(key) ? void 0 : missing_keys.push(key));\n if (missing_keys.length > 0) {\n const result = error_builder(missing_keys);\n if (typeof result === \"string\") throw new Error(result);\n else throw result;\n }\n },\n defined(key: Uppercase<string>): boolean {\n return env.has(key) && process.env[key] !== undefined;\n },\n\n get dev(): boolean {\n return process.env.NODE_ENV !== \"production\";\n },\n\n collection<PF extends Uppercase<string>, RemovePrefix extends boolean = false>(\n prefix: PF,\n options: Partial<{\n reviver: (value: string | undefined, key: string) => any;\n removePrefix: RemovePrefix;\n }> = {}\n ): Record<string, any> {\n const {reviver = (v) => v, removePrefix = false} = options;\n return Object.fromEntries(\n Object.entries(process.env)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [\n removePrefix ? key.replace(prefix, \"\") : key,\n reviver(value, key),\n ])\n );\n },\n\n utils: Object.freeze({\n select<T, F>(\n key: Uppercase<string>,\n TRUE: T,\n FALSE: F,\n predicate: (key: Uppercase<string>, value: any) => boolean = (k) =>\n env.boolean(k)\n ): T | F {\n return predicate(key, process.env[key]) ? TRUE : FALSE;\n },\n }),\n get raw() {\n return Object.freeze(dotEnvVars)\n },\n});\n"],"names":["loadDotEnv","file","existsSync","text","readFileSync","line","key","rest","value","e","msg","dotEnvVars","k","v","env","_default","raw","val","keys","error_builder","missing_keys","result","prefix","options","reviver","removePrefix","TRUE","FALSE","predicate"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":["import {readFileSync, existsSync} from \"fs\";\nimport {T} from \"vitest/dist/chunks/global.d.MAmajcmJ\";\n\nfunction loadDotEnv(file = \".env\") {\n if (!existsSync(file)) return {};\n\n try {\n const text = readFileSync(file, \"utf8\");\n return Object.fromEntries(\n text\n .split(/\\r?\\n/)\n .filter((line) => line && !line.trim().startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => {\n const [key, ...rest] = line.split(\"=\");\n let value = rest.join(\"=\").trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n return [key.trim(), value];\n })\n );\n } catch (e: any) {\n const msg = e?.message ?? \"Failed to load .env\";\n // @ts-ignore\n if (globalThis.logger?.warn) globalThis.logger.warn(msg);\n else console.warn(msg);\n return {};\n }\n}\n\n// merge .env into process.env at load\nconst dotEnvVars = loadDotEnv();\nfor (const [k, v] of Object.entries(dotEnvVars)) {\n if (!(k in process.env)) process.env[k] = v;\n}\n\nexport const env = Object.freeze({\n string<T extends string = string>(key: Uppercase<string>, _default?: T): T {\n if (!(key in process.env)) process.env[key] = _default ?? \"\";\n return process.env[key] as T;\n },\n number(key: Uppercase<string>, _default = 0): number {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = String(_default);\n return _default;\n }\n const val = Number(raw);\n return Number.isFinite(val) ? val : _default;\n },\n boolean(key: Uppercase<string>, _default = false): boolean {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = _default ? \"true\" : \"false\";\n return _default;\n }\n const val = raw.toLowerCase();\n return val === \"true\" || val === \"1\";\n },\n url(key: Uppercase<string>, _default = new URL(\"http://localhost\")): URL {\n const raw = process.env[key];\n if (raw === undefined || !URL.canParse(raw)) {\n process.env[key] = _default.toString();\n return _default;\n }\n return URL.parse(raw)!;\n },\n has(key: Uppercase<string>): boolean {\n return Object.prototype.hasOwnProperty.call(process.env, key);\n },\n assert(keys: Uppercase<string>[], error_builder: (missing_keys: string[]) => string | Error = ((missing_keys) => new Error(`Missing required keys(${missing_keys.join()}) in environment`)),) {\n const missing_keys: string[] = [];\n keys.forEach((key) => this.has(key) ? void 0 : missing_keys.push(key));\n if (missing_keys.length > 0) {\n const result = error_builder(missing_keys);\n if (typeof result === \"string\") throw new Error(result);\n else throw result;\n }\n },\n defined(key: Uppercase<string>): boolean {\n return env.has(key) && process.env[key] !== undefined;\n },\n\n get dev(): boolean {\n return process.env.NODE_ENV !== \"production\";\n },\n\n collection<PF extends Uppercase<string>, RemovePrefix extends boolean = false>(\n prefix: PF,\n options: Partial<{\n reviver: (value: string | undefined, key: string) => any;\n removePrefix: RemovePrefix;\n }> = {}\n ): Record<string, any> {\n const {reviver = (v) => v, removePrefix = false} = options;\n return Object.fromEntries(\n Object.entries(process.env)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [\n removePrefix ? key.replace(prefix, \"\") : key,\n reviver(value, key),\n ])\n );\n },\n\n utils: Object.freeze({\n select<T, F>(\n key: Uppercase<string>,\n TRUE: T,\n FALSE: F,\n predicate: (key: Uppercase<string>, value: any) => boolean = (k) =>\n env.boolean(k)\n ): T | F {\n return predicate(key, process.env[key]) ? TRUE : FALSE;\n },\n }),\n get raw() {\n return Object.freeze(dotEnvVars)\n },\n});\n"],"names":["loadDotEnv","file","existsSync","text","readFileSync","line","key","rest","value","e","msg","dotEnvVars","k","v","env","_default","raw","val","keys","error_builder","missing_keys","result","prefix","options","reviver","removePrefix","TRUE","FALSE","predicate"],"mappings":";AAGA,SAASA,EAAWC,IAAO,QAAQ;AAC/B,MAAI,CAACC,EAAWD,CAAI,UAAU,CAAA;AAE9B,MAAI;AACA,UAAME,IAAOC,EAAaH,GAAM,MAAM;AACtC,WAAO,OAAO;AAAA,MACVE,EACK,MAAM,OAAO,EACb,OAAO,CAACE,MAASA,KAAQ,CAACA,EAAK,KAAA,EAAO,WAAW,GAAG,KAAKA,EAAK,SAAS,GAAG,CAAC,EAC3E,IAAI,CAACA,MAAS;AACX,cAAM,CAACC,GAAK,GAAGC,CAAI,IAAIF,EAAK,MAAM,GAAG;AACrC,YAAIG,IAAQD,EAAK,KAAK,GAAG,EAAE,KAAA;AAC3B,gBACKC,EAAM,WAAW,GAAG,KAAKA,EAAM,SAAS,GAAG,KAC3CA,EAAM,WAAW,GAAG,KAAKA,EAAM,SAAS,GAAG,OAE5CA,IAAQA,EAAM,MAAM,GAAG,EAAE,IAEtB,CAACF,EAAI,KAAA,GAAQE,CAAK;AAAA,MAC7B,CAAC;AAAA,IAAA;AAAA,EAEb,SAASC,GAAQ;AACb,UAAMC,IAAMD,GAAG,WAAW;AAE1B,WAAI,WAAW,QAAQ,OAAM,WAAW,OAAO,KAAKC,CAAG,IAClD,QAAQ,KAAKA,CAAG,GACd,CAAA;AAAA,EACX;AACJ;AAGA,MAAMC,IAAaX,EAAA;AACnB,WAAW,CAACY,GAAGC,CAAC,KAAK,OAAO,QAAQF,CAAU;AAC1C,EAAMC,KAAK,QAAQ,QAAM,QAAQ,IAAIA,CAAC,IAAIC;AAGvC,MAAMC,IAAM,OAAO,OAAO;AAAA,EAC7B,OAAkCR,GAAwBS,GAAiB;AACvE,WAAMT,KAAO,QAAQ,gBAAc,IAAIA,CAAG,IAAIS,KAAY,KACnD,QAAQ,IAAIT,CAAG;AAAA,EAC1B;AAAA,EACA,OAAOA,GAAwBS,IAAW,GAAW;AACjD,UAAMC,IAAM,QAAQ,IAAIV,CAAG;AAC3B,QAAIU,MAAQ;AACR,qBAAQ,IAAIV,CAAG,IAAI,OAAOS,CAAQ,GAC3BA;AAEX,UAAME,IAAM,OAAOD,CAAG;AACtB,WAAO,OAAO,SAASC,CAAG,IAAIA,IAAMF;AAAA,EACxC;AAAA,EACA,QAAQT,GAAwBS,IAAW,IAAgB;AACvD,UAAMC,IAAM,QAAQ,IAAIV,CAAG;AAC3B,QAAIU,MAAQ;AACR,qBAAQ,IAAIV,CAAG,IAAIS,IAAW,SAAS,SAChCA;AAEX,UAAME,IAAMD,EAAI,YAAA;AAChB,WAAOC,MAAQ,UAAUA,MAAQ;AAAA,EACrC;AAAA,EACA,IAAIX,GAAwBS,IAAW,IAAI,IAAI,kBAAkB,GAAQ;AACrE,UAAMC,IAAM,QAAQ,IAAIV,CAAG;AAC3B,WAAIU,MAAQ,UAAa,CAAC,IAAI,SAASA,CAAG,KACtC,QAAQ,IAAIV,CAAG,IAAIS,EAAS,SAAA,GACrBA,KAEJ,IAAI,MAAMC,CAAG;AAAA,EACxB;AAAA,EACA,IAAIV,GAAiC;AACjC,WAAO,OAAO,UAAU,eAAe,KAAK,QAAQ,KAAKA,CAAG;AAAA,EAChE;AAAA,EACA,OAAOY,GAA2BC,KAA6D,CAACC,MAAiB,IAAI,MAAM,yBAAyBA,EAAa,KAAA,CAAM,kBAAkB,IAAK;AAC1L,UAAMA,IAAyB,CAAA;AAE/B,QADAF,EAAK,QAAQ,CAACZ,MAAQ,KAAK,IAAIA,CAAG,IAAI,SAASc,EAAa,KAAKd,CAAG,CAAC,GACjEc,EAAa,SAAS,GAAG;AACzB,YAAMC,IAASF,EAAcC,CAAY;AACzC,YAAI,OAAOC,KAAW,WAAgB,IAAI,MAAMA,CAAM,IAC3CA;AAAA,IACf;AAAA,EACJ;AAAA,EACA,QAAQf,GAAiC;AACrC,WAAOQ,EAAI,IAAIR,CAAG,KAAK,QAAQ,IAAIA,CAAG,MAAM;AAAA,EAChD;AAAA,EAEA,IAAI,MAAe;AACf,WAAO,QAAQ,IAAI,aAAa;AAAA,EACpC;AAAA,EAEA,WACIgB,GACAC,IAGK,IACc;AACnB,UAAM,EAAC,SAAAC,IAAU,CAACX,MAAMA,GAAG,cAAAY,IAAe,OAASF;AACnD,WAAO,OAAO;AAAA,MACV,OAAO,QAAQ,QAAQ,GAAG,EACrB,OAAO,CAAC,CAACjB,CAAG,MAAMA,EAAI,WAAWgB,CAAM,CAAC,EACxC,IAAI,CAAC,CAAChB,GAAKE,CAAK,MAAM;AAAA,QACnBiB,IAAenB,EAAI,QAAQgB,GAAQ,EAAE,IAAIhB;AAAA,QACzCkB,EAAQhB,GAAOF,CAAG;AAAA,MAAA,CACrB;AAAA,IAAA;AAAA,EAEb;AAAA,EAEA,OAAO,OAAO,OAAO;AAAA,IACjB,OACIA,GACAoB,GACAC,GACAC,IAA6D,CAAChB,MAC1DE,EAAI,QAAQF,CAAC,GACZ;AACL,aAAOgB,EAAUtB,GAAK,QAAQ,IAAIA,CAAG,CAAC,IAAIoB,IAAOC;AAAA,IACrD;AAAA,EAAA,CACH;AAAA,EACD,IAAI,MAAM;AACN,WAAO,OAAO,OAAOhB,CAAU;AAAA,EACnC;AACJ,CAAC;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/index.ts"],"sourcesContent":["import {readFileSync, existsSync} from \"fs\";\n\nfunction loadDotEnv(file = \".env\") {\n if (!existsSync(file)) return {};\n\n try {\n const text = readFileSync(file, \"utf8\");\n return Object.fromEntries(\n text\n .split(/\\r?\\n/)\n .filter((line) => line && !line.trim().startsWith(\"#\") && line.includes(\"=\"))\n .map((line) => {\n const [key, ...rest] = line.split(\"=\");\n let value = rest.join(\"=\").trim();\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n return [key.trim(), value];\n })\n );\n } catch (e: any) {\n const msg = e?.message ?? \"Failed to load .env\";\n // @ts-ignore\n if (globalThis.logger?.warn) globalThis.logger.warn(msg);\n else console.warn(msg);\n return {};\n }\n}\n\n// merge .env into process.env at load\nconst dotEnvVars = loadDotEnv();\nfor (const [k, v] of Object.entries(dotEnvVars)) {\n if (!(k in process.env)) process.env[k] = v;\n}\n\nexport const env = Object.freeze({\n string<T extends string = string>(key: Uppercase<string>, _default?: T): T {\n if (!(key in process.env)) process.env[key] = _default ?? \"\";\n return process.env[key] as T;\n },\n number(key: Uppercase<string>, _default = 0): number {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = String(_default);\n return _default;\n }\n const val = Number(raw);\n return Number.isFinite(val) ? val : _default;\n },\n boolean(key: Uppercase<string>, _default = false): boolean {\n const raw = process.env[key];\n if (raw === undefined) {\n process.env[key] = _default ? \"true\" : \"false\";\n return _default;\n }\n const val = raw.toLowerCase();\n return val === \"true\" || val === \"1\";\n },\n url(key: Uppercase<string>, _default = new URL(\"http://localhost\")): URL {\n const raw = process.env[key];\n if (raw === undefined || !URL.canParse(raw)) {\n process.env[key] = _default.toString();\n return _default;\n }\n return URL.parse(raw)!;\n },\n has(key: Uppercase<string>): boolean {\n return Object.prototype.hasOwnProperty.call(process.env, key);\n },\n assert(keys: Uppercase<string>[], error_builder: (missing_keys: string[]) => string | Error = ((missing_keys) => new Error(`Missing required keys(${missing_keys.join()}) in environment`)),) {\n const missing_keys: string[] = [];\n keys.forEach((key) => this.has(key) ? void 0 : missing_keys.push(key));\n if (missing_keys.length > 0) {\n const result = error_builder(missing_keys);\n if (typeof result === \"string\") throw new Error(result);\n else throw result;\n }\n },\n defined(key: Uppercase<string>): boolean {\n return env.has(key) && process.env[key] !== undefined;\n },\n\n get dev(): boolean {\n return process.env.NODE_ENV !== \"production\";\n },\n\n collection<PF extends Uppercase<string>, RemovePrefix extends boolean = false>(\n prefix: PF,\n options: Partial<{\n reviver: (value: string | undefined, key: string) => any;\n removePrefix: RemovePrefix;\n }> = {}\n ): Record<string, any> {\n const {reviver = (v) => v, removePrefix = false} = options;\n return Object.fromEntries(\n Object.entries(process.env)\n .filter(([key]) => key.startsWith(prefix))\n .map(([key, value]) => [\n removePrefix ? key.replace(prefix, \"\") : key,\n reviver(value, key),\n ])\n );\n },\n\n utils: Object.freeze({\n select<T, F>(\n key: Uppercase<string>,\n TRUE: T,\n FALSE: F,\n predicate: (key: Uppercase<string>, value: any) => boolean = (k) =>\n env.boolean(k)\n ): T | F {\n return predicate(key, process.env[key]) ? TRUE : FALSE;\n },\n }),\n get raw() {\n return Object.freeze(dotEnvVars)\n },\n});\n"],"names":["loadDotEnv","file","existsSync","text","readFileSync","line","key","rest","value","e","msg","dotEnvVars","k","v","env","_default","raw","val","keys","error_builder","missing_keys","result","prefix","options","reviver","removePrefix","TRUE","FALSE","predicate"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sourceregistry/node-env",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "A minimal, dependency-free TypeScript/JavaScript library for environment-variable loading and typed access.",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.es.js",