@zh-moody/safe-env 0.3.0 → 0.3.2

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.
package/README.md CHANGED
@@ -17,7 +17,7 @@
17
17
  - **更强的数据转换**:内置 `s.array()`, `s.boolean()` 增强转换,支持 `.transform()` 链式 Pipe 处理。
18
18
  - **内置常用规则**:提供 `.url()`, `.email()`, `.regex()` 等高频校验,无需依赖 zod。
19
19
  - **类型安全**:自动推断配置对象类型,拥有完美的 IDE 补全。
20
- - **极致轻量**:Minified 体积约 **2KB**,零运行时依赖。
20
+ - **极致轻量**:Gzip 压缩后仅 **1.9 KB**,零运行时依赖。
21
21
 
22
22
  ---
23
23
 
@@ -0,0 +1,5 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkFH2DFX4Jcjs = require('./chunk-FH2DFX4J.cjs');function $(a){let e={r:"\x1B[31m",g:"\x1B[32m",y:"\x1B[33m",b:"\x1B[1m",res:"\x1B[0m",d:"\x1B[2m"};console.error(`
2
+ ${e.r}${e.b}\u274C SafeEnv Error${e.res}
3
+ ${e.d}${"".padEnd(40,"-")}${e.res}`),a.forEach(i=>{let d=i.value===void 0?"undefined":`"${i.value}"`;console.error(`${e.y}${i.key}${e.res} ${e.r}${i.error}${e.res} ${e.d}${d}${e.res}`)}),console.error(`${e.d}${"".padEnd(40,"-")}${e.res}
4
+ ${e.g}\u{1F4A1} Check your .env files.${e.res}
5
+ `)}function h(a,e={}){let{loadProcessEnv:i=!0,source:d,prefix:p=""}=e,f;if(d!==void 0)f=d||{};else{let n=e.mode||(typeof process<"u"?process.env.NODE_ENV:"development"),o=[".env",`.env.${n}`,".env.local",`.env.${n}.local`],s={};for(let t of o)s={...s,..._chunkFH2DFX4Jcjs.b.call(void 0, t)};f={...s,...i&&typeof process<"u"?process.env:{}}}let E={},c=[];for(let n in a){let o=a[n],s=o.sourceKey;if(!s){let r=p+n;f[r]!==void 0?s=r:f[n]!==void 0?s=n:s=p?r:n}let t=f[s];try{let r;if(t===void 0||t===""&&o.default!==void 0){if(o.required&&t===void 0)throw new Error("Required field missing");r=o.default}else r=o.parse(t);if(r!==void 0&&o.metadata){let{min:l,max:u,validate:m}=o.metadata;if(typeof r=="number"){if(l!==void 0&&r<l)throw new Error(`Below min ${l}`);if(u!==void 0&&r>u)throw new Error(`Above max ${u}`)}if(m&&!m.fn(r))throw new Error(m.message)}E[n]=r}catch(r){c.push({key:s,error:r.message,value:t})}}if(c.length>0){$(c);let n=typeof process<"u"&&!!process.exit,o=typeof process<"u"&&process.env.NODE_ENV==="test";if(n&&!d&&!o)process.exit(1);else throw new Error("SafeEnv: Configuration validation failed.")}return E}exports.a = $; exports.b = h;
@@ -0,0 +1,5 @@
1
+ import{b as v}from"./chunk-POVTEBYN.js";function $(a){let e={r:"\x1B[31m",g:"\x1B[32m",y:"\x1B[33m",b:"\x1B[1m",res:"\x1B[0m",d:"\x1B[2m"};console.error(`
2
+ ${e.r}${e.b}\u274C SafeEnv Error${e.res}
3
+ ${e.d}${"".padEnd(40,"-")}${e.res}`),a.forEach(i=>{let d=i.value===void 0?"undefined":`"${i.value}"`;console.error(`${e.y}${i.key}${e.res} ${e.r}${i.error}${e.res} ${e.d}${d}${e.res}`)}),console.error(`${e.d}${"".padEnd(40,"-")}${e.res}
4
+ ${e.g}\u{1F4A1} Check your .env files.${e.res}
5
+ `)}function h(a,e={}){let{loadProcessEnv:i=!0,source:d,prefix:p=""}=e,f;if(d!==void 0)f=d||{};else{let n=e.mode||(typeof process<"u"?process.env.NODE_ENV:"development"),o=[".env",`.env.${n}`,".env.local",`.env.${n}.local`],s={};for(let t of o)s={...s,...v(t)};f={...s,...i&&typeof process<"u"?process.env:{}}}let E={},c=[];for(let n in a){let o=a[n],s=o.sourceKey;if(!s){let r=p+n;f[r]!==void 0?s=r:f[n]!==void 0?s=n:s=p?r:n}let t=f[s];try{let r;if(t===void 0||t===""&&o.default!==void 0){if(o.required&&t===void 0)throw new Error("Required field missing");r=o.default}else r=o.parse(t);if(r!==void 0&&o.metadata){let{min:l,max:u,validate:m}=o.metadata;if(typeof r=="number"){if(l!==void 0&&r<l)throw new Error(`Below min ${l}`);if(u!==void 0&&r>u)throw new Error(`Above max ${u}`)}if(m&&!m.fn(r))throw new Error(m.message)}E[n]=r}catch(r){c.push({key:s,error:r.message,value:t})}}if(c.length>0){$(c);let n=typeof process<"u"&&!!process.exit,o=typeof process<"u"&&process.env.NODE_ENV==="test";if(n&&!d&&!o)process.exit(1);else throw new Error("SafeEnv: Configuration validation failed.")}return E}export{$ as a,h as b};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZMFWDJAZcjs = require('./chunk-ZMFWDJAZ.cjs');var _chunkFH2DFX4Jcjs = require('./chunk-FH2DFX4J.cjs');function a(n,i,e,o=[]){return{type:n,default:i,required:i===void 0,parse:e,metadata:o.length?{options:o}:{},from(t){return this.sourceKey=t,this},validate(t,r="Custom validation failed"){return this.metadata={...this.metadata,validate:{fn:t,message:r}},this},min(t){return this.metadata={...this.metadata,min:t},this},max(t){return this.metadata={...this.metadata,max:t},this},transform(t){let r=this.parse;return this.parse=s=>t(r(s)),this},url(){return this.validate(t=>{try{return new URL(String(t)),!0}catch (e2){return!1}},"Invalid URL format")},email(){let t=/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;return this.validate(r=>t.test(String(r)),"Invalid email format")},regex(t,r="Value does not match pattern"){return this.validate(s=>t.test(String(s)),r)},description(t){return this.metadata={...this.metadata,description:t},this}}}var f={string:n=>a("string",n,i=>String(i)),number:n=>a("number",n,i=>{let e=Number(i);if(isNaN(e))throw new Error(`Invalid number: ${i}`);return e}),boolean:n=>a("boolean",n,i=>{if(typeof i=="boolean")return i;let e=String(i).toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}),enum:(n,i)=>a("enum",i,e=>{if(!n.includes(e))throw new Error(`Value "${e}" is not one of: ${n.join(", ")}`);return e},n),array:(n,i=",")=>a("array",n,e=>Array.isArray(e)?e:typeof e!="string"?[]:e.split(i).map(o=>o.trim()).filter(Boolean))};exports.parseDotEnv = _chunkFH2DFX4Jcjs.a; exports.reportErrors = _chunkZMFWDJAZcjs.a; exports.s = f; exports.safeEnv = _chunkZMFWDJAZcjs.b;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGCSZ35F2cjs = require('./chunk-GCSZ35F2.cjs');var _chunkFH2DFX4Jcjs = require('./chunk-FH2DFX4J.cjs');function a(n,i,e,o=[]){return{type:n,default:i,required:i===void 0,parse:e,metadata:o.length?{options:o}:{},from(t){return this.sourceKey=t,this},validate(t,r="Custom validation failed"){return this.metadata={...this.metadata,validate:{fn:t,message:r}},this},min(t){return this.metadata={...this.metadata,min:t},this},max(t){return this.metadata={...this.metadata,max:t},this},transform(t){let r=this.parse;return this.parse=s=>t(r(s)),this},url(){return this.validate(t=>{try{return new URL(String(t)),!0}catch (e2){return!1}},"Invalid URL format")},email(){let t=/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;return this.validate(r=>t.test(String(r)),"Invalid email format")},regex(t,r="Value does not match pattern"){return this.validate(s=>t.test(String(s)),r)},description(t){return this.metadata={...this.metadata,description:t},this}}}var f={string:n=>a("string",n,i=>String(i)),number:n=>a("number",n,i=>{let e=Number(i);if(isNaN(e))throw new Error(`Invalid number: ${i}`);return e}),boolean:n=>a("boolean",n,i=>{if(typeof i=="boolean")return i;let e=String(i).toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}),enum:(n,i)=>a("enum",i,e=>{if(!n.includes(e))throw new Error(`Value "${e}" is not one of: ${n.join(", ")}`);return e},n),array:(n,i=",")=>a("array",n,e=>Array.isArray(e)?e:typeof e!="string"?[]:e.split(i).map(o=>o.trim()).filter(Boolean))};exports.parseDotEnv = _chunkFH2DFX4Jcjs.a; exports.reportErrors = _chunkGCSZ35F2cjs.a; exports.s = f; exports.safeEnv = _chunkGCSZ35F2cjs.b;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{a as u,b as m}from"./chunk-YZVFZGPW.js";import{a as l}from"./chunk-POVTEBYN.js";function a(n,i,e,o=[]){return{type:n,default:i,required:i===void 0,parse:e,metadata:o.length?{options:o}:{},from(t){return this.sourceKey=t,this},validate(t,r="Custom validation failed"){return this.metadata={...this.metadata,validate:{fn:t,message:r}},this},min(t){return this.metadata={...this.metadata,min:t},this},max(t){return this.metadata={...this.metadata,max:t},this},transform(t){let r=this.parse;return this.parse=s=>t(r(s)),this},url(){return this.validate(t=>{try{return new URL(String(t)),!0}catch{return!1}},"Invalid URL format")},email(){let t=/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;return this.validate(r=>t.test(String(r)),"Invalid email format")},regex(t,r="Value does not match pattern"){return this.validate(s=>t.test(String(s)),r)},description(t){return this.metadata={...this.metadata,description:t},this}}}var f={string:n=>a("string",n,i=>String(i)),number:n=>a("number",n,i=>{let e=Number(i);if(isNaN(e))throw new Error(`Invalid number: ${i}`);return e}),boolean:n=>a("boolean",n,i=>{if(typeof i=="boolean")return i;let e=String(i).toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}),enum:(n,i)=>a("enum",i,e=>{if(!n.includes(e))throw new Error(`Value "${e}" is not one of: ${n.join(", ")}`);return e},n),array:(n,i=",")=>a("array",n,e=>Array.isArray(e)?e:typeof e!="string"?[]:e.split(i).map(o=>o.trim()).filter(Boolean))};export{l as parseDotEnv,u as reportErrors,f as s,m as safeEnv};
1
+ import{a as u,b as m}from"./chunk-NRXIL5NF.js";import{a as l}from"./chunk-POVTEBYN.js";function a(n,i,e,o=[]){return{type:n,default:i,required:i===void 0,parse:e,metadata:o.length?{options:o}:{},from(t){return this.sourceKey=t,this},validate(t,r="Custom validation failed"){return this.metadata={...this.metadata,validate:{fn:t,message:r}},this},min(t){return this.metadata={...this.metadata,min:t},this},max(t){return this.metadata={...this.metadata,max:t},this},transform(t){let r=this.parse;return this.parse=s=>t(r(s)),this},url(){return this.validate(t=>{try{return new URL(String(t)),!0}catch{return!1}},"Invalid URL format")},email(){let t=/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;return this.validate(r=>t.test(String(r)),"Invalid email format")},regex(t,r="Value does not match pattern"){return this.validate(s=>t.test(String(s)),r)},description(t){return this.metadata={...this.metadata,description:t},this}}}var f={string:n=>a("string",n,i=>String(i)),number:n=>a("number",n,i=>{let e=Number(i);if(isNaN(e))throw new Error(`Invalid number: ${i}`);return e}),boolean:n=>a("boolean",n,i=>{if(typeof i=="boolean")return i;let e=String(i).toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}),enum:(n,i)=>a("enum",i,e=>{if(!n.includes(e))throw new Error(`Value "${e}" is not one of: ${n.join(", ")}`);return e},n),array:(n,i=",")=>a("array",n,e=>Array.isArray(e)?e:typeof e!="string"?[]:e.split(i).map(o=>o.trim()).filter(Boolean))};export{l as parseDotEnv,u as reportErrors,f as s,m as safeEnv};
package/dist/vite.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkZMFWDJAZcjs = require('./chunk-ZMFWDJAZ.cjs');require('./chunk-FH2DFX4J.cjs');var _vite = require('vite');function m(t,r={}){return{name:"vite-plugin-safe-env",configResolved(e){let{envDir:i=e.root,prefix:o=e.envPrefix||"VITE_"}=r,s=e.mode,v=_vite.loadEnv.call(void 0, s,i,o);try{_chunkZMFWDJAZcjs.b.call(void 0, t,{source:v,loadProcessEnv:!1})}catch (e2){process.exit(1)}}}}exports.viteSafeEnv = m;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkGCSZ35F2cjs = require('./chunk-GCSZ35F2.cjs');require('./chunk-FH2DFX4J.cjs');var _vite = require('vite');function m(t,i={}){return{name:"vite-plugin-safe-env",configResolved(r){let{envDir:o=r.root,prefix:e=r.envPrefix||"VITE_"}=i,s=r.mode,a=_vite.loadEnv.call(void 0, s,o,e);try{_chunkGCSZ35F2cjs.b.call(void 0, t,{source:a,prefix:Array.isArray(e)?e[0]:e,loadProcessEnv:!1})}catch (e2){process.exit(1)}}}}exports.viteSafeEnv = m;
package/dist/vite.js CHANGED
@@ -1 +1 @@
1
- import{b as n}from"./chunk-YZVFZGPW.js";import"./chunk-POVTEBYN.js";import{loadEnv as a}from"vite";function m(t,r={}){return{name:"vite-plugin-safe-env",configResolved(e){let{envDir:i=e.root,prefix:o=e.envPrefix||"VITE_"}=r,s=e.mode,v=a(s,i,o);try{n(t,{source:v,loadProcessEnv:!1})}catch{process.exit(1)}}}}export{m as viteSafeEnv};
1
+ import{b as n}from"./chunk-NRXIL5NF.js";import"./chunk-POVTEBYN.js";import{loadEnv as f}from"vite";function m(t,i={}){return{name:"vite-plugin-safe-env",configResolved(r){let{envDir:o=r.root,prefix:e=r.envPrefix||"VITE_"}=i,s=r.mode,a=f(s,o,e);try{n(t,{source:a,prefix:Array.isArray(e)?e[0]:e,loadProcessEnv:!1})}catch{process.exit(1)}}}}export{m as viteSafeEnv};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zh-moody/safe-env",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Type-safe environment variables for Node.js and Browser with schema validation.",
5
5
  "author": "Moody",
6
6
  "license": "MIT",
@@ -59,6 +59,7 @@
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/node": "^20.0.0",
62
+ "terser": "^5.46.1",
62
63
  "tsup": "^8.5.1",
63
64
  "typescript": "^5.9.3",
64
65
  "vite": "^6.2.0",
@@ -1,5 +0,0 @@
1
- import{b as v}from"./chunk-POVTEBYN.js";function $(f){let e={r:"\x1B[31m",g:"\x1B[32m",y:"\x1B[33m",b:"\x1B[1m",res:"\x1B[0m",d:"\x1B[2m"};console.error(`
2
- ${e.r}${e.b}\u274C SafeEnv Error${e.res}
3
- ${e.d}${"".padEnd(40,"-")}${e.res}`),f.forEach(t=>{let d=t.value===void 0?"undefined":`"${t.value}"`;console.error(`${e.y}${t.key}${e.res} ${e.r}${t.error}${e.res} ${e.d}${d}${e.res}`)}),console.error(`${e.d}${"".padEnd(40,"-")}${e.res}
4
- ${e.g}\u{1F4A1} Check your .env files.${e.res}
5
- `)}function h(f,e={}){let{loadProcessEnv:t=!0,source:d,prefix:p=""}=e,a;if(d!==void 0)a=d||{};else{let n=e.mode||(typeof process<"u"?process.env.NODE_ENV:"development"),r=[".env",`.env.${n}`,".env.local",`.env.${n}.local`],i={};for(let s of r)i={...i,...v(s)};a={...i,...t&&typeof process<"u"?process.env:{}}}let E={},c=[];for(let n in f){let r=f[n],i=r.sourceKey||(a[p+n]!==void 0?p+n:n),s=a[i];try{let o;if(s===void 0||s===""&&r.default!==void 0){if(r.required&&s===void 0)throw new Error("Required field missing");o=r.default}else o=r.parse(s);if(o!==void 0&&r.metadata){let{min:l,max:u,validate:m}=r.metadata;if(typeof o=="number"){if(l!==void 0&&o<l)throw new Error(`Below min ${l}`);if(u!==void 0&&o>u)throw new Error(`Above max ${u}`)}if(m&&!m.fn(o))throw new Error(m.message)}E[n]=o}catch(o){c.push({key:i,error:o.message,value:s})}}if(c.length>0){$(c);let n=typeof process<"u"&&!!process.exit,r=typeof process<"u"&&process.env.NODE_ENV==="test";if(n&&!d&&!r)process.exit(1);else throw new Error("SafeEnv: Configuration validation failed.")}return E}export{$ as a,h as b};
@@ -1,5 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkFH2DFX4Jcjs = require('./chunk-FH2DFX4J.cjs');function $(f){let e={r:"\x1B[31m",g:"\x1B[32m",y:"\x1B[33m",b:"\x1B[1m",res:"\x1B[0m",d:"\x1B[2m"};console.error(`
2
- ${e.r}${e.b}\u274C SafeEnv Error${e.res}
3
- ${e.d}${"".padEnd(40,"-")}${e.res}`),f.forEach(t=>{let d=t.value===void 0?"undefined":`"${t.value}"`;console.error(`${e.y}${t.key}${e.res} ${e.r}${t.error}${e.res} ${e.d}${d}${e.res}`)}),console.error(`${e.d}${"".padEnd(40,"-")}${e.res}
4
- ${e.g}\u{1F4A1} Check your .env files.${e.res}
5
- `)}function h(f,e={}){let{loadProcessEnv:t=!0,source:d,prefix:p=""}=e,a;if(d!==void 0)a=d||{};else{let n=e.mode||(typeof process<"u"?process.env.NODE_ENV:"development"),r=[".env",`.env.${n}`,".env.local",`.env.${n}.local`],i={};for(let s of r)i={...i,..._chunkFH2DFX4Jcjs.b.call(void 0, s)};a={...i,...t&&typeof process<"u"?process.env:{}}}let E={},c=[];for(let n in f){let r=f[n],i=r.sourceKey||(a[p+n]!==void 0?p+n:n),s=a[i];try{let o;if(s===void 0||s===""&&r.default!==void 0){if(r.required&&s===void 0)throw new Error("Required field missing");o=r.default}else o=r.parse(s);if(o!==void 0&&r.metadata){let{min:l,max:u,validate:m}=r.metadata;if(typeof o=="number"){if(l!==void 0&&o<l)throw new Error(`Below min ${l}`);if(u!==void 0&&o>u)throw new Error(`Above max ${u}`)}if(m&&!m.fn(o))throw new Error(m.message)}E[n]=o}catch(o){c.push({key:i,error:o.message,value:s})}}if(c.length>0){$(c);let n=typeof process<"u"&&!!process.exit,r=typeof process<"u"&&process.env.NODE_ENV==="test";if(n&&!d&&!r)process.exit(1);else throw new Error("SafeEnv: Configuration validation failed.")}return E}exports.a = $; exports.b = h;