@dbl0null/slow-json-stringify
Version:
The slow.. well actually fastest JSON stringifier in the galaxy.
3 lines (2 loc) • 2.24 kB
JavaScript
var _replaceString=function(r){return-1!==r.indexOf("string")?'"__par__"':"__par__"},_matchStartRe=/^(",|,|")/,_chunkRegex=/"\w+__sjs"/g,_makeChunks=function(r,e){for(var n,a=r.replace(_chunkRegex,_replaceString).split("__par__"),t=[],i=a.length,_=0;_<i;++_){var u,f=a[_],c='("'+(null==(u=e[_])?void 0:u.name)+'":("?))$',o=(n=_+1)===i||(n=a[n].indexOf("}"))&&(0===n||1===n),s=new RegExp(o?"(,?)"+c:c),p=f.replace(_matchStartRe,"");t.push({flag:!1,pure:f,prevUndef:p,isUndef:f.replace(s,""),bothUndef:p.replace(s,"")})}return t},_this=void 0,__find=function __find(path){for(var str="obj",i=0;i<path.length;++i)str+="?.['"+path[i]+"']";return eval("(obj => "+str+")")};function _arraySerializer(r,e){for(var n="",a=e.length-1,t=0;t<a;++t)n+=r(e[t])+",";return"["+(n+=r(e[a]))+"]"}var _makeArraySerializer=function(r){return"function"==typeof r?_arraySerializer.bind(_this,r):JSON.stringify},fnUser=function(r){return r},attr=function(r,e){var n=e||fnUser;return{isSJS:!0,type:r,serializer:"array"===r?_makeArraySerializer(e):n}},_defaultRegex=/[\t\n\r"\\]/g,_escapeCallback=function(r){return"\\"+r},escape=function(r){return void 0===r&&(r=_defaultRegex),function(e){return e.replace(r,_escapeCallback)}};function _prepareQueue(r,e,n,a){if(void 0===a&&(a=[]),-1===n.toString().indexOf("__sjs"))for(var t=Object.keys(n),i=0;i<t.length;++i){var _=t[i];_prepareQueue(r,e,n[_],[].concat(a,[_]))}else{var u=__find(a),f=u(r);e.push({serializer:f.serializer,find:u,name:a[a.length-1]})}}var _makeQueue=function(r,e){var n=[];return _prepareQueue(e,n,r),n},_stringifyCallback=function(r,e){return e.isSJS?e.type+"__sjs":e},_prepare=function(r){var e=JSON.stringify(r,_stringifyCallback);return{_preparedString:e,_preparedSchema:JSON.parse(e)}},_select=function(r){return function(e,n){var a=r[n];return void 0!==e?a.flag?a.prevUndef+e:a.pure+e:(r[n+1].flag=!0,a.flag?a.bothUndef:a.isUndef)}},sjs=function(r){var e=_prepare(r),n=e._preparedString,a=_makeQueue(e._preparedSchema,r),t=_makeChunks(n,a),i=_select(t);return function(r){for(var e="",n=0;n<a.length;++n){var _=a[n],u=_.serializer,f=(0,_.find)(r);e+=i(u(f),n)}var c=t[t.length-1];return e+(c.flag?c.prevUndef:c.pure)}};export{attr,escape,sjs};
//# sourceMappingURL=slow-json-stringify.mjs.map