UNPKG

json-key-string-xlsx

Version:

Convert between json and xlsx files by key string in a browser or NodeJS.

6 lines 7.88 kB
/*! * json-key-string-xlsx v1.4.1 * (c) 2019-2021 jobyrao<raojianb@mail2.sysu.edu.cn> * Released under the MIT License. */ var e,t;e=this,t=function(){"use strict";function e(t){return(e="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})(t)}function t(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function r(e){return function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}(e)||n(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){if(e){if("string"==typeof e)return a(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function o(e,t){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=n(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var a=0,o=function(){};return{s:o,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,l=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return i=e.done,e},e:function(e){l=!0,s=e},f:function(){try{i||null==r.return||r.return()}finally{if(l)throw s}}}}var s=function(){function n(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n)}var a,s,i;return a=n,i=[{key:"switch2customStructure",value:function(e){for(var t=0,r=e.length;t<r;t+=1)e[t].data=n.rotateMatrix(e[t].data),e[t].data[0]=n.fillCellMerge(e[t].data[0])}},{key:"rotateMatrix",value:function(e){var t=[],r=[];e.forEach((function(e){r.push(e.length)}));for(var n=0,a=Math.max.apply(null,r);n<a;n+=1){for(var o=[],s=0,i=e.length;s<i;s+=1)o[s]=e[s][n];t.push(o)}return t}},{key:"fillCellMerge",value:function(e){for(var t=0,r=e.length;t<r;t+=1)void 0===e[t]||e[t].trim&&""===e[t].trim()?0===t?(console.warn("The first line of the json-attribute description value is forbidden to be null."),e[t]="firstLineAttrDesc"):e[t]=e[t-1]:e[t]=e[t].toString().replace(/\s/g,"");return e}},{key:"isRequire",value:function(e){return/(.*)\#require\([\'\"]*([^\'\"]+)[\'\"]*\)/gi.exec(e)}}],(s=[{key:"parse",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n="string"==typeof e?"readFile":"read",a=XLSX[n](e,t),s=[],i=a.SheetNames;t.entry&&i.includes(t.entry)||(t.entry=i[0]);var l=t.sheets||i;l instanceof Array&&(l.unshift(t.entry),l=r(new Set(l)));var c,u=o(l);try{for(u.s();!(c=u.n()).done;){var f=c.value,y=a.Sheets[f];s.push({sheetName:f,data:XLSX.utils.sheet_to_json(y,{header:1,raw:!0,cellDates:!0})})}}catch(e){u.e(e)}finally{u.f()}for(var h=0,p=s.length;h<p;h+=1)for(var v=s[h].data,d=0;d<v.length;d+=1)0===v[d].length&&(v.splice(d,1),d-=1);if(/\ufffd/.test(JSON.stringify(s)))throw new Error("Exceptional characters are found!");return s}},{key:"parse2json",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.zeroCorrection(),this.parsedXlsxData=this.parse(e,t),n.switch2customStructure(this.parsedXlsxData);var r=this.convertProcess(this.parsedXlsxData[0].data);return r}},{key:"zeroCorrection",value:function(){this.parse2jsonDataCache=[],this.parse2jsonCover=new Set}},{key:"analysisAttrDesc",value:function(e){var t=e.match(/\[(\d+)\]$/);return Array.isArray(t)?[!0,e.split("[")[0],+t[1]]:"[]"===e.slice(-2)?[!0,e.slice(0,-2),null]:[!1,e,null]}},{key:"createJsonEnumCol",value:function(t,r,a,o,s,i){if(""!==r){if("object"!==e(r)&&(r=r.split(".")),0===r.length)return t;var l=r.shift(),c=n.isRequire(l);if(c){l=c[1];var u=this.getParsedXlsxDataIndex(c[2]),f=this.parsedXlsxData[u].data;return f=this.convertProcess(f,u)[o],this.createJsonEnumCol(t,l,f,o,s,u)}var y=this.analysisAttrDesc(l),h=y[0],p=y[1],v=y[2],d=0===r.length;if(h){if(void 0===t[p]?t[p]=[]:Array.isArray(t[p])||(this.collectCoverKey(i,s),t[p]=[]),null===v)t[p].push(d?a||"":{});else if(d&&void 0!==t[p][v]&&this.collectCoverKey(i,s),d)t[p][v]=a||"";else{var b=t[p][v],m="object"===e(b)?b:{};t[p][v]=Object.assign({},m)}var S=v||t[p].length-1;return this.createJsonEnumCol(t[p][S],r,a,o,s,i)}return void 0===t[p]?t[p]=d?a||"":{}:"[object Object]"!==Object.prototype.toString.call(t[p])?(this.collectCoverKey(i,s),t[p]=d?a||"":{}):d&&(this.collectCoverKey(i,s),t[p]=a||""),this.createJsonEnumCol(t[p],r,a,o,s,i)}}},{key:"convertProcess",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=[];if(this.parse2jsonDataCache[t])return this.parse2jsonDataCache[t];for(var n=e[0].concat(),a=1,o=e.length;a<o;a+=1){for(var s=e[a],i={},l=0,c=s.length;l<c;l+=1)this.createJsonEnumCol(i,n[l],s[l],a-1,l,t);r.push(i)}return this.parse2jsonDataCache[t]=r,r}},{key:"getParsedXlsxDataIndex",value:function(e){var t;if("number"==typeof+e&&+e<this.parsedXlsxData.length)return+e;for(var r=0,n=this.parsedXlsxData.length;r<n;r+=1)if(e===this.parsedXlsxData[r].sheetName){t=r;break}if(void 0===t)throw new Error("'required' parameter is not valid: There is no such 'sheet': ".concat(e));return t}},{key:"collectCoverKey",value:function(e,t){var r=this.parsedXlsxData[e].sheetName,n=this.parsedXlsxData[e].data[0][t],a='sheet name "'.concat(r,'", row ').concat(t+1,', value "').concat(n,'"');this.parse2jsonCover.add(a)}},{key:"json2XlsxByKey",value:function(e,t){this.keyStack=[];var n=[];if(n=Array.isArray(e)?this.object2XlsxByKey.apply(this,r(e)):this.object2XlsxByKey(e),t){var a={Sheets:{Sheet1:XLSX.utils.aoa_to_sheet(n)},SheetNames:["Sheet1"]};if("string"==typeof t&&XLSX.writeFile(a,t),"array"===t.type)return XLSX.write(a,{bookType:"xlsx",bookSST:!1,type:"array"})}return n}},{key:"object2XlsxByKey",value:function(){for(var t=this,n=[],a=arguments.length,o=new Array(a),s=0;s<a;s++)o[s]=arguments[s];var i=o[0];if(Array.isArray(i)){for(var l=function(a,s){if("object"!==e(i[a])){var l=t.getPreKeyStr();n.push(["".concat(l,"[").concat(a,"]")].concat(r(o.map((function(e){return e[a]})))))}else t.keyStack.push({keyName:"[".concat(a,"]"),type:"array"}),n.push.apply(n,r(t.object2XlsxByKey.apply(t,r(o.map((function(e){return e[a]}))))))},c=0,u=i.length;c<u;c++)l(c,u);this.keyStack.pop()}else!function(){for(var a=Object.keys(i),s=function(s,l){if("object"!==e(i[a[s]])){var c=t.getPreKeyStr();n.push([(c&&c+".")+a[s]].concat(r(o.map((function(e){return e[a[s]]})))))}else t.keyStack.push({keyName:a[s],type:"object"}),n.push.apply(n,r(t.object2XlsxByKey.apply(t,r(o.map((function(e){return e[a[s]]}))))))},l=0,c=a.length;l<c;l++)s(l);t.keyStack.pop()}();return n}},{key:"getPreKeyStr",value:function(){var e="";if(!this.keyStack.length)return e;for(var t=0,r=this.keyStack.length;t<r;t++)t<r-1&&"object"===this.keyStack[t+1].type?e+=this.keyStack[t].keyName+".":e+=this.keyStack[t].keyName;return e}}])&&t(a.prototype,s),i&&t(a,i),n}(),i=new s;return Object.defineProperties(s,{parse:{value:i.parse.bind(i)},parse2json:{value:i.parse2json.bind(i)},parse2jsonDaTa:{value:i.parse2jsonDaTa},parse2jsonCover:{value:i.parse2jsonCover},parsedXlsxData:{value:i.parsedXlsxData}}),s},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).jsonKeyStringXlsx=t();