UNPKG

fcf-framework-core

Version:
1 lines 131 kB
(function(){var fcf=typeof global!=="undefined"&&global.fcf?global.fcf:typeof window!=="undefined"&&window.fcf?window.fcf:{};fcf.NDetails=fcf.NDetails||{};fcf.namespaces=fcf.namespaces||{};if(typeof module!=="undefined")module.exports=fcf;if(typeof global!=="undefined")global.fcf=fcf;if(typeof window!=="undefined")window.fcf=fcf;fcf.isServer=()=>_isServer;const _isServer=typeof module==="object"&&typeof module.filename!=="undefined";if(!fcf.isServer()&&!fcf.NDetails.inlineExecution){fcf.NDetails.inlineExecution={execEnvironment:{functions:{functions:{},items:{}},environment:{},environmentInfo:{parts:{}}},getEnvironment:()=>fcf.NDetails.inlineExecution.execEnvironment,setEnvironment:a_environment=>{fcf.NDetails.inlineExecution.execEnvironment.functions=a_environment.functions;fcf.NDetails.inlineExecution.execEnvironment.environment=a_environment.environment;fcf.NDetails.inlineExecution.execEnvironment.environmentInfo=a_environment.environmentInfo}}}let libResolver,libPath,libFS,libUtil,libState,libLogger;if(_isServer){libResolver=require("./NDetails/resolver.js");libPath=require("path");libFS=require("fs");libUtil=require("util");libInlineInterpreter=require("./NDetails/inlineExecution.js");libLoad=require("./NDetails/load.js");libState=require("./NDetails/state.js");libLogger=require("./NDetails/logger.js")}function _autoParse(a_value){if(typeof a_value=="string"&&a_value.length){let s=0;for(;s<a_value.length&&a_value.charCodeAt(s)<=32;++s);let l=a_value.length-1;for(;l>=0&&a_value.charCodeAt(l)<=32;--l);if(l>=0&&(!isNaN(a_value)||l-s>=1&&a_value[s]=='"'&&a_value[l]=='"'||a_value[s]=="{"&&a_value[l]=="}"||a_value[s]=="["&&a_value[l]=="]"||l-s==3&&a_value[s]=="t"&&a_value[s+1]=="r"&&a_value[s+2]=="u"&&a_value[s+3]=="e"||l-s==4&&a_value[s]=="f"&&a_value[s+1]=="a"&&a_value[s+2]=="l"&&a_value[s+3]=="s"&&a_value[s+4]=="e"||l-s==3&&a_value[s]=="n"&&a_value[s+1]=="u"&&a_value[s+2]=="l"&&a_value[s+3]=="l")){try{let res=JSON.parse(a_value);return res}catch(e){return a_value}}else{return a_value}}else{return a_value}}fcf.str=(a_data,a_fullMode)=>typeof a_data=="string"?a_data:a_data===undefined?"":a_data===null?"":typeof a_data==="number"&&isNaN(a_data)?"":typeof a_data=="object"?a_data instanceof fcf.Exception?fcf.errorToString(a_data,a_fullMode):a_data instanceof Error?fcf.errorToString(a_data,a_fullMode):a_data.sqlMessage&&a_data.sqlState&&a_data.code?a_data.sqlMessage:JSON.stringify(a_data,undefined,2):a_data.toString();fcf.escapeQuotes=(a_str,a_quote)=>{let result="";if(Array.isArray(a_quote)){for(let i=0;i<a_str.length;++i){let c=a_str[i];if(c==="\\"){result+="\\\\"}else if(a_quote.indexOf(c)!=-1){result+="\\";result+=c}else{result+=c}}}else{for(let i=0;i<a_str.length;++i){let c=a_str[i];if(c==="\\"){result+="\\\\"}else if(a_quote&&c===a_quote){result+="\\";result+=a_quote}else if(!a_quote&&c==='"'){result+='\\"'}else if(!a_quote&&c==="'"){result+="\\'"}else{result+=c}}}return result};fcf.unescape=a_data=>{if(typeof a_data=="object"&&a_data!==null){a_data=fcf.clone(a_data);if(Array.isArray(a_data)){for(let key=0;key<a_data.length;++key)a_data[key]=fcf.unescape(a_data[key])}else{for(let key in a_data)a_data[key]=fcf.unescape(a_data[key])}return a_data}else if(typeof a_data=="string"){let result="";let counter=0;for(let i=0;i<a_data.length;++i){let c=a_data[i];if(c=="\\"){++counter;if(counter%2==0)result+=c}else{counter=0;result+=c}}return result}};fcf.replaceAll=(a_str,a_search,a_replacement)=>{a_str=fcf.str(a_str);if(a_str.indexOf(a_search)==-1)return a_str;return a_str.split(a_search).join(a_replacement)};fcf.decodeHtml=a_str=>{a_str=fcf.str(a_str);let zn="0".charCodeAt(0);let nn="9".charCodeAt(0);a_str=fcf.str(a_str);let result="";for(let i=0;i<a_str.length;++i){let c=a_str[i];if(c=="&"){if(a_str[i+1]=="#"){let code="";let p=i+2;for(;p<a_str.length;++p){let c=a_str[p];let cn=a_str.charCodeAt(p);if(cn>=zn&&cn<=nn){code+=c}else{if(c!=";"){--p}break}}if(code.length){result+=String.fromCharCode(parseInt(code));i=p;continue}}else{let p=i+1;let inst="";for(;p<a_str.length;++p){let c=a_str[p];if(c=="&"){--p;break}inst+=c;if(inst in _decodeHtml_map)break;if(inst.length==_decodeHtml_mapMaxLength)break}i=p;if(inst in _decodeHtml_map){if(a_str[i+1]==";")++i;result+=_decodeHtml_map[inst]}else{result+="&";result+=inst}continue}result+=c}else{result+=c}}return result};const _decodeHtml_map={quot:'"',amp:"&",apos:"'",lt:"<",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",bull:"•",infin:"∞",permil:"‰",sdot:"⋅",dagger:"†",mdash:"—",perp:"⊥",par:"∥",euro:"€",trade:"™",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω"};const _decodeHtml_mapMaxLength=7;fcf.encodeHtml=a_str=>{let result="";a_str=fcf.str(a_str);for(let i=0;i<a_str.length;++i){let c=a_str[i];switch(c){case"<":result+="&lt;";break;case">":result+="&gt;";break;case'"':result+="&quot;";break;case"'":result+="&apos;";break;case"&":result+="&amp;";break;default:result+=c;break}}return result};fcf.stripTags=a_str=>fcf.str(a_str).replace(_regStripTags,"");const _regStripTags=new RegExp("(<[^>]*>)","g");fcf.ltrim=(a_str,a_arr)=>{a_str=fcf.str(a_str);let pos=_ltrimPos(a_str,a_arr);return pos!=0?a_str.substr(pos):a_str};fcf.rtrim=(a_str,a_arr)=>{a_str=fcf.str(a_str);let pos=_rtrimPos(a_str,a_arr);return pos!=a_str.length?a_str.substr(0,pos):a_str};fcf.trim=(a_str,a_arr)=>{a_str=fcf.str(a_str);let posBeg=_ltrimPos(a_str,a_arr);let posEnd=_rtrimPos(a_str,a_arr);return posBeg!=0||posEnd!=a_str.length?a_str.substr(posBeg,posEnd-posBeg):a_str};function _rtrimPos(a_str,a_arr){if(!a_str.length)return 0;if(!Array.isArray(a_arr)){a_arr=[a_arr]}let pos=a_str.length-1;for(;pos>=0;--pos){let found=false;for(let i=0;i<a_arr.length;++i){if(!a_arr[i]){let cn=a_str.charCodeAt(pos);if(cn>=0&&cn<=32){found=true;break}}else if(a_str.charAt(pos)==a_arr[i]){found=true;break}}if(!found)break}return pos+1}function _ltrimPos(a_str,a_arr){let pos=0;if(!Array.isArray(a_arr)){a_arr=[a_arr]}for(;pos<a_str.length;++pos){let found=false;for(let i=0;i<a_arr.length;++i){if(!a_arr[i]){let cn=a_str.charCodeAt(pos);if(cn>=0&&cn<=32){found=true;break}}else if(a_str.charAt(pos)===a_arr[i]){found=true;break}}if(!found)break}return pos}fcf.pad=(a_str,a_len,a_fill,a_align)=>{if(isNaN(a_len))return a_str;let fillLen=a_len-a_str.length;if(fillLen<=0)return a_str;if(!a_fill)a_fill=" ";if(typeof a_align!=="string")a_align="l";let leftLen=a_align[0]=="r"?fillLen:a_align[0]=="c"?Math.floor(fillLen/2):0;let rightLen=a_align[0]=="r"?0:a_align[0]=="c"?Math.floor(fillLen/2)+fillLen%2:fillLen;let result="";for(let i=0;i<leftLen;++i){result+=a_fill[i%a_fill.length]}result+=a_str;for(let i=0;i<rightLen;++i){result+=a_fill[i%a_fill.length]}return result};fcf.id=(a_size,a_safeFirstChar)=>{a_size=a_size||32;a_safeFirstChar=a_safeFirstChar===undefined?true:a_safeFirstChar;let result="";for(let i=0;i<a_size;++i){result+=i||!a_safeFirstChar?Math.floor(Math.random()*16).toString(16):"abcdef"[Math.floor(Math.random()*6)]}return result};fcf.uuid=()=>{let res="";for(let i=0;i<36;++i){if(i==8||i==13||i==18||i==23){res+="-"}else if(i==14){res+="4"}else if(i==19){res+=((Math.random()*16|0)&3|8).toString(16)}else{res+=(Math.random()*16|0).toString(16)}}return res};fcf.decodeBase64=function(a_input){function utf8Decode(utftext){let string="";let i=0;let c=0;let c1=0;let c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++}else if(c>191&&c<224){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode((c&31)<<6|c2&63);i+=2}else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode((c&15)<<12|(c2&63)<<6|c3&63);i+=3}}return string}let output="";let chr1,chr2,chr3;let enc1,enc2,enc3,enc4;let i=0;a_input=fcf.str(a_input).replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<a_input.length){enc1=_keyBase64.indexOf(a_input.charAt(i++));enc2=_keyBase64.indexOf(a_input.charAt(i++));enc3=_keyBase64.indexOf(a_input.charAt(i++));enc4=_keyBase64.indexOf(a_input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}output=utf8Decode(output);return output};fcf.encodeBase64=function(a_input){function utf8Encode(a_string){a_string=a_string.replace(/\r\n/g,"\n");let utftext="";for(let n=0;n<a_string.length;n++){let c=a_string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c)}else if(c>127&&c<2048){utftext+=String.fromCharCode(c>>6|192);utftext+=String.fromCharCode(c&63|128)}else{utftext+=String.fromCharCode(c>>12|224);utftext+=String.fromCharCode(c>>6&63|128);utftext+=String.fromCharCode(c&63|128)}}return utftext}let output="";let chr1,chr2,chr3,enc1,enc2,enc3,enc4;let i=0;a_input=utf8Encode(fcf.str(a_input));while(i<a_input.length){chr1=a_input.charCodeAt(i++);chr2=a_input.charCodeAt(i++);chr3=a_input.charCodeAt(i++);enc1=chr1>>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+_keyBase64.charAt(enc1)+_keyBase64.charAt(enc2)+_keyBase64.charAt(enc3)+_keyBase64.charAt(enc4)}return output};const _keyBase64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";fcf.isObject=a_value=>typeof a_value==="object"&&a_value!==null;fcf.isIterable=a_value=>typeof a_value==="object"&&a_value!==null?typeof a_value[Symbol.iterator]==="function":false;fcf.isNumbered=a_value=>{if(typeof a_value!=="object"||a_value===null)return false;if(typeof a_value[Symbol.iterator]!=="function"||typeof a_value.length!=="number")return false;if(a_value.length>0){return 0 in a_value}else{for(let v of a_value){return false}return true}};Object.defineProperty(fcf,"UNDEFINED",{value:0,writable:false});Object.defineProperty(fcf,"NULL",{value:1,writable:false});Object.defineProperty(fcf,"NAN",{value:2,writable:false});Object.defineProperty(fcf,"BOOLEAN",{value:3,writable:false});Object.defineProperty(fcf,"NUMBER",{value:4,writable:false});Object.defineProperty(fcf,"STRING",{value:5,writable:false});Object.defineProperty(fcf,"DATE",{value:6,writable:false});Object.defineProperty(fcf,"OBJECT",{value:7,writable:false});Object.defineProperty(fcf,"ARRAY",{value:8,writable:false});Object.defineProperty(fcf,"ITERABLE",{value:9,writable:false});Object.defineProperty(fcf,"NUMBERED",{value:10,writable:false});Object.defineProperty(fcf,"ENUM",{value:11,writable:false});Object.defineProperty(fcf,"SET",{value:12,writable:false});Object.defineProperty(fcf,"ANY",{value:-1,writable:false});fcf.isNature=(a_value,a_nature,a_softMode)=>{let l=Array.isArray(a_nature)?a_nature.length:1;for(let i=0;i<l;++i){let nature=Array.isArray(a_nature)?a_nature[i]:a_nature;if(typeof nature=="string"){nature=nature=="numbered"?fcf.NUMBERED:nature=="iterable"?fcf.ITERABLE:nature=="array"?fcf.ARRAY:nature=="object"?fcf.OBJECT:nature=="date"?fcf.DATE:nature=="string"?fcf.STRING:nature=="number"?fcf.NUMBER:nature=="boolean"?fcf.BOOLEAN:nature=="nan"?fcf.NAN:nature=="null"?fcf.NULL:fcf.UNDEFINED}switch(nature){case fcf.NUMBERED:if(fcf.isNumbered(a_value))return true;break;case fcf.ITERABLE:if(fcf.isIterable(a_value))return true;break;case fcf.ARRAY:if(Array.isArray(a_value))return true;break;case fcf.OBJECT:if(typeof a_value=="object"&&a_value!==null&&!(a_value instanceof Date))return true;break;case fcf.DATE:if(a_value instanceof Date)return true;if(a_softMode&&typeof a_value=="string"&&!isNaN(new Date(a_value).getTime()))return true;break;case fcf.STRING:if(typeof a_value==="string")return true;break;case fcf.NUMBER:if(typeof a_value==="number"&&!isNaN(a_value))return true;if(a_softMode&&!isNaN(a_value)&&!isNaN(parseFloat(a_value)))return true;break;case fcf.BOOLEAN:if(typeof a_value==="boolean")return true;break;case fcf.NAN:if(typeof a_value==="number"&&isNaN(a_value))return true;break;case fcf.NULL:if(a_value===null)return true;break;case fcf.UNDEFINED:if(a_value===undefined)return true;break}}return false};fcf.nature=(a_value,a_nature,a_softMode)=>{if(fcf.isNature(a_value,a_nature,a_softMode)){return a_value}};const DEFAULT_TYPE_DESCRIPTION={};function _typeToString(a_type){if(typeof a_type=="number"){switch(a_type){case fcf.UNDEFINED:return"undefined";case fcf.NULL:return"null";case fcf.NAN:return"nan";case fcf.BOOLEAN:return"boolean";case fcf.NUMBER:return"number";case fcf.STRING:return"string";case fcf.DATE:return"date";case fcf.OBJECT:return"object";case fcf.ARRAY:return"array";case fcf.ITERABLE:return"iterable";case fcf.NUMBERED:return"numbered";case fcf.ENUM:return"enum";default:return a_type.toString()}}else{return a_type.toString()}}fcf.type=(a_type,a_description)=>{if(a_type._valid){return a_type}if(!a_type){a_type=fcf.ANY}if(typeof a_type=="object"&&!Array.isArray(a_type)){a_description=a_type;a_type=a_description.type}a_description=a_description||DEFAULT_TYPE_DESCRIPTION;let type={require:a_description.require,convert:a_description.convert};if("default"in a_description){type.default=a_description.default}if(!Array.isArray(a_type)){switch(a_type){case fcf.ANY:case"any":type.type=fcf.ANY;break;case fcf.UNDEFINED:case"undefined":type.type=fcf.UNDEFINED;break;case fcf.NULL:case"null":type.type=fcf.NULL;break;case fcf.NAN:case"nan":type.type=fcf.NAN;break;case fcf.BOOLEAN:case"boolean":type.type=fcf.BOOLEAN;break;case fcf.NUMBER:case"number":type.type=fcf.NUMBER;type.min=a_description.min;type.max=a_description.max;break;case fcf.STRING:case"string":type.type=fcf.STRING;type.length=a_description.length;type.minLength=a_description.minLength;type.maxLength=a_description.maxLength;break;case fcf.DATE:case"date":type.type=fcf.DATE;break;case fcf.ARRAY:case"array":type.type=fcf.ARRAY;type.item=a_description.item?fcf.type(a_description.item):fcf.type(fcf.ANY);break;case fcf.NUMBERED:case"numbered":type.type=fcf.NUMBERED;type.item=a_description.item?fcf.type(a_description.item):fcf.type(fcf.ANY);break;case fcf.OBJECT:case"object":type.type=fcf.OBJECT;type.fields={};if(a_description.fields&&typeof a_description.fields=="object"){for(let key in a_description.fields){type.fields[key]=fcf.type(a_description.fields[key])}}type.undeclared=a_description.undeclared===false?a_description.undeclared:a_description.undeclared===true?fcf.type(fcf.ANY):a_description.undeclared||a_description.undeclared===fcf.UNDEFINED?fcf.type(a_description.undeclared):undefined;break;case fcf.ITERABLE:case"iterable":type.type=fcf.ITERABLE;type.item=a_description.item?fcf.type(a_description.item):fcf.type(fcf.ANY);break;case fcf.ENUM:case"enum":type.type=fcf.ENUM;type.items={};if(Array.isArray(a_description.items)){for(const v of a_description.items){if(!type.items[v]){type.items[v]=[]}type.items[v].push(v)}}break;case fcf.SET:case"set":type.type=fcf.SET;type.items={};if(Array.isArray(a_description.items)){for(const v of a_description.items){if(!type.items[v]){type.items[v]=[]}type.items[v].push(v)}}break;default:throw new fcf.Exception("UNKNOWN_TYPE",{type:a_type});break}}else{type.type=-100;type.types=[];for(let t of a_type){type.types.push(fcf.type(t))}}Object.defineProperty(type,"_valid",{value:1,enumerable:false});return type};const _createIterable=a_value=>{if(Array.isArray(a_value)||a_value instanceof Map||a_value instanceof Set){return new a_value.__proto__.constructor}else{return{}}};const _buildType=(a_type,a_value,a_options,a_resultInfo,a_rootType,a_forceError)=>{switch(a_type.type){case fcf.UNDEFINED:if(a_value===undefined){a_resultInfo.error=false;break}a_resultInfo.error=1;if(a_rootType){a_resultInfo.types=["undefined"]}break;case fcf.NULL:if(a_value===null){a_resultInfo.error=false;break}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["null"]}break;case fcf.NAN:if(typeof a_value==="number"&&isNaN(a_value)){a_resultInfo.error=false;break}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["nan"]}break;case fcf.BOOLEAN:let value=a_value;if(typeof a_value!=="boolean"&&a_type.convert){value=!!a_value}if(typeof value==="boolean"){a_resultInfo.error=false;a_value=value;break}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["boolean"]}break;case fcf.NUMBER:{let value=a_value;if(typeof a_value!=="number"&&a_type.convert){value=Number(a_value)}if(typeof value==="number"&&!isNaN(value)){if(a_type.min!==undefined&&value<a_type.min){let path=fcf.normalizeObjectAddress(a_resultInfo.path);throw new fcf.Exception("NUMBER_MIN",{value:a_value,min:a_type.min,path:path})}else if(a_type.max!==undefined&&value>a_type.max){let path=fcf.normalizeObjectAddress(a_resultInfo.path);throw new fcf.Exception("NUMBER_MAX",{value:a_value,max:a_type.max,path:path})}else{a_resultInfo.error=false;a_value=value;break}}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["number"]}}break;case fcf.STRING:{let value=a_value;if(typeof a_value!=="string"&&a_type.convert){value=fcf.str(a_value)}if(typeof value==="string"){if(a_type.length!==undefined&&a_type.length!=value.length){let path=fcf.normalizeObjectAddress(a_resultInfo.path);throw new fcf.Exception("STRING_LENGTH",{currentLength:value.length,length:a_type.length,path:path})}else if(a_type.minLength!==undefined&&value.length<a_type.minLength){let path=fcf.normalizeObjectAddress(a_resultInfo.path);throw new fcf.Exception("STRING_MIN_LENGTH",{currentLength:value.length,minLength:a_type.minLength,path:path})}else if(a_type.maxLength!==undefined&&value.length>a_type.maxLength){let path=fcf.normalizeObjectAddress(a_resultInfo.path);throw new fcf.Exception("STRING_MAX_LENGTH",{currentLength:value.length,maxLength:a_type.maxLength,path:path})}a_resultInfo.error=false;a_value=value;break}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["string"]}}break;case fcf.DATE:{let value=a_value;if(!(a_value instanceof Date)&&a_type.convert){value=new Date(a_value)}if(value instanceof Date&&!isNaN(value.getTime())){a_resultInfo.error=false;a_value=value;break}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["date"]}}break;case-100:a_resultInfo.error=false;for(let t of a_type.types){let value=_buildType(t,a_value,a_options,a_resultInfo,false,false);if(!a_resultInfo.error){a_value=value;break}}if(a_resultInfo.error==1){a_resultInfo.types=a_type.types.map((a_type=>{if(a_type.type==fcf.ENUM){let v=[];for(let k in a_type.items){for(let itm of a_type.items[k]){v.push(JSON.stringify(itm))}}let tstr="enum[";tstr+=v.join(";");tstr+="]";return tstr}else{return _typeToString(a_type.type)}}))}break;case fcf.ARRAY:case fcf.NUMBERED:const check=a_type.type==fcf.ARRAY?Array.isArray(a_value):fcf.isNumbered(a_value);if(check){let value=[];a_resultInfo.error=false;for(let i=0;i<a_value.length;++i){a_resultInfo.path.push(i.toString());let item=_buildType(a_type.item,a_value[i],a_options,a_resultInfo,true,false);if(!a_resultInfo.error){value[i]=item}else{let path=fcf.normalizeObjectAddress(a_resultInfo.path);if(a_resultInfo.error==1){throw new fcf.Exception("NOT_MATCH_TYPE",{path:path,types:a_resultInfo.types?a_resultInfo.types:[]})}else{throw new fcf.Exception("FIELD_NOT_SET",{path:path})}}a_resultInfo.path.pop()}a_value=value}else{a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=[a_type.type==fcf.ARRAY?"array":"numbered"]}}break;case fcf.OBJECT:if(a_value&&typeof a_value=="object"){let value={};a_resultInfo.error=false;for(let name in a_type.fields){a_resultInfo.path.push(name);let item=_buildType(a_type.fields[name],a_value[name],a_options,a_resultInfo,true,false);if(a_resultInfo.error==2&&!a_type.fields[name].require){a_resultInfo.error=0;a_resultInfo.path.pop();continue}else if(!a_resultInfo.error){value[name]=item}else{let path=fcf.normalizeObjectAddress(a_resultInfo.path);if(a_resultInfo.error==1){throw new fcf.Exception("NOT_MATCH_TYPE",{path:path,types:a_resultInfo.types?a_resultInfo.types:[]})}else{throw new fcf.Exception("FIELD_NOT_SET",{path:path})}}a_resultInfo.path.pop()}if(a_type.undeclared===false){for(let name in a_value){if(!(name in a_type.fields)){let path=fcf.normalizeObjectAddress(a_resultInfo.path);throw new fcf.Exception("UNDECLARED_FIELD",{path:path,field:name});break}}}else if(a_type.undeclared&&typeof a_type.undeclared=="object"){for(let name in a_value){if(!(name in a_type.fields)){a_resultInfo.path.push(name);let item=_buildType(a_type.undeclared,a_value[name],a_options,a_resultInfo,true,false);if(!a_resultInfo.error){value[name]=item}else{let path=fcf.normalizeObjectAddress(a_resultInfo.path);if(a_resultInfo.error==1){throw new fcf.Exception("NOT_MATCH_TYPE",{path:path,types:a_resultInfo.types?a_resultInfo.types:[]})}else{throw new fcf.Exception("FIELD_NOT_SET",{path:path})}}a_resultInfo.path.pop()}}}a_value=value}else{a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["object"]}}break;case fcf.ITERABLE:if(fcf.isIterable(a_value)){a_resultInfo.error=false;let value=_createIterable(a_value);fcf.each(a_value,((key,item)=>{a_resultInfo.path.push(key.toString());let newItem={};newItem[key]=_buildType(a_type.item,item,a_options,a_resultInfo,true,true);fcf.append(value,newItem);if(a_resultInfo.error){let path=fcf.normalizeObjectAddress(a_resultInfo.path);if(a_resultInfo.error==1){throw new fcf.Exception("NOT_MATCH_TYPE",{path:path,types:a_resultInfo.types?a_resultInfo.types:[]})}else{throw new fcf.Exception("FIELD_NOT_SET",{path:path})}}a_resultInfo.path.pop()}));a_value=value}else{a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){a_resultInfo.types=["array"]}}break;case fcf.SET:{let value=a_value;if(typeof a_value=="string"){let emp=true;value=[];for(let c of a_value){if(emp){emp=false;value.push("")}if(c=="|"||c==";"){emp=true}else{value[value.length-1]+=c}}}if(Array.isArray(value)){value=[...value]}if(Array.isArray(value)){let valid=true;for(let i of value){if(!(i in a_type.items)){valid=false;break}}if(valid){a_resultInfo.error=false;a_value=value;break}}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){let v=[];for(let k in a_type.items){for(let itm of a_type.items[k]){v.push(JSON.stringify(itm))}}let tstr="set[";tstr+=v.join(";");tstr+="]";a_resultInfo.types=[tstr]}}break;case fcf.ENUM:{let found=false;if(a_value in a_type.items){for(let v of a_type.items[a_value]){let eq=a_type.convert?v==a_value:v===a_value;if(eq){a_resultInfo.error=false;a_value=v;found=true;break}}}if(found){break}a_resultInfo.error=a_value===undefined?2:1;if(a_rootType){let v=[];for(let k in a_type.items){for(let itm of a_type.items[k]){v.push(JSON.stringify(itm))}}let tstr="enum[";tstr+=v.join(";");tstr+="]";a_resultInfo.types=[tstr]}}break}if(a_resultInfo.error&&!a_forceError){if("default"in a_type){a_resultInfo.error=false;return a_type.default}else{return}}else{return a_value}};fcf.build=(a_type,a_value,a_options)=>{if(!a_type._valid){a_type=type(a_type)}let resultInfo={error:false,path:[]};a_value=_buildType(a_type,a_value,a_options,resultInfo,true,false);if(resultInfo.error==1){throw new fcf.Exception("NOT_MATCH_TYPE",{path:"",types:resultInfo.types?resultInfo.types:[]})}else if(resultInfo.error==2){throw new fcf.Exception("FIELD_NOT_SET",{path:""})}return a_value};fcf.empty=a_object=>{if(a_object===undefined||a_object===null){return true}else if(typeof a_object==="number"){return isNaN(a_object)}else if(typeof a_object==="string"){return a_object===""}else if(a_object instanceof Error){return false}else if(a_object instanceof Date){return isNaN(a_object.getTime())}else if(fcf.isIterable(a_object)){for(let v of a_object)return false;return true}else if(typeof a_object==="object"){for(var k in a_object)return false;return true}return false};fcf.has=(a_object,a_key)=>{if(typeof a_object!=="object"||a_object===null){return false}if(fcf.isIterable(a_object)&&typeof a_object.has=="function"){return a_object.has(a_key)}if(fcf.isNumbered(a_object)){a_key=parseInt(a_key);return a_key>=0&&a_key<a_object.length}return a_key in a_object};fcf.get=(a_object,a_key)=>{if(typeof a_object!=="object"||a_object===null){return}if(a_object instanceof Set){return a_object.has(a_key)?a_key:undefined}if(a_object instanceof Map){return a_object.get(a_key)}return a_object[a_key]};fcf.equal=(a_left,a_right,a_strict)=>{if(!_equalObject(a_left,a_right,a_strict))return false;if(typeof a_left=="object")return _equalObject(a_right,a_left,a_strict);return true};function _equalObject(a_left,a_right,a_strict){if(Array.isArray(a_left)){if(!Array.isArray(a_right))return false;if(a_left.length!=a_right.length)return false;for(let i=0;i<a_left.length;++i){if(!fcf.equal(a_left[i],a_right[i],a_strict))return false}}else if(a_left instanceof Date||a_right instanceof Date){if(!(a_left instanceof Date)||!(a_right instanceof Date)){return false}else{if(isNaN(a_left.getTime())&&isNaN(a_right.getTime()))return true;return a_left.getTime()==a_right.getTime()}}else if(typeof a_left==="object"&&a_left!==null){if(typeof a_right!=="object"||a_right==null)return false;if(Array.isArray(a_right))return false;if(a_strict&&a_left.constructor!=a_right.constructor){return false}let fastResult;fastResult=fcf.each(a_left,((a_key,a_value)=>{if(a_value!==undefined&&!fcf.has(a_right,a_key))return false;if(!_equalObject(a_value,fcf.get(a_right,a_key),a_strict))return false})).result();if(fastResult!==undefined)return fastResult;fastResult=fcf.each(a_right,((a_key,a_value)=>{if(a_value!==undefined&&!fcf.has(a_left,a_key)){return false}})).result();if(fastResult!==undefined)return false}else{if(typeof a_left=="number"&&isNaN(a_left)&&typeof a_right=="number"&&isNaN(a_right)){return true}if(a_strict){if(a_left!==a_right){return false}}else{if(a_left!=a_right){return false}}}return true}fcf.compare=(a_left,a_right,a_strict)=>{let c=_compareObject(a_left,a_right,a_strict);if(c)return c;c=_compareObject(a_right,a_left,a_strict);return c==0?0:c<0?1:-1};function _compareObject(a_left,a_right,a_strict){if(Array.isArray(a_left)){if(!Array.isArray(a_right)){return 1}if(a_left.length!=a_right.length){return a_left.length<a_right.length?-1:1}for(let i=0;i<a_left.length;++i){let c=fcf.compare(a_left[i],a_right[i],a_strict);if(c){return c}}return 0}else if(typeof a_left==="object"&&a_left!==null&&!(a_left instanceof Date)){if(typeof a_right!=="object"||a_right==null){return 1}if(Array.isArray(a_right)){return-1}if(a_strict){if(a_left.constructor>a_right.constructor){return 1}else if(a_left.constructor<a_right.constructor){return-1}}let fastResult;fastResult=fcf.each(a_left,((a_key,a_value)=>{if(a_value!==undefined&&!fcf.has(a_right,a_key)){return 1}let c=fcf.compare(a_value,fcf.get(a_right,a_key),a_strict);if(c)return c})).result();if(fastResult)return fastResult;fastResult=fcf.each(a_right,((a_key,a_value)=>{if(a_value!==undefined&&!fcf.has(a_left,a_key))return-1})).result();if(fastResult)return-1;return 0}else{if(!a_strict){if(a_left===undefined||a_left===null||a_left===0||a_left===false){if(a_right===undefined||a_right===null||a_right===0||a_right===false){return 0}else if(typeof a_right=="string"){let tr=fcf.trim(a_right);if(tr==""||tr=="0")return 0}}if(a_right===undefined||a_right===null||a_right===0||a_right===false){if(a_left===undefined||a_left===null||a_left===0||a_left===false){return 0}else if(typeof a_left=="string"){let tr=fcf.trim(a_left);if(tr==""||tr=="0")return 0}}}let t1=a_left instanceof Date?"date":typeof a_left;let t2=a_right instanceof Date?"date":typeof a_right;if(!a_strict&&(typeof a_left=="number"||typeof a_right=="number")){if(typeof a_left!="number"){a_left=parseFloat(a_left);t1="number"}if(isNaN(a_left)){t1="nan"}if(typeof a_right!="number"){a_right=parseFloat(a_left);t2="number"}if(isNaN(a_right)){t2="nan"}}let tc1=_compareWeights[t1];let tc2=_compareWeights[t2];if(t1=="nan"&&t2=="nan"){return 0}else if(!a_strict&&a_left==a_right){return 0}else if(tc1==tc2){if(a_left instanceof Date){a_left=a_left.getTime();a_right=a_right.getTime();if(isNaN(a_left)&&isNaN(a_right))return 0}if(a_left==a_right)return 0;if(a_left<a_right)return-1;return 1}else if(tc1>tc2){return 1}else{return-1}}}const _compareWeights={undefined:0,null:1,nan:2,boolean:3,number:4,string:5,date:6,object:7,array:8};fcf.count=(a_object,a_cb)=>{if(!a_cb){if(typeof a_object=="object"&&a_object!==null){if(fcf.isNumbered(a_object)){return a_object.length}else if(a_object instanceof Map||a_object instanceof Set){return a_object.size}else{let count=0;for(let k in a_object)++count;return count}}else if(typeof a_object=="string"){return a_object.length}else{return 0}}else{let res=0;fcf.each(a_object,((a_key,a_val)=>{if(a_cb(a_key,a_val)){++res}}));return res}};fcf.each=(a_obj,a_cb)=>{let asyncResult;let result=undefined;if(fcf.isNumbered(a_obj)&&(a_obj&&typeof a_obj=="object"&&typeof a_obj.forEach!="function")){for(let i=0;i<a_obj.length;++i){result=a_cb(i,a_obj[i]);if(result instanceof Promise||result instanceof fcf.Actions){let index=i+1;let currentResult=result;result=asyncResult?asyncResult:fcf.actions();let actions=fcf.actions();let act=undefined;result.then(((a_res,a_act)=>{act=a_act}));function doAction(){actions.then((()=>{if(index<a_obj.length)return a_cb(index,a_obj[index])})).then((a_res=>{++index;if(a_res===undefined&&index<a_obj.length){doAction()}else{act.complete(a_res)}})).catch((e=>{act.error(e)}))}currentResult.then((a_res=>{if(a_res===undefined){doAction()}else{act.complete(a_res)}})).catch((e=>{act.error(e)}));break}else if(result!==undefined){break}}}else if(typeof a_obj==="object"&&a_obj!==null){let asyncEnable=false;let asyncKeys=[];let index=0;if(typeof a_obj.forEach==="function"){let breakLoop=false;a_obj.forEach(((a_value,a_key)=>{if(breakLoop){return}if(asyncEnable){asyncKeys.push([a_key,a_value])}else{result=a_cb(a_key,a_value);if(result instanceof Promise||result instanceof fcf.Actions){asyncEnable=true}else if(result!==undefined){breakLoop=true;return true}}}))}else{for(let k in a_obj){if(asyncEnable){asyncKeys.push([k,a_obj[k]])}else{result=a_cb(k,a_obj[k]);if(result instanceof Promise||result instanceof fcf.Actions){asyncEnable=true}else if(result!==undefined){break}}}}if(asyncEnable){let currentResult=result;result=asyncResult?asyncResult:fcf.actions();let actions=fcf.actions();let act=undefined;result.then(((a_res,a_act)=>{act=a_act}));function doAction(){actions.then((()=>{if(index<asyncKeys.length)return a_cb(asyncKeys[index][0],asyncKeys[index][1])})).then((a_res=>{++index;if(a_res===undefined&&index<asyncKeys.length){doAction()}else{act.complete(a_res)}})).catch((e=>{act.error(e)}))}currentResult.then((a_res=>{if(a_res===undefined){doAction()}else{act.complete(a_res)}})).catch((e=>{act.error(e)}))}}return(result instanceof fcf.Actions?result:fcf.actions().result(result)).options({quiet:true}).exception()};fcf.append=(...args)=>{let startArg=typeof args[0]==="boolean"?1:0;let req=typeof args[0]==="boolean"&&args[0];if(Array.isArray(args[startArg])){for(let j=startArg+1;j<args.length;++j){if(req){if(Array.isArray(args[j])){for(let i=0;i<args[j].length;++i){let itm=args[j][i]===null?null:args[j][i]instanceof Date?new Date(args[j][i]):Array.isArray(args[j][i])?fcf.append(true,[],args[j][i]):typeof args[j][i]==="object"?fcf.append(true,new args[j][i].__proto__.constructor,args[j][i]):args[j][i];args[startArg].push(itm)}}else{fcf.each(args[j],((a_key,a_value)=>{let itm=a_value===null?null:a_value instanceof Date?new Date(a_value):Array.isArray(a_value)?fcf.append(true,[],a_value):typeof a_value==="object"?fcf.append(true,new a_value.__proto__.constructor,a_value):a_value;args[startArg].push(itm)}))}}else{if(Array.isArray(args[j])){for(let i=0;i<args[j].length;++i){args[startArg].push(args[j][i])}}else{fcf.each(args[j],((a_key,a_value)=>{args[startArg].push(a_value)}))}}}}else if(args[startArg]instanceof Set){for(let j=startArg+1;j<args.length;++j){if(typeof args[j]!=="object"||args[j]===null)continue;if(args[j]instanceof Set){for(let key of args[j]){args[startArg].add(key)}}else{fcf.each(args[j],((a_key,a_value)=>{args[startArg].add(a_value)}))}}}else if(args[startArg]instanceof Map){for(let j=startArg+1;j<args.length;++j){if(typeof args[j]!=="object"||args[j]===null)continue;if(req){if(args[j]instanceof Map){for(let pair of args[j]){args[startArg].set(pair[0],cloneValue(pair[1]))}}else{fcf.each(args[j],((a_key,a_value)=>{args[startArg].set(a_key,cloneValue(a_value))}))}}else{if(args[j]instanceof Map){for(let pair of args[j]){args[startArg].set(pair[0],pair[1])}}else{fcf.each(args[j],((a_key,a_value)=>{args[startArg].set(a_key,a_value)}))}}}}else if(typeof args[startArg]==="object"&&args[startArg]!==null){for(let j=startArg+1;j<args.length;++j){if(typeof args[j]!=="object"||args[j]===null)continue;if(req){if(!Array.isArray(args[j])&&!(args[j]instanceof Map)&&!(args[j]instanceof Set)){for(let key of Object.getOwnPropertyNames(args[j])){args[startArg][key]=cloneValue(args[j][key])}}else{fcf.each(args[j],((a_key,a_value)=>{args[startArg][a_key]=cloneValue(a_value)}))}}else{if(!Array.isArray(args[j])&&!(args[j]instanceof Map)&&!(args[j]instanceof Set)){for(let key of Object.getOwnPropertyNames(args[j])){args[startArg][key]=args[j][key]}}else{fcf.each(args[j],((a_key,a_value)=>{args[startArg][a_key]=a_value}))}}}}return args[startArg]};const cloneValue=a_source=>{if(a_source===null){return null}else if(a_source instanceof Date){return new Date(a_source)}else if(Array.isArray(a_source)){return fcf.append(true,[],a_source)}else if(typeof a_source==="object"){let base;try{base=new a_source.__proto__.constructor}catch(e){base={}}return fcf.append(true,base,a_source)}else{return a_source}};fcf.clone=a_object=>{if(a_object===null){return null}else if(Array.isArray(a_object)){return fcf.append(true,[],a_object)}else if(a_object instanceof Date){return new Date(a_object)}else if(typeof a_object=="object"){let base;try{base=new a_object.__proto__.constructor}catch(e){base={}}return fcf.append(true,base,a_object)}else{return a_object}};fcf.parseObjectAddress=(a_path,a_exMode)=>{if(Array.isArray(a_path)){let result=[];for(let part of a_path){if(a_exMode){result.push(typeof part=="object"?part:{part:part,array:false})}else{result.push(typeof part=="object"?part.part:part)}}return result}let state=0;let isa=false;let result=[];let buf="";let i=0;while(i<a_path.length){switch(state){case-1:{while(i<a_path.length){if(a_path.charCodeAt(i)<=32){++i;break}if(a_path[i]=="."){state=0;++i;break}else if(a_path[i]=="["){++i;while(i<a_path.length){if(a_path.charCodeAt(i)<=32){++i;continue}if(a_path[i]=="["&&!isa){isa=true;++i;continue}else if(a_path[i]=='"'){++i;state=2;break}else if(a_path[i]=="'"){++i;state=3;break}else{state=1;break}}break}else{state=0;break}}}break;case 0:{let start=true;while(true){if(a_path[i]=="."){let rpos=buf.length-1;while(rpos>=0&&buf.charCodeAt(rpos)<=32){--rpos}if(rpos!=buf.length-1){buf=buf.substring(0,rpos+1)}if(a_exMode)result.push({part:buf,array:isa});else result.push(buf);isa=false;buf="";state=-1;break}else if(a_path[i]=="["){let rpos=buf.length-1;while(rpos>=0&&buf.charCodeAt(rpos)<=32){--rpos}if(rpos!=buf.length-1){buf=buf.substring(0,rpos+1)}if(buf.length||result.length){if(a_exMode)result.push({part:buf,array:isa});else result.push(buf)}isa=false;buf="";state=-1;break}else if(i+1>=a_path.length){buf+=a_path[i];let rpos=buf.length-1;while(rpos>=0&&buf.charCodeAt(rpos)<=32){--rpos}if(rpos!=buf.length-1){buf=buf.substring(0,rpos+1)}if(a_exMode)result.push({part:buf,array:isa});else result.push(buf);isa=false;buf="";++i;break}if(start){if(a_path.charCodeAt(i)>32){buf+=a_path[i];start=false}}else{buf+=a_path[i]}++i}}break;case 1:{while(true){if(a_path[i]=="]"){let rpos=buf.length-1;while(rpos>=0&&buf.charCodeAt(rpos)<=32){--rpos}if(rpos!=buf.length-1){buf=buf.substring(0,rpos+1)}if(a_exMode)result.push({part:buf,array:isa});else result.push(buf);buf="";state=-1;if(isa){++i;while(true){if(i>=a_path.length){break}if(a_path[i]=="]"){++i;break}++i}}else{++i}isa=false;break}else if(i+1>=a_path.length){buf+=a_path[i];let rpos=buf.length-1;while(rpos>=0&&buf.charCodeAt(rpos)<=32){--rpos}if(rpos!=buf.length-1){buf=buf.substring(0,rpos+1)}if(a_exMode)result.push({part:buf,array:isa});else result.push(buf);isa=false;buf="";++i;break}buf+=a_path[i];++i}}break;case 2:case 3:{let sc=0;let stopChar=state==2?'"':"'";while(true){if(a_path[i]==stopChar&&!(sc%2)){if(a_exMode)result.push({part:buf,array:isa});else result.push(buf);buf="";state=-1;while(i<a_path.length){if(a_path[i]=="]"){++i;break}++i}if(isa){while(i<a_path.length){if(a_path[i]=="]"){++i;break}++i}}isa=false;break}if(i+1>=a_path.length){buf+=a_path[i];if(a_exMode)result.push({part:buf,array:isa});else result.push(buf);isa=false;buf="";state=-1;++i;break}if(a_path[i]=="\\"){if(sc%2){buf+=a_path[i]}++sc}else{buf+=a_path[i];sc=0}++i}}break}}if(!result.length){if(a_exMode){result.push({part:"",array:false})}else{result.push("")}}return result};fcf.normalizeObjectAddress=a_path=>{var arr=fcf.parseObjectAddress(a_path,true);var result="";for(var i=0;i<arr.length;++i){let key;let isa;if(typeof arr[i]=="object"){key=arr[i].part;isa=arr[i].array}else{key=arr[i];isa=false}key=fcf.escapeQuotes(key,'"');if(!isa){result+='["'+key+'"]'}else{result+='[["'+key+'"]]'}}return result};fcf.resolve=(a_obj,a_path,a_quiet)=>{let path=fcf.parseObjectAddress(a_path);for(let i=0;i<path.length;++i){if(typeof a_obj!="object"&&typeof a_obj!="function"||a_obj[path[i]]===undefined){if(a_quiet!==undefined&&!a_quiet&&i!=path.length-1){throw new fcf.Exception("ACCESS_FAILED_FIELD_TOKENIZE",{command:a_path})}return}a_obj=a_obj[path[i]]}return a_obj};fcf.resolveEx=(a_obj,a_path,a_createObj)=>{let result={key:undefined,object:undefined};if(typeof a_obj!=="object"&&typeof a_obj!=="function"){return result}let pathArr=fcf.parseObjectAddress(a_path,true);let cur=a_obj;for(var i=0;i<pathArr.length-1;++i){let key=pathArr[i].part;if(typeof cur[key]!=="object"&&typeof cur[key]!=="function"){if(a_createObj){if(pathArr[i].array){cur[key]=[]}else{cur[key]={}}}else{return result}}cur=cur[key]}result.key=pathArr[pathArr.length-1].part;result.object=cur;return result};fcf.prepare=(a_root,a_objectPath)=>{a_objectPath=typeof a_objectPath=="string"?fcf.parseObjectAddress(a_objectPath,true):Array.isArray(a_objectPath)?a_objectPath:false;if(!a_objectPath)return a_root;for(let part of a_objectPath){if(typeof part=="object"){if(part.array){if(!Array.isArray(a_root[part.part])){a_root[part.part]=[]}}else{if(typeof a_root[part.part]!=="object"&&typeof a_root[part.part]!=="function"){a_root[part.part]={}}}a_root=a_root[part.part]}else{if(typeof a_root[part]!=="object"&&typeof a_root[part]!=="function"){a_root[part]={}}a_root=a_root[part]}}return a_root};fcf.getDirectory=a_path=>{let i=a_path.length-1;for(;i>=0;--i){let c=a_path[i];if(c=="\\"||c=="/"){break}}return i==-1?"":a_path.substring(0,i)};fcf.getExtension=a_path=>{if(typeof a_path!=="string")return"";a_path=a_path.split("?")[0].split("#")[0];var arr=a_path.split(".");return arr.length>1?arr[arr.length-1]:""};fcf.getShortFileName=a_path=>{if(!a_path)return"";var offset=-1;for(var p=0;p<a_path.length;++p){var c=a_path.charAt(p);if(c==":"||c=="/"||c=="\\")offset=p}let arr=a_path.substr(offset==-1?0:offset+1).split(".");if(arr.length>1)arr.pop();return arr.join(".")};fcf.getFileName=a_path=>{a_path=fcf.rtrim(a_path,"/");if(!a_path)return"";var offset=0;for(var p=0;p<a_path.length;++p){var c=a_path.charAt(p);if(c==":"||c=="/"||c=="\\")offset=p}if(offset)offset+=1;return a_path.substr(offset)};fcf.resolvePath=function(a_uri,a_aliases){if(a_uri[0]!="@")return a_uri;let pos;pos=Math.min((pos=a_uri.indexOf("+"))!=-1?pos:Infinity,(pos=a_uri.indexOf("?"))!=-1?pos:Infinity,(pos=a_uri.indexOf("#"))!=-1?pos:Infinity,(pos=a_uri.indexOf("/"))!=-1?pos:Infinity,(pos=a_uri.indexOf("\\"))!=-1?pos:Infinity,(pos=a_uri.indexOf(".wrapper.js"))!=-1?pos:Infinity,(pos=a_uri.indexOf(".wrapper.min.js"))!=-1?pos:Infinity);let prefix=pos!=Infinity?a_uri.substring(1,pos):a_uri.substring(1);let suffix=pos!=Infinity?a_uri.substring(pos):"";if(typeof a_aliases=="object"&&prefix in a_aliases){a_uri=a_aliases[prefix]+suffix}else if(prefix in fcf.getConfiguration().aliases){a_uri=fcf.getConfiguration().aliases[prefix]+suffix}else{throw new fcf.Exception("RESOLVE_PATH_ERROR",{path:a_uri})}return a_uri};fcf.normalizePath=(a_path,a_isServerPath)=>{let prefixPosEnd=0;let pos;a_isServerPath=a_isServerPath!==undefined?a_isServerPath:_isServer;if(a_path[0]=="/"){prefixPosEnd=1}else if((pos=a_path.indexOf(":"))!=-1){if((a_isServerPath||a_isServerPath==="*")&&a_path[pos+1]=="\\"&&pos==1){prefixPosEnd=pos+2}else if((!a_isServerPath||a_isServerPath==="*")&&(a_path.indexOf("http://")==0||a_path.indexOf("https://")==0)){a_isServerPath=false;prefixPosEnd=a_path.indexOf("/",a_path.indexOf("://")+3);if(prefixPosEnd==-1){prefixPosEnd=a_path.length}else{prefixPosEnd+=1}}else{let subitem=a_path.substring(0,pos);if(subitem.indexOf("/")==-1&&subitem.indexOf("\\")==-1){prefixPosEnd=pos+1}}}let prefix=a_path.substring(0,prefixPosEnd);let body=a_path.substring(prefixPosEnd);let suffix="";if(!a_isServerPath){if((pos=body.indexOf("?"))!=-1||(pos=body.indexOf("#"))!=-1){suffix=body.substring(pos);body=body.substring(0,pos)}}body=fcf.replaceAll(body,"\\","/");let bodyArr=body.split("/");let resultBodyArr=[];for(let itm of bodyArr){if(itm=="."||itm==""){continue}else if(itm==".."){resultBodyArr.pop()}else{resultBodyArr.push(itm)}}return prefix+resultBodyArr.join("/")+suffix};fcf.normalizeSubpath=a_path=>{let body=fcf.replaceAll(a_path,"\\","/");let bodyArr=body.split("/");let resultBodyArr=[];for(let itm of bodyArr){if(itm=="."||itm==""){continue}else if(itm==".."){resultBodyArr.pop()}else{resultBodyArr.push(itm)}}return resultBodyArr.join("/")};fcf.getPathInfo=(a_path,a_isServerPath,a_quiet)=>{a_isServerPath=a_isServerPath===undefined?fcf.isServer():a_isServerPath;let path=fcf.resolvePath(a_path);path=fcf.normalizePath(path,a_isServerPath);if(path.indexOf("/")==-1&&path.indexOf("\\")==-1&&path.indexOf(":")==-1){return{module:"",subpath:path}}let cwd=fcf.isServer()?fcf.normalizePath(process.cwd()):undefined;if((!a_isServerPath||a_isServerPath==="*")&&(path.indexOf("http://")!=-1||path.indexOf("https://")!=-1)){if(!_isServer){let pos=window.location.href.indexOf("://");if(pos!=-1&&(pos=window.location.href.indexOf("/",pos+3))!=-1&&path.indexOf(window.location.href.substring(0,pos))!=-1){path=path.substring(pos)}else{return{}}}else{return{}}}let pos=path.indexOf(":");if(pos==1)pos=-1;let mod=pos!=-1?path.substring(0,pos):"";if(mod.indexOf("/")!=-1||mod.indexOf("\\")!=-1){mod=undefined;pos=-1}let subpath="";if(pos!=-1){subpath=path.substring(pos+1);return{module:mod,subpath:subpath}}let rootPath=fcf.getPath(path);if(!a_isServerPath||a_isServerPath==="*"){let sources=fcf.getConfiguration().sources;for(let modName in sources){if(!sources[modName].webPackagePath)continue;if((pos=rootPath.indexOf(sources[modName].webPackagePath))==0){return{module:modName,subpath:rootPath.substring(sources[modName].webPackagePath.length+1)}}}}let modDirs;if(_isServer){let splitter=process.platform=="win32"?";":":";modDirs=[];for(let mod of require.main.paths){fcf.append(modDirs,mod.split(splitter).filter((v=>v!=""&&v!=".")))}fcf.append(modDirs,process.env.NODE_PATH.split(splitter).filter((v=>v!=""&&v!=".")))}else{modDirs=[fcf.getConfiguration().webModuleDirectory]}let result=undefined;for(let modDir of modDirs){modDir=fcf.normalizePath(modDir);if(_isServer&&a_isServerPath&&cwd==modDir){continue}if(_isServer&&a_isServerPath){let cwdu=fcf.rtrim(cwd,"/")+"/";let cpath=subpath?cwdu+subpath:fcf.getPath(path);if(cpath.indexOf(cwdu)==0&&cwdu.indexOf(modDir)==0&&modDir!=cwdu){continue}}let modDirEU=modDir+"/";let modDirE=pos=rootPath.indexOf(modDirEU)==0?modDirEU:undefined;if(modDirE!==undefined){mod=rootPath.substring(modDir.length+1).split("/")[0];if(_isServer&&a_isServerPath&&cwd==modDir+"/"+mod){mod=undefined;pos=-1}else if(!mod){mod=undefined;pos=-1}else{return{module:mod,subpath:rootPath.substring(modDir.length+1+mod.length+1)}}}}if(_isServer&&(a_isServerPath||a_isServerPath==="*")&&path.indexOf(cwd)==0){return{module:"",subpath:path.substr(process.cwd().length+1)}}if(!a_isServerPath||a_isServerPath==="*"||path[0]!="/"&&path.indexOf(":\\")!=1){return{module:"",subpath:fcf.ltrim(path,"/")}}if(!a_quiet){throw new fcf.Exception("GET_PATH_INFO_ERROR",{path:a_path})}return{}};fcf.getPath=(a_uri,a_aliases,a_innerServerPath)=>{if(typeof a_aliases!=="object"){a_innerServerPath=a_aliases;a_aliases=undefined}a_innerServerPath=a_innerServerPath!==undefined?a_innerServerPath:_isServer;a_uri=fcf.str(a_uri);a_uri=fcf.resolvePath(a_uri,a_aliases);a_uri=fcf.normalizePath(a_uri,a_innerServerPath);if(a_innerServerPath){let winDSPos=a_uri.indexOf(":\\");if(a_uri[0]=="/"||winDSPos!=-1&&winDSPos<2)return fcf.normalizePath(a_uri)}else{if(a_uri.indexOf("://")!=-1)return a_uri}let modulePos=a_uri.indexOf(":");let moduleName=modulePos!=-1?a_uri.substring(0,modulePos):"";let relativePath=modulePos!=-1?a_uri.substring(modulePos+1):a_uri;if(moduleName.indexOf("/")!=-1||moduleName.indexOf("\\")!=-1){modulePos=-1;relativePath=a_uri;moduleName=""}const configuration=fcf.getConfiguration();if(moduleName!=""){if(a_innerServerPath){let modulePath=libResolver.resolveModule(moduleName);a_uri=fcf.normalizePath(libPath.join(modulePath,relativePath))}else{let prefix="";let srcInfo=configuration.sources[moduleName];if(typeof srcInfo=="string"){srcInfo={webPackagePath:srcInfo}}if(srcInfo&&srcInfo.webPackagePath){prefix+=srcInfo.webPackagePath}else{prefix+=configuration.webModuleDirectory+"/"+moduleName}if(prefix&&relativePath&&relativePath[0]!="/"&&relativePath[0]!="\\"){prefix+="/"}a_uri=prefix+relativePath}}else{if(a_innerServerPath){a_uri=fcf.normalizePath(libPath.join(process.cwd(),relativePath))}else{a_uri="/"+fcf.ltrim(relativePath,["/","\\",":"])}}return a_uri};fcf.styleToString=(a_name,a_value)=>{let result="";if(typeof a_name=="object"&&a_name!==null){let first=true;for(let key in a_name){if(first){first=false}else{result+="; "}result+=fcf.styleToString(key,a_name[key])}}else{if(a_value===undefined||a_value===null||a_value==="")return result;if(["left","top","bottom","right","width","min-width","max-width","height","min-height","max-height"].indexOf(a_name)!=-1){if(!isNaN(a_value)){a_value=a_value+"px"}}result=a_name+": "+a_value}return result};fcf.load=(a_url,a_options)=>{if(typeof a_url==="object"){a_options=a_url;a_url=a_options.url||a_options.path}a_url=fcf.resolvePath(a_url);a_options=typeof a_options=="object"?a_options:{};if(a_options.external===true||!_isServer||a_options.external==="auto"&&a_url.indexOf("http://")==0&&a_url.indexOf("https://")==0){a_url=new fcf.RouteInfo(a_url).url}let isServerMode=_isServer&&a_options.external==="auto"?a_url.indexOf("http://")==-1&&a_url.indexOf("https://")==-1:_isServer&&a_options.external?false:_isServer;a_options=a_options||{};let type=a_options.format;if(!_isServer&&(a_url.indexOf("://")==-1||a_url.indexOf(window.location.href)==0)){let ext=fcf.getExtension(new fcf.RouteInfo(a_url).uri).toLowerCase();if(ext=="js"||ext=="css"){let module=fcf.getPathInfo(a_url,isServerMode).module;if(module&&fcf.getConfiguration().sources[module]&&fcf.getConfiguration().sources[module].version){a_url=fcf.buildUrl(a_url,{version:fcf.getConfiguration().sources[module].version})}}}return fcf.actions().then(((a_res,a_act)=>{if(_isServer){if(!isServerMode){let options=fcf.clone(a_options);options.header=options.header||{};let serverName=new fcf.RouteInfo(a_url).server;let isSendContext=a_url[0]=="@"||a_url[0]=="/"||serverName&&serverName==fcf.getConfiguration().host;if(isSendContext){let ctxt=fcf.append({},fcf.getContext());delete ctxt.route;delete ctxt.args;delete ctxt.safeEnv;options.header["fcf-context"]=fcf.encodeBase64(JSON.stringify(ctxt))}libLoad(a_url,options).then((a_data=>{a_act.complete(a_data)})).catch((a_error=>{a_act.error(a_error)}))}else if(a_options.async===undefined||!!a_options.async){libFS.readFile(fcf.getPath(a_url),"utf8",((a_error,a_data)=>{if(a_error){a_act.error(a_error)}a_act.complete(a_data)}))}else{try{a_act.complete(libFS.readFileSync(fcf.getPath(a_url),"utf8"))}catch(e){a_act.error(e)}}}else{let url=fcf.getPath(a_url);let method=(a_options.method||"GET").toUpperCase();if(method=="GET"){url=fcf.buildUrl(url,a_options.data)}var xmlHttp=new XMLHttpRequest;xmlHttp.onreadystatechange=()=>{if(xmlHttp.readyState==4){if(xmlHttp.status==200){a_act.complete(xmlHttp.responseText)}else{let error=xmlHttp.responseText;try{error=JSON.parse(error)}catch(e){}if(typeof error!=="object"||!error._templateMessage){error=new fcf.Exception("HTTP_REQUEST_ERROR",{code:xmlHttp.status})}else{error=new fcf.Exception(error)}a_act.error(error)}}};xmlHttp.open(method,url,a_options.async!==undefined?a_options.async:true);let serverName=new fcf.Rou