@httpx/dsn-parser
Version:
DSN & JDBC string parser with query params support in a tiny and modern package.
2 lines • 2.24 kB
JavaScript
;var P={EMPTY_DSN:"DSN cannot be empty",INVALID_ARGUMENT:"DSN must be a string",INVALID_PORT:"Invalid port",PARSE_ERROR:"Cannot parse DSN"};var m=(r,s)=>({message:s??P[r],reason:r,success:false}),f=(r,s=true)=>typeof r=="string"&&(s?r.trim():r).length>0,x=/^-?\d{1,16}$/,D=r=>typeof r=="string"&&x.test(r),g=r=>!Number.isNaN(r)&&r<65536&&r>0,b=r=>{let s={};for(let e in r)r[e]!==void 0&&(s[e]=r[e]);return s},y=(r,s)=>{let e={},{params:p,...c}=r;for(let[n,t]of Object.entries(c))e[n]=n in s?s[n]:t;return e.params=p,e};var w={parseBooleans:true,parseNumbers:true,setTrueForUndefinedValues:true},R=(r,s)=>{let{parseBooleans:e,parseNumbers:p,setTrueForUndefinedValues:c}={...w,...s},n=c?true:null;return r.split("&").filter(o=>o.trim().length>0).reduce((o,l)=>{let[a,u=null]=l.split("="),d;return typeof u=="string"?p&&D(u)?d=Number.parseInt(u,10):d=e&&["false","true"].includes(u)?u==="true":decodeURIComponent(u):d=n,{...o,[a]:d}},{})};var k=/^(?<driver>([\w+-]{1,40})):\/\/((?<user>[^/:]{1,200})?(:(?<pass>.{0,200}))?@)?(?<host>[^/:]{1,200}?)(:(?<port>\d+)?)?(\/(?<db>([\w#$.@-])+))?(\?(?<params>.{1,1000}))?$/,N={lowercaseDriver:false,overrides:{}},i=(r,s)=>{if(!f(r))return m(typeof r=="string"?"EMPTY_DSN":"INVALID_ARGUMENT");let e={...N,...s},{lowercaseDriver:p,overrides:c={}}=e,n=k.exec(r);if(!n?.groups)return m("PARSE_ERROR");let t={};for(let[l,a]of Object.entries(n.groups))if(typeof a=="string")switch(l){case "driver":{t.driver=p?a.toLowerCase():a;break}case "port":{t.port=Number.parseInt(a,10);break}case "params":{t.params=R(a);break}default:t[l]=a;}let o=b(y(t,c));return o?.port&&!g(o.port)?m("INVALID_PORT",`Invalid port: ${o.port}`):{success:true,value:o}};var O=(r,s)=>{let e=i(r);if(!e.success)throw new Error(s??`${e.message} (${e.reason})`)};var v=r=>{let[s,...e]=r.split(";");return [s,e?e.join("&"):void 0].filter(Boolean).join("?")};var E=r=>i(r).success;var T=(r,s)=>{let e=i(r,s);if(e.success)return e.value;let p=s?.errorMsgPrefix??"Can't parse dsn";throw new Error(`${p}: ${e.message} (${e.reason})`)};exports.assertParsableDsn=O;exports.convertJdbcToDsn=v;exports.isParsableDsn=E;exports.parseDsn=i;exports.parseDsnOrThrow=T;//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map