Skip to content

Commit dcfecae

Browse files
committed
added serializer support
1 parent d4b4c52 commit dcfecae

File tree

13 files changed

+24
-44
lines changed

13 files changed

+24
-44
lines changed

dev/scratch.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const { sjs, attr, escape } = require('../dist/sjs');
22

33
const stringify = sjs({
4-
a: attr('string'),
4+
a: attr('string', value => `${value} lol`),
55
b: attr('null'),
66
// c: {
77
// a: attr('array', sjs({

dist/sjs.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/sjs.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/sjs.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
var _prepare=function(e){var r=JSON.stringify(e,function(e,r){return"object"==typeof r?r:r instanceof Function?"array__sjs":r+"__sjs"});return{preparedString:r,preparedSchema:JSON.parse(r)}},_find=function(path){for(var length=path.length,str="obj",i=0;i<length;i++)str=str.replace(/^/,"("),str+=" || {})."+path[i];return eval("((obj) => "+str+")")},_makeArraySerializer=function(e){return e instanceof Function?function(r){for(var n="",t=r.length,a=0;a<t-1;a++)n+=e(r[a])+",";return"["+(n+=e(r[t-1]))+"]"}:function(e){return JSON.stringify(e)}},TYPES=["number","string","boolean","array","null"],attr=function(e,r){if(!TYPES.includes(e))throw new Error('Expected one of: "number", "string", "boolean", "null". received "'+e+'" instead');return"array"===e?_makeArraySerializer(r):e},defaultRegex=new RegExp('\\n|\\r|\\t|\\"|\\\\',"gm"),escape=function(e){return void 0===e&&(e=defaultRegex),function(r){return r.replace(e,function(e){return"\\"+e})}},_makeQueue=function(e,r){var n=[];return function e(t,a){if(void 0===a&&(a=[]),!/__sjs/.test(t))return Object.keys(t).map(function(r){return e(t[r],a.concat([r]))});var i=Array.from(a),u=_find(i),f=u(r);n.push({isArray:f instanceof Function,serializer:f,find:u,name:i[i.length-1]})}(e),n},_makeChunks=function(e,r){return e.replace(/"\w+__sjs"/gm,function(e){return/string/.test(e)?'"__par__"':"__par__"}).split("__par__").map(function(e,n,t){var a='("'+(r[n]||{}).name+'":("?))$',i="(,?)"+a,u=/^("}|})/.test(t[n+1]||""),f=new RegExp(u?i:a),o=/^(\"\,|\,|\")/;return{flag:!1,pure:e,prevUndef:e.replace(o,""),isUndef:e.replace(f,""),bothUndef:e.replace(o,"").replace(f,"")}})},_select=function(e){return function(r,n){var t=e[n];return void 0!==r?t.flag?t.prevUndef+r:t.pure+r:(e[n+1].flag=!0,t.flag?t.bothUndef:t.isUndef)}},sjs=function(e){var r=_prepare(e),n=r.preparedString,t=_makeQueue(r.preparedSchema,e),a=_makeChunks(n,t),i=_select(a),u=t.length;return function(e){for(var r="",n=0;n!==u;){var f=t[n],o=f.serializer,c=f.isArray,s=(0,f.find)(e),p=c?o(s):s;r+=i(p,n),n+=1}var l=a[a.length-1];return r+(l.flag?l.prevUndef:l.pure)}};export{sjs,attr,escape};
1+
var _prepare=function(e){var r=JSON.stringify(e,function(e,r){return r.isSJS?r.type+"__sjs":r});return{preparedString:r,preparedSchema:JSON.parse(r)}},_find=function(path){for(var length=path.length,str="obj",i=0;i<length;i++)str=str.replace(/^/,"("),str+=" || {})."+path[i];return eval("((obj) => "+str+")")},_makeArraySerializer=function(e){return e instanceof Function?function(r){for(var n="",t=r.length,a=0;a<t-1;a++)n+=e(r[a])+",";return"["+(n+=e(r[t-1]))+"]"}:function(e){return JSON.stringify(e)}},TYPES=["number","string","boolean","array","null"],attr=function(e,r){if(!TYPES.includes(e))throw new Error('Expected one of: "number", "string", "boolean", "null". received "'+e+'" instead');var n=r||function(e){return e};return{isSJS:!0,type:e,serializer:"array"===e?_makeArraySerializer(r):n}},defaultRegex=new RegExp('\\n|\\r|\\t|\\"|\\\\',"gm"),escape=function(e){return void 0===e&&(e=defaultRegex),function(r){return r.replace(e,function(e){return"\\"+e})}},_makeQueue=function(e,r){var n=[];return function e(t,a){if(void 0===a&&(a=[]),!/__sjs/.test(t))return Object.keys(t).map(function(r){return e(t[r],a.concat([r]))});var i=Array.from(a),u=_find(i),f=u(r);n.push({serializer:f.serializer,find:u})}(e),n},_makeChunks=function(e,r){return e.replace(/"\w+__sjs"/gm,function(e){return/string/.test(e)?'"__par__"':"__par__"}).split("__par__").map(function(e,n,t){var a='("'+(r[n]||{}).name+'":("?))$',i="(,?)"+a,u=/^("}|})/.test(t[n+1]||""),f=new RegExp(u?i:a),o=/^(\"\,|\,|\")/;return{flag:!1,pure:e,prevUndef:e.replace(o,""),isUndef:e.replace(f,""),bothUndef:e.replace(o,"").replace(f,"")}})},_select=function(e){return function(r,n){var t=e[n];return void 0!==r?t.flag?t.prevUndef+r:t.pure+r:(e[n+1].flag=!0,t.flag?t.bothUndef:t.isUndef)}},sjs=function(e){var r=_prepare(e),n=r.preparedString,t=_makeQueue(r.preparedSchema,e),a=_makeChunks(n,t),i=_select(a),u=t.length;return function(e){for(var r="",n=0;n!==u;){var f=t[n],o=(0,f.serializer)((0,f.find)(e));r+=i(o,n),n+=1}var p=a[a.length-1];return r+(p.flag?p.prevUndef:p.pure)}};export{sjs,attr,escape};
22
//# sourceMappingURL=sjs.mjs.map

dist/sjs.mjs.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/sjs.umd.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)