@corrin/json-key-string-xlsx
Version:
Convert between json and xlsx files by key string in a browser or NodeJS.
6 lines • 8.06 kB
JavaScript
/*!
* json-key-string-xlsx v1.4.4
* (c) 2019-2024 [object Object]
* Released under the MIT License.
*/
;function e(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}function t(e,t){for(var r=0;r<t.length;r++){var a=t[r];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,n(a.key),a)}}function r(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=i(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var a=0,n=function(){};return{s:n,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:n}}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 o,s=!0,l=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){l=!0,o=e},f:function(){try{s||null==r.return||r.return()}finally{if(l)throw o}}}}function a(t){return function(t){if(Array.isArray(t))return e(t)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||i(t)||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){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var a=r.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function o(e){return(o="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})(e)}function i(t,r){if(t){if("string"==typeof t)return e(t,r);var a={}.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?e(t,r):void 0}}var s=require("@e965/xlsx"),l=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}return n=e,l=[{key:"switch2customStructure",value:function(t){for(var r=0,a=t.length;r<a;r+=1)t[r].data=e.rotateMatrix(t[r].data),t[r].data[0]=e.fillCellMerge(t[r].data[0])}},{key:"rotateMatrix",value:function(e){var t=[],r=[];e.forEach((function(e){r.push(e.length)}));for(var a=0,n=Math.max.apply(null,r);a<n;a+=1){for(var o=[],i=0,s=e.length;i<s;i+=1)o[i]=e[i][a];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)}}],(i=[{key:"parse",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n="string"==typeof e?"readFile":"read",o=s[n](e,t),i=[],l=o.SheetNames;t.entry&&l.includes(t.entry)||(t.entry=l[0]);var u=t.sheets||l;u instanceof Array&&(u.unshift(t.entry),u=a(new Set(u)));var c,y=r(u);try{for(y.s();!(c=y.n()).done;){var f=c.value,h=o.Sheets[f];i.push({sheetName:f,data:s.utils.sheet_to_json(h,{header:1,raw:!0,cellDates:!0})})}}catch(e){y.e(e)}finally{y.f()}for(var p=0,v=i.length;p<v;p+=1)for(var d=i[p].data,m=0;m<d.length;m+=1)0===d[m].length&&(d.splice(m,1),m-=1);if(/\ufffd/.test(JSON.stringify(i)))throw new Error("Exceptional characters are found!");return i}},{key:"parse2json",value:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.zeroCorrection(),this.parsedXlsxData=this.parse(t,r),e.switch2customStructure(this.parsedXlsxData);var a=this.convertProcess(this.parsedXlsxData[0].data);return a}},{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,n,i,s){if(""!==r){if("object"!==o(r)&&(r=r.split(".")),0===r.length)return t;var l=r.shift(),u=e.isRequire(l);if(u){l=u[1];var c=this.getParsedXlsxDataIndex(u[2]),y=this.parsedXlsxData[c].data;return y=this.convertProcess(y,c)[n],this.createJsonEnumCol(t,l,y,n,i,c)}var f=this.analysisAttrDesc(l),h=f[0],p=f[1],v=f[2],d=0===r.length;if(h){if(void 0===t[p]?t[p]=[]:Array.isArray(t[p])||(this.collectCoverKey(s,i),t[p]=[]),null===v)t[p].push(d?a||"":{});else if(d&&void 0!==t[p][v]&&this.collectCoverKey(s,i),d)t[p][v]=a||"";else{var m=t[p][v],b="object"===o(m)?m:{};t[p][v]=Object.assign({},b)}var g=v||t[p].length-1;return this.createJsonEnumCol(t[p][g],r,a,n,i,s)}return void 0===t[p]?t[p]=d?a||"":{}:"[object Object]"!==Object.prototype.toString.call(t[p])?(this.collectCoverKey(s,i),t[p]=d?a||"":{}):d&&(this.collectCoverKey(s,i),t[p]=a||""),this.createJsonEnumCol(t[p],r,a,n,i,s)}}},{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 a=e[0].concat(),n=1,o=e.length;n<o;n+=1){for(var i=e[n],s={},l=0,u=i.length;l<u;l+=1)this.createJsonEnumCol(s,a[l],i[l],n-1,l,t);r.push(s)}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,a=this.parsedXlsxData.length;r<a;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,a=this.parsedXlsxData[e].data[0][t],n='sheet name "'.concat(r,'", row ').concat(t+1,', value "').concat(a,'"');this.parse2jsonCover.add(n)}},{key:"json2XlsxByKey",value:function(e,t){this.keyStack=[];var r=[];if(r=Array.isArray(e)?this.object2XlsxByKey.apply(this,a(e)):this.object2XlsxByKey(e),t){var n={Sheets:{Sheet1:s.utils.aoa_to_sheet(r)},SheetNames:["Sheet1"]};if("string"==typeof t&&s.writeFile(n,t),"array"===t.type)return s.write(n,{bookType:"xlsx",bookSST:!1,type:"array"})}return r}},{key:"object2XlsxByKey",value:function(){for(var e=this,t=[],r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];var s=n[0];if(Array.isArray(s)){for(var l=function(r){if("object"!==o(s[r])){var i=e.getPreKeyStr();t.push(["".concat(i,"[").concat(r,"]")].concat(a(n.map((function(e){return e[r]})))))}else e.keyStack.push({keyName:"[".concat(r,"]"),type:"array"}),t.push.apply(t,a(e.object2XlsxByKey.apply(e,a(n.map((function(e){return e[r]}))))))},u=0,c=s.length;u<c;u++)l(u);this.keyStack.pop()}else{for(var y=Object.keys(s),f=function(r){if("object"!==o(s[y[r]])){var i=e.getPreKeyStr();t.push([(i&&i+".")+y[r]].concat(a(n.map((function(e){return e[y[r]]})))))}else e.keyStack.push({keyName:y[r],type:"object"}),t.push.apply(t,a(e.object2XlsxByKey.apply(e,a(n.map((function(e){return e[y[r]]}))))))},h=0,p=y.length;h<p;h++)f(h);this.keyStack.pop()}return t}},{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(n.prototype,i),l&&t(n,l),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,i,l}(),u=new l;Object.defineProperties(l,{parse:{value:u.parse.bind(u)},parse2json:{value:u.parse2json.bind(u)},parse2jsonDaTa:{value:u.parse2jsonDaTa},parse2jsonCover:{value:u.parse2jsonCover},parsedXlsxData:{value:u.parsedXlsxData}}),module.exports=l;