jmin
Version: 
Stream-based JSON token transformer with customizable key mapping and quote-safe parsing.
2 lines • 1.31 kB
JavaScript
Object.defineProperty(exports,`__esModule`,{value:!0});const e=e=>{let t={};return Object.keys(e).forEach(n=>{t[e[n]]=n}),t},t=(e,t,n=null,r=null)=>{let i=e=>{t.token+=e},a=(e,a=null)=>{a!==null&&i(a);let o=t.token,s=t.token.match(/"(.*?)"/)?.[1];if(s!==void 0){let t=e==0?n?.[s]:r?.[s];t!==void 0&&(o=o.replace(s,t))}t.newData+=o,t.token=``,t.tokenFinished=!1,t.isReserved=!1},o=(e,n)=>{t.isQuotes?i(n):a(e,n)},s=e=>{t.isQuotes&&i(e)};for(let n=0;n<e.length;n++){let r=e[n];if(t.isEscaped){t.isEscaped=!1,i(r);continue}switch(r){case`"`:t.tokenFinished&&a(0),t.isQuotes?(t.isQuotes=!1,t.tokenFinished=!0):(t.isQuotes=!0,t.tokenFinished=!1),i(r);break;case`,`:o(1,r);break;case`}`:o(1,r);break;case`]`:o(1,r);break;case`{`:o(0,r);break;case`[`:o(0,r);break;case` `:t.isQuotes&&i(r);break;case`\\`:t.isEscaped=!t.isEscaped,i(r);break;case`
`:s(`\\n`);break;case`\r`:s(`\\r`);break;case`	`:s(`\\t`);break;case`\b`:s(`\\b`);break;case`\f`:s(`\\f`);break;default:!t.isQuotes&&!t.isReserved?(a(0,r),t.isReserved=!0):i(r);break}}return a(1),t},n=(e,n=null,r=null)=>{let i={newData:``,token:``,tokenFinished:!1,isEscaped:!1,isQuotes:!1,isReserved:!1};return t(e,i,n,r),i.newData};var r={getKeyMap:e,transformStream:t,transform:n};exports.default=r,exports.getKeyMap=e,exports.transform=n,exports.transformStream=t;