-
Notifications
You must be signed in to change notification settings - Fork 11
/
fmt2json.min.js
7 lines (7 loc) · 11 KB
/
fmt2json.min.js
1
2
3
4
5
6
7
/**
* @license
* format-to-json v2.0.1
* GitHub Repository <https://github.com/CN-Tower/format-to-json>
* Released under MIT license <https://github.com/CN-Tower/format-to-json/blob/master/LICENSE>
*/
"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};!function(root){var BREAK="\r\n",SPACE=" ",OPTIONS={indent:2,isExpand:!0,isStrict:!1,isEscape:!1,isUnscape:!1,keyQtMark:'"',valQtMark:'"'},ESCAPES_MAP=[{ptn:/\r\n/gm,str:""},{ptn:/\n\r/gm,str:""},{ptn:/\n/gm,str:"\\n"},{ptn:/\r/gm,str:"\\r"},{ptn://gm,str:"\\b"},{ptn://gm,str:"\\v"},{ptn:/\f/gm,str:"\\f"},{ptn:/\t/gm,str:"\\t"}],MESSAGES_MAP={err:function(){return"Parse Error, an excessive abnormal Json!"},war:function(e){return"Formated "+e+" lines, abnormal JSON source!"},scc:function(e){return"Success formated "+e+" lines!"},val:function(e){return"Invalid value in line: "+e},ost:function(e){return"Expect a string in line: "+e},col:function(e){return"Expect a colon in line: "+e},end:function(e,t){return'Expect a comma or a "'+t+'" in line: '+e}};function formatToJson(source,options){return new Promise(function(resolve){var fmtSource=source,curLevel=0,curIndex=1,exceptType="",exceptSign="",signsQueue="",baseIndent="",isSrcValid=!0,isFmtError=!1,resultOnly=!1,fmtResult="",fmtType="info",fmtSign="",fmtLines=0,message="",errFormat=!1,errNear="",errIndex=NaN,errExpect="";options&&("boolean"==typeof options.resultOnly&&(resultOnly=options.resultOnly),"boolean"==typeof options.expand&&(OPTIONS.isExpand=options.expand),"boolean"==typeof options.strict&&(OPTIONS.isStrict=options.strict),"boolean"==typeof options.escape&&(OPTIONS.isEscape=options.escape),"boolean"==typeof options.unscape&&(OPTIONS.isUnscape=options.unscape),"number"==typeof options.indent&&0<options.indent&&(OPTIONS.indent=options.indent),-1<["'",'"',""].indexOf(options.keyQtMark)&&(OPTIONS.keyQtMark=options.keyQtMark),-1<["'",'"'].indexOf(options.valQtMark)&&(OPTIONS.valQtMark=options.valQtMark)),baseIndent=getBaseIndent();try{try{""!==fmtSource&&eval("fmtSource = "+fmtSource),""===fmtSource||-1<["object","boolean"].indexOf(void 0===fmtSource?"undefined":_typeof(fmtSource))?doNormalFormat(fmtSource):(OPTIONS.isUnscape&&(fmtSource=fmtSource.replace(/\\"/gm,'"').replace(/\\\\/gm,"\\")),doSpecialFormat())}catch(err){OPTIONS.isUnscape&&(fmtSource=fmtSource.replace(/\\"/gm,'"').replace(/\\\\/gm,"\\")),doSpecialFormat()}}catch(err){isFmtError=!0}finally{setFmtStatus(),resolve(resultOnly?fmtResult:{result:fmtResult,status:{fmtType:fmtType,fmtSign:fmtSign,fmtLines:fmtLines,message:message,errFormat:errFormat,errIndex:errIndex,errExpect:errExpect,errNear:errNear}})}function doNormalFormat(e){if(-1<[!0,!1,null,""].indexOf(e))return fmtResult+=String(e);((e=OPTIONS.isStrict?JSON.parse(JSON.stringify(e)):e)instanceof Array?arrayHandler:objectHandler)(e)}function arrayHandler(e){var t=void 0;if(0<e.length){fmtResult+=brkLine4Normal("["),OPTIONS.isExpand&&curIndex++,curLevel++;for(var r=0;r<e.length;r++)t=OPTIONS.isExpand?getCurIndent():"",fmtResult+=t,valueHandler(e[r]),fmtResult+=brkLine4Normal(r<e.length-1?",":"");curLevel--,t=OPTIONS.isExpand?getCurIndent():"",fmtResult+=t+"]"}else fmtResult+="[]"}function objectHandler(e){var t=Object.keys(e);if(0<t.length){var r,n=void 0,c=0;for(r in fmtResult+=brkLine4Normal("{"),curLevel++,e){c++;var s=quoteNormalStr(r,OPTIONS.keyQtMark),n=OPTIONS.isExpand?getCurIndent():"";fmtResult+=n,fmtResult+=s,fmtResult+=OPTIONS.isExpand?": ":":",valueHandler(e[r]),fmtResult+=brkLine4Normal(c<t.length?",":"")}curLevel--,n=OPTIONS.isExpand?getCurIndent():"",fmtResult+=n+"}"}else fmtResult+="{}"}function valueHandler(e){switch(void 0===e?"undefined":_typeof(e)){case"undefined":case"function":return fmtResult+=String(e);case"number":case"boolean":return fmtResult+=e;case"object":return doNormalFormat(e);case"string":return fmtResult+=quoteNormalStr(e,OPTIONS.valQtMark)}}function doSpecialFormat(){if(0!==(fmtSource=fmtSource.replace(/^\s*/,"")).length){var e,t,r=!1;switch(fmtSource[0]){case"'":case'"':r=!0,quotaHandler();break;case":":r=!0,colonHandler();break;case",":r=!0,commaHandler();break;case"{":r=!0,objPreHandler();break;case"}":r=!0,objEndHandler();break;case"[":r=!0,arrPreHandler();break;case"]":r=!0,arrEndHandler();break;case"(":r=!0,tupPreHandler();break;case")":r=!0,tupEndHandler()}return r||(e=fmtSource.match(/^u(\s)?'|^u(\s)?"/))&&(r=!0,unicHandler(e[0])),r||(e=fmtSource.match(/^(-?[0-9]+\.?[0-9]*|0[xX][0-9a-fA-F]+)/))&&(r=!0,numbHandler(e[0])),r||(t=fmtSource.match(/^(true|false|True|False)/))&&(r=!0,boolHandler(t[0])),r||(t=fmtSource.match(/^(null|undefined|None|NaN)/))&&(r=!0,nullHandler(t[0])),r||otheHandler(),doSpecialFormat()}}function quotaHandler(){var e=getSrcRest(),t=getNextQuotaIndex(fmtSource[0],e);chkFmtExpect(fmtSource[0]);var r=fmtSource.substr(0,1),n="ost"===exceptType,e="";fmtSource=-1<t?(e=fmtSource.substr(1,t),fmtResult+=quoteSpecialStr(e,r,n),setFmtExpect(fmtSource[0]),getSrcRest(t+2)):(e=fmtSource.substr(1),fmtResult+=quoteSpecialStr(e,r,n),setFmtExpect("!"),"")}function colonHandler(){fmtResult+=OPTIONS.isExpand?": ":":",chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=getSrcRest()}function commaHandler(){var e=getCurIndent();OPTIONS.isExpand&&curIndex++,fmtResult+=OPTIONS.isExpand?","+(BREAK+e):",",chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),""===(fmtSource=getSrcRest()).replace(/(\r)?\n|\s/gm,"")&&setFmtError("val")}function objPreHandler(){chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=fmtSource[1]&&"}"===fmtSource[1]?(fmtResult+="{}",setFmtExpect("}"),getSrcRest(2)):(curLevel++,fmtResult+="{",brkLine4Special(),getSrcRest())}function objEndHandler(){curLevel--,brkLine4Special("}"),chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=getSrcRest()}function arrPreHandler(){chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=fmtSource[1]&&"]"===fmtSource[1]?(fmtResult+="[]",setFmtExpect("]"),getSrcRest(2)):(curLevel++,fmtResult+="[",brkLine4Special(),getSrcRest())}function arrEndHandler(){curLevel--,brkLine4Special("]"),chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=getSrcRest()}function tupPreHandler(){chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=fmtSource[1]&&")"===fmtSource[1]?(fmtResult+=OPTIONS.isStrict?"[]":"()",setFmtExpect(")"),getSrcRest(2)):(curLevel++,fmtResult+=OPTIONS.isStrict?"[":"(",brkLine4Special(),getSrcRest())}function tupEndHandler(){curLevel--,brkLine4Special(OPTIONS.isStrict?"]":")"),chkFmtExpect(fmtSource[0]),setFmtExpect(fmtSource[0]),fmtSource=getSrcRest()}function unicHandler(e){var t=getSrcRest(e.length),r=-1<e.indexOf("'")?getNextQuotaIndex("'",t):getNextQuotaIndex('"',t);chkFmtExpect("u");var n="ost"===exceptType,t="";fmtSource=-1<r?(r=r+e.length+1,t=fmtSource.substr(e.length,r-e.length-1),fmtResult+=quoteSpecialStr(t,e,n),setFmtExpect("u"),getSrcRest(r)):(t=fmtSource.substr(e.length),fmtResult+=quoteSpecialStr(t,e,n),setFmtExpect("!"),"")}function numbHandler(e){fmtResult+=e,chkFmtExpect("n"),setFmtExpect("n"),fmtSource=getSrcRest(e.length)}function boolHandler(e){fmtResult+=OPTIONS.isStrict?e.toLowerCase():e,chkFmtExpect("b"),setFmtExpect("b"),fmtSource=getSrcRest(e.length)}function nullHandler(e){fmtResult+=OPTIONS.isStrict?"null":e,chkFmtExpect("N"),setFmtExpect("N"),fmtSource=getSrcRest(e.length)}function otheHandler(){var e=fmtSource.match(/^[^\{\}\[\]\(\):,]*/),e=e&&e[0]||"";e&&(fmtResult+=e,chkFmtExpect("!"),fmtSource=getSrcRest(e.length))}function chkFmtExpect(e){if(isSrcValid)switch(exceptType){case"val":-1<":,}])!".indexOf(e)&&setFmtError("val");break;case"ost":-1==="'\"unbN".indexOf(e)&&setFmtError("ost");break;case"end":var t=getBracketPair(exceptSign);-1===[",",t].indexOf(e)&&setFmtError("end",t);break;case"col":":"!==e&&setFmtError("col")}}function setFmtExpect(e){switch(e){case":":exceptType="val";break;case",":exceptType="{"===exceptSign?"ost":"val";break;case"{":signsQueue+=exceptSign=e,exceptType="ost";break;case"}":signsQueue=signsQueue.substr(0,signsQueue.length-1),exceptSign=signsQueue.substr(-1),exceptType="end";break;case"[":signsQueue+=exceptSign=e,exceptType="val";break;case"]":signsQueue=signsQueue.substr(0,signsQueue.length-1),exceptSign=signsQueue.substr(-1),exceptType="end";break;case"(":signsQueue+=exceptSign=e,exceptType="val";break;case")":signsQueue=signsQueue.substr(0,signsQueue.length-1),exceptSign=signsQueue.substr(-1),exceptType="end";break;case"u":case"n":case"b":case"N":case'"':case"'":exceptType="ost"===exceptType?"col":"end"}}function setFmtError(e){var t,r,n=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"";switch(e){case"war":fmtType="warning";break;case"scc":fmtType="success";break;default:fmtType="danger"}-1<["ost","col","val","end"].indexOf(e)&&(isSrcValid=!(errFormat=!0),errExpect=n,errIndex=curIndex,console.log(fmtResult),console.log(fmtSource),t=fmtResult.substr(-20).replace(/^(\s|\n|\r\n)*/,"").replace(/(\n|\r\n)/gm,"\\n"),r=fmtSource.substr(0,10).replace(/(\s|\n|\r\n)*$/,"").replace(/(\n|\r\n)/gm,"\\n"),errNear="..."+t+">>>>>>"+r),message=MESSAGES_MAP[fmtSign=e](curIndex,n)}function setFmtStatus(){isFmtError&&!errIndex?(setFmtError("err"),errFormat=!0):isSrcValid&&(signsQueue&&setFmtError("end",getBracketPair(signsQueue.substr(-1))),setFmtError("scc")),fmtLines=curIndex}function brkLine4Normal(e){return OPTIONS.isExpand?(curIndex++,e+BREAK):e}function brkLine4Special(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"";if(!OPTIONS.isExpand)return fmtResult+=e;curIndex++,fmtResult+=BREAK+getCurIndent()+e}function quoteNormalStr(t,e){var r=2<arguments.length&&void 0!==arguments[2]&&arguments[2],n=OPTIONS.isEscape&&'"'===OPTIONS.keyQtMark&&'"'===e&&(!r||OPTIONS.isStrict);t=r?t.replace(/(?!\\[b|f|n|\\|r|t|x|v|'|"|0])\\/gm,"\\\\"):t.replace(/\\/gm,"\\\\"),ESCAPES_MAP.forEach(function(e){return t=t.replace(e.ptn,e.str)});var c=n?"\\"+e:e;switch(n&&(t=t.replace(/\\/gm,"\\\\")),e){case'"':return c+(t=n?t.replace(/"/gm,'\\\\\\"'):t.replace(/"/gm,'\\"'))+c;case"'":return c+(t=t.replace(/'/gm,"\\'"))+c;default:return t}}function quoteSpecialStr(e,t,r){r=r?OPTIONS.keyQtMark:OPTIONS.valQtMark;return e=quoteNormalStr(e=(e=(e=e.replace(/(?!\\[b|f|n|\\|r|t|x|v|'|"|0])\\/gm,"")).replace(/\\\"/gm,'"')).replace(/\\\'/gm,"'"),r,!0),e=!OPTIONS.isStrict&&1<t.length?t.substr(0,t.length-1)+e:e}function getSrcRest(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:1;return fmtSource.length>e?fmtSource.substr(e):""}function getNextQuotaIndex(e,t){for(var r=0;r<t.length;r++)if(t[r]===e&&(0===r||"\\"!==t[r-1]||"\\"===t[r-1]&&"\\"===t[r-2]&&"\\"!==t[r-3]))return r;return-1}function getBaseIndent(){for(var e="",t=0;t<OPTIONS.indent;t++)e+=SPACE;return e}function getCurIndent(){for(var e="",t=0;t<curLevel;t++)e+=baseIndent;return e}function getBracketPair(e){var t=["{","[","("],r=["}","]",")"],n=t.indexOf(e),e=r.indexOf(e);return-1<n?r[n]:t[e]}})}"function"==typeof define&&define.amd?define(function(){return formatToJson}):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?module.exports=formatToJson:root.formatToJson=formatToJson}(this);