@quintal/environment 0.1.0 → 0.2.0
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/{dist → .dist}/index.cjs +1 -1
- package/{dist → .dist}/index.d.ts +3 -3
- package/{dist → .dist}/index.mjs +24 -22
- package/LICENSE +1 -1
- package/README.md +41 -4
- package/package.json +42 -16
- package/.coverage/base.css +0 -224
- package/.coverage/block-navigation.js +0 -87
- package/.coverage/clover.xml +0 -161
- package/.coverage/coverage-final.json +0 -2
- package/.coverage/favicon.png +0 -0
- package/.coverage/index.html +0 -116
- package/.coverage/index.ts.html +0 -541
- package/.coverage/prettify.css +0 -1
- package/.coverage/prettify.js +0 -2
- package/.coverage/sort-arrow-sprite.png +0 -0
- package/.coverage/sorter.js +0 -196
- package/.eslintrc.js +0 -1
- package/.prettierrc.js +0 -1
- package/.turbo/turbo-build.log +0 -28
- package/.turbo/turbo-lint:check.log +0 -6
- package/.turbo/turbo-test.log +0 -23
- package/CHANGELOG.md +0 -7
- package/src/index.ts +0 -152
- package/test/index.spec.ts +0 -162
- package/tsconfig.json +0 -8
- package/vite.config.js +0 -1
package/.coverage/prettify.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);
|
|
Binary file
|
package/.coverage/sorter.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
var addSorting = (function() {
|
|
3
|
-
'use strict';
|
|
4
|
-
var cols,
|
|
5
|
-
currentSort = {
|
|
6
|
-
index: 0,
|
|
7
|
-
desc: false
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
// returns the summary table element
|
|
11
|
-
function getTable() {
|
|
12
|
-
return document.querySelector('.coverage-summary');
|
|
13
|
-
}
|
|
14
|
-
// returns the thead element of the summary table
|
|
15
|
-
function getTableHeader() {
|
|
16
|
-
return getTable().querySelector('thead tr');
|
|
17
|
-
}
|
|
18
|
-
// returns the tbody element of the summary table
|
|
19
|
-
function getTableBody() {
|
|
20
|
-
return getTable().querySelector('tbody');
|
|
21
|
-
}
|
|
22
|
-
// returns the th element for nth column
|
|
23
|
-
function getNthColumn(n) {
|
|
24
|
-
return getTableHeader().querySelectorAll('th')[n];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function onFilterInput() {
|
|
28
|
-
const searchValue = document.getElementById('fileSearch').value;
|
|
29
|
-
const rows = document.getElementsByTagName('tbody')[0].children;
|
|
30
|
-
for (let i = 0; i < rows.length; i++) {
|
|
31
|
-
const row = rows[i];
|
|
32
|
-
if (
|
|
33
|
-
row.textContent
|
|
34
|
-
.toLowerCase()
|
|
35
|
-
.includes(searchValue.toLowerCase())
|
|
36
|
-
) {
|
|
37
|
-
row.style.display = '';
|
|
38
|
-
} else {
|
|
39
|
-
row.style.display = 'none';
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// loads the search box
|
|
45
|
-
function addSearchBox() {
|
|
46
|
-
var template = document.getElementById('filterTemplate');
|
|
47
|
-
var templateClone = template.content.cloneNode(true);
|
|
48
|
-
templateClone.getElementById('fileSearch').oninput = onFilterInput;
|
|
49
|
-
template.parentElement.appendChild(templateClone);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// loads all columns
|
|
53
|
-
function loadColumns() {
|
|
54
|
-
var colNodes = getTableHeader().querySelectorAll('th'),
|
|
55
|
-
colNode,
|
|
56
|
-
cols = [],
|
|
57
|
-
col,
|
|
58
|
-
i;
|
|
59
|
-
|
|
60
|
-
for (i = 0; i < colNodes.length; i += 1) {
|
|
61
|
-
colNode = colNodes[i];
|
|
62
|
-
col = {
|
|
63
|
-
key: colNode.getAttribute('data-col'),
|
|
64
|
-
sortable: !colNode.getAttribute('data-nosort'),
|
|
65
|
-
type: colNode.getAttribute('data-type') || 'string'
|
|
66
|
-
};
|
|
67
|
-
cols.push(col);
|
|
68
|
-
if (col.sortable) {
|
|
69
|
-
col.defaultDescSort = col.type === 'number';
|
|
70
|
-
colNode.innerHTML =
|
|
71
|
-
colNode.innerHTML + '<span class="sorter"></span>';
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
return cols;
|
|
75
|
-
}
|
|
76
|
-
// attaches a data attribute to every tr element with an object
|
|
77
|
-
// of data values keyed by column name
|
|
78
|
-
function loadRowData(tableRow) {
|
|
79
|
-
var tableCols = tableRow.querySelectorAll('td'),
|
|
80
|
-
colNode,
|
|
81
|
-
col,
|
|
82
|
-
data = {},
|
|
83
|
-
i,
|
|
84
|
-
val;
|
|
85
|
-
for (i = 0; i < tableCols.length; i += 1) {
|
|
86
|
-
colNode = tableCols[i];
|
|
87
|
-
col = cols[i];
|
|
88
|
-
val = colNode.getAttribute('data-value');
|
|
89
|
-
if (col.type === 'number') {
|
|
90
|
-
val = Number(val);
|
|
91
|
-
}
|
|
92
|
-
data[col.key] = val;
|
|
93
|
-
}
|
|
94
|
-
return data;
|
|
95
|
-
}
|
|
96
|
-
// loads all row data
|
|
97
|
-
function loadData() {
|
|
98
|
-
var rows = getTableBody().querySelectorAll('tr'),
|
|
99
|
-
i;
|
|
100
|
-
|
|
101
|
-
for (i = 0; i < rows.length; i += 1) {
|
|
102
|
-
rows[i].data = loadRowData(rows[i]);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// sorts the table using the data for the ith column
|
|
106
|
-
function sortByIndex(index, desc) {
|
|
107
|
-
var key = cols[index].key,
|
|
108
|
-
sorter = function(a, b) {
|
|
109
|
-
a = a.data[key];
|
|
110
|
-
b = b.data[key];
|
|
111
|
-
return a < b ? -1 : a > b ? 1 : 0;
|
|
112
|
-
},
|
|
113
|
-
finalSorter = sorter,
|
|
114
|
-
tableBody = document.querySelector('.coverage-summary tbody'),
|
|
115
|
-
rowNodes = tableBody.querySelectorAll('tr'),
|
|
116
|
-
rows = [],
|
|
117
|
-
i;
|
|
118
|
-
|
|
119
|
-
if (desc) {
|
|
120
|
-
finalSorter = function(a, b) {
|
|
121
|
-
return -1 * sorter(a, b);
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
for (i = 0; i < rowNodes.length; i += 1) {
|
|
126
|
-
rows.push(rowNodes[i]);
|
|
127
|
-
tableBody.removeChild(rowNodes[i]);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
rows.sort(finalSorter);
|
|
131
|
-
|
|
132
|
-
for (i = 0; i < rows.length; i += 1) {
|
|
133
|
-
tableBody.appendChild(rows[i]);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// removes sort indicators for current column being sorted
|
|
137
|
-
function removeSortIndicators() {
|
|
138
|
-
var col = getNthColumn(currentSort.index),
|
|
139
|
-
cls = col.className;
|
|
140
|
-
|
|
141
|
-
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
|
|
142
|
-
col.className = cls;
|
|
143
|
-
}
|
|
144
|
-
// adds sort indicators for current column being sorted
|
|
145
|
-
function addSortIndicators() {
|
|
146
|
-
getNthColumn(currentSort.index).className += currentSort.desc
|
|
147
|
-
? ' sorted-desc'
|
|
148
|
-
: ' sorted';
|
|
149
|
-
}
|
|
150
|
-
// adds event listeners for all sorter widgets
|
|
151
|
-
function enableUI() {
|
|
152
|
-
var i,
|
|
153
|
-
el,
|
|
154
|
-
ithSorter = function ithSorter(i) {
|
|
155
|
-
var col = cols[i];
|
|
156
|
-
|
|
157
|
-
return function() {
|
|
158
|
-
var desc = col.defaultDescSort;
|
|
159
|
-
|
|
160
|
-
if (currentSort.index === i) {
|
|
161
|
-
desc = !currentSort.desc;
|
|
162
|
-
}
|
|
163
|
-
sortByIndex(i, desc);
|
|
164
|
-
removeSortIndicators();
|
|
165
|
-
currentSort.index = i;
|
|
166
|
-
currentSort.desc = desc;
|
|
167
|
-
addSortIndicators();
|
|
168
|
-
};
|
|
169
|
-
};
|
|
170
|
-
for (i = 0; i < cols.length; i += 1) {
|
|
171
|
-
if (cols[i].sortable) {
|
|
172
|
-
// add the click event handler on the th so users
|
|
173
|
-
// dont have to click on those tiny arrows
|
|
174
|
-
el = getNthColumn(i).querySelector('.sorter').parentElement;
|
|
175
|
-
if (el.addEventListener) {
|
|
176
|
-
el.addEventListener('click', ithSorter(i));
|
|
177
|
-
} else {
|
|
178
|
-
el.attachEvent('onclick', ithSorter(i));
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
// adds sorting functionality to the UI
|
|
184
|
-
return function() {
|
|
185
|
-
if (!getTable()) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
cols = loadColumns();
|
|
189
|
-
loadData();
|
|
190
|
-
addSearchBox();
|
|
191
|
-
addSortIndicators();
|
|
192
|
-
enableUI();
|
|
193
|
-
};
|
|
194
|
-
})();
|
|
195
|
-
|
|
196
|
-
window.addEventListener('load', addSorting);
|
package/.eslintrc.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('@quintal/config/eslint');
|
package/.prettierrc.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('@quintal/config/prettier');
|
package/.turbo/turbo-build.log
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @quintal/environment@0.1.0 build /home/runner/work/quintal-oss/quintal-oss/packages/environment
|
|
3
|
-
> run-s build:*
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
> @quintal/environment@0.1.0 build:clean /home/runner/work/quintal-oss/quintal-oss/packages/environment
|
|
7
|
-
> shx rm -rf dist
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
> @quintal/environment@0.1.0 build:code /home/runner/work/quintal-oss/quintal-oss/packages/environment
|
|
11
|
-
> vite build
|
|
12
|
-
|
|
13
|
-
[33mThe CJS build of Vite's Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m
|
|
14
|
-
[36mvite v5.0.4 [32mbuilding for production...[36m[39m
|
|
15
|
-
transforming...
|
|
16
|
-
[32m✓[39m 2 modules transformed.
|
|
17
|
-
rendering chunks...
|
|
18
|
-
[32m
|
|
19
|
-
[36m[vite:dts][32m Start generate declaration files...[39m
|
|
20
|
-
computing gzip size...
|
|
21
|
-
[2mdist/[22m[36mindex.mjs [39m[1m[2m78.44 kB[22m[1m[22m[2m │ gzip: 16.07 kB[22m
|
|
22
|
-
[32m[36m[vite:dts][32m Start rollup declaration files...[39m
|
|
23
|
-
Analysis will use the bundled TypeScript version 5.0.4
|
|
24
|
-
*** The target project appears to use TypeScript 5.3.2 which is newer than the bundled compiler engine; consider upgrading API Extractor.
|
|
25
|
-
[32m[36m[vite:dts][32m Declaration files built in 4739ms.
|
|
26
|
-
[39m
|
|
27
|
-
[2mdist/[22m[36mindex.cjs [39m[1m[2m54.46 kB[22m[1m[22m[2m │ gzip: 13.27 kB[22m
|
|
28
|
-
[32m✓ built in 5.02s[39m
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @quintal/environment@0.1.0 lint:check /home/runner/work/quintal-oss/quintal-oss/packages/environment
|
|
3
|
-
> eslint .
|
|
4
|
-
|
|
5
|
-
Pages directory cannot be found at /home/runner/work/quintal-oss/quintal-oss/packages/environment/pages or /home/runner/work/quintal-oss/quintal-oss/packages/environment/src/pages. If using a custom path, please configure with the `no-html-link-for-pages` rule in your eslint config file.
|
|
6
|
-
Warning: React version was set to "detect" in eslint-plugin-react settings, but the "react" package is not installed. Assuming latest React version for linting.
|
package/.turbo/turbo-test.log
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
> @quintal/environment@0.1.0 test /home/runner/work/quintal-oss/quintal-oss/packages/environment
|
|
3
|
-
> vitest
|
|
4
|
-
|
|
5
|
-
[33mThe CJS build of Vite's Node API is deprecated. See https://vitejs.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m
|
|
6
|
-
|
|
7
|
-
[7m[1m[36m RUN [39m[22m[27m [36mv0.34.6[39m [90m/home/runner/work/quintal-oss/quintal-oss/packages/environment[39m
|
|
8
|
-
[2m Coverage enabled with [22m[33mv8[39m
|
|
9
|
-
|
|
10
|
-
[32m✓[39m test/index.spec.ts [2m ([22m[2m5 tests[22m[2m)[22m[90m 11[2mms[22m[39m
|
|
11
|
-
|
|
12
|
-
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
|
|
13
|
-
[2m Tests [22m [1m[32m5 passed[39m[22m[90m (5)[39m
|
|
14
|
-
[2m Start at [22m 20:34:57
|
|
15
|
-
[2m Duration [22m 624ms[2m (transform 50ms, setup 1ms, collect 52ms, tests 11ms, environment 184ms, prepare 94ms)[22m
|
|
16
|
-
|
|
17
|
-
[34m % [39m[2mCoverage report from [22m[33mv8[39m
|
|
18
|
-
----------|---------|----------|---------|---------|-------------------
|
|
19
|
-
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
20
|
-
----------|---------|----------|---------|---------|-------------------
|
|
21
|
-
All files | 100 | 100 | 100 | 100 |
|
|
22
|
-
index.ts | 100 | 100 | 100 | 100 |
|
|
23
|
-
----------|---------|----------|---------|---------|-------------------
|
package/CHANGELOG.md
DELETED
package/src/index.ts
DELETED
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { ZodError, ZodType } from 'zod';
|
|
3
|
-
|
|
4
|
-
type EnvValue = {
|
|
5
|
-
/**
|
|
6
|
-
* The value
|
|
7
|
-
* @example process.env.NODE_ENV
|
|
8
|
-
* @example process.env.DATABASE_URL
|
|
9
|
-
* @example process.env.NEXT_PUBLIC_ENVIRONMENT
|
|
10
|
-
*/
|
|
11
|
-
value: string | undefined;
|
|
12
|
-
/**
|
|
13
|
-
* Zod schema that validates the value of the environment variable.
|
|
14
|
-
* @defaultValue z.string()
|
|
15
|
-
*/
|
|
16
|
-
schema?: ZodType;
|
|
17
|
-
/**
|
|
18
|
-
* Only make environment variable available to server usages.
|
|
19
|
-
* @defaultValue false
|
|
20
|
-
*/
|
|
21
|
-
isServerOnly?: boolean;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
type EnvValues = { [key: string]: EnvValue | EnvValues };
|
|
25
|
-
|
|
26
|
-
type UnwrapEnvValue<T> = T extends EnvValue
|
|
27
|
-
? T extends Required<Pick<EnvValue, 'schema'>>
|
|
28
|
-
? ReturnType<T['schema']['parse']>
|
|
29
|
-
: string
|
|
30
|
-
: T extends Record<string, unknown>
|
|
31
|
-
? { [TKey in keyof T]: UnwrapEnvValue<T[TKey]> }
|
|
32
|
-
: never;
|
|
33
|
-
|
|
34
|
-
type UnwrapEnvValues<TEnvValues extends EnvValues> = {
|
|
35
|
-
[TKey in keyof TEnvValues]: UnwrapEnvValue<TEnvValues[TKey]>;
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- This needs to be here for "prettify" effect
|
|
37
|
-
} & unknown;
|
|
38
|
-
|
|
39
|
-
type CreateEnvironmentOptions<TEnvValues extends EnvValues> = {
|
|
40
|
-
/**
|
|
41
|
-
* Whether or not the application is running on the server.
|
|
42
|
-
* @defaultValue typeof window === 'undefined'
|
|
43
|
-
*/
|
|
44
|
-
isServer?: boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Called when validation fails.
|
|
47
|
-
* Default behaviour: throw Error
|
|
48
|
-
*/
|
|
49
|
-
onValidationError?: (error: ZodError) => never;
|
|
50
|
-
/**
|
|
51
|
-
* Called when a server-side environment variable is accessed on the client.
|
|
52
|
-
* Default behaviour: throw Error
|
|
53
|
-
*/
|
|
54
|
-
onAccessError?: (variableName: string) => never;
|
|
55
|
-
/**
|
|
56
|
-
* The values in the typed environment object.
|
|
57
|
-
*/
|
|
58
|
-
values: TEnvValues;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
function makeValues(values: EnvValues): Record<string, unknown> {
|
|
62
|
-
return Object.entries(values).reduce(
|
|
63
|
-
(prev, [name, obj]) => {
|
|
64
|
-
if ('value' in obj) prev[name] = obj.value || undefined;
|
|
65
|
-
else prev[name] = makeValues(obj);
|
|
66
|
-
return prev;
|
|
67
|
-
},
|
|
68
|
-
{} as Record<string, unknown>,
|
|
69
|
-
);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function makeSchema(values: EnvValues, isServer: boolean): ZodType {
|
|
73
|
-
const o = Object.entries(values).reduce(
|
|
74
|
-
(prev, [name, obj]) => {
|
|
75
|
-
if ('value' in obj) {
|
|
76
|
-
if (!obj.isServerOnly || isServer)
|
|
77
|
-
prev[name] = (obj.schema as ZodType | undefined) ?? z.string();
|
|
78
|
-
} else prev[name] = makeSchema(obj, isServer);
|
|
79
|
-
return prev;
|
|
80
|
-
},
|
|
81
|
-
{} as Record<string, ZodType>,
|
|
82
|
-
);
|
|
83
|
-
return z.object(o);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
function createProxy<TEnvValues extends EnvValues>(
|
|
87
|
-
values: UnwrapEnvValues<TEnvValues>,
|
|
88
|
-
originalValues: EnvValues,
|
|
89
|
-
isServer: boolean,
|
|
90
|
-
onAccessError: (variableName: string) => never,
|
|
91
|
-
prefix?: string,
|
|
92
|
-
): UnwrapEnvValues<TEnvValues> {
|
|
93
|
-
return new Proxy(values, {
|
|
94
|
-
get(target, prop: string) {
|
|
95
|
-
const targetValue = originalValues[prop];
|
|
96
|
-
if (!targetValue) return undefined;
|
|
97
|
-
|
|
98
|
-
const variableName = prefix ? `${prefix}.${prop}` : prop;
|
|
99
|
-
|
|
100
|
-
if (!('value' in targetValue))
|
|
101
|
-
return createProxy(
|
|
102
|
-
values[prop] as UnwrapEnvValues<TEnvValues>,
|
|
103
|
-
originalValues[prop] as EnvValues,
|
|
104
|
-
isServer,
|
|
105
|
-
onAccessError,
|
|
106
|
-
variableName,
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
if (targetValue.isServerOnly && !isServer)
|
|
110
|
-
return onAccessError(variableName);
|
|
111
|
-
|
|
112
|
-
return target[prop];
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
export function createEnvironment<TEnvValues extends EnvValues>(
|
|
118
|
-
opts: CreateEnvironmentOptions<TEnvValues>,
|
|
119
|
-
): UnwrapEnvValues<TEnvValues> {
|
|
120
|
-
const isServer = opts.isServer ?? typeof window === 'undefined';
|
|
121
|
-
|
|
122
|
-
const onValidationError =
|
|
123
|
-
opts.onValidationError ??
|
|
124
|
-
((error: ZodError) => {
|
|
125
|
-
throw new Error(
|
|
126
|
-
`❌ Invalid environment variables: ${error.issues
|
|
127
|
-
.map(({ path, message }) => `${path.join('.')}: ${message}`)
|
|
128
|
-
.join(', ')}`,
|
|
129
|
-
);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
const onAccessError =
|
|
133
|
-
opts.onAccessError ??
|
|
134
|
-
((variableName: string) => {
|
|
135
|
-
throw new Error(
|
|
136
|
-
`❌ Attempted to access server-side environment variable '${variableName}' on the client`,
|
|
137
|
-
);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
const schema = makeSchema(opts.values, isServer);
|
|
141
|
-
const values = makeValues(opts.values);
|
|
142
|
-
|
|
143
|
-
const parsed = schema.safeParse(values);
|
|
144
|
-
if (!parsed.success) return onValidationError(parsed.error);
|
|
145
|
-
|
|
146
|
-
return createProxy(
|
|
147
|
-
parsed.data as UnwrapEnvValues<TEnvValues>,
|
|
148
|
-
opts.values,
|
|
149
|
-
isServer,
|
|
150
|
-
onAccessError,
|
|
151
|
-
);
|
|
152
|
-
}
|
package/test/index.spec.ts
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { describe, expect, expectTypeOf, it } from 'vitest';
|
|
3
|
-
import { createEnvironment } from '../src';
|
|
4
|
-
|
|
5
|
-
describe('environment', () => {
|
|
6
|
-
it('returns a strongly-typed environment object', () => {
|
|
7
|
-
if (false as boolean) {
|
|
8
|
-
const environment = createEnvironment({
|
|
9
|
-
values: {
|
|
10
|
-
environment: {
|
|
11
|
-
value: process.env.NEXT_PUBLIC_ENVIRONMENT,
|
|
12
|
-
schema: z
|
|
13
|
-
.enum(['DEVELOPMENT', 'PREVIEW', 'PRODUCTION'])
|
|
14
|
-
.default('DEVELOPMENT'),
|
|
15
|
-
},
|
|
16
|
-
port: {
|
|
17
|
-
value: process.env.PORT,
|
|
18
|
-
schema: z.coerce.number().int().default(4000),
|
|
19
|
-
isServerOnly: true,
|
|
20
|
-
},
|
|
21
|
-
isFeatureEnabled: {
|
|
22
|
-
value: process.env.NEXT_PUBLIC_IS_FEATURE_ENABLED,
|
|
23
|
-
schema: z.enum(['true', 'false']).transform((s) => s === 'true'),
|
|
24
|
-
},
|
|
25
|
-
baseUrl: {
|
|
26
|
-
self: {
|
|
27
|
-
value: process.env.NEXT_PUBLIC_BASE_URL_SELF,
|
|
28
|
-
schema: z.string().url().default('http://localhost:3000'),
|
|
29
|
-
},
|
|
30
|
-
api: {
|
|
31
|
-
value: process.env.NEXT_PUBLIC_BASE_URL_API,
|
|
32
|
-
schema: z.string().url().default('http://localhost:4000'),
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
database: {
|
|
36
|
-
url: {
|
|
37
|
-
value: process.env.DATABASE_URL,
|
|
38
|
-
schema: z.string().url(),
|
|
39
|
-
isServerOnly: true,
|
|
40
|
-
},
|
|
41
|
-
token: {
|
|
42
|
-
value: process.env.DATABASE_TOKEN,
|
|
43
|
-
isServerOnly: true,
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
expectTypeOf(environment).toEqualTypeOf<{
|
|
50
|
-
environment: 'DEVELOPMENT' | 'PREVIEW' | 'PRODUCTION';
|
|
51
|
-
port: number;
|
|
52
|
-
isFeatureEnabled: boolean;
|
|
53
|
-
baseUrl: {
|
|
54
|
-
self: string;
|
|
55
|
-
api: string;
|
|
56
|
-
};
|
|
57
|
-
database: {
|
|
58
|
-
url: string;
|
|
59
|
-
token: string;
|
|
60
|
-
};
|
|
61
|
-
}>();
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('throws when an environment variable is incorrect', () => {
|
|
66
|
-
expect(() =>
|
|
67
|
-
createEnvironment({
|
|
68
|
-
values: {
|
|
69
|
-
undefined: { value: undefined },
|
|
70
|
-
nestedUndefined: { undefined: { value: undefined } },
|
|
71
|
-
emptyString: { value: '' },
|
|
72
|
-
emptyStringToNumber: { value: '', schema: z.number() },
|
|
73
|
-
emptyStringWithDefault: {
|
|
74
|
-
value: '',
|
|
75
|
-
schema: z.string().default('test'),
|
|
76
|
-
},
|
|
77
|
-
emptyStringToNumberWithDefault: {
|
|
78
|
-
value: '',
|
|
79
|
-
schema: z.number().default(42),
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
}),
|
|
83
|
-
).toThrowErrorMatchingInlineSnapshot(
|
|
84
|
-
'"❌ Invalid environment variables: undefined: Required, nestedUndefined.undefined: Required, emptyString: Required, emptyStringToNumber: Required"',
|
|
85
|
-
);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it('does not throw when accessing a client environment variable and server variables are missing', () => {
|
|
89
|
-
const environment = createEnvironment({
|
|
90
|
-
isServer: false,
|
|
91
|
-
values: {
|
|
92
|
-
correct: { value: 'hello world' },
|
|
93
|
-
incorrect: { value: undefined, isServerOnly: true },
|
|
94
|
-
},
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
expect(environment.correct).toBe('hello world');
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('throws when trying to access server-only variables from the client', () => {
|
|
101
|
-
const values = {
|
|
102
|
-
serverOnly: { value: 'hello', isServerOnly: true },
|
|
103
|
-
notServerOnly: { value: 'world', isServerOnly: false },
|
|
104
|
-
nested: {
|
|
105
|
-
serverOnly: { value: 'helloNested', isServerOnly: true },
|
|
106
|
-
notServerOnly: { value: 'worldNested', isServerOnly: false },
|
|
107
|
-
},
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const clientEnvironment = createEnvironment({ isServer: false, values });
|
|
111
|
-
expect(
|
|
112
|
-
() => clientEnvironment.serverOnly,
|
|
113
|
-
).toThrowErrorMatchingInlineSnapshot(
|
|
114
|
-
'"❌ Attempted to access server-side environment variable \'serverOnly\' on the client"',
|
|
115
|
-
);
|
|
116
|
-
expect(clientEnvironment.notServerOnly).toBe('world');
|
|
117
|
-
expect(
|
|
118
|
-
() => clientEnvironment.nested.serverOnly,
|
|
119
|
-
).toThrowErrorMatchingInlineSnapshot(
|
|
120
|
-
'"❌ Attempted to access server-side environment variable \'nested.serverOnly\' on the client"',
|
|
121
|
-
);
|
|
122
|
-
expect(clientEnvironment.nested.notServerOnly).toBe('worldNested');
|
|
123
|
-
|
|
124
|
-
const serverEnvironment = createEnvironment({ isServer: true, values });
|
|
125
|
-
expect(serverEnvironment.serverOnly).toBe('hello');
|
|
126
|
-
expect(serverEnvironment.notServerOnly).toBe('world');
|
|
127
|
-
expect(serverEnvironment.nested.serverOnly).toBe('helloNested');
|
|
128
|
-
expect(serverEnvironment.nested.notServerOnly).toBe('worldNested');
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
it('parses (nested) environment variables to be in the correct datatype', () => {
|
|
132
|
-
const environment = createEnvironment({
|
|
133
|
-
values: {
|
|
134
|
-
string: { value: 'hello world', schema: z.string() },
|
|
135
|
-
number: { value: '42', schema: z.coerce.number().int() },
|
|
136
|
-
boolean: {
|
|
137
|
-
value: 'true',
|
|
138
|
-
schema: z.enum(['true', 'false']).transform((s) => s === 'true'),
|
|
139
|
-
},
|
|
140
|
-
nested: {
|
|
141
|
-
string: { value: 'nested hello world', schema: z.string() },
|
|
142
|
-
number: { value: '4242', schema: z.coerce.number().int() },
|
|
143
|
-
boolean: {
|
|
144
|
-
value: 'false',
|
|
145
|
-
schema: z.enum(['true', 'false']).transform((s) => s === 'true'),
|
|
146
|
-
},
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
expect(environment.string).toBe('hello world');
|
|
152
|
-
expect(environment.number).toBe(42);
|
|
153
|
-
expect(environment.boolean).toBe(true);
|
|
154
|
-
expect(
|
|
155
|
-
// @ts-expect-error -- testing invalid access
|
|
156
|
-
environment.never,
|
|
157
|
-
).toBe(undefined);
|
|
158
|
-
expect(environment.nested.string).toBe('nested hello world');
|
|
159
|
-
expect(environment.nested.number).toBe(4242);
|
|
160
|
-
expect(environment.nested.boolean).toBe(false);
|
|
161
|
-
});
|
|
162
|
-
});
|
package/tsconfig.json
DELETED
package/vite.config.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('@quintal/config/vite');
|